From 7dbf9860754de1ae3d0da897088d9a2c3bf15f56 Mon Sep 17 00:00:00 2001 From: Mostyn Bramley-Moore Date: Tue, 17 Sep 2024 01:40:28 +0200 Subject: [PATCH] Use new go grpc bindings generator --- MODULE.bazel | 39 +- .../build/bazel/remote/asset/v1/BUILD.bazel | 12 +- .../bazel/remote/asset/v1/remote_asset.pb.go | 1794 ++++----- .../remote/asset/v1/remote_asset_grpc.pb.go | 465 +++ .../bazel/remote/execution/v2/BUILD.bazel | 16 +- .../execution/v2/remote_execution.pb.go | 3281 +++++++---------- .../execution/v2/remote_execution_grpc.pb.go | 1061 ++++++ genproto/build/bazel/semver/BUILD.bazel | 5 +- genproto/build/bazel/semver/semver.pb.go | 218 +- go.mod | 23 +- go.sum | 44 +- 11 files changed, 4162 insertions(+), 2796 deletions(-) create mode 100755 genproto/build/bazel/remote/asset/v1/remote_asset_grpc.pb.go create mode 100755 genproto/build/bazel/remote/execution/v2/remote_execution_grpc.pb.go diff --git a/MODULE.bazel b/MODULE.bazel index 0a0bbacec..6ab3db4d8 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -81,4 +81,41 @@ go_deps.module( sum = "h1:R2ZVGCZzU95oXFJxncosHS9LsX8N4/MYUdGGWOb2cFk=", version = "v0.4.1-0.20220112235402-e1cee1c72f2f", ) -use_repo(go_deps, "com_github_abbot_go_http_auth", "com_github_aws_aws_sdk_go", "com_github_azure_azure_sdk_for_go_sdk_azcore", "com_github_azure_azure_sdk_for_go_sdk_azidentity", "com_github_azure_azure_sdk_for_go_sdk_storage_azblob", "com_github_djherbis_atime", "com_github_go_ldap_ldap_v3", "com_github_golang_protobuf", "com_github_google_go_cmp", "com_github_google_uuid", "com_github_grpc_ecosystem_go_grpc_prometheus", "com_github_jmespath_go_jmespath", "com_github_jmespath_go_jmespath_internal_testify", "com_github_johannesboyne_gofakes3", "com_github_klauspost_compress", "com_github_minio_minio_go_v7", "com_github_mostynb_go_grpc_compression", "com_github_mostynb_zstdpool_syncpool", "com_github_prometheus_client_golang", "com_github_ryszard_goskiplist", "com_github_shabbyrobe_gocovmerge", "com_github_slok_go_http_metrics", "com_github_spf13_afero", "com_github_urfave_cli_v2", "com_github_valyala_gozstd", "in_gopkg_mgo_v2", "in_gopkg_yaml_v3", "io_etcd_go_bbolt", "org_golang_google_genproto", "org_golang_google_genproto_googleapis_api", "org_golang_google_genproto_googleapis_bytestream", "org_golang_google_genproto_googleapis_rpc", "org_golang_google_grpc", "org_golang_google_protobuf", "org_golang_x_oauth2", "org_golang_x_sync") +use_repo( + go_deps, + "com_github_abbot_go_http_auth", + "com_github_aws_aws_sdk_go", + "com_github_azure_azure_sdk_for_go_sdk_azcore", + "com_github_azure_azure_sdk_for_go_sdk_azidentity", + "com_github_azure_azure_sdk_for_go_sdk_storage_azblob", + "com_github_djherbis_atime", + "com_github_go_ldap_ldap_v3", + "com_github_google_go_cmp", + "com_github_google_uuid", + "com_github_grpc_ecosystem_go_grpc_prometheus", + "com_github_jmespath_go_jmespath", + "com_github_jmespath_go_jmespath_internal_testify", + "com_github_johannesboyne_gofakes3", + "com_github_klauspost_compress", + "com_github_minio_minio_go_v7", + "com_github_mostynb_go_grpc_compression", + "com_github_mostynb_zstdpool_syncpool", + "com_github_prometheus_client_golang", + "com_github_ryszard_goskiplist", + "com_github_shabbyrobe_gocovmerge", + "com_github_slok_go_http_metrics", + "com_github_spf13_afero", + "com_github_urfave_cli_v2", + "com_github_valyala_gozstd", + "com_google_cloud_go_longrunning", + "in_gopkg_mgo_v2", + "in_gopkg_yaml_v3", + "io_etcd_go_bbolt", + "org_golang_google_genproto_googleapis_api", + "org_golang_google_genproto_googleapis_bytestream", + "org_golang_google_genproto_googleapis_rpc", + "org_golang_google_grpc", + "org_golang_google_protobuf", + "org_golang_x_oauth2", + "org_golang_x_sync", +) diff --git a/genproto/build/bazel/remote/asset/v1/BUILD.bazel b/genproto/build/bazel/remote/asset/v1/BUILD.bazel index ce682bb89..60a0e73c5 100644 --- a/genproto/build/bazel/remote/asset/v1/BUILD.bazel +++ b/genproto/build/bazel/remote/asset/v1/BUILD.bazel @@ -2,18 +2,22 @@ load("@rules_go//go:def.bzl", "go_library") go_library( name = "go_default_library", - srcs = ["remote_asset.pb.go"], + srcs = [ + "remote_asset.pb.go", + "remote_asset_grpc.pb.go", + ], importpath = "github.com/buchgr/bazel-remote/v2/genproto/build/bazel/remote/asset/v1", visibility = ["//visibility:public"], deps = [ "//genproto/build/bazel/remote/execution/v2:go_default_library", - "@com_github_golang_protobuf//proto:go_default_library", - "@com_github_golang_protobuf//ptypes/duration:go_default_library", - "@com_github_golang_protobuf//ptypes/timestamp:go_default_library", "@org_golang_google_genproto_googleapis_api//annotations:go_default_library", "@org_golang_google_genproto_googleapis_rpc//status:go_default_library", "@org_golang_google_grpc//:go_default_library", "@org_golang_google_grpc//codes:go_default_library", "@org_golang_google_grpc//status:go_default_library", + "@org_golang_google_protobuf//reflect/protoreflect:go_default_library", + "@org_golang_google_protobuf//runtime/protoimpl:go_default_library", + "@org_golang_google_protobuf//types/known/durationpb:go_default_library", + "@org_golang_google_protobuf//types/known/timestamppb:go_default_library", ], ) diff --git a/genproto/build/bazel/remote/asset/v1/remote_asset.pb.go b/genproto/build/bazel/remote/asset/v1/remote_asset.pb.go index f346460b9..a38c0a465 100644 --- a/genproto/build/bazel/remote/asset/v1/remote_asset.pb.go +++ b/genproto/build/bazel/remote/asset/v1/remote_asset.pb.go @@ -1,33 +1,43 @@ +// Copyright 2020 The Bazel Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.34.2 +// protoc v5.28.1 // source: build/bazel/remote/asset/v1/remote_asset.proto package remoteasset import ( - context "context" - fmt "fmt" v2 "github.com/buchgr/bazel-remote/v2/genproto/build/bazel/remote/execution/v2" - proto "github.com/golang/protobuf/proto" - duration "github.com/golang/protobuf/ptypes/duration" - timestamp "github.com/golang/protobuf/ptypes/timestamp" _ "google.golang.org/genproto/googleapis/api/annotations" status "google.golang.org/genproto/googleapis/rpc/status" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status1 "google.golang.org/grpc/status" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + durationpb "google.golang.org/protobuf/types/known/durationpb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) // Qualifiers are used to disambiguate or sub-select content that shares a URI. // This may include specifying a particular commit or branch, in the case of @@ -44,53 +54,61 @@ const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package // // Qualifiers may be supplied in any order. type Qualifier struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The "name" of the qualifier, for example "resource_type". // No separation is made between 'standard' and 'nonstandard' // qualifiers, in accordance with https://tools.ietf.org/html/rfc6648, // however implementers *SHOULD* take care to avoid ambiguity. Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // The "value" of the qualifier. Semantics will be dictated by the name. - Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` } -func (m *Qualifier) Reset() { *m = Qualifier{} } -func (m *Qualifier) String() string { return proto.CompactTextString(m) } -func (*Qualifier) ProtoMessage() {} -func (*Qualifier) Descriptor() ([]byte, []int) { - return fileDescriptor_f1872b94e98a76a1, []int{0} +func (x *Qualifier) Reset() { + *x = Qualifier{} + if protoimpl.UnsafeEnabled { + mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Qualifier) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Qualifier.Unmarshal(m, b) -} -func (m *Qualifier) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Qualifier.Marshal(b, m, deterministic) -} -func (m *Qualifier) XXX_Merge(src proto.Message) { - xxx_messageInfo_Qualifier.Merge(m, src) +func (x *Qualifier) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Qualifier) XXX_Size() int { - return xxx_messageInfo_Qualifier.Size(m) -} -func (m *Qualifier) XXX_DiscardUnknown() { - xxx_messageInfo_Qualifier.DiscardUnknown(m) + +func (*Qualifier) ProtoMessage() {} + +func (x *Qualifier) ProtoReflect() protoreflect.Message { + mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_Qualifier proto.InternalMessageInfo +// Deprecated: Use Qualifier.ProtoReflect.Descriptor instead. +func (*Qualifier) Descriptor() ([]byte, []int) { + return file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescGZIP(), []int{0} +} -func (m *Qualifier) GetName() string { - if m != nil { - return m.Name +func (x *Qualifier) GetName() string { + if x != nil { + return x.Name } return "" } -func (m *Qualifier) GetValue() string { - if m != nil { - return m.Value +func (x *Qualifier) GetValue() string { + if x != nil { + return x.Value } return "" } @@ -98,6 +116,10 @@ func (m *Qualifier) GetValue() string { // A request message for // [Fetch.FetchBlob][build.bazel.remote.asset.v1.Fetch.FetchBlob]. type FetchBlobRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The instance of the execution system to operate against. A server may // support multiple instances of the execution system (with their own workers, // storage, caches, etc.). The server MAY require use of this field to select @@ -117,7 +139,7 @@ type FetchBlobRequest struct { // // If this timeout is exceeded on an attempt to retrieve content from origin // the client will receive DEADLINE_EXCEEDED in [FetchBlobResponse.status]. - Timeout *duration.Duration `protobuf:"bytes,2,opt,name=timeout,proto3" json:"timeout,omitempty"` + Timeout *durationpb.Duration `protobuf:"bytes,2,opt,name=timeout,proto3" json:"timeout,omitempty"` // The oldest content the client is willing to accept, as measured from the // time it was Push'd or when the underlying retrieval from origin was // started. @@ -126,7 +148,7 @@ type FetchBlobRequest struct { // original, to simplify combining the request with the previous attempt. // // If unset, the client *SHOULD* accept content of any age. - OldestContentAccepted *timestamp.Timestamp `protobuf:"bytes,3,opt,name=oldest_content_accepted,json=oldestContentAccepted,proto3" json:"oldest_content_accepted,omitempty"` + OldestContentAccepted *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=oldest_content_accepted,json=oldestContentAccepted,proto3" json:"oldest_content_accepted,omitempty"` // The URI(s) of the content to fetch. These may be resources that the server // can directly fetch from origin, in which case multiple URIs *SHOULD* // represent the same content available at different locations (such as an @@ -142,85 +164,106 @@ type FetchBlobRequest struct { // The same qualifiers apply to all URIs. // // Specified qualifier names *MUST* be unique. - Qualifiers []*Qualifier `protobuf:"bytes,5,rep,name=qualifiers,proto3" json:"qualifiers,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Qualifiers []*Qualifier `protobuf:"bytes,5,rep,name=qualifiers,proto3" json:"qualifiers,omitempty"` + // The digest function the server must use to compute the digest. + // + // If unset, the server SHOULD default to SHA256. + DigestFunction v2.DigestFunction_Value `protobuf:"varint,6,opt,name=digest_function,json=digestFunction,proto3,enum=build.bazel.remote.execution.v2.DigestFunction_Value" json:"digest_function,omitempty"` } -func (m *FetchBlobRequest) Reset() { *m = FetchBlobRequest{} } -func (m *FetchBlobRequest) String() string { return proto.CompactTextString(m) } -func (*FetchBlobRequest) ProtoMessage() {} -func (*FetchBlobRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f1872b94e98a76a1, []int{1} +func (x *FetchBlobRequest) Reset() { + *x = FetchBlobRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *FetchBlobRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FetchBlobRequest.Unmarshal(m, b) +func (x *FetchBlobRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *FetchBlobRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FetchBlobRequest.Marshal(b, m, deterministic) -} -func (m *FetchBlobRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_FetchBlobRequest.Merge(m, src) -} -func (m *FetchBlobRequest) XXX_Size() int { - return xxx_messageInfo_FetchBlobRequest.Size(m) -} -func (m *FetchBlobRequest) XXX_DiscardUnknown() { - xxx_messageInfo_FetchBlobRequest.DiscardUnknown(m) + +func (*FetchBlobRequest) ProtoMessage() {} + +func (x *FetchBlobRequest) ProtoReflect() protoreflect.Message { + mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_FetchBlobRequest proto.InternalMessageInfo +// Deprecated: Use FetchBlobRequest.ProtoReflect.Descriptor instead. +func (*FetchBlobRequest) Descriptor() ([]byte, []int) { + return file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescGZIP(), []int{1} +} -func (m *FetchBlobRequest) GetInstanceName() string { - if m != nil { - return m.InstanceName +func (x *FetchBlobRequest) GetInstanceName() string { + if x != nil { + return x.InstanceName } return "" } -func (m *FetchBlobRequest) GetTimeout() *duration.Duration { - if m != nil { - return m.Timeout +func (x *FetchBlobRequest) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout } return nil } -func (m *FetchBlobRequest) GetOldestContentAccepted() *timestamp.Timestamp { - if m != nil { - return m.OldestContentAccepted +func (x *FetchBlobRequest) GetOldestContentAccepted() *timestamppb.Timestamp { + if x != nil { + return x.OldestContentAccepted } return nil } -func (m *FetchBlobRequest) GetUris() []string { - if m != nil { - return m.Uris +func (x *FetchBlobRequest) GetUris() []string { + if x != nil { + return x.Uris } return nil } -func (m *FetchBlobRequest) GetQualifiers() []*Qualifier { - if m != nil { - return m.Qualifiers +func (x *FetchBlobRequest) GetQualifiers() []*Qualifier { + if x != nil { + return x.Qualifiers } return nil } +func (x *FetchBlobRequest) GetDigestFunction() v2.DigestFunction_Value { + if x != nil { + return x.DigestFunction + } + return v2.DigestFunction_Value(0) +} + // A response message for // [Fetch.FetchBlob][build.bazel.remote.asset.v1.Fetch.FetchBlob]. type FetchBlobResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // If the status has a code other than `OK`, it indicates that the operation // was unable to be completed for reasons outside the servers' control. // The possible fetch errors include: - // * `DEADLINE_EXCEEDED`: The operation could not be completed within the - // specified timeout. - // * `NOT_FOUND`: The requested asset was not found at the specified location. - // * `PERMISSION_DENIED`: The request was rejected by a remote server, or - // requested an asset from a disallowed origin. - // * `ABORTED`: The operation could not be completed, typically due to a - // failed consistency check. + // - `DEADLINE_EXCEEDED`: The operation could not be completed within the + // specified timeout. + // - `NOT_FOUND`: The requested asset was not found at the specified location. + // - `PERMISSION_DENIED`: The request was rejected by a remote server, or + // requested an asset from a disallowed origin. + // - `ABORTED`: The operation could not be completed, typically due to a + // failed consistency check. + // - `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to + // perform the requested operation. The client may retry after a delay. Status *status.Status `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` // The uri from the request that resulted in a successful retrieval, or from // which the error indicated in `status` was obtained. @@ -229,78 +272,101 @@ type FetchBlobResponse struct { Qualifiers []*Qualifier `protobuf:"bytes,3,rep,name=qualifiers,proto3" json:"qualifiers,omitempty"` // A minimum timestamp the content is expected to be available through. // Servers *MAY* omit this field, if not known with confidence. - ExpiresAt *timestamp.Timestamp `protobuf:"bytes,4,opt,name=expires_at,json=expiresAt,proto3" json:"expires_at,omitempty"` + ExpiresAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=expires_at,json=expiresAt,proto3" json:"expires_at,omitempty"` // The result of the fetch, if the status had code `OK`. // The digest of the file's contents, available for download through the CAS. - BlobDigest *v2.Digest `protobuf:"bytes,5,opt,name=blob_digest,json=blobDigest,proto3" json:"blob_digest,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + BlobDigest *v2.Digest `protobuf:"bytes,5,opt,name=blob_digest,json=blobDigest,proto3" json:"blob_digest,omitempty"` + // This field SHOULD be set to the digest function that was used by the server + // to compute [FetchBlobResponse.blob_digest]. + // Clients could use this to determine whether the server honors + // [FetchBlobRequest.digest_function] that was set in the request. + // + // If unset, clients SHOULD default to use SHA256 regardless of the requested + // [FetchBlobRequest.digest_function]. + DigestFunction v2.DigestFunction_Value `protobuf:"varint,6,opt,name=digest_function,json=digestFunction,proto3,enum=build.bazel.remote.execution.v2.DigestFunction_Value" json:"digest_function,omitempty"` } -func (m *FetchBlobResponse) Reset() { *m = FetchBlobResponse{} } -func (m *FetchBlobResponse) String() string { return proto.CompactTextString(m) } -func (*FetchBlobResponse) ProtoMessage() {} -func (*FetchBlobResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f1872b94e98a76a1, []int{2} +func (x *FetchBlobResponse) Reset() { + *x = FetchBlobResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *FetchBlobResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FetchBlobResponse.Unmarshal(m, b) -} -func (m *FetchBlobResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FetchBlobResponse.Marshal(b, m, deterministic) +func (x *FetchBlobResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *FetchBlobResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_FetchBlobResponse.Merge(m, src) -} -func (m *FetchBlobResponse) XXX_Size() int { - return xxx_messageInfo_FetchBlobResponse.Size(m) -} -func (m *FetchBlobResponse) XXX_DiscardUnknown() { - xxx_messageInfo_FetchBlobResponse.DiscardUnknown(m) + +func (*FetchBlobResponse) ProtoMessage() {} + +func (x *FetchBlobResponse) ProtoReflect() protoreflect.Message { + mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_FetchBlobResponse proto.InternalMessageInfo +// Deprecated: Use FetchBlobResponse.ProtoReflect.Descriptor instead. +func (*FetchBlobResponse) Descriptor() ([]byte, []int) { + return file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescGZIP(), []int{2} +} -func (m *FetchBlobResponse) GetStatus() *status.Status { - if m != nil { - return m.Status +func (x *FetchBlobResponse) GetStatus() *status.Status { + if x != nil { + return x.Status } return nil } -func (m *FetchBlobResponse) GetUri() string { - if m != nil { - return m.Uri +func (x *FetchBlobResponse) GetUri() string { + if x != nil { + return x.Uri } return "" } -func (m *FetchBlobResponse) GetQualifiers() []*Qualifier { - if m != nil { - return m.Qualifiers +func (x *FetchBlobResponse) GetQualifiers() []*Qualifier { + if x != nil { + return x.Qualifiers } return nil } -func (m *FetchBlobResponse) GetExpiresAt() *timestamp.Timestamp { - if m != nil { - return m.ExpiresAt +func (x *FetchBlobResponse) GetExpiresAt() *timestamppb.Timestamp { + if x != nil { + return x.ExpiresAt } return nil } -func (m *FetchBlobResponse) GetBlobDigest() *v2.Digest { - if m != nil { - return m.BlobDigest +func (x *FetchBlobResponse) GetBlobDigest() *v2.Digest { + if x != nil { + return x.BlobDigest } return nil } +func (x *FetchBlobResponse) GetDigestFunction() v2.DigestFunction_Value { + if x != nil { + return x.DigestFunction + } + return v2.DigestFunction_Value(0) +} + // A request message for // [Fetch.FetchDirectory][build.bazel.remote.asset.v1.Fetch.FetchDirectory]. type FetchDirectoryRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The instance of the execution system to operate against. A server may // support multiple instances of the execution system (with their own workers, // storage, caches, etc.). The server MAY require use of this field to select @@ -314,7 +380,7 @@ type FetchDirectoryRequest struct { // // If this timeout is exceeded on an attempt to retrieve content from origin // the client will receive DEADLINE_EXCEEDED in [FetchDirectoryResponse.status]. - Timeout *duration.Duration `protobuf:"bytes,2,opt,name=timeout,proto3" json:"timeout,omitempty"` + Timeout *durationpb.Duration `protobuf:"bytes,2,opt,name=timeout,proto3" json:"timeout,omitempty"` // The oldest content the client is willing to accept, as measured from the // time it was Push'd or when the underlying retrieval from origin was // started. @@ -323,7 +389,7 @@ type FetchDirectoryRequest struct { // original, to simplify combining the request with the previous attempt. // // If unset, the client *SHOULD* accept content of any age. - OldestContentAccepted *timestamp.Timestamp `protobuf:"bytes,3,opt,name=oldest_content_accepted,json=oldestContentAccepted,proto3" json:"oldest_content_accepted,omitempty"` + OldestContentAccepted *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=oldest_content_accepted,json=oldestContentAccepted,proto3" json:"oldest_content_accepted,omitempty"` // The URI(s) of the content to fetch. These may be resources that the server // can directly fetch from origin, in which case multiple URIs *SHOULD* // represent the same content available at different locations (such as an @@ -339,85 +405,106 @@ type FetchDirectoryRequest struct { // The same qualifiers apply to all URIs. // // Specified qualifier names *MUST* be unique. - Qualifiers []*Qualifier `protobuf:"bytes,5,rep,name=qualifiers,proto3" json:"qualifiers,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Qualifiers []*Qualifier `protobuf:"bytes,5,rep,name=qualifiers,proto3" json:"qualifiers,omitempty"` + // The digest function the server must use to compute the digest. + // + // If unset, the server SHOULD default to SHA256. + DigestFunction v2.DigestFunction_Value `protobuf:"varint,6,opt,name=digest_function,json=digestFunction,proto3,enum=build.bazel.remote.execution.v2.DigestFunction_Value" json:"digest_function,omitempty"` } -func (m *FetchDirectoryRequest) Reset() { *m = FetchDirectoryRequest{} } -func (m *FetchDirectoryRequest) String() string { return proto.CompactTextString(m) } -func (*FetchDirectoryRequest) ProtoMessage() {} -func (*FetchDirectoryRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f1872b94e98a76a1, []int{3} +func (x *FetchDirectoryRequest) Reset() { + *x = FetchDirectoryRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *FetchDirectoryRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FetchDirectoryRequest.Unmarshal(m, b) -} -func (m *FetchDirectoryRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FetchDirectoryRequest.Marshal(b, m, deterministic) -} -func (m *FetchDirectoryRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_FetchDirectoryRequest.Merge(m, src) +func (x *FetchDirectoryRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *FetchDirectoryRequest) XXX_Size() int { - return xxx_messageInfo_FetchDirectoryRequest.Size(m) -} -func (m *FetchDirectoryRequest) XXX_DiscardUnknown() { - xxx_messageInfo_FetchDirectoryRequest.DiscardUnknown(m) + +func (*FetchDirectoryRequest) ProtoMessage() {} + +func (x *FetchDirectoryRequest) ProtoReflect() protoreflect.Message { + mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_FetchDirectoryRequest proto.InternalMessageInfo +// Deprecated: Use FetchDirectoryRequest.ProtoReflect.Descriptor instead. +func (*FetchDirectoryRequest) Descriptor() ([]byte, []int) { + return file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescGZIP(), []int{3} +} -func (m *FetchDirectoryRequest) GetInstanceName() string { - if m != nil { - return m.InstanceName +func (x *FetchDirectoryRequest) GetInstanceName() string { + if x != nil { + return x.InstanceName } return "" } -func (m *FetchDirectoryRequest) GetTimeout() *duration.Duration { - if m != nil { - return m.Timeout +func (x *FetchDirectoryRequest) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout } return nil } -func (m *FetchDirectoryRequest) GetOldestContentAccepted() *timestamp.Timestamp { - if m != nil { - return m.OldestContentAccepted +func (x *FetchDirectoryRequest) GetOldestContentAccepted() *timestamppb.Timestamp { + if x != nil { + return x.OldestContentAccepted } return nil } -func (m *FetchDirectoryRequest) GetUris() []string { - if m != nil { - return m.Uris +func (x *FetchDirectoryRequest) GetUris() []string { + if x != nil { + return x.Uris } return nil } -func (m *FetchDirectoryRequest) GetQualifiers() []*Qualifier { - if m != nil { - return m.Qualifiers +func (x *FetchDirectoryRequest) GetQualifiers() []*Qualifier { + if x != nil { + return x.Qualifiers } return nil } +func (x *FetchDirectoryRequest) GetDigestFunction() v2.DigestFunction_Value { + if x != nil { + return x.DigestFunction + } + return v2.DigestFunction_Value(0) +} + // A response message for // [Fetch.FetchDirectory][build.bazel.remote.asset.v1.Fetch.FetchDirectory]. type FetchDirectoryResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // If the status has a code other than `OK`, it indicates that the operation // was unable to be completed for reasons outside the servers' control. // The possible fetch errors include: - // * `DEADLINE_EXCEEDED`: The operation could not be completed within the - // specified timeout. - // * `NOT_FOUND`: The requested asset was not found at the specified location. - // * `PERMISSION_DENIED`: The request was rejected by a remote server, or - // requested an asset from a disallowed origin. - // * `ABORTED`: The operation could not be completed, typically due to a - // failed consistency check. + // - `DEADLINE_EXCEEDED`: The operation could not be completed within the + // specified timeout. + // - `NOT_FOUND`: The requested asset was not found at the specified location. + // - `PERMISSION_DENIED`: The request was rejected by a remote server, or + // requested an asset from a disallowed origin. + // - `ABORTED`: The operation could not be completed, typically due to a + // failed consistency check. + // - `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to + // perform the requested operation. The client may retry after a delay. Status *status.Status `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` // The uri from the request that resulted in a successful retrieval, or from // which the error indicated in `status` was obtained. @@ -426,79 +513,102 @@ type FetchDirectoryResponse struct { Qualifiers []*Qualifier `protobuf:"bytes,3,rep,name=qualifiers,proto3" json:"qualifiers,omitempty"` // A minimum timestamp the content is expected to be available through. // Servers *MAY* omit this field, if not known with confidence. - ExpiresAt *timestamp.Timestamp `protobuf:"bytes,4,opt,name=expires_at,json=expiresAt,proto3" json:"expires_at,omitempty"` + ExpiresAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=expires_at,json=expiresAt,proto3" json:"expires_at,omitempty"` // The result of the fetch, if the status had code `OK`. // the root digest of a directory tree, suitable for fetching via // [ContentAddressableStorage.GetTree]. - RootDirectoryDigest *v2.Digest `protobuf:"bytes,5,opt,name=root_directory_digest,json=rootDirectoryDigest,proto3" json:"root_directory_digest,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + RootDirectoryDigest *v2.Digest `protobuf:"bytes,5,opt,name=root_directory_digest,json=rootDirectoryDigest,proto3" json:"root_directory_digest,omitempty"` + // This field SHOULD be set to the digest function that was used by the server + // to compute [FetchBlobResponse.root_directory_digest]. + // Clients could use this to determine whether the server honors + // [FetchDirectoryRequest.digest_function] that was set in the request. + // + // If unset, clients SHOULD default to use SHA256 regardless of the requested + // [FetchDirectoryRequest.digest_function]. + DigestFunction v2.DigestFunction_Value `protobuf:"varint,6,opt,name=digest_function,json=digestFunction,proto3,enum=build.bazel.remote.execution.v2.DigestFunction_Value" json:"digest_function,omitempty"` } -func (m *FetchDirectoryResponse) Reset() { *m = FetchDirectoryResponse{} } -func (m *FetchDirectoryResponse) String() string { return proto.CompactTextString(m) } -func (*FetchDirectoryResponse) ProtoMessage() {} -func (*FetchDirectoryResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f1872b94e98a76a1, []int{4} +func (x *FetchDirectoryResponse) Reset() { + *x = FetchDirectoryResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *FetchDirectoryResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FetchDirectoryResponse.Unmarshal(m, b) +func (x *FetchDirectoryResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *FetchDirectoryResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FetchDirectoryResponse.Marshal(b, m, deterministic) -} -func (m *FetchDirectoryResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_FetchDirectoryResponse.Merge(m, src) -} -func (m *FetchDirectoryResponse) XXX_Size() int { - return xxx_messageInfo_FetchDirectoryResponse.Size(m) -} -func (m *FetchDirectoryResponse) XXX_DiscardUnknown() { - xxx_messageInfo_FetchDirectoryResponse.DiscardUnknown(m) + +func (*FetchDirectoryResponse) ProtoMessage() {} + +func (x *FetchDirectoryResponse) ProtoReflect() protoreflect.Message { + mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_FetchDirectoryResponse proto.InternalMessageInfo +// Deprecated: Use FetchDirectoryResponse.ProtoReflect.Descriptor instead. +func (*FetchDirectoryResponse) Descriptor() ([]byte, []int) { + return file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescGZIP(), []int{4} +} -func (m *FetchDirectoryResponse) GetStatus() *status.Status { - if m != nil { - return m.Status +func (x *FetchDirectoryResponse) GetStatus() *status.Status { + if x != nil { + return x.Status } return nil } -func (m *FetchDirectoryResponse) GetUri() string { - if m != nil { - return m.Uri +func (x *FetchDirectoryResponse) GetUri() string { + if x != nil { + return x.Uri } return "" } -func (m *FetchDirectoryResponse) GetQualifiers() []*Qualifier { - if m != nil { - return m.Qualifiers +func (x *FetchDirectoryResponse) GetQualifiers() []*Qualifier { + if x != nil { + return x.Qualifiers } return nil } -func (m *FetchDirectoryResponse) GetExpiresAt() *timestamp.Timestamp { - if m != nil { - return m.ExpiresAt +func (x *FetchDirectoryResponse) GetExpiresAt() *timestamppb.Timestamp { + if x != nil { + return x.ExpiresAt } return nil } -func (m *FetchDirectoryResponse) GetRootDirectoryDigest() *v2.Digest { - if m != nil { - return m.RootDirectoryDigest +func (x *FetchDirectoryResponse) GetRootDirectoryDigest() *v2.Digest { + if x != nil { + return x.RootDirectoryDigest } return nil } +func (x *FetchDirectoryResponse) GetDigestFunction() v2.DigestFunction_Value { + if x != nil { + return x.DigestFunction + } + return v2.DigestFunction_Value(0) +} + // A request message for // [Push.PushBlob][build.bazel.remote.asset.v1.Push.PushBlob]. type PushBlobRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The instance of the execution system to operate against. A server may // support multiple instances of the execution system (with their own workers, // storage, caches, etc.). The server MAY require use of this field to select @@ -514,7 +624,7 @@ type PushBlobRequest struct { Qualifiers []*Qualifier `protobuf:"bytes,3,rep,name=qualifiers,proto3" json:"qualifiers,omitempty"` // A time after which this content should stop being returned via [FetchBlob][build.bazel.remote.asset.v1.Fetch.FetchBlob]. // Servers *MAY* expire content early, e.g. due to storage pressure. - ExpireAt *timestamp.Timestamp `protobuf:"bytes,4,opt,name=expire_at,json=expireAt,proto3" json:"expire_at,omitempty"` + ExpireAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=expire_at,json=expireAt,proto3" json:"expire_at,omitempty"` // The blob to associate. BlobDigest *v2.Digest `protobuf:"bytes,5,opt,name=blob_digest,json=blobDigest,proto3" json:"blob_digest,omitempty"` // Referenced blobs or directories that need to not expire before expiration @@ -524,121 +634,151 @@ type PushBlobRequest struct { // indirectly referencing unavailable blobs. ReferencesBlobs []*v2.Digest `protobuf:"bytes,6,rep,name=references_blobs,json=referencesBlobs,proto3" json:"references_blobs,omitempty"` ReferencesDirectories []*v2.Digest `protobuf:"bytes,7,rep,name=references_directories,json=referencesDirectories,proto3" json:"references_directories,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + // The digest function that was used to compute the blob digest. + // + // If the digest function used is one of MD5, MURMUR3, SHA1, SHA256, + // SHA384, SHA512, or VSO, the client MAY leave this field unset. In + // that case the server SHOULD infer the digest function using the + // length of the action digest hash and the digest functions announced + // in the server's capabilities. + DigestFunction v2.DigestFunction_Value `protobuf:"varint,8,opt,name=digest_function,json=digestFunction,proto3,enum=build.bazel.remote.execution.v2.DigestFunction_Value" json:"digest_function,omitempty"` +} + +func (x *PushBlobRequest) Reset() { + *x = PushBlobRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *PushBlobRequest) Reset() { *m = PushBlobRequest{} } -func (m *PushBlobRequest) String() string { return proto.CompactTextString(m) } -func (*PushBlobRequest) ProtoMessage() {} -func (*PushBlobRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f1872b94e98a76a1, []int{5} +func (x *PushBlobRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *PushBlobRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PushBlobRequest.Unmarshal(m, b) -} -func (m *PushBlobRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PushBlobRequest.Marshal(b, m, deterministic) -} -func (m *PushBlobRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_PushBlobRequest.Merge(m, src) -} -func (m *PushBlobRequest) XXX_Size() int { - return xxx_messageInfo_PushBlobRequest.Size(m) -} -func (m *PushBlobRequest) XXX_DiscardUnknown() { - xxx_messageInfo_PushBlobRequest.DiscardUnknown(m) +func (*PushBlobRequest) ProtoMessage() {} + +func (x *PushBlobRequest) ProtoReflect() protoreflect.Message { + mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_PushBlobRequest proto.InternalMessageInfo +// Deprecated: Use PushBlobRequest.ProtoReflect.Descriptor instead. +func (*PushBlobRequest) Descriptor() ([]byte, []int) { + return file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescGZIP(), []int{5} +} -func (m *PushBlobRequest) GetInstanceName() string { - if m != nil { - return m.InstanceName +func (x *PushBlobRequest) GetInstanceName() string { + if x != nil { + return x.InstanceName } return "" } -func (m *PushBlobRequest) GetUris() []string { - if m != nil { - return m.Uris +func (x *PushBlobRequest) GetUris() []string { + if x != nil { + return x.Uris } return nil } -func (m *PushBlobRequest) GetQualifiers() []*Qualifier { - if m != nil { - return m.Qualifiers +func (x *PushBlobRequest) GetQualifiers() []*Qualifier { + if x != nil { + return x.Qualifiers } return nil } -func (m *PushBlobRequest) GetExpireAt() *timestamp.Timestamp { - if m != nil { - return m.ExpireAt +func (x *PushBlobRequest) GetExpireAt() *timestamppb.Timestamp { + if x != nil { + return x.ExpireAt } return nil } -func (m *PushBlobRequest) GetBlobDigest() *v2.Digest { - if m != nil { - return m.BlobDigest +func (x *PushBlobRequest) GetBlobDigest() *v2.Digest { + if x != nil { + return x.BlobDigest } return nil } -func (m *PushBlobRequest) GetReferencesBlobs() []*v2.Digest { - if m != nil { - return m.ReferencesBlobs +func (x *PushBlobRequest) GetReferencesBlobs() []*v2.Digest { + if x != nil { + return x.ReferencesBlobs } return nil } -func (m *PushBlobRequest) GetReferencesDirectories() []*v2.Digest { - if m != nil { - return m.ReferencesDirectories +func (x *PushBlobRequest) GetReferencesDirectories() []*v2.Digest { + if x != nil { + return x.ReferencesDirectories } return nil } +func (x *PushBlobRequest) GetDigestFunction() v2.DigestFunction_Value { + if x != nil { + return x.DigestFunction + } + return v2.DigestFunction_Value(0) +} + // A response message for // [Push.PushBlob][build.bazel.remote.asset.v1.Push.PushBlob]. type PushBlobResponse struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields } -func (m *PushBlobResponse) Reset() { *m = PushBlobResponse{} } -func (m *PushBlobResponse) String() string { return proto.CompactTextString(m) } -func (*PushBlobResponse) ProtoMessage() {} -func (*PushBlobResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f1872b94e98a76a1, []int{6} +func (x *PushBlobResponse) Reset() { + *x = PushBlobResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *PushBlobResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PushBlobResponse.Unmarshal(m, b) -} -func (m *PushBlobResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PushBlobResponse.Marshal(b, m, deterministic) -} -func (m *PushBlobResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_PushBlobResponse.Merge(m, src) +func (x *PushBlobResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *PushBlobResponse) XXX_Size() int { - return xxx_messageInfo_PushBlobResponse.Size(m) -} -func (m *PushBlobResponse) XXX_DiscardUnknown() { - xxx_messageInfo_PushBlobResponse.DiscardUnknown(m) + +func (*PushBlobResponse) ProtoMessage() {} + +func (x *PushBlobResponse) ProtoReflect() protoreflect.Message { + mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_PushBlobResponse proto.InternalMessageInfo +// Deprecated: Use PushBlobResponse.ProtoReflect.Descriptor instead. +func (*PushBlobResponse) Descriptor() ([]byte, []int) { + return file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescGZIP(), []int{6} +} // A request message for // [Push.PushDirectory][build.bazel.remote.asset.v1.Push.PushDirectory]. type PushDirectoryRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The instance of the execution system to operate against. A server may // support multiple instances of the execution system (with their own workers, // storage, caches, etc.). The server MAY require use of this field to select @@ -655,7 +795,7 @@ type PushDirectoryRequest struct { // A time after which this content should stop being returned via // [FetchDirectory][build.bazel.remote.asset.v1.Fetch.FetchDirectory]. // Servers *MAY* expire content early, e.g. due to storage pressure. - ExpireAt *timestamp.Timestamp `protobuf:"bytes,4,opt,name=expire_at,json=expireAt,proto3" json:"expire_at,omitempty"` + ExpireAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=expire_at,json=expireAt,proto3" json:"expire_at,omitempty"` // Directory to associate RootDirectoryDigest *v2.Digest `protobuf:"bytes,5,opt,name=root_directory_digest,json=rootDirectoryDigest,proto3" json:"root_directory_digest,omitempty"` // Referenced blobs or directories that need to not expire before expiration @@ -665,592 +805,600 @@ type PushDirectoryRequest struct { // indirectly referencing unavailable blobs. ReferencesBlobs []*v2.Digest `protobuf:"bytes,6,rep,name=references_blobs,json=referencesBlobs,proto3" json:"references_blobs,omitempty"` ReferencesDirectories []*v2.Digest `protobuf:"bytes,7,rep,name=references_directories,json=referencesDirectories,proto3" json:"references_directories,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + // The digest function that was used to compute blob digests. + // + // If the digest function used is one of MD5, MURMUR3, SHA1, SHA256, + // SHA384, SHA512, or VSO, the client MAY leave this field unset. In + // that case the server SHOULD infer the digest function using the + // length of the action digest hash and the digest functions announced + // in the server's capabilities. + DigestFunction v2.DigestFunction_Value `protobuf:"varint,8,opt,name=digest_function,json=digestFunction,proto3,enum=build.bazel.remote.execution.v2.DigestFunction_Value" json:"digest_function,omitempty"` +} + +func (x *PushDirectoryRequest) Reset() { + *x = PushDirectoryRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *PushDirectoryRequest) Reset() { *m = PushDirectoryRequest{} } -func (m *PushDirectoryRequest) String() string { return proto.CompactTextString(m) } -func (*PushDirectoryRequest) ProtoMessage() {} -func (*PushDirectoryRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f1872b94e98a76a1, []int{7} +func (x *PushDirectoryRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *PushDirectoryRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PushDirectoryRequest.Unmarshal(m, b) -} -func (m *PushDirectoryRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PushDirectoryRequest.Marshal(b, m, deterministic) -} -func (m *PushDirectoryRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_PushDirectoryRequest.Merge(m, src) -} -func (m *PushDirectoryRequest) XXX_Size() int { - return xxx_messageInfo_PushDirectoryRequest.Size(m) -} -func (m *PushDirectoryRequest) XXX_DiscardUnknown() { - xxx_messageInfo_PushDirectoryRequest.DiscardUnknown(m) +func (*PushDirectoryRequest) ProtoMessage() {} + +func (x *PushDirectoryRequest) ProtoReflect() protoreflect.Message { + mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_PushDirectoryRequest proto.InternalMessageInfo +// Deprecated: Use PushDirectoryRequest.ProtoReflect.Descriptor instead. +func (*PushDirectoryRequest) Descriptor() ([]byte, []int) { + return file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescGZIP(), []int{7} +} -func (m *PushDirectoryRequest) GetInstanceName() string { - if m != nil { - return m.InstanceName +func (x *PushDirectoryRequest) GetInstanceName() string { + if x != nil { + return x.InstanceName } return "" } -func (m *PushDirectoryRequest) GetUris() []string { - if m != nil { - return m.Uris +func (x *PushDirectoryRequest) GetUris() []string { + if x != nil { + return x.Uris } return nil } -func (m *PushDirectoryRequest) GetQualifiers() []*Qualifier { - if m != nil { - return m.Qualifiers +func (x *PushDirectoryRequest) GetQualifiers() []*Qualifier { + if x != nil { + return x.Qualifiers } return nil } -func (m *PushDirectoryRequest) GetExpireAt() *timestamp.Timestamp { - if m != nil { - return m.ExpireAt +func (x *PushDirectoryRequest) GetExpireAt() *timestamppb.Timestamp { + if x != nil { + return x.ExpireAt } return nil } -func (m *PushDirectoryRequest) GetRootDirectoryDigest() *v2.Digest { - if m != nil { - return m.RootDirectoryDigest +func (x *PushDirectoryRequest) GetRootDirectoryDigest() *v2.Digest { + if x != nil { + return x.RootDirectoryDigest } return nil } -func (m *PushDirectoryRequest) GetReferencesBlobs() []*v2.Digest { - if m != nil { - return m.ReferencesBlobs +func (x *PushDirectoryRequest) GetReferencesBlobs() []*v2.Digest { + if x != nil { + return x.ReferencesBlobs } return nil } -func (m *PushDirectoryRequest) GetReferencesDirectories() []*v2.Digest { - if m != nil { - return m.ReferencesDirectories +func (x *PushDirectoryRequest) GetReferencesDirectories() []*v2.Digest { + if x != nil { + return x.ReferencesDirectories } return nil } -// A response message for -// [Push.PushDirectory][build.bazel.remote.asset.v1.Push.PushDirectory]. -type PushDirectoryResponse struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *PushDirectoryResponse) Reset() { *m = PushDirectoryResponse{} } -func (m *PushDirectoryResponse) String() string { return proto.CompactTextString(m) } -func (*PushDirectoryResponse) ProtoMessage() {} -func (*PushDirectoryResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f1872b94e98a76a1, []int{8} -} - -func (m *PushDirectoryResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PushDirectoryResponse.Unmarshal(m, b) -} -func (m *PushDirectoryResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PushDirectoryResponse.Marshal(b, m, deterministic) -} -func (m *PushDirectoryResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_PushDirectoryResponse.Merge(m, src) -} -func (m *PushDirectoryResponse) XXX_Size() int { - return xxx_messageInfo_PushDirectoryResponse.Size(m) -} -func (m *PushDirectoryResponse) XXX_DiscardUnknown() { - xxx_messageInfo_PushDirectoryResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_PushDirectoryResponse proto.InternalMessageInfo - -func init() { - proto.RegisterType((*Qualifier)(nil), "build.bazel.remote.asset.v1.Qualifier") - proto.RegisterType((*FetchBlobRequest)(nil), "build.bazel.remote.asset.v1.FetchBlobRequest") - proto.RegisterType((*FetchBlobResponse)(nil), "build.bazel.remote.asset.v1.FetchBlobResponse") - proto.RegisterType((*FetchDirectoryRequest)(nil), "build.bazel.remote.asset.v1.FetchDirectoryRequest") - proto.RegisterType((*FetchDirectoryResponse)(nil), "build.bazel.remote.asset.v1.FetchDirectoryResponse") - proto.RegisterType((*PushBlobRequest)(nil), "build.bazel.remote.asset.v1.PushBlobRequest") - proto.RegisterType((*PushBlobResponse)(nil), "build.bazel.remote.asset.v1.PushBlobResponse") - proto.RegisterType((*PushDirectoryRequest)(nil), "build.bazel.remote.asset.v1.PushDirectoryRequest") - proto.RegisterType((*PushDirectoryResponse)(nil), "build.bazel.remote.asset.v1.PushDirectoryResponse") -} - -func init() { - proto.RegisterFile("build/bazel/remote/asset/v1/remote_asset.proto", fileDescriptor_f1872b94e98a76a1) -} - -var fileDescriptor_f1872b94e98a76a1 = []byte{ - // 829 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x57, 0xcf, 0x6f, 0xe3, 0x44, - 0x14, 0x96, 0x9d, 0xa4, 0x6d, 0x5e, 0x28, 0x0d, 0x43, 0xd3, 0x9a, 0x14, 0x41, 0x65, 0xa4, 0xb6, - 0x4a, 0x5b, 0x9b, 0xb8, 0xa2, 0x15, 0x95, 0x38, 0x24, 0x44, 0x15, 0x27, 0x54, 0x0c, 0x27, 0x90, - 0xb0, 0x1c, 0x67, 0x52, 0x2c, 0x39, 0x1e, 0xd7, 0x33, 0x8e, 0x0a, 0x88, 0x0b, 0xff, 0x02, 0x37, - 0x84, 0x2a, 0xc1, 0x91, 0x03, 0x07, 0x0e, 0xfc, 0x0f, 0x9c, 0xe1, 0xca, 0x01, 0x69, 0xff, 0x90, - 0xd5, 0x8c, 0xc7, 0x49, 0xea, 0x76, 0xf3, 0x4b, 0xbb, 0xd2, 0xee, 0x6a, 0x6f, 0x33, 0xf3, 0xde, - 0xf7, 0xf9, 0x9b, 0xef, 0x3d, 0xbf, 0x38, 0x60, 0x74, 0x13, 0x3f, 0xe8, 0x99, 0x5d, 0xf7, 0x3b, - 0x1c, 0x98, 0x31, 0x1e, 0x10, 0x86, 0x4d, 0x97, 0x52, 0xcc, 0xcc, 0x61, 0x53, 0xee, 0x1d, 0xb1, - 0x37, 0xa2, 0x98, 0x30, 0x82, 0x76, 0x44, 0xbe, 0x21, 0xf2, 0x8d, 0x34, 0x6e, 0xa4, 0xf1, 0x61, - 0xb3, 0x7e, 0xfa, 0x00, 0x19, 0xbe, 0xc1, 0x5e, 0xc2, 0x7c, 0x12, 0x9a, 0x43, 0x2b, 0x23, 0x1c, - 0x9d, 0xa5, 0xa4, 0xf5, 0xb7, 0xaf, 0x08, 0xb9, 0x0a, 0xb0, 0xe9, 0x46, 0xbe, 0xe9, 0x86, 0x21, - 0x61, 0x2e, 0x0f, 0x52, 0x19, 0x7d, 0x47, 0x46, 0xc5, 0xae, 0x9b, 0xf4, 0xcd, 0x5e, 0x12, 0xbb, - 0x13, 0xe8, 0x77, 0xf3, 0x71, 0xe6, 0x0f, 0x30, 0x65, 0xee, 0x20, 0x92, 0x09, 0xdb, 0x32, 0x21, - 0x8e, 0x3c, 0x93, 0x32, 0x97, 0x25, 0x92, 0x59, 0xff, 0x00, 0xca, 0x9f, 0x25, 0x6e, 0xe0, 0xf7, - 0x7d, 0x1c, 0x23, 0x04, 0xc5, 0xd0, 0x1d, 0x60, 0x4d, 0xd9, 0x55, 0x0e, 0xca, 0xb6, 0x58, 0xa3, - 0x4d, 0x28, 0x0d, 0xdd, 0x20, 0xc1, 0x9a, 0x2a, 0x0e, 0xd3, 0x8d, 0xfe, 0x8b, 0x0a, 0xd5, 0x0b, - 0xcc, 0xbc, 0x6f, 0xda, 0x01, 0xe9, 0xda, 0xf8, 0x3a, 0xc1, 0x94, 0xa1, 0xf7, 0x60, 0xdd, 0x0f, - 0x29, 0x73, 0x43, 0x0f, 0x3b, 0x13, 0x3c, 0xaf, 0x65, 0x87, 0x9f, 0x72, 0xbe, 0x13, 0x58, 0xe5, - 0xe2, 0x48, 0xc2, 0x04, 0x63, 0xc5, 0x7a, 0xcb, 0x48, 0xb5, 0x19, 0x99, 0x78, 0xa3, 0x23, 0x2f, - 0x67, 0x67, 0x99, 0xc8, 0x86, 0x6d, 0x12, 0xf4, 0x30, 0x65, 0x8e, 0x47, 0x42, 0x86, 0x43, 0xe6, - 0xb8, 0x9e, 0x87, 0x23, 0x86, 0x7b, 0x5a, 0x41, 0x90, 0xd4, 0xef, 0x91, 0x7c, 0x91, 0x39, 0x60, - 0xd7, 0x52, 0xe8, 0xc7, 0x29, 0xb2, 0x25, 0x81, 0xfc, 0xb2, 0x49, 0xec, 0x53, 0xad, 0xb8, 0x5b, - 0xe0, 0x97, 0xe5, 0x6b, 0x74, 0x01, 0x70, 0x9d, 0xb9, 0x41, 0xb5, 0xd2, 0x6e, 0xe1, 0xa0, 0x62, - 0xed, 0x19, 0x53, 0xea, 0x6d, 0x8c, 0xcc, 0xb3, 0x27, 0x90, 0xfa, 0xad, 0x0a, 0x6f, 0x4c, 0xd8, - 0x43, 0x23, 0x12, 0x52, 0x8c, 0x1a, 0xb0, 0x92, 0x7a, 0x2f, 0x8c, 0xa9, 0x58, 0x28, 0x13, 0x1d, - 0x47, 0x9e, 0xf1, 0xb9, 0x88, 0xd8, 0x32, 0x03, 0x55, 0xa1, 0x90, 0xc4, 0xbe, 0x34, 0x9d, 0x2f, - 0x73, 0xda, 0x0a, 0xcb, 0x6a, 0x43, 0x1f, 0x02, 0xe0, 0x9b, 0xc8, 0x8f, 0x31, 0x75, 0x5c, 0xa6, - 0x15, 0x67, 0xda, 0x57, 0x96, 0xd9, 0x2d, 0x86, 0x3e, 0x81, 0x4a, 0x37, 0x20, 0x5d, 0xa7, 0xe7, - 0x5f, 0x61, 0xca, 0xb4, 0x92, 0xc0, 0xee, 0x3f, 0xa4, 0x61, 0xdc, 0xde, 0x43, 0xcb, 0xe8, 0x88, - 0x74, 0x1b, 0x38, 0x36, 0x5d, 0xeb, 0xbf, 0xaa, 0x50, 0x13, 0x06, 0x75, 0xfc, 0x18, 0x7b, 0x8c, - 0xc4, 0xdf, 0xbe, 0x6a, 0xa2, 0x7c, 0x13, 0xfd, 0xa5, 0xc2, 0x56, 0xde, 0xa3, 0x97, 0xa5, 0x93, - 0xbe, 0x82, 0x5a, 0x4c, 0x08, 0x73, 0x7a, 0xd9, 0xd5, 0x96, 0xec, 0xa9, 0x37, 0x39, 0xcb, 0xc8, - 0x1f, 0xd9, 0x5c, 0x7f, 0x17, 0x60, 0xe3, 0x32, 0xa1, 0x8b, 0xcf, 0xa6, 0xac, 0x9a, 0xea, 0x13, - 0xab, 0xb9, 0xbc, 0x59, 0x67, 0x20, 0xaf, 0x3f, 0x9f, 0x57, 0x6b, 0x69, 0xf2, 0xd3, 0x7c, 0xe9, - 0x90, 0x0d, 0xd5, 0x18, 0xf7, 0x71, 0x8c, 0x43, 0x0f, 0x53, 0x87, 0x07, 0xa8, 0xb6, 0x22, 0x2e, - 0x34, 0x37, 0xdd, 0xc6, 0x98, 0x80, 0xbb, 0x4b, 0xd1, 0xd7, 0xb0, 0x35, 0xc1, 0x99, 0x95, 0xd3, - 0xc7, 0x54, 0x5b, 0x5d, 0x8c, 0xb9, 0x36, 0xa6, 0xe9, 0x8c, 0x59, 0x74, 0x04, 0xd5, 0x71, 0x29, - 0xd3, 0xee, 0xd7, 0xff, 0x2f, 0xc0, 0x26, 0x3f, 0x5c, 0x6e, 0x76, 0x3c, 0x97, 0x45, 0x7e, 0x96, - 0xef, 0xc3, 0x0b, 0x59, 0xf7, 0x6d, 0xa8, 0xe5, 0x4a, 0x9c, 0x16, 0xdf, 0xfa, 0x4f, 0x85, 0x92, - 0x98, 0x8a, 0xe8, 0x56, 0x81, 0xf2, 0xe8, 0x47, 0x16, 0x1d, 0x4f, 0x2d, 0x57, 0xfe, 0x5b, 0xa5, - 0x6e, 0xcc, 0x9b, 0x2e, 0x7b, 0xce, 0xfa, 0xf1, 0x9f, 0x47, 0x3f, 0xa9, 0x47, 0xfa, 0x3e, 0xff, - 0x28, 0xfc, 0xfe, 0x4e, 0x97, 0x7d, 0xd4, 0x68, 0xfc, 0x90, 0x7e, 0x30, 0xd2, 0xf3, 0x7e, 0x06, - 0x3c, 0x57, 0x1a, 0xe8, 0x4f, 0x05, 0x5e, 0xbf, 0x3b, 0xc0, 0x91, 0x35, 0xfb, 0xb1, 0xf9, 0xae, - 0xae, 0x9f, 0x2c, 0x84, 0x91, 0x7a, 0xcf, 0x84, 0xde, 0xa6, 0x7e, 0x34, 0x87, 0xde, 0x11, 0xfa, - 0x5c, 0x69, 0x58, 0xff, 0xaa, 0x50, 0xe4, 0xce, 0xa3, 0x9f, 0x15, 0x58, 0xcb, 0x5e, 0x3d, 0x74, - 0x34, 0x55, 0x43, 0x6e, 0xd8, 0xd6, 0x8f, 0xe7, 0xcc, 0x96, 0x5a, 0x9b, 0x42, 0xeb, 0xa1, 0xbe, - 0x37, 0x5d, 0x6b, 0x24, 0x71, 0xdc, 0xda, 0x3f, 0x14, 0x58, 0xbf, 0xd3, 0x1f, 0xa8, 0x39, 0xf3, - 0x99, 0xf7, 0x8c, 0xb5, 0x16, 0x81, 0x48, 0xad, 0xa7, 0x42, 0xeb, 0xfb, 0xfa, 0xe1, 0x6c, 0xad, - 0x93, 0xb6, 0xb6, 0x5d, 0x98, 0xf6, 0xb7, 0xa1, 0x5d, 0xb5, 0xc5, 0x41, 0x8b, 0xef, 0x2f, 0xf9, - 0xa0, 0xb8, 0x54, 0xbe, 0xac, 0xa4, 0x49, 0x22, 0xe7, 0x37, 0x55, 0xb5, 0x5b, 0xbf, 0xab, 0x3b, - 0x6d, 0xc1, 0xd1, 0x16, 0x1c, 0x29, 0xc4, 0x68, 0x49, 0x8e, 0xee, 0x8a, 0x98, 0x30, 0x27, 0x8f, - 0x03, 0x00, 0x00, 0xff, 0xff, 0x2f, 0x9a, 0xf5, 0x74, 0xd0, 0x0c, 0x00, 0x00, -} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 - -// FetchClient is the client API for Fetch service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type FetchClient interface { - // Resolve or fetch referenced assets, making them available to the caller and - // other consumers in the [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage]. - // - // Servers *MAY* fetch content that they do not already have cached, for any - // URLs they support. - // - // Servers *SHOULD* ensure that referenced files are present in the CAS at the - // time of the response, and (if supported) that they will remain available - // for a reasonable period of time. The lifetimes of the referenced blobs *SHOULD* - // be increased if necessary and applicable. - // In the event that a client receives a reference to content that is no - // longer present, it *MAY* re-issue the request with - // `oldest_content_accepted` set to a more recent timestamp than the original - // attempt, to induce a re-fetch from origin. - // - // Servers *MAY* cache fetched content and reuse it for subsequent requests, - // subject to `oldest_content_accepted`. - // - // Servers *MAY* support the complementary [Push][build.bazel.remote.asset.v1.Push] - // API and allow content to be directly inserted for use in future fetch - // responses. - // - // Servers *MUST* ensure Fetch'd content matches all the specified - // qualifiers except in the case of previously Push'd resources, for which - // the server *MAY* trust the pushing client to have set the qualifiers - // correctly, without validation. - // - // Servers not implementing the complementary [Push][build.bazel.remote.asset.v1.Push] - // API *MUST* reject requests containing qualifiers it does not support. - // - // Servers *MAY* transform assets as part of the fetch. For example a - // tarball fetched by [FetchDirectory][build.bazel.remote.asset.v1.Fetch.FetchDirectory] - // might be unpacked, or a Git repository - // fetched by [FetchBlob][build.bazel.remote.asset.v1.Fetch.FetchBlob] - // might be passed through `git-archive`. - // - // Errors handling the requested assets will be returned as gRPC Status errors - // here; errors outside the server's control will be returned inline in the - // `status` field of the response (see comment there for details). - // The possible RPC errors include: - // * `INVALID_ARGUMENT`: One or more arguments were invalid, such as a - // qualifier that is not supported by the server. - // * `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to - // perform the requested operation. The client may retry after a delay. - // * `UNAVAILABLE`: Due to a transient condition the operation could not be - // completed. The client should retry. - // * `INTERNAL`: An internal error occurred while performing the operation. - // The client should retry. - // * `DEADLINE_EXCEEDED`: The fetch could not be completed within the given - // RPC deadline. The client should retry for at least as long as the value - // provided in `timeout` field of the request. - // - // In the case of unsupported qualifiers, the server *SHOULD* additionally - // send a [BadRequest][google.rpc.BadRequest] error detail where, for each - // unsupported qualifier, there is a `FieldViolation` with a `field` of - // `qualifiers.name` and a `description` of `"{qualifier}" not supported` - // indicating the name of the unsupported qualifier. - FetchBlob(ctx context.Context, in *FetchBlobRequest, opts ...grpc.CallOption) (*FetchBlobResponse, error) - FetchDirectory(ctx context.Context, in *FetchDirectoryRequest, opts ...grpc.CallOption) (*FetchDirectoryResponse, error) -} - -type fetchClient struct { - cc *grpc.ClientConn -} - -func NewFetchClient(cc *grpc.ClientConn) FetchClient { - return &fetchClient{cc} -} - -func (c *fetchClient) FetchBlob(ctx context.Context, in *FetchBlobRequest, opts ...grpc.CallOption) (*FetchBlobResponse, error) { - out := new(FetchBlobResponse) - err := c.cc.Invoke(ctx, "/build.bazel.remote.asset.v1.Fetch/FetchBlob", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *fetchClient) FetchDirectory(ctx context.Context, in *FetchDirectoryRequest, opts ...grpc.CallOption) (*FetchDirectoryResponse, error) { - out := new(FetchDirectoryResponse) - err := c.cc.Invoke(ctx, "/build.bazel.remote.asset.v1.Fetch/FetchDirectory", in, out, opts...) - if err != nil { - return nil, err +func (x *PushDirectoryRequest) GetDigestFunction() v2.DigestFunction_Value { + if x != nil { + return x.DigestFunction } - return out, nil -} - -// FetchServer is the server API for Fetch service. -type FetchServer interface { - // Resolve or fetch referenced assets, making them available to the caller and - // other consumers in the [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage]. - // - // Servers *MAY* fetch content that they do not already have cached, for any - // URLs they support. - // - // Servers *SHOULD* ensure that referenced files are present in the CAS at the - // time of the response, and (if supported) that they will remain available - // for a reasonable period of time. The lifetimes of the referenced blobs *SHOULD* - // be increased if necessary and applicable. - // In the event that a client receives a reference to content that is no - // longer present, it *MAY* re-issue the request with - // `oldest_content_accepted` set to a more recent timestamp than the original - // attempt, to induce a re-fetch from origin. - // - // Servers *MAY* cache fetched content and reuse it for subsequent requests, - // subject to `oldest_content_accepted`. - // - // Servers *MAY* support the complementary [Push][build.bazel.remote.asset.v1.Push] - // API and allow content to be directly inserted for use in future fetch - // responses. - // - // Servers *MUST* ensure Fetch'd content matches all the specified - // qualifiers except in the case of previously Push'd resources, for which - // the server *MAY* trust the pushing client to have set the qualifiers - // correctly, without validation. - // - // Servers not implementing the complementary [Push][build.bazel.remote.asset.v1.Push] - // API *MUST* reject requests containing qualifiers it does not support. - // - // Servers *MAY* transform assets as part of the fetch. For example a - // tarball fetched by [FetchDirectory][build.bazel.remote.asset.v1.Fetch.FetchDirectory] - // might be unpacked, or a Git repository - // fetched by [FetchBlob][build.bazel.remote.asset.v1.Fetch.FetchBlob] - // might be passed through `git-archive`. - // - // Errors handling the requested assets will be returned as gRPC Status errors - // here; errors outside the server's control will be returned inline in the - // `status` field of the response (see comment there for details). - // The possible RPC errors include: - // * `INVALID_ARGUMENT`: One or more arguments were invalid, such as a - // qualifier that is not supported by the server. - // * `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to - // perform the requested operation. The client may retry after a delay. - // * `UNAVAILABLE`: Due to a transient condition the operation could not be - // completed. The client should retry. - // * `INTERNAL`: An internal error occurred while performing the operation. - // The client should retry. - // * `DEADLINE_EXCEEDED`: The fetch could not be completed within the given - // RPC deadline. The client should retry for at least as long as the value - // provided in `timeout` field of the request. - // - // In the case of unsupported qualifiers, the server *SHOULD* additionally - // send a [BadRequest][google.rpc.BadRequest] error detail where, for each - // unsupported qualifier, there is a `FieldViolation` with a `field` of - // `qualifiers.name` and a `description` of `"{qualifier}" not supported` - // indicating the name of the unsupported qualifier. - FetchBlob(context.Context, *FetchBlobRequest) (*FetchBlobResponse, error) - FetchDirectory(context.Context, *FetchDirectoryRequest) (*FetchDirectoryResponse, error) -} - -// UnimplementedFetchServer can be embedded to have forward compatible implementations. -type UnimplementedFetchServer struct { + return v2.DigestFunction_Value(0) } -func (*UnimplementedFetchServer) FetchBlob(ctx context.Context, req *FetchBlobRequest) (*FetchBlobResponse, error) { - return nil, status1.Errorf(codes.Unimplemented, "method FetchBlob not implemented") -} -func (*UnimplementedFetchServer) FetchDirectory(ctx context.Context, req *FetchDirectoryRequest) (*FetchDirectoryResponse, error) { - return nil, status1.Errorf(codes.Unimplemented, "method FetchDirectory not implemented") -} - -func RegisterFetchServer(s *grpc.Server, srv FetchServer) { - s.RegisterService(&_Fetch_serviceDesc, srv) -} - -func _Fetch_FetchBlob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(FetchBlobRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(FetchServer).FetchBlob(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/build.bazel.remote.asset.v1.Fetch/FetchBlob", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(FetchServer).FetchBlob(ctx, req.(*FetchBlobRequest)) - } - return interceptor(ctx, in, info, handler) +// A response message for +// [Push.PushDirectory][build.bazel.remote.asset.v1.Push.PushDirectory]. +type PushDirectoryResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields } -func _Fetch_FetchDirectory_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(FetchDirectoryRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(FetchServer).FetchDirectory(ctx, in) +func (x *PushDirectoryResponse) Reset() { + *x = PushDirectoryResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/build.bazel.remote.asset.v1.Fetch/FetchDirectory", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(FetchServer).FetchDirectory(ctx, req.(*FetchDirectoryRequest)) - } - return interceptor(ctx, in, info, handler) } -var _Fetch_serviceDesc = grpc.ServiceDesc{ - ServiceName: "build.bazel.remote.asset.v1.Fetch", - HandlerType: (*FetchServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "FetchBlob", - Handler: _Fetch_FetchBlob_Handler, - }, - { - MethodName: "FetchDirectory", - Handler: _Fetch_FetchDirectory_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "build/bazel/remote/asset/v1/remote_asset.proto", +func (x *PushDirectoryResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -// PushClient is the client API for Push service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type PushClient interface { - // These APIs associate the identifying information of a resource, as - // indicated by URI and optionally Qualifiers, with content available in the - // CAS. For example, associating a repository url and a commit id with a - // Directory Digest. - // - // Servers *SHOULD* only allow trusted clients to associate content, and *MAY* - // only allow certain URIs to be pushed. - // - // Clients *MUST* ensure associated content is available in CAS prior to - // pushing. - // - // Clients *MUST* ensure the Qualifiers listed correctly match the contents, - // and Servers *MAY* trust these values without validation. - // Fetch servers *MAY* require exact match of all qualifiers when returning - // content previously pushed, or allow fetching content with only a subset of - // the qualifiers specified on Push. - // - // Clients can specify expiration information that the server *SHOULD* - // respect. Subsequent requests can be used to alter the expiration time. - // - // A minimal compliant Fetch implementation may support only Push'd content - // and return `NOT_FOUND` for any resource that was not pushed first. - // Alternatively, a compliant implementation may choose to not support Push - // and only return resources that can be Fetch'd from origin. - // - // Errors will be returned as gRPC Status errors. - // The possible RPC errors include: - // * `INVALID_ARGUMENT`: One or more arguments to the RPC were invalid. - // * `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to - // perform the requested operation. The client may retry after a delay. - // * `UNAVAILABLE`: Due to a transient condition the operation could not be - // completed. The client should retry. - // * `INTERNAL`: An internal error occurred while performing the operation. - // The client should retry. - PushBlob(ctx context.Context, in *PushBlobRequest, opts ...grpc.CallOption) (*PushBlobResponse, error) - PushDirectory(ctx context.Context, in *PushDirectoryRequest, opts ...grpc.CallOption) (*PushDirectoryResponse, error) -} - -type pushClient struct { - cc *grpc.ClientConn -} +func (*PushDirectoryResponse) ProtoMessage() {} -func NewPushClient(cc *grpc.ClientConn) PushClient { - return &pushClient{cc} -} - -func (c *pushClient) PushBlob(ctx context.Context, in *PushBlobRequest, opts ...grpc.CallOption) (*PushBlobResponse, error) { - out := new(PushBlobResponse) - err := c.cc.Invoke(ctx, "/build.bazel.remote.asset.v1.Push/PushBlob", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *pushClient) PushDirectory(ctx context.Context, in *PushDirectoryRequest, opts ...grpc.CallOption) (*PushDirectoryResponse, error) { - out := new(PushDirectoryResponse) - err := c.cc.Invoke(ctx, "/build.bazel.remote.asset.v1.Push/PushDirectory", in, out, opts...) - if err != nil { - return nil, err +func (x *PushDirectoryResponse) ProtoReflect() protoreflect.Message { + mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return out, nil + return mi.MessageOf(x) } -// PushServer is the server API for Push service. -type PushServer interface { - // These APIs associate the identifying information of a resource, as - // indicated by URI and optionally Qualifiers, with content available in the - // CAS. For example, associating a repository url and a commit id with a - // Directory Digest. - // - // Servers *SHOULD* only allow trusted clients to associate content, and *MAY* - // only allow certain URIs to be pushed. - // - // Clients *MUST* ensure associated content is available in CAS prior to - // pushing. - // - // Clients *MUST* ensure the Qualifiers listed correctly match the contents, - // and Servers *MAY* trust these values without validation. - // Fetch servers *MAY* require exact match of all qualifiers when returning - // content previously pushed, or allow fetching content with only a subset of - // the qualifiers specified on Push. - // - // Clients can specify expiration information that the server *SHOULD* - // respect. Subsequent requests can be used to alter the expiration time. - // - // A minimal compliant Fetch implementation may support only Push'd content - // and return `NOT_FOUND` for any resource that was not pushed first. - // Alternatively, a compliant implementation may choose to not support Push - // and only return resources that can be Fetch'd from origin. - // - // Errors will be returned as gRPC Status errors. - // The possible RPC errors include: - // * `INVALID_ARGUMENT`: One or more arguments to the RPC were invalid. - // * `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to - // perform the requested operation. The client may retry after a delay. - // * `UNAVAILABLE`: Due to a transient condition the operation could not be - // completed. The client should retry. - // * `INTERNAL`: An internal error occurred while performing the operation. - // The client should retry. - PushBlob(context.Context, *PushBlobRequest) (*PushBlobResponse, error) - PushDirectory(context.Context, *PushDirectoryRequest) (*PushDirectoryResponse, error) -} - -// UnimplementedPushServer can be embedded to have forward compatible implementations. -type UnimplementedPushServer struct { -} - -func (*UnimplementedPushServer) PushBlob(ctx context.Context, req *PushBlobRequest) (*PushBlobResponse, error) { - return nil, status1.Errorf(codes.Unimplemented, "method PushBlob not implemented") -} -func (*UnimplementedPushServer) PushDirectory(ctx context.Context, req *PushDirectoryRequest) (*PushDirectoryResponse, error) { - return nil, status1.Errorf(codes.Unimplemented, "method PushDirectory not implemented") -} - -func RegisterPushServer(s *grpc.Server, srv PushServer) { - s.RegisterService(&_Push_serviceDesc, srv) -} - -func _Push_PushBlob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PushBlobRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PushServer).PushBlob(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/build.bazel.remote.asset.v1.Push/PushBlob", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PushServer).PushBlob(ctx, req.(*PushBlobRequest)) - } - return interceptor(ctx, in, info, handler) -} +// Deprecated: Use PushDirectoryResponse.ProtoReflect.Descriptor instead. +func (*PushDirectoryResponse) Descriptor() ([]byte, []int) { + return file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescGZIP(), []int{8} +} + +var File_build_bazel_remote_asset_v1_remote_asset_proto protoreflect.FileDescriptor + +var file_build_bazel_remote_asset_v1_remote_asset_proto_rawDesc = []byte{ + 0x0a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2f, 0x72, 0x65, + 0x6d, 0x6f, 0x74, 0x65, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, + 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x1b, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, + 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x1a, 0x36, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, + 0x65, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x2f, 0x72, + 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x72, 0x70, 0x63, + 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x35, 0x0a, + 0x09, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0xfc, 0x02, 0x0a, 0x10, 0x46, 0x65, 0x74, 0x63, 0x68, 0x42, 0x6c, + 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x33, + 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 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, 0x07, 0x74, 0x69, 0x6d, 0x65, + 0x6f, 0x75, 0x74, 0x12, 0x52, 0x0a, 0x17, 0x6f, 0x6c, 0x64, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 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, 0x15, 0x6f, 0x6c, 0x64, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x41, + 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x72, 0x69, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x75, 0x72, 0x69, 0x73, 0x12, 0x46, 0x0a, 0x0a, 0x71, + 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x26, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, + 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, + 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0a, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x73, 0x12, 0x5e, 0x0a, 0x0f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x66, 0x75, + 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, + 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x22, 0xfe, 0x02, 0x0a, 0x11, 0x46, 0x65, 0x74, 0x63, 0x68, 0x42, 0x6c, 0x6f, + 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x46, 0x0a, 0x0a, 0x71, 0x75, 0x61, 0x6c, 0x69, + 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, 0x75, + 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, + 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x66, + 0x69, 0x65, 0x72, 0x52, 0x0a, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, + 0x39, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, 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, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x12, 0x48, 0x0a, 0x0b, 0x62, 0x6c, + 0x6f, 0x62, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, + 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x62, 0x6c, 0x6f, 0x62, 0x44, 0x69, + 0x67, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x0f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x66, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, + 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, + 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x81, 0x03, 0x0a, 0x15, 0x46, 0x65, 0x74, 0x63, 0x68, 0x44, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, + 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 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, + 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x52, 0x0a, 0x17, 0x6f, 0x6c, 0x64, 0x65, + 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, + 0x74, 0x65, 0x64, 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, 0x15, 0x6f, 0x6c, 0x64, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x75, 0x72, 0x69, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x75, 0x72, 0x69, 0x73, + 0x12, 0x46, 0x0a, 0x0a, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x05, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, + 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0a, 0x71, 0x75, + 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x5e, 0x0a, 0x0f, 0x64, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x35, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, + 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x96, 0x03, 0x0a, 0x16, 0x46, 0x65, 0x74, + 0x63, 0x68, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, + 0x69, 0x12, 0x46, 0x0a, 0x0a, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, + 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0a, 0x71, + 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x65, 0x78, 0x70, + 0x69, 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, 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, 0x65, 0x78, 0x70, 0x69, 0x72, + 0x65, 0x73, 0x41, 0x74, 0x12, 0x5b, 0x0a, 0x15, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x64, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, + 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x13, 0x72, 0x6f, + 0x6f, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x69, 0x67, 0x65, 0x73, + 0x74, 0x12, 0x5e, 0x0a, 0x0f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x66, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x62, 0x75, 0x69, + 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, + 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x0e, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x22, 0xa9, 0x04, 0x0a, 0x0f, 0x50, 0x75, 0x73, 0x68, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x72, + 0x69, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x75, 0x72, 0x69, 0x73, 0x12, 0x46, + 0x0a, 0x0a, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, + 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0a, 0x71, 0x75, 0x61, 0x6c, + 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, + 0x5f, 0x61, 0x74, 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, 0x08, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x41, 0x74, 0x12, + 0x48, 0x0a, 0x0b, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, + 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x62, + 0x6c, 0x6f, 0x62, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, 0x10, 0x72, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x18, 0x06, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, + 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x0f, 0x72, 0x65, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x12, 0x5e, 0x0a, + 0x16, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x5f, 0x64, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, + 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, + 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x15, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x73, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x12, 0x5e, 0x0a, + 0x0f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, + 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x64, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x12, 0x0a, + 0x10, 0x50, 0x75, 0x73, 0x68, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0xc1, 0x04, 0x0a, 0x14, 0x50, 0x75, 0x73, 0x68, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x75, 0x72, 0x69, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x75, + 0x72, 0x69, 0x73, 0x12, 0x46, 0x0a, 0x0a, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, + 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, + 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, + 0x0a, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x65, + 0x78, 0x70, 0x69, 0x72, 0x65, 0x5f, 0x61, 0x74, 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, 0x08, 0x65, 0x78, 0x70, 0x69, + 0x72, 0x65, 0x41, 0x74, 0x12, 0x5b, 0x0a, 0x15, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x64, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, + 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x13, 0x72, 0x6f, + 0x6f, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x69, 0x67, 0x65, 0x73, + 0x74, 0x12, 0x52, 0x0a, 0x10, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x5f, + 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, + 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, + 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, + 0x67, 0x65, 0x73, 0x74, 0x52, 0x0f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, + 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x12, 0x5e, 0x0a, 0x16, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x73, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, + 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, + 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x15, + 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x69, 0x65, 0x73, 0x12, 0x5e, 0x0a, 0x0f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, + 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, + 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, + 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, + 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x17, 0x0a, 0x15, 0x50, 0x75, 0x73, 0x68, 0x44, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xdd, + 0x02, 0x0a, 0x05, 0x46, 0x65, 0x74, 0x63, 0x68, 0x12, 0x9e, 0x01, 0x0a, 0x09, 0x46, 0x65, 0x74, + 0x63, 0x68, 0x42, 0x6c, 0x6f, 0x62, 0x12, 0x2d, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, + 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, + 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x3a, 0x01, 0x2a, + 0x22, 0x27, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x3a, + 0x66, 0x65, 0x74, 0x63, 0x68, 0x42, 0x6c, 0x6f, 0x62, 0x12, 0xb2, 0x01, 0x0a, 0x0e, 0x46, 0x65, + 0x74, 0x63, 0x68, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x32, 0x2e, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, + 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, + 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x33, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, + 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x46, + 0x65, 0x74, 0x63, 0x68, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x3a, 0x01, 0x2a, + 0x22, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x3a, + 0x66, 0x65, 0x74, 0x63, 0x68, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x32, 0xd4, + 0x02, 0x0a, 0x04, 0x50, 0x75, 0x73, 0x68, 0x12, 0x9a, 0x01, 0x0a, 0x08, 0x50, 0x75, 0x73, 0x68, + 0x42, 0x6c, 0x6f, 0x62, 0x12, 0x2c, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, + 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, + 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x75, 0x73, 0x68, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x22, 0x26, 0x2f, 0x76, + 0x31, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x3a, 0x70, 0x75, 0x73, 0x68, + 0x42, 0x6c, 0x6f, 0x62, 0x12, 0xae, 0x01, 0x0a, 0x0d, 0x50, 0x75, 0x73, 0x68, 0x44, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x31, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, + 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x62, 0x75, 0x69, 0x6c, + 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, + 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x44, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x3a, 0x01, 0x2a, 0x22, 0x2b, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, + 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x3a, 0x70, 0x75, 0x73, 0x68, 0x44, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x9f, 0x01, 0x0a, 0x1b, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, + 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, + 0x65, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x10, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x73, 0x73, + 0x65, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x49, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2d, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x62, 0x75, 0x69, + 0x6c, 0x64, 0x2f, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2f, + 0x61, 0x73, 0x73, 0x65, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x61, + 0x73, 0x73, 0x65, 0x74, 0xa2, 0x02, 0x02, 0x52, 0x41, 0xaa, 0x02, 0x1b, 0x42, 0x75, 0x69, 0x6c, + 0x64, 0x2e, 0x42, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x41, + 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescOnce sync.Once + file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescData = file_build_bazel_remote_asset_v1_remote_asset_proto_rawDesc +) -func _Push_PushDirectory_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PushDirectoryRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PushServer).PushDirectory(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/build.bazel.remote.asset.v1.Push/PushDirectory", +func file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescGZIP() []byte { + file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescOnce.Do(func() { + file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescData = protoimpl.X.CompressGZIP(file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescData) + }) + return file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescData +} + +var file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes = make([]protoimpl.MessageInfo, 9) +var file_build_bazel_remote_asset_v1_remote_asset_proto_goTypes = []any{ + (*Qualifier)(nil), // 0: build.bazel.remote.asset.v1.Qualifier + (*FetchBlobRequest)(nil), // 1: build.bazel.remote.asset.v1.FetchBlobRequest + (*FetchBlobResponse)(nil), // 2: build.bazel.remote.asset.v1.FetchBlobResponse + (*FetchDirectoryRequest)(nil), // 3: build.bazel.remote.asset.v1.FetchDirectoryRequest + (*FetchDirectoryResponse)(nil), // 4: build.bazel.remote.asset.v1.FetchDirectoryResponse + (*PushBlobRequest)(nil), // 5: build.bazel.remote.asset.v1.PushBlobRequest + (*PushBlobResponse)(nil), // 6: build.bazel.remote.asset.v1.PushBlobResponse + (*PushDirectoryRequest)(nil), // 7: build.bazel.remote.asset.v1.PushDirectoryRequest + (*PushDirectoryResponse)(nil), // 8: build.bazel.remote.asset.v1.PushDirectoryResponse + (*durationpb.Duration)(nil), // 9: google.protobuf.Duration + (*timestamppb.Timestamp)(nil), // 10: google.protobuf.Timestamp + (v2.DigestFunction_Value)(0), // 11: build.bazel.remote.execution.v2.DigestFunction.Value + (*status.Status)(nil), // 12: google.rpc.Status + (*v2.Digest)(nil), // 13: build.bazel.remote.execution.v2.Digest +} +var file_build_bazel_remote_asset_v1_remote_asset_proto_depIdxs = []int32{ + 9, // 0: build.bazel.remote.asset.v1.FetchBlobRequest.timeout:type_name -> google.protobuf.Duration + 10, // 1: build.bazel.remote.asset.v1.FetchBlobRequest.oldest_content_accepted:type_name -> google.protobuf.Timestamp + 0, // 2: build.bazel.remote.asset.v1.FetchBlobRequest.qualifiers:type_name -> build.bazel.remote.asset.v1.Qualifier + 11, // 3: build.bazel.remote.asset.v1.FetchBlobRequest.digest_function:type_name -> build.bazel.remote.execution.v2.DigestFunction.Value + 12, // 4: build.bazel.remote.asset.v1.FetchBlobResponse.status:type_name -> google.rpc.Status + 0, // 5: build.bazel.remote.asset.v1.FetchBlobResponse.qualifiers:type_name -> build.bazel.remote.asset.v1.Qualifier + 10, // 6: build.bazel.remote.asset.v1.FetchBlobResponse.expires_at:type_name -> google.protobuf.Timestamp + 13, // 7: build.bazel.remote.asset.v1.FetchBlobResponse.blob_digest:type_name -> build.bazel.remote.execution.v2.Digest + 11, // 8: build.bazel.remote.asset.v1.FetchBlobResponse.digest_function:type_name -> build.bazel.remote.execution.v2.DigestFunction.Value + 9, // 9: build.bazel.remote.asset.v1.FetchDirectoryRequest.timeout:type_name -> google.protobuf.Duration + 10, // 10: build.bazel.remote.asset.v1.FetchDirectoryRequest.oldest_content_accepted:type_name -> google.protobuf.Timestamp + 0, // 11: build.bazel.remote.asset.v1.FetchDirectoryRequest.qualifiers:type_name -> build.bazel.remote.asset.v1.Qualifier + 11, // 12: build.bazel.remote.asset.v1.FetchDirectoryRequest.digest_function:type_name -> build.bazel.remote.execution.v2.DigestFunction.Value + 12, // 13: build.bazel.remote.asset.v1.FetchDirectoryResponse.status:type_name -> google.rpc.Status + 0, // 14: build.bazel.remote.asset.v1.FetchDirectoryResponse.qualifiers:type_name -> build.bazel.remote.asset.v1.Qualifier + 10, // 15: build.bazel.remote.asset.v1.FetchDirectoryResponse.expires_at:type_name -> google.protobuf.Timestamp + 13, // 16: build.bazel.remote.asset.v1.FetchDirectoryResponse.root_directory_digest:type_name -> build.bazel.remote.execution.v2.Digest + 11, // 17: build.bazel.remote.asset.v1.FetchDirectoryResponse.digest_function:type_name -> build.bazel.remote.execution.v2.DigestFunction.Value + 0, // 18: build.bazel.remote.asset.v1.PushBlobRequest.qualifiers:type_name -> build.bazel.remote.asset.v1.Qualifier + 10, // 19: build.bazel.remote.asset.v1.PushBlobRequest.expire_at:type_name -> google.protobuf.Timestamp + 13, // 20: build.bazel.remote.asset.v1.PushBlobRequest.blob_digest:type_name -> build.bazel.remote.execution.v2.Digest + 13, // 21: build.bazel.remote.asset.v1.PushBlobRequest.references_blobs:type_name -> build.bazel.remote.execution.v2.Digest + 13, // 22: build.bazel.remote.asset.v1.PushBlobRequest.references_directories:type_name -> build.bazel.remote.execution.v2.Digest + 11, // 23: build.bazel.remote.asset.v1.PushBlobRequest.digest_function:type_name -> build.bazel.remote.execution.v2.DigestFunction.Value + 0, // 24: build.bazel.remote.asset.v1.PushDirectoryRequest.qualifiers:type_name -> build.bazel.remote.asset.v1.Qualifier + 10, // 25: build.bazel.remote.asset.v1.PushDirectoryRequest.expire_at:type_name -> google.protobuf.Timestamp + 13, // 26: build.bazel.remote.asset.v1.PushDirectoryRequest.root_directory_digest:type_name -> build.bazel.remote.execution.v2.Digest + 13, // 27: build.bazel.remote.asset.v1.PushDirectoryRequest.references_blobs:type_name -> build.bazel.remote.execution.v2.Digest + 13, // 28: build.bazel.remote.asset.v1.PushDirectoryRequest.references_directories:type_name -> build.bazel.remote.execution.v2.Digest + 11, // 29: build.bazel.remote.asset.v1.PushDirectoryRequest.digest_function:type_name -> build.bazel.remote.execution.v2.DigestFunction.Value + 1, // 30: build.bazel.remote.asset.v1.Fetch.FetchBlob:input_type -> build.bazel.remote.asset.v1.FetchBlobRequest + 3, // 31: build.bazel.remote.asset.v1.Fetch.FetchDirectory:input_type -> build.bazel.remote.asset.v1.FetchDirectoryRequest + 5, // 32: build.bazel.remote.asset.v1.Push.PushBlob:input_type -> build.bazel.remote.asset.v1.PushBlobRequest + 7, // 33: build.bazel.remote.asset.v1.Push.PushDirectory:input_type -> build.bazel.remote.asset.v1.PushDirectoryRequest + 2, // 34: build.bazel.remote.asset.v1.Fetch.FetchBlob:output_type -> build.bazel.remote.asset.v1.FetchBlobResponse + 4, // 35: build.bazel.remote.asset.v1.Fetch.FetchDirectory:output_type -> build.bazel.remote.asset.v1.FetchDirectoryResponse + 6, // 36: build.bazel.remote.asset.v1.Push.PushBlob:output_type -> build.bazel.remote.asset.v1.PushBlobResponse + 8, // 37: build.bazel.remote.asset.v1.Push.PushDirectory:output_type -> build.bazel.remote.asset.v1.PushDirectoryResponse + 34, // [34:38] is the sub-list for method output_type + 30, // [30:34] is the sub-list for method input_type + 30, // [30:30] is the sub-list for extension type_name + 30, // [30:30] is the sub-list for extension extendee + 0, // [0:30] is the sub-list for field type_name +} + +func init() { file_build_bazel_remote_asset_v1_remote_asset_proto_init() } +func file_build_bazel_remote_asset_v1_remote_asset_proto_init() { + if File_build_bazel_remote_asset_v1_remote_asset_proto != nil { + return } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PushServer).PushDirectory(ctx, req.(*PushDirectoryRequest)) + if !protoimpl.UnsafeEnabled { + file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[0].Exporter = func(v any, i int) any { + switch v := v.(*Qualifier); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[1].Exporter = func(v any, i int) any { + switch v := v.(*FetchBlobRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[2].Exporter = func(v any, i int) any { + switch v := v.(*FetchBlobResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[3].Exporter = func(v any, i int) any { + switch v := v.(*FetchDirectoryRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[4].Exporter = func(v any, i int) any { + switch v := v.(*FetchDirectoryResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[5].Exporter = func(v any, i int) any { + switch v := v.(*PushBlobRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[6].Exporter = func(v any, i int) any { + switch v := v.(*PushBlobResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[7].Exporter = func(v any, i int) any { + switch v := v.(*PushDirectoryRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[8].Exporter = func(v any, i int) any { + switch v := v.(*PushDirectoryResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } - return interceptor(ctx, in, info, handler) -} - -var _Push_serviceDesc = grpc.ServiceDesc{ - ServiceName: "build.bazel.remote.asset.v1.Push", - HandlerType: (*PushServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "PushBlob", - Handler: _Push_PushBlob_Handler, - }, - { - MethodName: "PushDirectory", - Handler: _Push_PushDirectory_Handler, + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_build_bazel_remote_asset_v1_remote_asset_proto_rawDesc, + NumEnums: 0, + NumMessages: 9, + NumExtensions: 0, + NumServices: 2, }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "build/bazel/remote/asset/v1/remote_asset.proto", + GoTypes: file_build_bazel_remote_asset_v1_remote_asset_proto_goTypes, + DependencyIndexes: file_build_bazel_remote_asset_v1_remote_asset_proto_depIdxs, + MessageInfos: file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes, + }.Build() + File_build_bazel_remote_asset_v1_remote_asset_proto = out.File + file_build_bazel_remote_asset_v1_remote_asset_proto_rawDesc = nil + file_build_bazel_remote_asset_v1_remote_asset_proto_goTypes = nil + file_build_bazel_remote_asset_v1_remote_asset_proto_depIdxs = nil } diff --git a/genproto/build/bazel/remote/asset/v1/remote_asset_grpc.pb.go b/genproto/build/bazel/remote/asset/v1/remote_asset_grpc.pb.go new file mode 100755 index 000000000..b99fd66c2 --- /dev/null +++ b/genproto/build/bazel/remote/asset/v1/remote_asset_grpc.pb.go @@ -0,0 +1,465 @@ +// Copyright 2020 The Bazel Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v5.28.1 +// source: build/bazel/remote/asset/v1/remote_asset.proto + +package remoteasset + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + Fetch_FetchBlob_FullMethodName = "/build.bazel.remote.asset.v1.Fetch/FetchBlob" + Fetch_FetchDirectory_FullMethodName = "/build.bazel.remote.asset.v1.Fetch/FetchDirectory" +) + +// FetchClient is the client API for Fetch service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type FetchClient interface { + // Resolve or fetch referenced assets, making them available to the caller and + // other consumers in the [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage]. + // + // Servers *MAY* fetch content that they do not already have cached, for any + // URLs they support. + // + // Servers *SHOULD* ensure that referenced files are present in the CAS at the + // time of the response, and (if supported) that they will remain available + // for a reasonable period of time. The lifetimes of the referenced blobs *SHOULD* + // be increased if necessary and applicable. + // In the event that a client receives a reference to content that is no + // longer present, it *MAY* re-issue the request with + // `oldest_content_accepted` set to a more recent timestamp than the original + // attempt, to induce a re-fetch from origin. + // + // Servers *MAY* cache fetched content and reuse it for subsequent requests, + // subject to `oldest_content_accepted`. + // + // Servers *MAY* support the complementary [Push][build.bazel.remote.asset.v1.Push] + // API and allow content to be directly inserted for use in future fetch + // responses. + // + // Servers *MUST* ensure Fetch'd content matches all the specified + // qualifiers except in the case of previously Push'd resources, for which + // the server *MAY* trust the pushing client to have set the qualifiers + // correctly, without validation. + // + // Servers not implementing the complementary [Push][build.bazel.remote.asset.v1.Push] + // API *MUST* reject requests containing qualifiers it does not support. + // + // Servers *MAY* transform assets as part of the fetch. For example a + // tarball fetched by [FetchDirectory][build.bazel.remote.asset.v1.Fetch.FetchDirectory] + // might be unpacked, or a Git repository + // fetched by [FetchBlob][build.bazel.remote.asset.v1.Fetch.FetchBlob] + // might be passed through `git-archive`. + // + // Errors handling the requested assets will be returned as gRPC Status errors + // here; errors outside the server's control will be returned inline in the + // `status` field of the response (see comment there for details). + // The possible RPC errors include: + // - `INVALID_ARGUMENT`: One or more arguments were invalid, such as a + // qualifier that is not supported by the server. + // - `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to + // perform the requested operation. The client may retry after a delay. + // - `UNAVAILABLE`: Due to a transient condition the operation could not be + // completed. The client should retry. + // - `INTERNAL`: An internal error occurred while performing the operation. + // The client should retry. + // - `DEADLINE_EXCEEDED`: The fetch could not be completed within the given + // RPC deadline. The client should retry for at least as long as the value + // provided in `timeout` field of the request. + // + // In the case of unsupported qualifiers, the server *SHOULD* additionally + // send a [BadRequest][google.rpc.BadRequest] error detail where, for each + // unsupported qualifier, there is a `FieldViolation` with a `field` of + // `qualifiers.name` and a `description` of `"{qualifier}" not supported` + // indicating the name of the unsupported qualifier. + FetchBlob(ctx context.Context, in *FetchBlobRequest, opts ...grpc.CallOption) (*FetchBlobResponse, error) + FetchDirectory(ctx context.Context, in *FetchDirectoryRequest, opts ...grpc.CallOption) (*FetchDirectoryResponse, error) +} + +type fetchClient struct { + cc grpc.ClientConnInterface +} + +func NewFetchClient(cc grpc.ClientConnInterface) FetchClient { + return &fetchClient{cc} +} + +func (c *fetchClient) FetchBlob(ctx context.Context, in *FetchBlobRequest, opts ...grpc.CallOption) (*FetchBlobResponse, error) { + out := new(FetchBlobResponse) + err := c.cc.Invoke(ctx, Fetch_FetchBlob_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *fetchClient) FetchDirectory(ctx context.Context, in *FetchDirectoryRequest, opts ...grpc.CallOption) (*FetchDirectoryResponse, error) { + out := new(FetchDirectoryResponse) + err := c.cc.Invoke(ctx, Fetch_FetchDirectory_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// FetchServer is the server API for Fetch service. +// All implementations should embed UnimplementedFetchServer +// for forward compatibility +type FetchServer interface { + // Resolve or fetch referenced assets, making them available to the caller and + // other consumers in the [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage]. + // + // Servers *MAY* fetch content that they do not already have cached, for any + // URLs they support. + // + // Servers *SHOULD* ensure that referenced files are present in the CAS at the + // time of the response, and (if supported) that they will remain available + // for a reasonable period of time. The lifetimes of the referenced blobs *SHOULD* + // be increased if necessary and applicable. + // In the event that a client receives a reference to content that is no + // longer present, it *MAY* re-issue the request with + // `oldest_content_accepted` set to a more recent timestamp than the original + // attempt, to induce a re-fetch from origin. + // + // Servers *MAY* cache fetched content and reuse it for subsequent requests, + // subject to `oldest_content_accepted`. + // + // Servers *MAY* support the complementary [Push][build.bazel.remote.asset.v1.Push] + // API and allow content to be directly inserted for use in future fetch + // responses. + // + // Servers *MUST* ensure Fetch'd content matches all the specified + // qualifiers except in the case of previously Push'd resources, for which + // the server *MAY* trust the pushing client to have set the qualifiers + // correctly, without validation. + // + // Servers not implementing the complementary [Push][build.bazel.remote.asset.v1.Push] + // API *MUST* reject requests containing qualifiers it does not support. + // + // Servers *MAY* transform assets as part of the fetch. For example a + // tarball fetched by [FetchDirectory][build.bazel.remote.asset.v1.Fetch.FetchDirectory] + // might be unpacked, or a Git repository + // fetched by [FetchBlob][build.bazel.remote.asset.v1.Fetch.FetchBlob] + // might be passed through `git-archive`. + // + // Errors handling the requested assets will be returned as gRPC Status errors + // here; errors outside the server's control will be returned inline in the + // `status` field of the response (see comment there for details). + // The possible RPC errors include: + // - `INVALID_ARGUMENT`: One or more arguments were invalid, such as a + // qualifier that is not supported by the server. + // - `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to + // perform the requested operation. The client may retry after a delay. + // - `UNAVAILABLE`: Due to a transient condition the operation could not be + // completed. The client should retry. + // - `INTERNAL`: An internal error occurred while performing the operation. + // The client should retry. + // - `DEADLINE_EXCEEDED`: The fetch could not be completed within the given + // RPC deadline. The client should retry for at least as long as the value + // provided in `timeout` field of the request. + // + // In the case of unsupported qualifiers, the server *SHOULD* additionally + // send a [BadRequest][google.rpc.BadRequest] error detail where, for each + // unsupported qualifier, there is a `FieldViolation` with a `field` of + // `qualifiers.name` and a `description` of `"{qualifier}" not supported` + // indicating the name of the unsupported qualifier. + FetchBlob(context.Context, *FetchBlobRequest) (*FetchBlobResponse, error) + FetchDirectory(context.Context, *FetchDirectoryRequest) (*FetchDirectoryResponse, error) +} + +// UnimplementedFetchServer should be embedded to have forward compatible implementations. +type UnimplementedFetchServer struct { +} + +func (UnimplementedFetchServer) FetchBlob(context.Context, *FetchBlobRequest) (*FetchBlobResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method FetchBlob not implemented") +} +func (UnimplementedFetchServer) FetchDirectory(context.Context, *FetchDirectoryRequest) (*FetchDirectoryResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method FetchDirectory not implemented") +} + +// UnsafeFetchServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to FetchServer will +// result in compilation errors. +type UnsafeFetchServer interface { + mustEmbedUnimplementedFetchServer() +} + +func RegisterFetchServer(s grpc.ServiceRegistrar, srv FetchServer) { + s.RegisterService(&Fetch_ServiceDesc, srv) +} + +func _Fetch_FetchBlob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(FetchBlobRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FetchServer).FetchBlob(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Fetch_FetchBlob_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FetchServer).FetchBlob(ctx, req.(*FetchBlobRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Fetch_FetchDirectory_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(FetchDirectoryRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FetchServer).FetchDirectory(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Fetch_FetchDirectory_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FetchServer).FetchDirectory(ctx, req.(*FetchDirectoryRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// Fetch_ServiceDesc is the grpc.ServiceDesc for Fetch service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Fetch_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "build.bazel.remote.asset.v1.Fetch", + HandlerType: (*FetchServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "FetchBlob", + Handler: _Fetch_FetchBlob_Handler, + }, + { + MethodName: "FetchDirectory", + Handler: _Fetch_FetchDirectory_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "build/bazel/remote/asset/v1/remote_asset.proto", +} + +const ( + Push_PushBlob_FullMethodName = "/build.bazel.remote.asset.v1.Push/PushBlob" + Push_PushDirectory_FullMethodName = "/build.bazel.remote.asset.v1.Push/PushDirectory" +) + +// PushClient is the client API for Push service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type PushClient interface { + // These APIs associate the identifying information of a resource, as + // indicated by URI and optionally Qualifiers, with content available in the + // CAS. For example, associating a repository url and a commit id with a + // Directory Digest. + // + // Servers *SHOULD* only allow trusted clients to associate content, and *MAY* + // only allow certain URIs to be pushed. + // + // Clients *MUST* ensure associated content is available in CAS prior to + // pushing. + // + // Clients *MUST* ensure the Qualifiers listed correctly match the contents, + // and Servers *MAY* trust these values without validation. + // Fetch servers *MAY* require exact match of all qualifiers when returning + // content previously pushed, or allow fetching content with only a subset of + // the qualifiers specified on Push. + // + // Clients can specify expiration information that the server *SHOULD* + // respect. Subsequent requests can be used to alter the expiration time. + // + // A minimal compliant Fetch implementation may support only Push'd content + // and return `NOT_FOUND` for any resource that was not pushed first. + // Alternatively, a compliant implementation may choose to not support Push + // and only return resources that can be Fetch'd from origin. + // + // Errors will be returned as gRPC Status errors. + // The possible RPC errors include: + // - `INVALID_ARGUMENT`: One or more arguments to the RPC were invalid. + // - `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to + // perform the requested operation. The client may retry after a delay. + // - `UNAVAILABLE`: Due to a transient condition the operation could not be + // completed. The client should retry. + // - `INTERNAL`: An internal error occurred while performing the operation. + // The client should retry. + PushBlob(ctx context.Context, in *PushBlobRequest, opts ...grpc.CallOption) (*PushBlobResponse, error) + PushDirectory(ctx context.Context, in *PushDirectoryRequest, opts ...grpc.CallOption) (*PushDirectoryResponse, error) +} + +type pushClient struct { + cc grpc.ClientConnInterface +} + +func NewPushClient(cc grpc.ClientConnInterface) PushClient { + return &pushClient{cc} +} + +func (c *pushClient) PushBlob(ctx context.Context, in *PushBlobRequest, opts ...grpc.CallOption) (*PushBlobResponse, error) { + out := new(PushBlobResponse) + err := c.cc.Invoke(ctx, Push_PushBlob_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *pushClient) PushDirectory(ctx context.Context, in *PushDirectoryRequest, opts ...grpc.CallOption) (*PushDirectoryResponse, error) { + out := new(PushDirectoryResponse) + err := c.cc.Invoke(ctx, Push_PushDirectory_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// PushServer is the server API for Push service. +// All implementations should embed UnimplementedPushServer +// for forward compatibility +type PushServer interface { + // These APIs associate the identifying information of a resource, as + // indicated by URI and optionally Qualifiers, with content available in the + // CAS. For example, associating a repository url and a commit id with a + // Directory Digest. + // + // Servers *SHOULD* only allow trusted clients to associate content, and *MAY* + // only allow certain URIs to be pushed. + // + // Clients *MUST* ensure associated content is available in CAS prior to + // pushing. + // + // Clients *MUST* ensure the Qualifiers listed correctly match the contents, + // and Servers *MAY* trust these values without validation. + // Fetch servers *MAY* require exact match of all qualifiers when returning + // content previously pushed, or allow fetching content with only a subset of + // the qualifiers specified on Push. + // + // Clients can specify expiration information that the server *SHOULD* + // respect. Subsequent requests can be used to alter the expiration time. + // + // A minimal compliant Fetch implementation may support only Push'd content + // and return `NOT_FOUND` for any resource that was not pushed first. + // Alternatively, a compliant implementation may choose to not support Push + // and only return resources that can be Fetch'd from origin. + // + // Errors will be returned as gRPC Status errors. + // The possible RPC errors include: + // - `INVALID_ARGUMENT`: One or more arguments to the RPC were invalid. + // - `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to + // perform the requested operation. The client may retry after a delay. + // - `UNAVAILABLE`: Due to a transient condition the operation could not be + // completed. The client should retry. + // - `INTERNAL`: An internal error occurred while performing the operation. + // The client should retry. + PushBlob(context.Context, *PushBlobRequest) (*PushBlobResponse, error) + PushDirectory(context.Context, *PushDirectoryRequest) (*PushDirectoryResponse, error) +} + +// UnimplementedPushServer should be embedded to have forward compatible implementations. +type UnimplementedPushServer struct { +} + +func (UnimplementedPushServer) PushBlob(context.Context, *PushBlobRequest) (*PushBlobResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method PushBlob not implemented") +} +func (UnimplementedPushServer) PushDirectory(context.Context, *PushDirectoryRequest) (*PushDirectoryResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method PushDirectory not implemented") +} + +// UnsafePushServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to PushServer will +// result in compilation errors. +type UnsafePushServer interface { + mustEmbedUnimplementedPushServer() +} + +func RegisterPushServer(s grpc.ServiceRegistrar, srv PushServer) { + s.RegisterService(&Push_ServiceDesc, srv) +} + +func _Push_PushBlob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PushBlobRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PushServer).PushBlob(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Push_PushBlob_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PushServer).PushBlob(ctx, req.(*PushBlobRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Push_PushDirectory_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PushDirectoryRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PushServer).PushDirectory(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Push_PushDirectory_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PushServer).PushDirectory(ctx, req.(*PushDirectoryRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// Push_ServiceDesc is the grpc.ServiceDesc for Push service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Push_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "build.bazel.remote.asset.v1.Push", + HandlerType: (*PushServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "PushBlob", + Handler: _Push_PushBlob_Handler, + }, + { + MethodName: "PushDirectory", + Handler: _Push_PushDirectory_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "build/bazel/remote/asset/v1/remote_asset.proto", +} diff --git a/genproto/build/bazel/remote/execution/v2/BUILD.bazel b/genproto/build/bazel/remote/execution/v2/BUILD.bazel index cf8e7eb29..a598f1d4d 100644 --- a/genproto/build/bazel/remote/execution/v2/BUILD.bazel +++ b/genproto/build/bazel/remote/execution/v2/BUILD.bazel @@ -2,17 +2,15 @@ load("@rules_go//go:def.bzl", "go_library") go_library( name = "go_default_library", - srcs = ["remote_execution.pb.go"], + srcs = [ + "remote_execution.pb.go", + "remote_execution_grpc.pb.go", + ], importpath = "github.com/buchgr/bazel-remote/v2/genproto/build/bazel/remote/execution/v2", visibility = ["//visibility:public"], deps = [ "//genproto/build/bazel/semver:go_default_library", - "@com_github_golang_protobuf//proto:go_default_library", - "@com_github_golang_protobuf//ptypes/any:go_default_library", - "@com_github_golang_protobuf//ptypes/duration:go_default_library", - "@com_github_golang_protobuf//ptypes/timestamp:go_default_library", - "@com_github_golang_protobuf//ptypes/wrappers:go_default_library", - "@org_golang_google_genproto//googleapis/longrunning:go_default_library", + "@com_google_cloud_go_longrunning//autogen/longrunningpb:go_default_library", "@org_golang_google_genproto_googleapis_api//annotations:go_default_library", "@org_golang_google_genproto_googleapis_rpc//status:go_default_library", "@org_golang_google_grpc//:go_default_library", @@ -20,5 +18,9 @@ go_library( "@org_golang_google_grpc//status:go_default_library", "@org_golang_google_protobuf//reflect/protoreflect:go_default_library", "@org_golang_google_protobuf//runtime/protoimpl:go_default_library", + "@org_golang_google_protobuf//types/known/anypb:go_default_library", + "@org_golang_google_protobuf//types/known/durationpb:go_default_library", + "@org_golang_google_protobuf//types/known/timestamppb:go_default_library", + "@org_golang_google_protobuf//types/known/wrapperspb:go_default_library", ], ) diff --git a/genproto/build/bazel/remote/execution/v2/remote_execution.pb.go b/genproto/build/bazel/remote/execution/v2/remote_execution.pb.go index 00b5a89b2..cc6fb9422 100755 --- a/genproto/build/bazel/remote/execution/v2/remote_execution.pb.go +++ b/genproto/build/bazel/remote/execution/v2/remote_execution.pb.go @@ -14,28 +14,23 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0 -// protoc v3.10.1 +// protoc-gen-go v1.34.2 +// protoc v5.28.1 // source: build/bazel/remote/execution/v2/remote_execution.proto package remoteexecution import ( - context "context" + longrunningpb "cloud.google.com/go/longrunning/autogen/longrunningpb" semver "github.com/buchgr/bazel-remote/v2/genproto/build/bazel/semver" - proto "github.com/golang/protobuf/proto" - any "github.com/golang/protobuf/ptypes/any" - duration "github.com/golang/protobuf/ptypes/duration" - timestamp "github.com/golang/protobuf/ptypes/timestamp" - wrappers "github.com/golang/protobuf/ptypes/wrappers" _ "google.golang.org/genproto/googleapis/api/annotations" - longrunning "google.golang.org/genproto/googleapis/longrunning" status "google.golang.org/genproto/googleapis/rpc/status" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status1 "google.golang.org/grpc/status" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + anypb "google.golang.org/protobuf/types/known/anypb" + durationpb "google.golang.org/protobuf/types/known/durationpb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" reflect "reflect" sync "sync" ) @@ -47,9 +42,63 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 +type Command_OutputDirectoryFormat int32 + +const ( + // The client is only interested in receiving output directories in + // the form of a single Tree object, using the `tree_digest` field. + Command_TREE_ONLY Command_OutputDirectoryFormat = 0 + // The client is only interested in receiving output directories in + // the form of a hierarchy of separately stored Directory objects, + // using the `root_directory_digest` field. + Command_DIRECTORY_ONLY Command_OutputDirectoryFormat = 1 + // The client is interested in receiving output directories both in + // the form of a single Tree object and a hierarchy of separately + // stored Directory objects, using both the `tree_digest` and + // `root_directory_digest` fields. + Command_TREE_AND_DIRECTORY Command_OutputDirectoryFormat = 2 +) + +// Enum value maps for Command_OutputDirectoryFormat. +var ( + Command_OutputDirectoryFormat_name = map[int32]string{ + 0: "TREE_ONLY", + 1: "DIRECTORY_ONLY", + 2: "TREE_AND_DIRECTORY", + } + Command_OutputDirectoryFormat_value = map[string]int32{ + "TREE_ONLY": 0, + "DIRECTORY_ONLY": 1, + "TREE_AND_DIRECTORY": 2, + } +) + +func (x Command_OutputDirectoryFormat) Enum() *Command_OutputDirectoryFormat { + p := new(Command_OutputDirectoryFormat) + *p = x + return p +} + +func (x Command_OutputDirectoryFormat) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Command_OutputDirectoryFormat) Descriptor() protoreflect.EnumDescriptor { + return file_build_bazel_remote_execution_v2_remote_execution_proto_enumTypes[0].Descriptor() +} + +func (Command_OutputDirectoryFormat) Type() protoreflect.EnumType { + return &file_build_bazel_remote_execution_v2_remote_execution_proto_enumTypes[0] +} + +func (x Command_OutputDirectoryFormat) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Command_OutputDirectoryFormat.Descriptor instead. +func (Command_OutputDirectoryFormat) EnumDescriptor() ([]byte, []int) { + return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{1, 0} +} type ExecutionStage_Value int32 @@ -95,11 +144,11 @@ func (x ExecutionStage_Value) String() string { } func (ExecutionStage_Value) Descriptor() protoreflect.EnumDescriptor { - return file_build_bazel_remote_execution_v2_remote_execution_proto_enumTypes[0].Descriptor() + return file_build_bazel_remote_execution_v2_remote_execution_proto_enumTypes[1].Descriptor() } func (ExecutionStage_Value) Type() protoreflect.EnumType { - return &file_build_bazel_remote_execution_v2_remote_execution_proto_enumTypes[0] + return &file_build_bazel_remote_execution_v2_remote_execution_proto_enumTypes[1] } func (x ExecutionStage_Value) Number() protoreflect.EnumNumber { @@ -133,6 +182,64 @@ const ( // cryptographic hash function and its collision properties are not strongly guaranteed. // See https://github.com/aappleby/smhasher/wiki/MurmurHash3 . DigestFunction_MURMUR3 DigestFunction_Value = 7 + // The SHA-256 digest function, modified to use a Merkle tree for + // large objects. This permits implementations to store large blobs + // as a decomposed sequence of 2^j sized chunks, where j >= 10, + // while being able to validate integrity at the chunk level. + // + // Furthermore, on systems that do not offer dedicated instructions + // for computing SHA-256 hashes (e.g., the Intel SHA and ARMv8 + // cryptographic extensions), SHA256TREE hashes can be computed more + // efficiently than plain SHA-256 hashes by using generic SIMD + // extensions, such as Intel AVX2 or ARM NEON. + // + // SHA256TREE hashes are computed as follows: + // + // - For blobs that are 1024 bytes or smaller, the hash is computed + // using the regular SHA-256 digest function. + // + // - For blobs that are more than 1024 bytes in size, the hash is + // computed as follows: + // + // 1. The blob is partitioned into a left (leading) and right + // (trailing) blob. These blobs have lengths m and n + // respectively, where m = 2^k and 0 < n <= m. + // + // 2. Hashes of the left and right blob, Hash(left) and + // Hash(right) respectively, are computed by recursively + // applying the SHA256TREE algorithm. + // + // 3. A single invocation is made to the SHA-256 block cipher with + // the following parameters: + // + // M = Hash(left) || Hash(right) + // H = { + // 0xcbbb9d5d, 0x629a292a, 0x9159015a, 0x152fecd8, + // 0x67332667, 0x8eb44a87, 0xdb0c2e0d, 0x47b5481d, + // } + // + // The values of H are the leading fractional parts of the + // square roots of the 9th to the 16th prime number (23 to 53). + // This differs from plain SHA-256, where the first eight prime + // numbers (2 to 19) are used, thereby preventing trivial hash + // collisions between small and large objects. + // + // 4. The hash of the full blob can then be obtained by + // concatenating the outputs of the block cipher: + // + // Hash(blob) = a || b || c || d || e || f || g || h + // + // Addition of the original values of H, as normally done + // through the use of the Davies-Meyer structure, is not + // performed. This isn't necessary, as the block cipher is only + // invoked once. + // + // Test vectors of this digest function can be found in the + // accompanying sha256tree_test_vectors.txt file. + DigestFunction_SHA256TREE DigestFunction_Value = 8 + // The BLAKE3 hash function. + // See https://github.com/BLAKE3-team/BLAKE3. + DigestFunction_BLAKE3 DigestFunction_Value = 9 ) // Enum value maps for DigestFunction_Value. @@ -146,16 +253,20 @@ var ( 5: "SHA384", 6: "SHA512", 7: "MURMUR3", + 8: "SHA256TREE", + 9: "BLAKE3", } DigestFunction_Value_value = map[string]int32{ - "UNKNOWN": 0, - "SHA256": 1, - "SHA1": 2, - "MD5": 3, - "VSO": 4, - "SHA384": 5, - "SHA512": 6, - "MURMUR3": 7, + "UNKNOWN": 0, + "SHA256": 1, + "SHA1": 2, + "MD5": 3, + "VSO": 4, + "SHA384": 5, + "SHA512": 6, + "MURMUR3": 7, + "SHA256TREE": 8, + "BLAKE3": 9, } ) @@ -170,11 +281,11 @@ func (x DigestFunction_Value) String() string { } func (DigestFunction_Value) Descriptor() protoreflect.EnumDescriptor { - return file_build_bazel_remote_execution_v2_remote_execution_proto_enumTypes[1].Descriptor() + return file_build_bazel_remote_execution_v2_remote_execution_proto_enumTypes[2].Descriptor() } func (DigestFunction_Value) Type() protoreflect.EnumType { - return &file_build_bazel_remote_execution_v2_remote_execution_proto_enumTypes[1] + return &file_build_bazel_remote_execution_v2_remote_execution_proto_enumTypes[2] } func (x DigestFunction_Value) Number() protoreflect.EnumNumber { @@ -226,11 +337,11 @@ func (x SymlinkAbsolutePathStrategy_Value) String() string { } func (SymlinkAbsolutePathStrategy_Value) Descriptor() protoreflect.EnumDescriptor { - return file_build_bazel_remote_execution_v2_remote_execution_proto_enumTypes[2].Descriptor() + return file_build_bazel_remote_execution_v2_remote_execution_proto_enumTypes[3].Descriptor() } func (SymlinkAbsolutePathStrategy_Value) Type() protoreflect.EnumType { - return &file_build_bazel_remote_execution_v2_remote_execution_proto_enumTypes[2] + return &file_build_bazel_remote_execution_v2_remote_execution_proto_enumTypes[3] } func (x SymlinkAbsolutePathStrategy_Value) Number() protoreflect.EnumNumber { @@ -257,6 +368,8 @@ const ( // It is advised to use algorithms such as Zstandard instead, as // those are faster and/or provide a better compression ratio. Compressor_DEFLATE Compressor_Value = 2 + // Brotli compression. + Compressor_BROTLI Compressor_Value = 3 ) // Enum value maps for Compressor_Value. @@ -265,11 +378,13 @@ var ( 0: "IDENTITY", 1: "ZSTD", 2: "DEFLATE", + 3: "BROTLI", } Compressor_Value_value = map[string]int32{ "IDENTITY": 0, "ZSTD": 1, "DEFLATE": 2, + "BROTLI": 3, } ) @@ -284,11 +399,11 @@ func (x Compressor_Value) String() string { } func (Compressor_Value) Descriptor() protoreflect.EnumDescriptor { - return file_build_bazel_remote_execution_v2_remote_execution_proto_enumTypes[3].Descriptor() + return file_build_bazel_remote_execution_v2_remote_execution_proto_enumTypes[4].Descriptor() } func (Compressor_Value) Type() protoreflect.EnumType { - return &file_build_bazel_remote_execution_v2_remote_execution_proto_enumTypes[3] + return &file_build_bazel_remote_execution_v2_remote_execution_proto_enumTypes[4] } func (x Compressor_Value) Number() protoreflect.EnumNumber { @@ -362,7 +477,7 @@ type Action struct { // timeout is too short. By encoding it directly in the `Action`, a lower // timeout will result in a cache miss and the execution timeout will fail // immediately, rather than whenever the cache entry gets evicted. - Timeout *duration.Duration `protobuf:"bytes,6,opt,name=timeout,proto3" json:"timeout,omitempty"` + Timeout *durationpb.Duration `protobuf:"bytes,6,opt,name=timeout,proto3" json:"timeout,omitempty"` // If true, then the `Action`'s result cannot be cached, and in-flight // requests for the same `Action` may not be merged. DoNotCache bool `protobuf:"varint,7,opt,name=do_not_cache,json=doNotCache,proto3" json:"do_not_cache,omitempty"` @@ -430,7 +545,7 @@ func (x *Action) GetInputRootDigest() *Digest { return nil } -func (x *Action) GetTimeout() *duration.Duration { +func (x *Action) GetTimeout() *durationpb.Duration { if x != nil { return x.Timeout } @@ -470,9 +585,21 @@ type Command struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The arguments to the command. The first argument must be the path to the - // executable, which must be either a relative path, in which case it is - // evaluated with respect to the input root, or an absolute path. + // The arguments to the command. + // + // The first argument specifies the command to run, which may be either an + // absolute path, a path relative to the working directory, or an unqualified + // path (without path separators) which will be resolved using the operating + // system's equivalent of the PATH environment variable. Path separators + // native to the operating system running on the worker SHOULD be used. If the + // `environment_variables` list contains an entry for the PATH environment + // variable, it SHOULD be respected. If not, the resolution process is + // implementation-defined. + // + // Changed in v2.3. v2.2 and older require that no PATH lookups are performed, + // and that relative paths are resolved relative to the input root. This + // behavior can, however, not be relied upon, as most implementations already + // followed the rules described above. Arguments []string `protobuf:"bytes,1,rep,name=arguments,proto3" json:"arguments,omitempty"` // The environment variables to set when running the program. The worker may // provide its own default environment variables; these defaults can be @@ -506,6 +633,8 @@ type Command struct { // to execution, even if they are not explicitly part of the input root. // // DEPRECATED since v2.1: Use `output_paths` instead. + // + // Deprecated: Marked as deprecated in build/bazel/remote/execution/v2/remote_execution.proto. OutputFiles []string `protobuf:"bytes,3,rep,name=output_files,json=outputFiles,proto3" json:"output_files,omitempty"` // A list of the output directories that the client expects to retrieve from // the action. Only the listed directories will be returned (an entire @@ -536,6 +665,8 @@ type Command struct { // if they are not explicitly part of the input root. // // DEPRECATED since 2.1: Use `output_paths` instead. + // + // Deprecated: Marked as deprecated in build/bazel/remote/execution/v2/remote_execution.proto. OutputDirectories []string `protobuf:"bytes,4,rep,name=output_directories,json=outputDirectories,proto3" json:"output_directories,omitempty"` // A list of the output paths that the client expects to retrieve from the // action. Only the listed paths will be returned to the client as output. @@ -574,6 +705,8 @@ type Command struct { // DEPRECATED as of v2.2: platform properties are now specified directly in // the action. See documentation note in the // [Action][build.bazel.remote.execution.v2.Action] for migration. + // + // Deprecated: Marked as deprecated in build/bazel/remote/execution/v2/remote_execution.proto. Platform *Platform `protobuf:"bytes,5,opt,name=platform,proto3" json:"platform,omitempty"` // The working directory, relative to the input root, for the command to run // in. It must be a directory which exists in the input tree. If it is left @@ -591,6 +724,15 @@ type Command struct { // property is not recognized by the server, the server will return an // `INVALID_ARGUMENT`. OutputNodeProperties []string `protobuf:"bytes,8,rep,name=output_node_properties,json=outputNodeProperties,proto3" json:"output_node_properties,omitempty"` + // The format that the worker should use to store the contents of + // output directories. + // + // In case this field is set to a value that is not supported by the + // worker, the worker SHOULD interpret this field as TREE_ONLY. The + // worker MAY store output directories in formats that are a superset + // of what was requested (e.g., interpreting DIRECTORY_ONLY as + // TREE_AND_DIRECTORY). + OutputDirectoryFormat Command_OutputDirectoryFormat `protobuf:"varint,9,opt,name=output_directory_format,json=outputDirectoryFormat,proto3,enum=build.bazel.remote.execution.v2.Command_OutputDirectoryFormat" json:"output_directory_format,omitempty"` } func (x *Command) Reset() { @@ -639,6 +781,7 @@ func (x *Command) GetEnvironmentVariables() []*Command_EnvironmentVariable { return nil } +// Deprecated: Marked as deprecated in build/bazel/remote/execution/v2/remote_execution.proto. func (x *Command) GetOutputFiles() []string { if x != nil { return x.OutputFiles @@ -646,6 +789,7 @@ func (x *Command) GetOutputFiles() []string { return nil } +// Deprecated: Marked as deprecated in build/bazel/remote/execution/v2/remote_execution.proto. func (x *Command) GetOutputDirectories() []string { if x != nil { return x.OutputDirectories @@ -660,6 +804,7 @@ func (x *Command) GetOutputPaths() []string { return nil } +// Deprecated: Marked as deprecated in build/bazel/remote/execution/v2/remote_execution.proto. func (x *Command) GetPlatform() *Platform { if x != nil { return x.Platform @@ -681,6 +826,13 @@ func (x *Command) GetOutputNodeProperties() []string { return nil } +func (x *Command) GetOutputDirectoryFormat() Command_OutputDirectoryFormat { + if x != nil { + return x.OutputDirectoryFormat + } + return Command_TREE_ONLY +} + // A `Platform` is a set of requirements, such as hardware, operating system, or // compiler toolchain, for an // [Action][build.bazel.remote.execution.v2.Action]'s execution @@ -965,9 +1117,9 @@ type NodeProperties struct { // [NodeProperties][build.bazel.remote.execution.v2.NodeProperty]. Properties []*NodeProperty `protobuf:"bytes,1,rep,name=properties,proto3" json:"properties,omitempty"` // The file's last modification timestamp. - Mtime *timestamp.Timestamp `protobuf:"bytes,2,opt,name=mtime,proto3" json:"mtime,omitempty"` + Mtime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=mtime,proto3" json:"mtime,omitempty"` // The UNIX file mode, e.g., 0755. - UnixMode *wrappers.UInt32Value `protobuf:"bytes,3,opt,name=unix_mode,json=unixMode,proto3" json:"unix_mode,omitempty"` + UnixMode *wrapperspb.UInt32Value `protobuf:"bytes,3,opt,name=unix_mode,json=unixMode,proto3" json:"unix_mode,omitempty"` } func (x *NodeProperties) Reset() { @@ -1009,14 +1161,14 @@ func (x *NodeProperties) GetProperties() []*NodeProperty { return nil } -func (x *NodeProperties) GetMtime() *timestamp.Timestamp { +func (x *NodeProperties) GetMtime() *timestamppb.Timestamp { if x != nil { return x.Mtime } return nil } -func (x *NodeProperties) GetUnixMode() *wrappers.UInt32Value { +func (x *NodeProperties) GetUnixMode() *wrapperspb.UInt32Value { if x != nil { return x.UnixMode } @@ -1271,8 +1423,8 @@ type Digest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The hash. In the case of SHA-256, it will always be a lowercase hex string - // exactly 64 characters long. + // The hash, represented as a lowercase hexadecimal string, padded with + // leading zeroes up to the hash function length. Hash string `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"` // The size of the blob, in bytes. SizeBytes int64 `protobuf:"varint,2,opt,name=size_bytes,json=sizeBytes,proto3" json:"size_bytes,omitempty"` @@ -1333,19 +1485,19 @@ type ExecutedActionMetadata struct { // The name of the worker which ran the execution. Worker string `protobuf:"bytes,1,opt,name=worker,proto3" json:"worker,omitempty"` // When was the action added to the queue. - QueuedTimestamp *timestamp.Timestamp `protobuf:"bytes,2,opt,name=queued_timestamp,json=queuedTimestamp,proto3" json:"queued_timestamp,omitempty"` + QueuedTimestamp *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=queued_timestamp,json=queuedTimestamp,proto3" json:"queued_timestamp,omitempty"` // When the worker received the action. - WorkerStartTimestamp *timestamp.Timestamp `protobuf:"bytes,3,opt,name=worker_start_timestamp,json=workerStartTimestamp,proto3" json:"worker_start_timestamp,omitempty"` + WorkerStartTimestamp *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=worker_start_timestamp,json=workerStartTimestamp,proto3" json:"worker_start_timestamp,omitempty"` // When the worker completed the action, including all stages. - WorkerCompletedTimestamp *timestamp.Timestamp `protobuf:"bytes,4,opt,name=worker_completed_timestamp,json=workerCompletedTimestamp,proto3" json:"worker_completed_timestamp,omitempty"` + WorkerCompletedTimestamp *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=worker_completed_timestamp,json=workerCompletedTimestamp,proto3" json:"worker_completed_timestamp,omitempty"` // When the worker started fetching action inputs. - InputFetchStartTimestamp *timestamp.Timestamp `protobuf:"bytes,5,opt,name=input_fetch_start_timestamp,json=inputFetchStartTimestamp,proto3" json:"input_fetch_start_timestamp,omitempty"` + InputFetchStartTimestamp *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=input_fetch_start_timestamp,json=inputFetchStartTimestamp,proto3" json:"input_fetch_start_timestamp,omitempty"` // When the worker finished fetching action inputs. - InputFetchCompletedTimestamp *timestamp.Timestamp `protobuf:"bytes,6,opt,name=input_fetch_completed_timestamp,json=inputFetchCompletedTimestamp,proto3" json:"input_fetch_completed_timestamp,omitempty"` + InputFetchCompletedTimestamp *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=input_fetch_completed_timestamp,json=inputFetchCompletedTimestamp,proto3" json:"input_fetch_completed_timestamp,omitempty"` // When the worker started executing the action command. - ExecutionStartTimestamp *timestamp.Timestamp `protobuf:"bytes,7,opt,name=execution_start_timestamp,json=executionStartTimestamp,proto3" json:"execution_start_timestamp,omitempty"` + ExecutionStartTimestamp *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=execution_start_timestamp,json=executionStartTimestamp,proto3" json:"execution_start_timestamp,omitempty"` // When the worker completed executing the action command. - ExecutionCompletedTimestamp *timestamp.Timestamp `protobuf:"bytes,8,opt,name=execution_completed_timestamp,json=executionCompletedTimestamp,proto3" json:"execution_completed_timestamp,omitempty"` + ExecutionCompletedTimestamp *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=execution_completed_timestamp,json=executionCompletedTimestamp,proto3" json:"execution_completed_timestamp,omitempty"` // New in v2.3: the amount of time the worker spent executing the action // command, potentially computed using a worker-specific virtual clock. // @@ -1363,15 +1515,15 @@ type ExecutedActionMetadata struct { // [Action][[build.bazel.remote.execution.v2.Action]'s `timeout`. There is no // relationship between the virtual execution duration and the values of // `execution_start_timestamp` and `execution_completed_timestamp`. - VirtualExecutionDuration *duration.Duration `protobuf:"bytes,12,opt,name=virtual_execution_duration,json=virtualExecutionDuration,proto3" json:"virtual_execution_duration,omitempty"` + VirtualExecutionDuration *durationpb.Duration `protobuf:"bytes,12,opt,name=virtual_execution_duration,json=virtualExecutionDuration,proto3" json:"virtual_execution_duration,omitempty"` // When the worker started uploading action outputs. - OutputUploadStartTimestamp *timestamp.Timestamp `protobuf:"bytes,9,opt,name=output_upload_start_timestamp,json=outputUploadStartTimestamp,proto3" json:"output_upload_start_timestamp,omitempty"` + OutputUploadStartTimestamp *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=output_upload_start_timestamp,json=outputUploadStartTimestamp,proto3" json:"output_upload_start_timestamp,omitempty"` // When the worker finished uploading action outputs. - OutputUploadCompletedTimestamp *timestamp.Timestamp `protobuf:"bytes,10,opt,name=output_upload_completed_timestamp,json=outputUploadCompletedTimestamp,proto3" json:"output_upload_completed_timestamp,omitempty"` + OutputUploadCompletedTimestamp *timestamppb.Timestamp `protobuf:"bytes,10,opt,name=output_upload_completed_timestamp,json=outputUploadCompletedTimestamp,proto3" json:"output_upload_completed_timestamp,omitempty"` // Details that are specific to the kind of worker used. For example, // on POSIX-like systems this could contain a message with // getrusage(2) statistics. - AuxiliaryMetadata []*any.Any `protobuf:"bytes,11,rep,name=auxiliary_metadata,json=auxiliaryMetadata,proto3" json:"auxiliary_metadata,omitempty"` + AuxiliaryMetadata []*anypb.Any `protobuf:"bytes,11,rep,name=auxiliary_metadata,json=auxiliaryMetadata,proto3" json:"auxiliary_metadata,omitempty"` } func (x *ExecutedActionMetadata) Reset() { @@ -1413,77 +1565,77 @@ func (x *ExecutedActionMetadata) GetWorker() string { return "" } -func (x *ExecutedActionMetadata) GetQueuedTimestamp() *timestamp.Timestamp { +func (x *ExecutedActionMetadata) GetQueuedTimestamp() *timestamppb.Timestamp { if x != nil { return x.QueuedTimestamp } return nil } -func (x *ExecutedActionMetadata) GetWorkerStartTimestamp() *timestamp.Timestamp { +func (x *ExecutedActionMetadata) GetWorkerStartTimestamp() *timestamppb.Timestamp { if x != nil { return x.WorkerStartTimestamp } return nil } -func (x *ExecutedActionMetadata) GetWorkerCompletedTimestamp() *timestamp.Timestamp { +func (x *ExecutedActionMetadata) GetWorkerCompletedTimestamp() *timestamppb.Timestamp { if x != nil { return x.WorkerCompletedTimestamp } return nil } -func (x *ExecutedActionMetadata) GetInputFetchStartTimestamp() *timestamp.Timestamp { +func (x *ExecutedActionMetadata) GetInputFetchStartTimestamp() *timestamppb.Timestamp { if x != nil { return x.InputFetchStartTimestamp } return nil } -func (x *ExecutedActionMetadata) GetInputFetchCompletedTimestamp() *timestamp.Timestamp { +func (x *ExecutedActionMetadata) GetInputFetchCompletedTimestamp() *timestamppb.Timestamp { if x != nil { return x.InputFetchCompletedTimestamp } return nil } -func (x *ExecutedActionMetadata) GetExecutionStartTimestamp() *timestamp.Timestamp { +func (x *ExecutedActionMetadata) GetExecutionStartTimestamp() *timestamppb.Timestamp { if x != nil { return x.ExecutionStartTimestamp } return nil } -func (x *ExecutedActionMetadata) GetExecutionCompletedTimestamp() *timestamp.Timestamp { +func (x *ExecutedActionMetadata) GetExecutionCompletedTimestamp() *timestamppb.Timestamp { if x != nil { return x.ExecutionCompletedTimestamp } return nil } -func (x *ExecutedActionMetadata) GetVirtualExecutionDuration() *duration.Duration { +func (x *ExecutedActionMetadata) GetVirtualExecutionDuration() *durationpb.Duration { if x != nil { return x.VirtualExecutionDuration } return nil } -func (x *ExecutedActionMetadata) GetOutputUploadStartTimestamp() *timestamp.Timestamp { +func (x *ExecutedActionMetadata) GetOutputUploadStartTimestamp() *timestamppb.Timestamp { if x != nil { return x.OutputUploadStartTimestamp } return nil } -func (x *ExecutedActionMetadata) GetOutputUploadCompletedTimestamp() *timestamp.Timestamp { +func (x *ExecutedActionMetadata) GetOutputUploadCompletedTimestamp() *timestamppb.Timestamp { if x != nil { return x.OutputUploadCompletedTimestamp } return nil } -func (x *ExecutedActionMetadata) GetAuxiliaryMetadata() []*any.Any { +func (x *ExecutedActionMetadata) GetAuxiliaryMetadata() []*anypb.Any { if x != nil { return x.AuxiliaryMetadata } @@ -1532,6 +1684,8 @@ type ActionResult struct { // // DEPRECATED as of v2.1. Servers that wish to be compatible with v2.0 API // should still populate this field in addition to `output_symlinks`. + // + // Deprecated: Marked as deprecated in build/bazel/remote/execution/v2/remote_execution.proto. OutputFileSymlinks []*OutputSymlink `protobuf:"bytes,10,rep,name=output_file_symlinks,json=outputFileSymlinks,proto3" json:"output_file_symlinks,omitempty"` // New in v2.1: this field will only be populated if the command // `output_paths` field was used, and not the pre v2.1 `output_files` or @@ -1563,49 +1717,53 @@ type ActionResult struct { // // ```json // // OutputDirectory proto: - // { - // path: "a/b/dir" - // tree_digest: { - // hash: "4a73bc9d03...", - // size: 55 - // } - // } + // + // { + // path: "a/b/dir" + // tree_digest: { + // hash: "4a73bc9d03...", + // size: 55 + // } + // } + // // // Tree proto with hash "4a73bc9d03..." and size 55: - // { - // root: { - // files: [ - // { - // name: "bar", - // digest: { - // hash: "4a73bc9d03...", - // size: 65534 - // } - // } - // ], - // directories: [ - // { - // name: "foo", - // digest: { - // hash: "4cf2eda940...", - // size: 43 - // } - // } - // ] - // } - // children : { - // // (Directory proto with hash "4cf2eda940..." and size 43) - // files: [ - // { - // name: "baz", - // digest: { - // hash: "b2c941073e...", - // size: 1294, - // }, - // is_executable: true - // } - // ] - // } - // } + // + // { + // root: { + // files: [ + // { + // name: "bar", + // digest: { + // hash: "4a73bc9d03...", + // size: 65534 + // } + // } + // ], + // directories: [ + // { + // name: "foo", + // digest: { + // hash: "4cf2eda940...", + // size: 43 + // } + // } + // ] + // } + // children : { + // // (Directory proto with hash "4cf2eda940..." and size 43) + // files: [ + // { + // name: "baz", + // digest: { + // hash: "b2c941073e...", + // size: 1294, + // }, + // is_executable: true + // } + // ] + // } + // } + // // ``` // If an output of the same name as listed in `output_files` of // the Command was found in `output_directories`, but was not a directory, the @@ -1629,6 +1787,8 @@ type ActionResult struct { // // DEPRECATED as of v2.1. Servers that wish to be compatible with v2.0 API // should still populate this field in addition to `output_symlinks`. + // + // Deprecated: Marked as deprecated in build/bazel/remote/execution/v2/remote_execution.proto. OutputDirectorySymlinks []*OutputSymlink `protobuf:"bytes,11,rep,name=output_directory_symlinks,json=outputDirectorySymlinks,proto3" json:"output_directory_symlinks,omitempty"` // The exit code of the command. ExitCode int32 `protobuf:"varint,4,opt,name=exit_code,json=exitCode,proto3" json:"exit_code,omitempty"` @@ -1697,6 +1857,7 @@ func (x *ActionResult) GetOutputFiles() []*OutputFile { return nil } +// Deprecated: Marked as deprecated in build/bazel/remote/execution/v2/remote_execution.proto. func (x *ActionResult) GetOutputFileSymlinks() []*OutputSymlink { if x != nil { return x.OutputFileSymlinks @@ -1718,6 +1879,7 @@ func (x *ActionResult) GetOutputDirectories() []*OutputDirectory { return nil } +// Deprecated: Marked as deprecated in build/bazel/remote/execution/v2/remote_execution.proto. func (x *ActionResult) GetOutputDirectorySymlinks() []*OutputSymlink { if x != nil { return x.OutputDirectorySymlinks @@ -1875,6 +2037,9 @@ type Tree struct { // recursively, all its children. In order to reconstruct the directory tree, // the client must take the digests of each of the child directories and then // build up a tree starting from the `root`. + // Servers SHOULD ensure that these are ordered consistently such that two + // actions producing equivalent output directories on the same server + // implementation also produce Tree messages with matching digests. Children []*Directory `protobuf:"bytes,2,rep,name=children,proto3" json:"children,omitempty"` } @@ -1940,6 +2105,50 @@ type OutputDirectory struct { // [Tree][build.bazel.remote.execution.v2.Tree] proto containing the // directory's contents. TreeDigest *Digest `protobuf:"bytes,3,opt,name=tree_digest,json=treeDigest,proto3" json:"tree_digest,omitempty"` + // If set, consumers MAY make the following assumptions about the + // directories contained in the the Tree, so that it may be + // instantiated on a local file system by scanning through it + // sequentially: + // + // - All directories with the same binary representation are stored + // exactly once. + // - All directories, apart from the root directory, are referenced by + // at least one parent directory. + // - Directories are stored in topological order, with parents being + // stored before the child. The root directory is thus the first to + // be stored. + // + // Additionally, the Tree MUST be encoded as a stream of records, + // where each record has the following format: + // + // - A tag byte, having one of the following two values: + // - (1 << 3) | 2 == 0x0a: First record (the root directory). + // - (2 << 3) | 2 == 0x12: Any subsequent records (child directories). + // - The size of the directory, encoded as a base 128 varint. + // - The contents of the directory, encoded as a binary serialized + // Protobuf message. + // + // This encoding is a subset of the Protobuf wire format of the Tree + // message. As it is only permitted to store data associated with + // field numbers 1 and 2, the tag MUST be encoded as a single byte. + // More details on the Protobuf wire format can be found here: + // https://developers.google.com/protocol-buffers/docs/encoding + // + // It is recommended that implementations using this feature construct + // Tree objects manually using the specification given above, as + // opposed to using a Protobuf library to marshal a full Tree message. + // As individual Directory messages already need to be marshaled to + // compute their digests, constructing the Tree object manually avoids + // redundant marshaling. + IsTopologicallySorted bool `protobuf:"varint,4,opt,name=is_topologically_sorted,json=isTopologicallySorted,proto3" json:"is_topologically_sorted,omitempty"` + // The digest of the encoded + // [Directory][build.bazel.remote.execution.v2.Directory] proto + // containing the contents the directory's root. + // + // If both `tree_digest` and `root_directory_digest` are set, this + // field MUST match the digest of the root directory contained in the + // Tree message. + RootDirectoryDigest *Digest `protobuf:"bytes,5,opt,name=root_directory_digest,json=rootDirectoryDigest,proto3" json:"root_directory_digest,omitempty"` } func (x *OutputDirectory) Reset() { @@ -1988,6 +2197,20 @@ func (x *OutputDirectory) GetTreeDigest() *Digest { return nil } +func (x *OutputDirectory) GetIsTopologicallySorted() bool { + if x != nil { + return x.IsTopologicallySorted + } + return false +} + +func (x *OutputDirectory) GetRootDirectoryDigest() *Digest { + if x != nil { + return x.RootDirectoryDigest + } + return nil +} + // An `OutputSymlink` is similar to a // [Symlink][build.bazel.remote.execution.v2.SymlinkNode], but it is used as an // output in an `ActionResult`. @@ -2215,6 +2438,25 @@ type ExecuteRequest struct { // The server will have a default policy if this is not provided. // This may be applied to both the ActionResult and the associated blobs. ResultsCachePolicy *ResultsCachePolicy `protobuf:"bytes,8,opt,name=results_cache_policy,json=resultsCachePolicy,proto3" json:"results_cache_policy,omitempty"` + // The digest function that was used to compute the action digest. + // + // If the digest function used is one of MD5, MURMUR3, SHA1, SHA256, + // SHA384, SHA512, or VSO, the client MAY leave this field unset. In + // that case the server SHOULD infer the digest function using the + // length of the action digest hash and the digest functions announced + // in the server's capabilities. + DigestFunction DigestFunction_Value `protobuf:"varint,9,opt,name=digest_function,json=digestFunction,proto3,enum=build.bazel.remote.execution.v2.DigestFunction_Value" json:"digest_function,omitempty"` + // A hint to the server to request inlining stdout in the + // [ActionResult][build.bazel.remote.execution.v2.ActionResult] message. + InlineStdout bool `protobuf:"varint,10,opt,name=inline_stdout,json=inlineStdout,proto3" json:"inline_stdout,omitempty"` + // A hint to the server to request inlining stderr in the + // [ActionResult][build.bazel.remote.execution.v2.ActionResult] message. + InlineStderr bool `protobuf:"varint,11,opt,name=inline_stderr,json=inlineStderr,proto3" json:"inline_stderr,omitempty"` + // A hint to the server to inline the contents of the listed output files. + // Each path needs to exactly match one file path in either `output_paths` or + // `output_files` (DEPRECATED since v2.1) in the + // [Command][build.bazel.remote.execution.v2.Command] message. + InlineOutputFiles []string `protobuf:"bytes,12,rep,name=inline_output_files,json=inlineOutputFiles,proto3" json:"inline_output_files,omitempty"` } func (x *ExecuteRequest) Reset() { @@ -2284,6 +2526,34 @@ func (x *ExecuteRequest) GetResultsCachePolicy() *ResultsCachePolicy { return nil } +func (x *ExecuteRequest) GetDigestFunction() DigestFunction_Value { + if x != nil { + return x.DigestFunction + } + return DigestFunction_UNKNOWN +} + +func (x *ExecuteRequest) GetInlineStdout() bool { + if x != nil { + return x.InlineStdout + } + return false +} + +func (x *ExecuteRequest) GetInlineStderr() bool { + if x != nil { + return x.InlineStderr + } + return false +} + +func (x *ExecuteRequest) GetInlineOutputFiles() []string { + if x != nil { + return x.InlineOutputFiles + } + return nil +} + // A `LogFile` is a log stored in the CAS. type LogFile struct { state protoimpl.MessageState @@ -2524,6 +2794,9 @@ type ExecuteOperationMetadata struct { // [ByteStream.Read][google.bytestream.ByteStream.Read] to stream the // standard error from the endpoint hosting streamed responses. StderrStreamName string `protobuf:"bytes,4,opt,name=stderr_stream_name,json=stderrStreamName,proto3" json:"stderr_stream_name,omitempty"` + // The client can read this field to view details about the ongoing + // execution. + PartialExecutionMetadata *ExecutedActionMetadata `protobuf:"bytes,5,opt,name=partial_execution_metadata,json=partialExecutionMetadata,proto3" json:"partial_execution_metadata,omitempty"` } func (x *ExecuteOperationMetadata) Reset() { @@ -2586,6 +2859,13 @@ func (x *ExecuteOperationMetadata) GetStderrStreamName() string { return "" } +func (x *ExecuteOperationMetadata) GetPartialExecutionMetadata() *ExecutedActionMetadata { + if x != nil { + return x.PartialExecutionMetadata + } + return nil +} + // A request message for // [WaitExecution][build.bazel.remote.execution.v2.Execution.WaitExecution]. type WaitExecutionRequest struct { @@ -2664,6 +2944,14 @@ type GetActionResultRequest struct { // `output_files` (DEPRECATED since v2.1) in the // [Command][build.bazel.remote.execution.v2.Command] message. InlineOutputFiles []string `protobuf:"bytes,5,rep,name=inline_output_files,json=inlineOutputFiles,proto3" json:"inline_output_files,omitempty"` + // The digest function that was used to compute the action digest. + // + // If the digest function used is one of MD5, MURMUR3, SHA1, SHA256, + // SHA384, SHA512, or VSO, the client MAY leave this field unset. In + // that case the server SHOULD infer the digest function using the + // length of the action digest hash and the digest functions announced + // in the server's capabilities. + DigestFunction DigestFunction_Value `protobuf:"varint,6,opt,name=digest_function,json=digestFunction,proto3,enum=build.bazel.remote.execution.v2.DigestFunction_Value" json:"digest_function,omitempty"` } func (x *GetActionResultRequest) Reset() { @@ -2733,6 +3021,13 @@ func (x *GetActionResultRequest) GetInlineOutputFiles() []string { return nil } +func (x *GetActionResultRequest) GetDigestFunction() DigestFunction_Value { + if x != nil { + return x.DigestFunction + } + return DigestFunction_UNKNOWN +} + // A request message for // [ActionCache.UpdateActionResult][build.bazel.remote.execution.v2.ActionCache.UpdateActionResult]. type UpdateActionResultRequest struct { @@ -2756,6 +3051,14 @@ type UpdateActionResultRequest struct { // The server will have a default policy if this is not provided. // This may be applied to both the ActionResult and the associated blobs. ResultsCachePolicy *ResultsCachePolicy `protobuf:"bytes,4,opt,name=results_cache_policy,json=resultsCachePolicy,proto3" json:"results_cache_policy,omitempty"` + // The digest function that was used to compute the action digest. + // + // If the digest function used is one of MD5, MURMUR3, SHA1, SHA256, + // SHA384, SHA512, or VSO, the client MAY leave this field unset. In + // that case the server SHOULD infer the digest function using the + // length of the action digest hash and the digest functions announced + // in the server's capabilities. + DigestFunction DigestFunction_Value `protobuf:"varint,5,opt,name=digest_function,json=digestFunction,proto3,enum=build.bazel.remote.execution.v2.DigestFunction_Value" json:"digest_function,omitempty"` } func (x *UpdateActionResultRequest) Reset() { @@ -2818,6 +3121,13 @@ func (x *UpdateActionResultRequest) GetResultsCachePolicy() *ResultsCachePolicy return nil } +func (x *UpdateActionResultRequest) GetDigestFunction() DigestFunction_Value { + if x != nil { + return x.DigestFunction + } + return DigestFunction_UNKNOWN +} + // A request message for // [ContentAddressableStorage.FindMissingBlobs][build.bazel.remote.execution.v2.ContentAddressableStorage.FindMissingBlobs]. type FindMissingBlobsRequest struct { @@ -2831,8 +3141,17 @@ type FindMissingBlobsRequest struct { // between them in an implementation-defined fashion, otherwise it can be // omitted. InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName,proto3" json:"instance_name,omitempty"` - // A list of the blobs to check. + // A list of the blobs to check. All digests MUST use the same digest + // function. BlobDigests []*Digest `protobuf:"bytes,2,rep,name=blob_digests,json=blobDigests,proto3" json:"blob_digests,omitempty"` + // The digest function of the blobs whose existence is checked. + // + // If the digest function used is one of MD5, MURMUR3, SHA1, SHA256, + // SHA384, SHA512, or VSO, the client MAY leave this field unset. In + // that case the server SHOULD infer the digest function using the + // length of the blob digest hashes and the digest functions announced + // in the server's capabilities. + DigestFunction DigestFunction_Value `protobuf:"varint,3,opt,name=digest_function,json=digestFunction,proto3,enum=build.bazel.remote.execution.v2.DigestFunction_Value" json:"digest_function,omitempty"` } func (x *FindMissingBlobsRequest) Reset() { @@ -2881,6 +3200,13 @@ func (x *FindMissingBlobsRequest) GetBlobDigests() []*Digest { return nil } +func (x *FindMissingBlobsRequest) GetDigestFunction() DigestFunction_Value { + if x != nil { + return x.DigestFunction + } + return DigestFunction_UNKNOWN +} + // A response message for // [ContentAddressableStorage.FindMissingBlobs][build.bazel.remote.execution.v2.ContentAddressableStorage.FindMissingBlobs]. type FindMissingBlobsResponse struct { @@ -2946,6 +3272,15 @@ type BatchUpdateBlobsRequest struct { InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName,proto3" json:"instance_name,omitempty"` // The individual upload requests. Requests []*BatchUpdateBlobsRequest_Request `protobuf:"bytes,2,rep,name=requests,proto3" json:"requests,omitempty"` + // The digest function that was used to compute the digests of the + // blobs being uploaded. + // + // If the digest function used is one of MD5, MURMUR3, SHA1, SHA256, + // SHA384, SHA512, or VSO, the client MAY leave this field unset. In + // that case the server SHOULD infer the digest function using the + // length of the blob digest hashes and the digest functions announced + // in the server's capabilities. + DigestFunction DigestFunction_Value `protobuf:"varint,5,opt,name=digest_function,json=digestFunction,proto3,enum=build.bazel.remote.execution.v2.DigestFunction_Value" json:"digest_function,omitempty"` } func (x *BatchUpdateBlobsRequest) Reset() { @@ -2994,6 +3329,13 @@ func (x *BatchUpdateBlobsRequest) GetRequests() []*BatchUpdateBlobsRequest_Reque return nil } +func (x *BatchUpdateBlobsRequest) GetDigestFunction() DigestFunction_Value { + if x != nil { + return x.DigestFunction + } + return DigestFunction_UNKNOWN +} + // A response message for // [ContentAddressableStorage.BatchUpdateBlobs][build.bazel.remote.execution.v2.ContentAddressableStorage.BatchUpdateBlobs]. type BatchUpdateBlobsResponse struct { @@ -3057,11 +3399,20 @@ type BatchReadBlobsRequest struct { // between them in an implementation-defined fashion, otherwise it can be // omitted. InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName,proto3" json:"instance_name,omitempty"` - // The individual blob digests. + // The individual blob digests. All digests MUST use the same digest + // function. Digests []*Digest `protobuf:"bytes,2,rep,name=digests,proto3" json:"digests,omitempty"` // A list of acceptable encodings for the returned inlined data, in no // particular order. `IDENTITY` is always allowed even if not specified here. AcceptableCompressors []Compressor_Value `protobuf:"varint,3,rep,packed,name=acceptable_compressors,json=acceptableCompressors,proto3,enum=build.bazel.remote.execution.v2.Compressor_Value" json:"acceptable_compressors,omitempty"` + // The digest function of the blobs being requested. + // + // If the digest function used is one of MD5, MURMUR3, SHA1, SHA256, + // SHA384, SHA512, or VSO, the client MAY leave this field unset. In + // that case the server SHOULD infer the digest function using the + // length of the blob digest hashes and the digest functions announced + // in the server's capabilities. + DigestFunction DigestFunction_Value `protobuf:"varint,4,opt,name=digest_function,json=digestFunction,proto3,enum=build.bazel.remote.execution.v2.DigestFunction_Value" json:"digest_function,omitempty"` } func (x *BatchReadBlobsRequest) Reset() { @@ -3117,6 +3468,13 @@ func (x *BatchReadBlobsRequest) GetAcceptableCompressors() []Compressor_Value { return nil } +func (x *BatchReadBlobsRequest) GetDigestFunction() DigestFunction_Value { + if x != nil { + return x.DigestFunction + } + return DigestFunction_UNKNOWN +} + // A response message for // [ContentAddressableStorage.BatchReadBlobs][build.bazel.remote.execution.v2.ContentAddressableStorage.BatchReadBlobs]. type BatchReadBlobsResponse struct { @@ -3195,6 +3553,15 @@ type GetTreeRequest struct { // If present, the server will use that token as an offset, returning only // that page and the ones that succeed it. PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` + // The digest function that was used to compute the digest of the root + // directory. + // + // If the digest function used is one of MD5, MURMUR3, SHA1, SHA256, + // SHA384, SHA512, or VSO, the client MAY leave this field unset. In + // that case the server SHOULD infer the digest function using the + // length of the root digest hash and the digest functions announced + // in the server's capabilities. + DigestFunction DigestFunction_Value `protobuf:"varint,5,opt,name=digest_function,json=digestFunction,proto3,enum=build.bazel.remote.execution.v2.DigestFunction_Value" json:"digest_function,omitempty"` } func (x *GetTreeRequest) Reset() { @@ -3257,6 +3624,13 @@ func (x *GetTreeRequest) GetPageToken() string { return "" } +func (x *GetTreeRequest) GetDigestFunction() DigestFunction_Value { + if x != nil { + return x.DigestFunction + } + return DigestFunction_UNKNOWN +} + // A response message for // [ContentAddressableStorage.GetTree][build.bazel.remote.execution.v2.ContentAddressableStorage.GetTree]. type GetTreeResponse struct { @@ -3796,7 +4170,10 @@ type ExecutionCapabilities struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Remote execution may only support a single digest function. + // Legacy field for indicating which digest function is supported by the + // remote execution system. It MUST be set to a value other than UNKNOWN. + // Implementations should consider the repeated digest_functions field + // first, falling back to this singular field if digest_functions is unset. DigestFunction DigestFunction_Value `protobuf:"varint,1,opt,name=digest_function,json=digestFunction,proto3,enum=build.bazel.remote.execution.v2.DigestFunction_Value" json:"digest_function,omitempty"` // Whether remote execution is enabled for the particular server/instance. ExecEnabled bool `protobuf:"varint,2,opt,name=exec_enabled,json=execEnabled,proto3" json:"exec_enabled,omitempty"` @@ -3804,6 +4181,19 @@ type ExecutionCapabilities struct { ExecutionPriorityCapabilities *PriorityCapabilities `protobuf:"bytes,3,opt,name=execution_priority_capabilities,json=executionPriorityCapabilities,proto3" json:"execution_priority_capabilities,omitempty"` // Supported node properties. SupportedNodeProperties []string `protobuf:"bytes,4,rep,name=supported_node_properties,json=supportedNodeProperties,proto3" json:"supported_node_properties,omitempty"` + // All the digest functions supported by the remote execution system. + // If this field is set, it MUST also contain digest_function. + // + // Even if the remote execution system announces support for multiple + // digest functions, individual execution requests may only reference + // CAS objects using a single digest function. For example, it is not + // permitted to execute actions having both MD5 and SHA-256 hashed + // files in their input root. + // + // The CAS objects referenced by action results generated by the + // remote execution system MUST use the same digest function as the + // one used to construct the action. + DigestFunctions []DigestFunction_Value `protobuf:"varint,5,rep,packed,name=digest_functions,json=digestFunctions,proto3,enum=build.bazel.remote.execution.v2.DigestFunction_Value" json:"digest_functions,omitempty"` } func (x *ExecutionCapabilities) Reset() { @@ -3866,6 +4256,13 @@ func (x *ExecutionCapabilities) GetSupportedNodeProperties() []string { return nil } +func (x *ExecutionCapabilities) GetDigestFunctions() []DigestFunction_Value { + if x != nil { + return x.DigestFunctions + } + return nil +} + // Details for the tool used to call the API. type ToolDetails struct { state protoimpl.MessageState @@ -3931,7 +4328,7 @@ func (x *ToolDetails) GetToolVersion() string { // // * name: `build.bazel.remote.execution.v2.requestmetadata-bin` // * contents: the base64 encoded binary `RequestMetadata` message. -// Note: the gRPC library serializes binary headers encoded in base 64 by +// Note: the gRPC library serializes binary headers encoded in base64 by // default (https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests). // Therefore, if the gRPC library is used to pass/retrieve this // metadata, the user may ignore the base64 encoding and assume it is simply @@ -4191,7 +4588,8 @@ type BatchUpdateBlobsRequest_Request struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The digest of the blob. This MUST be the digest of `data`. + // The digest of the blob. This MUST be the digest of `data`. All + // digests MUST use the same digest function. Digest *Digest `protobuf:"bytes,1,opt,name=digest,proto3" json:"digest,omitempty"` // The raw binary data. Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` @@ -4497,7 +4895,7 @@ var file_build_bazel_remote_execution_v2_remote_execution_proto_rawDesc = []byte 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, - 0x22, 0xfa, 0x03, 0x0a, 0x07, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x09, + 0x22, 0xd2, 0x05, 0x0a, 0x07, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x71, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, @@ -4506,204 +4904,218 @@ var file_build_bazel_remote_execution_v2_remote_execution_proto_rawDesc = []byte 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x21, 0x0a, + 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0c, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, - 0x12, 0x2d, 0x0a, 0x12, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x6f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x12, - 0x21, 0x0a, 0x0c, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, - 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x74, - 0x68, 0x73, 0x12, 0x45, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, - 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, - 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x2b, 0x0a, 0x11, 0x77, 0x6f, 0x72, - 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x34, 0x0a, 0x16, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, - 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x14, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x4e, 0x6f, - 0x64, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x3f, 0x0a, 0x13, - 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, - 0x62, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x94, 0x01, - 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x52, 0x0a, 0x0a, 0x70, 0x72, - 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, - 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, - 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, - 0x74, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x34, - 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x22, 0xc8, 0x02, 0x0a, 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x79, 0x12, 0x3f, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x29, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, - 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x05, 0x66, 0x69, - 0x6c, 0x65, 0x73, 0x12, 0x50, 0x0a, 0x0b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, - 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, - 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x0b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x69, 0x65, 0x73, 0x12, 0x48, 0x0a, 0x08, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, - 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, - 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x12, - 0x58, 0x0a, 0x0f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, - 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, - 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x50, - 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x52, 0x0e, 0x6e, 0x6f, 0x64, 0x65, 0x50, - 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x22, - 0x38, 0x0a, 0x0c, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xcc, 0x01, 0x0a, 0x0e, 0x4e, 0x6f, - 0x64, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x4d, 0x0a, 0x0a, - 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x2d, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, - 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x52, - 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x05, 0x6d, - 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, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x39, 0x0a, - 0x09, 0x75, 0x6e, 0x69, 0x78, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, - 0x75, 0x6e, 0x69, 0x78, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0xea, 0x01, 0x0a, 0x08, 0x46, 0x69, 0x6c, - 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x64, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, + 0x03, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x46, + 0x69, 0x6c, 0x65, 0x73, 0x12, 0x31, 0x0a, 0x12, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x64, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, + 0x42, 0x02, 0x18, 0x01, 0x52, 0x11, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x6f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x74, 0x68, 0x73, 0x12, 0x49, 0x0a, 0x08, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, + 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x02, 0x18, 0x01, 0x52, 0x08, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x2b, 0x0a, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, + 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x10, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x79, 0x12, 0x34, 0x0a, 0x16, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x6e, 0x6f, 0x64, + 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x14, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x72, + 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x76, 0x0a, 0x17, 0x6f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, - 0x73, 0x74, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, - 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0c, 0x69, 0x73, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, - 0x58, 0x0a, 0x0f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, - 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x79, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x15, 0x6f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x1a, 0x3f, 0x0a, 0x13, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, + 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x22, 0x52, 0x0a, 0x15, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x79, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x52, + 0x45, 0x45, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x49, 0x52, + 0x45, 0x43, 0x54, 0x4f, 0x52, 0x59, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x12, 0x16, 0x0a, + 0x12, 0x54, 0x52, 0x45, 0x45, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, + 0x4f, 0x52, 0x59, 0x10, 0x02, 0x22, 0x94, 0x01, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x12, 0x52, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, + 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, + 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x34, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, + 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xc8, 0x02, 0x0a, + 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x3f, 0x0a, 0x05, 0x66, 0x69, + 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x62, 0x75, 0x69, 0x6c, + 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x46, 0x69, 0x6c, 0x65, + 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x50, 0x0a, 0x0b, 0x64, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2e, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, + 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, + 0x52, 0x0b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x12, 0x48, 0x0a, + 0x08, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x2c, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, + 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x73, + 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x12, 0x58, 0x0a, 0x0f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, + 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2f, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, + 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, + 0x73, 0x52, 0x0e, 0x6e, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, + 0x73, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x22, 0x38, 0x0a, 0x0c, 0x4e, 0x6f, 0x64, 0x65, 0x50, + 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x22, 0xcc, 0x01, 0x0a, 0x0e, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, + 0x74, 0x69, 0x65, 0x73, 0x12, 0x4d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x50, - 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x52, 0x0e, 0x6e, 0x6f, 0x64, 0x65, 0x50, - 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x4a, - 0x04, 0x08, 0x05, 0x10, 0x06, 0x22, 0x64, 0x0a, 0x0d, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x64, 0x69, - 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, - 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x99, 0x01, 0x0a, 0x0b, - 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x58, 0x0a, 0x0f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, - 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, + 0x69, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x05, 0x6d, 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, 0x05, + 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x78, 0x5f, 0x6d, 0x6f, + 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, + 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x78, 0x4d, 0x6f, 0x64, 0x65, + 0x22, 0xea, 0x01, 0x0a, 0x08, 0x46, 0x69, 0x6c, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, + 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x45, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x58, 0x0a, 0x0f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, + 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x52, 0x0e, 0x6e, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, - 0x73, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x3b, 0x0a, 0x06, 0x44, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, - 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x69, 0x7a, 0x65, 0x42, - 0x79, 0x74, 0x65, 0x73, 0x22, 0xfd, 0x07, 0x0a, 0x16, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, - 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, - 0x16, 0x0a, 0x06, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x10, 0x71, 0x75, 0x65, 0x75, 0x65, - 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 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, 0x0f, 0x71, - 0x75, 0x65, 0x75, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x50, - 0x0a, 0x16, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 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, 0x14, 0x77, 0x6f, 0x72, 0x6b, - 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x12, 0x58, 0x0a, 0x1a, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, - 0x65, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 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, 0x18, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, - 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x59, 0x0a, 0x1b, 0x69, 0x6e, - 0x70, 0x75, 0x74, 0x5f, 0x66, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 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, 0x18, 0x69, 0x6e, 0x70, - 0x75, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x61, 0x0a, 0x1f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x66, - 0x65, 0x74, 0x63, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 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, 0x1c, 0x69, 0x6e, 0x70, 0x75, - 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x56, 0x0a, 0x19, 0x65, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 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, 0x52, 0x17, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x12, 0x5e, 0x0a, 0x1d, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, - 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x73, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x22, 0x64, 0x0a, + 0x0d, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, + 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x06, 0x64, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x22, 0x99, 0x01, 0x0a, 0x0b, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x4e, + 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, + 0x58, 0x0a, 0x0f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, + 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x50, + 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x52, 0x0e, 0x6e, 0x6f, 0x64, 0x65, 0x50, + 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, + 0x3b, 0x0a, 0x06, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, + 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x1d, 0x0a, + 0x0a, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x09, 0x73, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0xfd, 0x07, 0x0a, + 0x16, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x6f, 0x72, 0x6b, 0x65, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x12, + 0x45, 0x0a, 0x10, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 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, 0x0f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x50, 0x0a, 0x16, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, + 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 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, 0x14, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x58, 0x0a, 0x1a, 0x77, 0x6f, 0x72, 0x6b, + 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 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, 0x18, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, + 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x12, 0x59, 0x0a, 0x1b, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x65, 0x74, 0x63, + 0x68, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 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, 0x1b, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, + 0x61, 0x6d, 0x70, 0x52, 0x18, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x61, 0x0a, + 0x1f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x63, 0x6f, 0x6d, + 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 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, 0x1c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x12, 0x57, 0x0a, 0x1a, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x65, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0c, - 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, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5d, 0x0a, 0x1d, 0x6f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x09, 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, 0x1a, 0x6f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x65, 0x0a, 0x21, 0x6f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, - 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x0a, 0x20, + 0x12, 0x56, 0x0a, 0x19, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 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, 0x52, - 0x1e, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6d, - 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, - 0x43, 0x0a, 0x12, 0x61, 0x75, 0x78, 0x69, 0x6c, 0x69, 0x61, 0x72, 0x79, 0x5f, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, - 0x79, 0x52, 0x11, 0x61, 0x75, 0x78, 0x69, 0x6c, 0x69, 0x61, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x22, 0xcb, 0x06, 0x0a, 0x0c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x4e, 0x0a, 0x0c, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, - 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x62, 0x75, + 0x17, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x5e, 0x0a, 0x1d, 0x65, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 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, 0x1b, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x57, 0x0a, 0x1a, 0x76, 0x69, 0x72, 0x74, + 0x75, 0x61, 0x6c, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0c, 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, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, + 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x5d, 0x0a, 0x1d, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x75, 0x70, 0x6c, 0x6f, + 0x61, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x18, 0x09, 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, 0x1a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x55, 0x70, 0x6c, 0x6f, + 0x61, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x12, 0x65, 0x0a, 0x21, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, + 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x0a, 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, 0x1e, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x55, + 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x43, 0x0a, 0x12, 0x61, 0x75, 0x78, 0x69, 0x6c, + 0x69, 0x61, 0x72, 0x79, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0b, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x11, 0x61, 0x75, 0x78, 0x69, 0x6c, + 0x69, 0x61, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xd3, 0x06, 0x0a, + 0x0c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x4e, 0x0a, + 0x0c, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, + 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65, + 0x52, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x64, 0x0a, + 0x14, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x79, 0x6d, + 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x60, 0x0a, 0x14, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, - 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x0a, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, - 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x53, 0x79, 0x6d, 0x6c, - 0x69, 0x6e, 0x6b, 0x52, 0x12, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x53, - 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x12, 0x57, 0x0a, 0x0f, 0x6f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x5f, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, + 0x74, 0x70, 0x75, 0x74, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x42, 0x02, 0x18, 0x01, 0x52, + 0x12, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x79, 0x6d, 0x6c, 0x69, + 0x6e, 0x6b, 0x73, 0x12, 0x57, 0x0a, 0x0f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x79, + 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, + 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x0e, 0x6f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x12, 0x5f, 0x0a, 0x12, + 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, + 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x11, 0x6f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x12, 0x6e, 0x0a, + 0x19, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x79, 0x5f, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, - 0x52, 0x0e, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x73, - 0x12, 0x5f, 0x0a, 0x12, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x62, - 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, - 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x11, - 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, - 0x73, 0x12, 0x6a, 0x0a, 0x19, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x64, 0x69, 0x72, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x0b, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, - 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x53, 0x79, 0x6d, - 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x17, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x69, 0x72, 0x65, + 0x42, 0x02, 0x18, 0x01, 0x52, 0x17, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x78, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x65, 0x78, 0x69, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, @@ -4752,54 +5164,77 @@ var file_build_bazel_remote_execution_v2_remote_execution_proto_rawDesc = []byte 0x65, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x79, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x75, - 0x0a, 0x0f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x79, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x48, 0x0a, 0x0b, 0x74, 0x72, 0x65, 0x65, 0x5f, 0x64, 0x69, - 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, - 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x52, 0x0a, 0x74, 0x72, 0x65, 0x65, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x4a, - 0x04, 0x08, 0x02, 0x10, 0x03, 0x22, 0x9b, 0x01, 0x0a, 0x0d, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x12, 0x58, 0x0a, 0x0f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x70, - 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x62, - 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, - 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4e, - 0x6f, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x52, 0x0e, 0x6e, - 0x6f, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x4a, 0x04, 0x08, - 0x03, 0x10, 0x04, 0x22, 0x2d, 0x0a, 0x0f, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, - 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, - 0x74, 0x79, 0x22, 0x30, 0x0a, 0x12, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x43, 0x61, 0x63, - 0x68, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, - 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, - 0x72, 0x69, 0x74, 0x79, 0x22, 0x85, 0x03, 0x0a, 0x0e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x11, - 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, - 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x73, 0x6b, 0x69, 0x70, 0x43, 0x61, 0x63, - 0x68, 0x65, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x4c, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, - 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x5b, 0x0a, 0x10, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x30, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, - 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x52, 0x0f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x12, 0x65, 0x0a, 0x14, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x5f, 0x63, - 0x61, 0x63, 0x68, 0x65, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x33, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, - 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x43, 0x61, 0x63, 0x68, 0x65, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x12, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x43, - 0x61, 0x63, 0x68, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, + 0x74, 0x6f, 0x72, 0x79, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x8a, + 0x02, 0x0a, 0x0f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x48, 0x0a, 0x0b, 0x74, 0x72, 0x65, 0x65, 0x5f, 0x64, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, + 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, + 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, + 0x67, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x74, 0x72, 0x65, 0x65, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x12, 0x36, 0x0a, 0x17, 0x69, 0x73, 0x5f, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x63, + 0x61, 0x6c, 0x6c, 0x79, 0x5f, 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x15, 0x69, 0x73, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, + 0x6c, 0x79, 0x53, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x12, 0x5b, 0x0a, 0x15, 0x72, 0x6f, 0x6f, 0x74, + 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, + 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, + 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x52, 0x13, 0x72, 0x6f, 0x6f, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x44, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x22, 0x9b, 0x01, 0x0a, 0x0d, + 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x12, 0x0a, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, + 0x68, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x58, 0x0a, 0x0f, 0x6e, 0x6f, 0x64, + 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, + 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, + 0x69, 0x65, 0x73, 0x52, 0x0e, 0x6e, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, + 0x69, 0x65, 0x73, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x2d, 0x0a, 0x0f, 0x45, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x1a, 0x0a, 0x08, + 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x30, 0x0a, 0x12, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x73, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x1a, + 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0xdf, 0x04, 0x0a, 0x0e, 0x45, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, + 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, + 0x5f, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x73, + 0x6b, 0x69, 0x70, 0x43, 0x61, 0x63, 0x68, 0x65, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x4c, + 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, + 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x0c, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x5b, 0x0a, 0x10, + 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, + 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x65, 0x0a, 0x14, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x73, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, + 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x73, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x12, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x73, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x12, 0x5e, 0x0a, 0x0f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x62, 0x75, 0x69, 0x6c, + 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x0e, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x73, 0x74, 0x64, 0x6f, 0x75, + 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, + 0x74, 0x64, 0x6f, 0x75, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x5f, + 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x6e, + 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x64, 0x65, 0x72, 0x72, 0x12, 0x2e, 0x0a, 0x13, 0x69, 0x6e, + 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, + 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x4f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x22, 0x71, 0x0a, 0x07, 0x4c, 0x6f, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, @@ -4839,7 +5274,7 @@ var file_build_bazel_remote_execution_v2_remote_execution_proto_rawDesc = []byte 0x48, 0x45, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x51, 0x55, 0x45, 0x55, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, - 0x45, 0x44, 0x10, 0x04, 0x22, 0x91, 0x02, 0x0a, 0x18, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, + 0x45, 0x44, 0x10, 0x04, 0x22, 0x88, 0x03, 0x0a, 0x18, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x4b, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, @@ -4856,223 +5291,269 @@ var file_build_bazel_remote_execution_v2_remote_execution_proto_rawDesc = []byte 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x2a, 0x0a, 0x14, 0x57, 0x61, 0x69, 0x74, - 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x85, 0x02, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x4c, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, + 0x72, 0x65, 0x61, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x75, 0x0a, 0x1a, 0x70, 0x61, 0x72, 0x74, + 0x69, 0x61, 0x6c, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, + 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x18, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x45, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, + 0x2a, 0x0a, 0x14, 0x57, 0x61, 0x69, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xe5, 0x02, 0x0a, 0x16, + 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x4c, 0x0a, 0x0d, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, + 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x0c, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x6c, + 0x69, 0x6e, 0x65, 0x5f, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0c, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x12, 0x23, + 0x0a, 0x0d, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x64, + 0x65, 0x72, 0x72, 0x12, 0x2e, 0x0a, 0x13, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x11, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x46, 0x69, + 0x6c, 0x65, 0x73, 0x12, 0x5e, 0x0a, 0x0f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x66, 0x75, + 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, + 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x22, 0xa9, 0x03, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x4c, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, + 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, + 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, + 0x67, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, - 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, - 0x67, 0x65, 0x73, 0x74, 0x52, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x67, 0x65, - 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x73, 0x74, 0x64, - 0x6f, 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x6e, 0x6c, 0x69, 0x6e, - 0x65, 0x53, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x6c, 0x69, 0x6e, - 0x65, 0x5f, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, - 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x64, 0x65, 0x72, 0x72, 0x12, 0x2e, 0x0a, 0x13, - 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x69, - 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x69, 0x6e, 0x6c, 0x69, 0x6e, - 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x22, 0xc9, 0x02, 0x0a, - 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x4c, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, + 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x0c, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x65, 0x0a, 0x14, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x73, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, + 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, + 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x12, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x73, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, + 0x5e, 0x0a, 0x0f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, + 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x0e, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, + 0xea, 0x01, 0x0a, 0x17, 0x46, 0x69, 0x6e, 0x64, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x42, + 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x4a, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, - 0x0c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, - 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, - 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x52, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x12, 0x65, 0x0a, 0x14, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x5f, 0x63, 0x61, 0x63, - 0x68, 0x65, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x33, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, - 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x52, 0x12, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x43, 0x61, 0x63, - 0x68, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x8a, 0x01, 0x0a, 0x17, 0x46, 0x69, 0x6e, - 0x64, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x4a, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, - 0x62, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, - 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x62, 0x44, 0x69, - 0x67, 0x65, 0x73, 0x74, 0x73, 0x22, 0x75, 0x0a, 0x18, 0x46, 0x69, 0x6e, 0x64, 0x4d, 0x69, 0x73, - 0x73, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x59, 0x0a, 0x14, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x6c, 0x6f, - 0x62, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, - 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x12, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, - 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x22, 0xd0, 0x02, 0x0a, - 0x17, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x62, + 0x0b, 0x62, 0x6c, 0x6f, 0x62, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x12, 0x5e, 0x0a, 0x0f, + 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, + 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, + 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x64, 0x69, + 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x75, 0x0a, 0x18, + 0x46, 0x69, 0x6e, 0x64, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, 0x14, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, + 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, + 0x12, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x44, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x73, 0x22, 0xb0, 0x03, 0x0a, 0x17, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x5c, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, + 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x73, 0x12, 0x5e, 0x0a, 0x0f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x66, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x62, 0x75, + 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, + 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, + 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x0e, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x1a, 0xb1, 0x01, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, + 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, + 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, + 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, + 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x12, 0x51, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x6f, + 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, + 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, + 0x73, 0x73, 0x6f, 0x72, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, + 0x72, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x22, 0xf5, 0x01, 0x0a, 0x18, 0x42, 0x61, 0x74, 0x63, 0x68, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, + 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x1a, 0x77, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, + 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xc9, + 0x02, 0x0a, 0x15, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x61, 0x64, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x5c, 0x0a, - 0x08, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x40, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, - 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, - 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x1a, 0xb1, 0x01, 0x0a, 0x07, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, - 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x51, 0x0a, 0x0a, - 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, + 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x41, 0x0a, + 0x07, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, + 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, + 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, + 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x07, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, + 0x12, 0x68, 0x0a, 0x16, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, + 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x2e, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x22, - 0xf5, 0x01, 0x0a, 0x18, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, - 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x09, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x42, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, - 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, - 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x1a, 0x77, - 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x64, 0x69, - 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, - 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xe9, 0x01, 0x0a, 0x15, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x52, 0x65, 0x61, 0x64, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x41, 0x0a, 0x07, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, - 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x52, 0x07, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x12, 0x68, 0x0a, 0x16, 0x61, 0x63, 0x63, - 0x65, 0x70, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, - 0x6f, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x62, 0x75, 0x69, 0x6c, - 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x70, - 0x72, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x61, 0x63, - 0x63, 0x65, 0x70, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, - 0x6f, 0x72, 0x73, 0x22, 0xd9, 0x02, 0x0a, 0x16, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x61, - 0x64, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, - 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x40, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, - 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x61, 0x64, 0x42, 0x6c, 0x6f, - 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x1a, 0xde, - 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x64, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, + 0x6c, 0x75, 0x65, 0x52, 0x15, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x43, + 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x73, 0x12, 0x5e, 0x0a, 0x0f, 0x64, 0x69, + 0x67, 0x65, 0x73, 0x74, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, + 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x64, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xd9, 0x02, 0x0a, 0x16, 0x42, + 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x61, 0x64, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, + 0x52, 0x65, 0x61, 0x64, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x1a, 0xde, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, + 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x06, 0x64, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x51, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x72, + 0x65, 0x73, 0x73, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, - 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, - 0x67, 0x65, 0x73, 0x74, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x12, 0x51, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, - 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x6f, - 0x72, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, - 0x73, 0x6f, 0x72, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, - 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, - 0xbb, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x48, 0x0a, 0x0b, 0x72, 0x6f, 0x6f, 0x74, 0x5f, - 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, - 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, - 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x72, 0x6f, 0x6f, 0x74, 0x44, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, - 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x87, 0x01, - 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x4c, 0x0a, 0x0b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, - 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x79, 0x52, 0x0b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x12, - 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, - 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x3d, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x61, - 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xc2, 0x03, 0x0a, 0x12, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x61, 0x0a, - 0x12, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x62, 0x75, 0x69, 0x6c, - 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x61, 0x63, 0x68, - 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x11, 0x63, - 0x61, 0x63, 0x68, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, - 0x12, 0x6d, 0x0a, 0x16, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x61, - 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x36, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, + 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, + 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, + 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x9b, 0x02, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x54, 0x72, + 0x65, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x48, + 0x0a, 0x0b, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, + 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x72, 0x6f, + 0x6f, 0x74, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, + 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, + 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x5e, 0x0a, 0x0f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x66, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, + 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, + 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x87, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0b, 0x64, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, + 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, + 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x0b, 0x64, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, + 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x3d, + 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xc2, 0x03, + 0x0a, 0x12, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x69, 0x65, 0x73, 0x12, 0x61, 0x0a, 0x12, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x63, 0x61, + 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x32, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x70, 0x61, - 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x15, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, - 0x50, 0x0a, 0x16, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x70, - 0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x73, 0x65, - 0x6d, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x6d, 0x56, 0x65, 0x72, 0x52, 0x14, 0x64, 0x65, 0x70, - 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x41, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x42, 0x0a, 0x0f, 0x6c, 0x6f, 0x77, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x6d, 0x76, 0x65, 0x72, 0x2e, - 0x53, 0x65, 0x6d, 0x56, 0x65, 0x72, 0x52, 0x0d, 0x6c, 0x6f, 0x77, 0x41, 0x70, 0x69, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x10, 0x68, 0x69, 0x67, 0x68, 0x5f, 0x61, 0x70, - 0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x73, 0x65, - 0x6d, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x6d, 0x56, 0x65, 0x72, 0x52, 0x0e, 0x68, 0x69, 0x67, - 0x68, 0x41, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x73, 0x0a, 0x0e, 0x44, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x61, 0x0a, - 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, - 0x4e, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x48, 0x41, 0x32, 0x35, 0x36, 0x10, 0x01, 0x12, - 0x08, 0x0a, 0x04, 0x53, 0x48, 0x41, 0x31, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x4d, 0x44, 0x35, - 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x56, 0x53, 0x4f, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x53, - 0x48, 0x41, 0x33, 0x38, 0x34, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x48, 0x41, 0x35, 0x31, - 0x32, 0x10, 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x4d, 0x55, 0x52, 0x4d, 0x55, 0x52, 0x33, 0x10, 0x07, - 0x22, 0x46, 0x0a, 0x1d, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0xd2, 0x01, 0x0a, 0x14, 0x50, 0x72, 0x69, - 0x6f, 0x72, 0x69, 0x74, 0x79, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x12, 0x63, 0x0a, 0x0a, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, - 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, - 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x50, 0x72, 0x69, - 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x6f, - 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x55, 0x0a, 0x0d, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, - 0x74, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x5f, 0x70, - 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, - 0x69, 0x6e, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x61, - 0x78, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x50, 0x0a, - 0x1b, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x41, 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, - 0x50, 0x61, 0x74, 0x68, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x22, 0x31, 0x0a, 0x05, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, - 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x44, 0x49, 0x53, 0x41, 0x4c, 0x4c, 0x4f, 0x57, 0x45, 0x44, - 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x4c, 0x4c, 0x4f, 0x57, 0x45, 0x44, 0x10, 0x02, 0x22, - 0x3a, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x22, 0x2c, 0x0a, - 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, - 0x54, 0x59, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x53, 0x54, 0x44, 0x10, 0x01, 0x12, 0x0b, - 0x0a, 0x07, 0x44, 0x45, 0x46, 0x4c, 0x41, 0x54, 0x45, 0x10, 0x02, 0x22, 0xa4, 0x06, 0x0a, 0x11, + 0x76, 0x32, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x69, 0x65, 0x73, 0x52, 0x11, 0x63, 0x61, 0x63, 0x68, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, + 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x6d, 0x0a, 0x16, 0x65, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, + 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, + 0x15, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x50, 0x0a, 0x16, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, + 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x6d, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x6d, 0x56, + 0x65, 0x72, 0x52, 0x14, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x41, 0x70, + 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x0f, 0x6c, 0x6f, 0x77, 0x5f, + 0x61, 0x70, 0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, + 0x73, 0x65, 0x6d, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x6d, 0x56, 0x65, 0x72, 0x52, 0x0d, 0x6c, + 0x6f, 0x77, 0x41, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x10, + 0x68, 0x69, 0x67, 0x68, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, + 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x6d, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x6d, 0x56, + 0x65, 0x72, 0x52, 0x0e, 0x68, 0x69, 0x67, 0x68, 0x41, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x22, 0x8f, 0x01, 0x0a, 0x0e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x7d, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x0b, + 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, + 0x48, 0x41, 0x32, 0x35, 0x36, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x48, 0x41, 0x31, 0x10, + 0x02, 0x12, 0x07, 0x0a, 0x03, 0x4d, 0x44, 0x35, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x56, 0x53, + 0x4f, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x48, 0x41, 0x33, 0x38, 0x34, 0x10, 0x05, 0x12, + 0x0a, 0x0a, 0x06, 0x53, 0x48, 0x41, 0x35, 0x31, 0x32, 0x10, 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x4d, + 0x55, 0x52, 0x4d, 0x55, 0x52, 0x33, 0x10, 0x07, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x48, 0x41, 0x32, + 0x35, 0x36, 0x54, 0x52, 0x45, 0x45, 0x10, 0x08, 0x12, 0x0a, 0x0a, 0x06, 0x42, 0x4c, 0x41, 0x4b, + 0x45, 0x33, 0x10, 0x09, 0x22, 0x46, 0x0a, 0x1d, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, + 0x63, 0x68, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, + 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0xd2, 0x01, 0x0a, + 0x14, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x63, 0x0a, 0x0a, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, + 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x62, 0x75, 0x69, 0x6c, + 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x69, 0x6f, + 0x72, 0x69, 0x74, 0x79, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, + 0x2e, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0a, + 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x55, 0x0a, 0x0d, 0x50, 0x72, + 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6d, + 0x69, 0x6e, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0b, 0x6d, 0x69, 0x6e, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x21, + 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, + 0x79, 0x22, 0x50, 0x0a, 0x1b, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x41, 0x62, 0x73, 0x6f, + 0x6c, 0x75, 0x74, 0x65, 0x50, 0x61, 0x74, 0x68, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, + 0x22, 0x31, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, + 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x44, 0x49, 0x53, 0x41, 0x4c, 0x4c, + 0x4f, 0x57, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x4c, 0x4c, 0x4f, 0x57, 0x45, + 0x44, 0x10, 0x02, 0x22, 0x46, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x6f, + 0x72, 0x22, 0x38, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x44, + 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x53, 0x54, 0x44, + 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x4c, 0x41, 0x54, 0x45, 0x10, 0x02, 0x12, + 0x0a, 0x0a, 0x06, 0x42, 0x52, 0x4f, 0x54, 0x4c, 0x49, 0x10, 0x03, 0x22, 0xa4, 0x06, 0x0a, 0x11, 0x43, 0x61, 0x63, 0x68, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x60, 0x0a, 0x10, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x62, 0x75, @@ -5123,7 +5604,7 @@ var file_build_bazel_remote_execution_v2_remote_execution_proto_rawDesc = []byte 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x6f, - 0x72, 0x73, 0x22, 0xd5, 0x02, 0x0a, 0x15, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x72, 0x73, 0x22, 0xb7, 0x03, 0x0a, 0x15, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x5e, 0x0a, 0x0f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, @@ -5144,153 +5625,163 @@ var file_build_bazel_remote_execution_v2_remote_execution_proto_rawDesc = []byte 0x0a, 0x19, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x4e, 0x6f, 0x64, 0x65, - 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0x4d, 0x0a, 0x0b, 0x54, 0x6f, - 0x6f, 0x6c, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x6f, - 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, - 0x6f, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x6f, - 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xda, 0x02, 0x0a, 0x0f, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x4f, 0x0a, - 0x0c, 0x74, 0x6f, 0x6f, 0x6c, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, - 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6f, 0x6c, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x73, 0x52, 0x0b, 0x74, 0x6f, 0x6f, 0x6c, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x1b, - 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x74, - 0x6f, 0x6f, 0x6c, 0x5f, 0x69, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x74, 0x6f, 0x6f, 0x6c, 0x49, 0x6e, 0x76, - 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x3a, 0x0a, 0x19, 0x63, 0x6f, 0x72, - 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x63, 0x6f, - 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x6d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x12, 0x1b, - 0x0a, 0x09, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x32, 0xb9, 0x02, 0x0a, 0x09, 0x45, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x8e, 0x01, 0x0a, 0x07, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, - 0x12, 0x2f, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, - 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 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, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x22, 0x26, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x69, + 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x60, 0x0a, 0x10, 0x64, 0x69, + 0x67, 0x65, 0x73, 0x74, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, + 0x20, 0x03, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, + 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x64, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x4d, 0x0a, 0x0b, + 0x54, 0x6f, 0x6f, 0x6c, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x74, + 0x6f, 0x6f, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x74, 0x6f, 0x6f, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x6f, 0x6c, + 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x74, 0x6f, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xda, 0x02, 0x0a, 0x0f, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, + 0x4f, 0x0a, 0x0c, 0x74, 0x6f, 0x6f, 0x6c, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, + 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6f, 0x6c, 0x44, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x52, 0x0b, 0x74, 0x6f, 0x6f, 0x6c, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2c, 0x0a, + 0x12, 0x74, 0x6f, 0x6f, 0x6c, 0x5f, 0x69, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x74, 0x6f, 0x6f, 0x6c, 0x49, + 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x3a, 0x0a, 0x19, 0x63, + 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x76, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, + 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x76, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x6d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, + 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x49, 0x64, 0x12, 0x29, 0x0a, + 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, + 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x32, 0xb9, 0x02, 0x0a, 0x09, 0x45, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x8e, 0x01, 0x0a, 0x07, 0x45, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x65, 0x12, 0x2f, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, + 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 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, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x22, 0x26, 0x2f, + 0x76, 0x32, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x65, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x65, 0x30, 0x01, 0x12, 0x9a, 0x01, 0x0a, 0x0d, 0x57, 0x61, 0x69, 0x74, + 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x2e, 0x62, 0x75, 0x69, 0x6c, + 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x57, 0x61, 0x69, 0x74, + 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 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, + 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x22, 0x26, 0x2f, 0x76, 0x32, 0x2f, + 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2f, 0x2a, 0x2a, 0x7d, 0x3a, 0x77, 0x61, 0x69, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x30, 0x01, 0x32, 0xd6, 0x03, 0x0a, 0x0b, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x61, 0x63, 0x68, 0x65, 0x12, 0xd7, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x37, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2d, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, + 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x22, 0x5c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x56, 0x12, 0x54, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, - 0x2f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, - 0x3a, 0x01, 0x2a, 0x30, 0x01, 0x12, 0x9a, 0x01, 0x0a, 0x0d, 0x57, 0x61, 0x69, 0x74, 0x45, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, - 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x45, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 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, 0x31, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x22, 0x26, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, - 0x3d, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2a, 0x7d, 0x3a, - 0x77, 0x61, 0x69, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x01, 0x2a, - 0x30, 0x01, 0x32, 0xd6, 0x03, 0x0a, 0x0b, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x63, - 0x68, 0x65, 0x12, 0xd7, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x37, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, - 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2d, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, - 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x5c, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x56, 0x12, 0x54, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2f, 0x7b, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x2e, 0x68, 0x61, 0x73, 0x68, - 0x7d, 0x2f, 0x7b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x7d, 0x12, 0xec, 0x01, 0x0a, - 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x12, 0x3a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, - 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2d, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, + 0x2f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2f, 0x7b, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x2e, 0x68, 0x61, + 0x73, 0x68, 0x7d, 0x2f, 0x7b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x7d, 0x12, 0xec, + 0x01, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x3a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, + 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2d, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, + 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x22, 0x6b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x65, 0x3a, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x1a, 0x54, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2f, 0x7b, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x2e, 0x68, 0x61, 0x73, + 0x68, 0x7d, 0x2f, 0x7b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, + 0x74, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x7d, 0x32, 0x9b, 0x06, + 0x0a, 0x19, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0xbc, 0x01, 0x0a, 0x10, + 0x46, 0x69, 0x6e, 0x64, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x73, + 0x12, 0x38, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, + 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x42, 0x6c, + 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x62, 0x75, 0x69, + 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, + 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x46, 0x69, 0x6e, + 0x64, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x3a, 0x01, 0x2a, + 0x22, 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x3a, 0x66, + 0x69, 0x6e, 0x64, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x12, 0xbc, 0x01, 0x0a, 0x10, 0x42, + 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x12, + 0x38, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x6b, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x65, 0x1a, 0x54, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2f, 0x7b, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x2e, 0x68, 0x61, 0x73, 0x68, - 0x7d, 0x2f, 0x7b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x7d, 0x3a, 0x0d, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x32, 0x9b, 0x06, 0x0a, 0x19, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x61, 0x62, - 0x6c, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0xbc, 0x01, 0x0a, 0x10, 0x46, 0x69, - 0x6e, 0x64, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x12, 0x38, - 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, - 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, - 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x4d, - 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x22, 0x28, 0x2f, 0x76, 0x32, - 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x3d, - 0x2a, 0x2a, 0x7d, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x3a, 0x66, 0x69, 0x6e, 0x64, 0x4d, 0x69, - 0x73, 0x73, 0x69, 0x6e, 0x67, 0x3a, 0x01, 0x2a, 0x12, 0xbc, 0x01, 0x0a, 0x10, 0x42, 0x61, 0x74, - 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x12, 0x38, 0x2e, + 0x32, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, + 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x62, 0x75, 0x69, 0x6c, + 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x61, 0x74, 0x63, + 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x3a, 0x01, 0x2a, 0x22, + 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x3a, 0x62, 0x61, + 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0xb4, 0x01, 0x0a, 0x0e, 0x42, 0x61, + 0x74, 0x63, 0x68, 0x52, 0x65, 0x61, 0x64, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x12, 0x36, 0x2e, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, + 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, + 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x61, 0x64, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, + 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x61, 0x64, + 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x22, 0x26, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, + 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x3a, 0x62, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x61, 0x64, + 0x12, 0xc8, 0x01, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, 0x12, 0x2f, 0x2e, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, + 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, + 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, - 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x22, 0x28, 0x2f, 0x76, 0x32, 0x2f, - 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x2a, - 0x2a, 0x7d, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x3a, 0x62, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0xb4, 0x01, 0x0a, 0x0e, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x52, 0x65, 0x61, 0x64, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x12, 0x36, 0x2e, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, - 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x61, 0x74, - 0x63, 0x68, 0x52, 0x65, 0x61, 0x64, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, - 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x61, 0x64, 0x42, 0x6c, - 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x2b, 0x22, 0x26, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x62, 0x6c, 0x6f, 0x62, - 0x73, 0x3a, 0x62, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x61, 0x64, 0x3a, 0x01, 0x2a, 0x12, 0xc8, - 0x01, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, 0x12, 0x2f, 0x2e, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, - 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, - 0x54, 0x72, 0x65, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x62, 0x75, - 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, - 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, - 0x74, 0x54, 0x72, 0x65, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x58, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x52, 0x12, 0x50, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x62, 0x6c, - 0x6f, 0x62, 0x73, 0x2f, 0x7b, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x2e, 0x68, 0x61, 0x73, 0x68, 0x7d, 0x2f, 0x7b, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x64, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x7d, 0x3a, - 0x67, 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, 0x30, 0x01, 0x32, 0xbd, 0x01, 0x0a, 0x0c, 0x43, 0x61, - 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0xac, 0x01, 0x0a, 0x0f, 0x47, - 0x65, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x37, - 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, - 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x47, 0x65, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, - 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x2b, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x63, 0x61, 0x70, - 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x42, 0x72, 0x0a, 0x1f, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, - 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x42, 0x14, 0x52, 0x65, - 0x6d, 0x6f, 0x74, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x0f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x65, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0xa2, 0x02, 0x03, 0x52, 0x45, 0x58, 0xaa, 0x02, 0x1f, 0x42, 0x75, - 0x69, 0x6c, 0x64, 0x2e, 0x42, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, - 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x32, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x47, 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x58, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x52, 0x12, 0x50, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, + 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x2f, 0x7b, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x64, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x7d, 0x2f, 0x7b, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x64, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, + 0x7d, 0x3a, 0x67, 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, 0x30, 0x01, 0x32, 0xbd, 0x01, 0x0a, 0x0c, + 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0xac, 0x01, 0x0a, + 0x0f, 0x47, 0x65, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, + 0x12, 0x37, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, + 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x62, 0x75, 0x69, 0x6c, + 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x2b, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x63, + 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x42, 0xb4, 0x01, 0x0a, 0x1f, + 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, + 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x42, + 0x14, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x51, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x72, + 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2d, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x2f, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2f, 0x65, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x72, 0x65, 0x6d, 0x6f, 0x74, + 0x65, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0xa2, 0x02, 0x03, 0x52, 0x45, 0x58, + 0xaa, 0x02, 0x1f, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x42, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x52, + 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -5305,185 +5796,197 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP() [ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescData } -var file_build_bazel_remote_execution_v2_remote_execution_proto_enumTypes = make([]protoimpl.EnumInfo, 4) +var file_build_bazel_remote_execution_v2_remote_execution_proto_enumTypes = make([]protoimpl.EnumInfo, 5) var file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes = make([]protoimpl.MessageInfo, 52) -var file_build_bazel_remote_execution_v2_remote_execution_proto_goTypes = []interface{}{ - (ExecutionStage_Value)(0), // 0: build.bazel.remote.execution.v2.ExecutionStage.Value - (DigestFunction_Value)(0), // 1: build.bazel.remote.execution.v2.DigestFunction.Value - (SymlinkAbsolutePathStrategy_Value)(0), // 2: build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy.Value - (Compressor_Value)(0), // 3: build.bazel.remote.execution.v2.Compressor.Value - (*Action)(nil), // 4: build.bazel.remote.execution.v2.Action - (*Command)(nil), // 5: build.bazel.remote.execution.v2.Command - (*Platform)(nil), // 6: build.bazel.remote.execution.v2.Platform - (*Directory)(nil), // 7: build.bazel.remote.execution.v2.Directory - (*NodeProperty)(nil), // 8: build.bazel.remote.execution.v2.NodeProperty - (*NodeProperties)(nil), // 9: build.bazel.remote.execution.v2.NodeProperties - (*FileNode)(nil), // 10: build.bazel.remote.execution.v2.FileNode - (*DirectoryNode)(nil), // 11: build.bazel.remote.execution.v2.DirectoryNode - (*SymlinkNode)(nil), // 12: build.bazel.remote.execution.v2.SymlinkNode - (*Digest)(nil), // 13: build.bazel.remote.execution.v2.Digest - (*ExecutedActionMetadata)(nil), // 14: build.bazel.remote.execution.v2.ExecutedActionMetadata - (*ActionResult)(nil), // 15: build.bazel.remote.execution.v2.ActionResult - (*OutputFile)(nil), // 16: build.bazel.remote.execution.v2.OutputFile - (*Tree)(nil), // 17: build.bazel.remote.execution.v2.Tree - (*OutputDirectory)(nil), // 18: build.bazel.remote.execution.v2.OutputDirectory - (*OutputSymlink)(nil), // 19: build.bazel.remote.execution.v2.OutputSymlink - (*ExecutionPolicy)(nil), // 20: build.bazel.remote.execution.v2.ExecutionPolicy - (*ResultsCachePolicy)(nil), // 21: build.bazel.remote.execution.v2.ResultsCachePolicy - (*ExecuteRequest)(nil), // 22: build.bazel.remote.execution.v2.ExecuteRequest - (*LogFile)(nil), // 23: build.bazel.remote.execution.v2.LogFile - (*ExecuteResponse)(nil), // 24: build.bazel.remote.execution.v2.ExecuteResponse - (*ExecutionStage)(nil), // 25: build.bazel.remote.execution.v2.ExecutionStage - (*ExecuteOperationMetadata)(nil), // 26: build.bazel.remote.execution.v2.ExecuteOperationMetadata - (*WaitExecutionRequest)(nil), // 27: build.bazel.remote.execution.v2.WaitExecutionRequest - (*GetActionResultRequest)(nil), // 28: build.bazel.remote.execution.v2.GetActionResultRequest - (*UpdateActionResultRequest)(nil), // 29: build.bazel.remote.execution.v2.UpdateActionResultRequest - (*FindMissingBlobsRequest)(nil), // 30: build.bazel.remote.execution.v2.FindMissingBlobsRequest - (*FindMissingBlobsResponse)(nil), // 31: build.bazel.remote.execution.v2.FindMissingBlobsResponse - (*BatchUpdateBlobsRequest)(nil), // 32: build.bazel.remote.execution.v2.BatchUpdateBlobsRequest - (*BatchUpdateBlobsResponse)(nil), // 33: build.bazel.remote.execution.v2.BatchUpdateBlobsResponse - (*BatchReadBlobsRequest)(nil), // 34: build.bazel.remote.execution.v2.BatchReadBlobsRequest - (*BatchReadBlobsResponse)(nil), // 35: build.bazel.remote.execution.v2.BatchReadBlobsResponse - (*GetTreeRequest)(nil), // 36: build.bazel.remote.execution.v2.GetTreeRequest - (*GetTreeResponse)(nil), // 37: build.bazel.remote.execution.v2.GetTreeResponse - (*GetCapabilitiesRequest)(nil), // 38: build.bazel.remote.execution.v2.GetCapabilitiesRequest - (*ServerCapabilities)(nil), // 39: build.bazel.remote.execution.v2.ServerCapabilities - (*DigestFunction)(nil), // 40: build.bazel.remote.execution.v2.DigestFunction - (*ActionCacheUpdateCapabilities)(nil), // 41: build.bazel.remote.execution.v2.ActionCacheUpdateCapabilities - (*PriorityCapabilities)(nil), // 42: build.bazel.remote.execution.v2.PriorityCapabilities - (*SymlinkAbsolutePathStrategy)(nil), // 43: build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy - (*Compressor)(nil), // 44: build.bazel.remote.execution.v2.Compressor - (*CacheCapabilities)(nil), // 45: build.bazel.remote.execution.v2.CacheCapabilities - (*ExecutionCapabilities)(nil), // 46: build.bazel.remote.execution.v2.ExecutionCapabilities - (*ToolDetails)(nil), // 47: build.bazel.remote.execution.v2.ToolDetails - (*RequestMetadata)(nil), // 48: build.bazel.remote.execution.v2.RequestMetadata - (*Command_EnvironmentVariable)(nil), // 49: build.bazel.remote.execution.v2.Command.EnvironmentVariable - (*Platform_Property)(nil), // 50: build.bazel.remote.execution.v2.Platform.Property - nil, // 51: build.bazel.remote.execution.v2.ExecuteResponse.ServerLogsEntry - (*BatchUpdateBlobsRequest_Request)(nil), // 52: build.bazel.remote.execution.v2.BatchUpdateBlobsRequest.Request - (*BatchUpdateBlobsResponse_Response)(nil), // 53: build.bazel.remote.execution.v2.BatchUpdateBlobsResponse.Response - (*BatchReadBlobsResponse_Response)(nil), // 54: build.bazel.remote.execution.v2.BatchReadBlobsResponse.Response - (*PriorityCapabilities_PriorityRange)(nil), // 55: build.bazel.remote.execution.v2.PriorityCapabilities.PriorityRange - (*duration.Duration)(nil), // 56: google.protobuf.Duration - (*timestamp.Timestamp)(nil), // 57: google.protobuf.Timestamp - (*wrappers.UInt32Value)(nil), // 58: google.protobuf.UInt32Value - (*any.Any)(nil), // 59: google.protobuf.Any - (*status.Status)(nil), // 60: google.rpc.Status - (*semver.SemVer)(nil), // 61: build.bazel.semver.SemVer - (*longrunning.Operation)(nil), // 62: google.longrunning.Operation +var file_build_bazel_remote_execution_v2_remote_execution_proto_goTypes = []any{ + (Command_OutputDirectoryFormat)(0), // 0: build.bazel.remote.execution.v2.Command.OutputDirectoryFormat + (ExecutionStage_Value)(0), // 1: build.bazel.remote.execution.v2.ExecutionStage.Value + (DigestFunction_Value)(0), // 2: build.bazel.remote.execution.v2.DigestFunction.Value + (SymlinkAbsolutePathStrategy_Value)(0), // 3: build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy.Value + (Compressor_Value)(0), // 4: build.bazel.remote.execution.v2.Compressor.Value + (*Action)(nil), // 5: build.bazel.remote.execution.v2.Action + (*Command)(nil), // 6: build.bazel.remote.execution.v2.Command + (*Platform)(nil), // 7: build.bazel.remote.execution.v2.Platform + (*Directory)(nil), // 8: build.bazel.remote.execution.v2.Directory + (*NodeProperty)(nil), // 9: build.bazel.remote.execution.v2.NodeProperty + (*NodeProperties)(nil), // 10: build.bazel.remote.execution.v2.NodeProperties + (*FileNode)(nil), // 11: build.bazel.remote.execution.v2.FileNode + (*DirectoryNode)(nil), // 12: build.bazel.remote.execution.v2.DirectoryNode + (*SymlinkNode)(nil), // 13: build.bazel.remote.execution.v2.SymlinkNode + (*Digest)(nil), // 14: build.bazel.remote.execution.v2.Digest + (*ExecutedActionMetadata)(nil), // 15: build.bazel.remote.execution.v2.ExecutedActionMetadata + (*ActionResult)(nil), // 16: build.bazel.remote.execution.v2.ActionResult + (*OutputFile)(nil), // 17: build.bazel.remote.execution.v2.OutputFile + (*Tree)(nil), // 18: build.bazel.remote.execution.v2.Tree + (*OutputDirectory)(nil), // 19: build.bazel.remote.execution.v2.OutputDirectory + (*OutputSymlink)(nil), // 20: build.bazel.remote.execution.v2.OutputSymlink + (*ExecutionPolicy)(nil), // 21: build.bazel.remote.execution.v2.ExecutionPolicy + (*ResultsCachePolicy)(nil), // 22: build.bazel.remote.execution.v2.ResultsCachePolicy + (*ExecuteRequest)(nil), // 23: build.bazel.remote.execution.v2.ExecuteRequest + (*LogFile)(nil), // 24: build.bazel.remote.execution.v2.LogFile + (*ExecuteResponse)(nil), // 25: build.bazel.remote.execution.v2.ExecuteResponse + (*ExecutionStage)(nil), // 26: build.bazel.remote.execution.v2.ExecutionStage + (*ExecuteOperationMetadata)(nil), // 27: build.bazel.remote.execution.v2.ExecuteOperationMetadata + (*WaitExecutionRequest)(nil), // 28: build.bazel.remote.execution.v2.WaitExecutionRequest + (*GetActionResultRequest)(nil), // 29: build.bazel.remote.execution.v2.GetActionResultRequest + (*UpdateActionResultRequest)(nil), // 30: build.bazel.remote.execution.v2.UpdateActionResultRequest + (*FindMissingBlobsRequest)(nil), // 31: build.bazel.remote.execution.v2.FindMissingBlobsRequest + (*FindMissingBlobsResponse)(nil), // 32: build.bazel.remote.execution.v2.FindMissingBlobsResponse + (*BatchUpdateBlobsRequest)(nil), // 33: build.bazel.remote.execution.v2.BatchUpdateBlobsRequest + (*BatchUpdateBlobsResponse)(nil), // 34: build.bazel.remote.execution.v2.BatchUpdateBlobsResponse + (*BatchReadBlobsRequest)(nil), // 35: build.bazel.remote.execution.v2.BatchReadBlobsRequest + (*BatchReadBlobsResponse)(nil), // 36: build.bazel.remote.execution.v2.BatchReadBlobsResponse + (*GetTreeRequest)(nil), // 37: build.bazel.remote.execution.v2.GetTreeRequest + (*GetTreeResponse)(nil), // 38: build.bazel.remote.execution.v2.GetTreeResponse + (*GetCapabilitiesRequest)(nil), // 39: build.bazel.remote.execution.v2.GetCapabilitiesRequest + (*ServerCapabilities)(nil), // 40: build.bazel.remote.execution.v2.ServerCapabilities + (*DigestFunction)(nil), // 41: build.bazel.remote.execution.v2.DigestFunction + (*ActionCacheUpdateCapabilities)(nil), // 42: build.bazel.remote.execution.v2.ActionCacheUpdateCapabilities + (*PriorityCapabilities)(nil), // 43: build.bazel.remote.execution.v2.PriorityCapabilities + (*SymlinkAbsolutePathStrategy)(nil), // 44: build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy + (*Compressor)(nil), // 45: build.bazel.remote.execution.v2.Compressor + (*CacheCapabilities)(nil), // 46: build.bazel.remote.execution.v2.CacheCapabilities + (*ExecutionCapabilities)(nil), // 47: build.bazel.remote.execution.v2.ExecutionCapabilities + (*ToolDetails)(nil), // 48: build.bazel.remote.execution.v2.ToolDetails + (*RequestMetadata)(nil), // 49: build.bazel.remote.execution.v2.RequestMetadata + (*Command_EnvironmentVariable)(nil), // 50: build.bazel.remote.execution.v2.Command.EnvironmentVariable + (*Platform_Property)(nil), // 51: build.bazel.remote.execution.v2.Platform.Property + nil, // 52: build.bazel.remote.execution.v2.ExecuteResponse.ServerLogsEntry + (*BatchUpdateBlobsRequest_Request)(nil), // 53: build.bazel.remote.execution.v2.BatchUpdateBlobsRequest.Request + (*BatchUpdateBlobsResponse_Response)(nil), // 54: build.bazel.remote.execution.v2.BatchUpdateBlobsResponse.Response + (*BatchReadBlobsResponse_Response)(nil), // 55: build.bazel.remote.execution.v2.BatchReadBlobsResponse.Response + (*PriorityCapabilities_PriorityRange)(nil), // 56: build.bazel.remote.execution.v2.PriorityCapabilities.PriorityRange + (*durationpb.Duration)(nil), // 57: google.protobuf.Duration + (*timestamppb.Timestamp)(nil), // 58: google.protobuf.Timestamp + (*wrapperspb.UInt32Value)(nil), // 59: google.protobuf.UInt32Value + (*anypb.Any)(nil), // 60: google.protobuf.Any + (*status.Status)(nil), // 61: google.rpc.Status + (*semver.SemVer)(nil), // 62: build.bazel.semver.SemVer + (*longrunningpb.Operation)(nil), // 63: google.longrunning.Operation } var file_build_bazel_remote_execution_v2_remote_execution_proto_depIdxs = []int32{ - 13, // 0: build.bazel.remote.execution.v2.Action.command_digest:type_name -> build.bazel.remote.execution.v2.Digest - 13, // 1: build.bazel.remote.execution.v2.Action.input_root_digest:type_name -> build.bazel.remote.execution.v2.Digest - 56, // 2: build.bazel.remote.execution.v2.Action.timeout:type_name -> google.protobuf.Duration - 6, // 3: build.bazel.remote.execution.v2.Action.platform:type_name -> build.bazel.remote.execution.v2.Platform - 49, // 4: build.bazel.remote.execution.v2.Command.environment_variables:type_name -> build.bazel.remote.execution.v2.Command.EnvironmentVariable - 6, // 5: build.bazel.remote.execution.v2.Command.platform:type_name -> build.bazel.remote.execution.v2.Platform - 50, // 6: build.bazel.remote.execution.v2.Platform.properties:type_name -> build.bazel.remote.execution.v2.Platform.Property - 10, // 7: build.bazel.remote.execution.v2.Directory.files:type_name -> build.bazel.remote.execution.v2.FileNode - 11, // 8: build.bazel.remote.execution.v2.Directory.directories:type_name -> build.bazel.remote.execution.v2.DirectoryNode - 12, // 9: build.bazel.remote.execution.v2.Directory.symlinks:type_name -> build.bazel.remote.execution.v2.SymlinkNode - 9, // 10: build.bazel.remote.execution.v2.Directory.node_properties:type_name -> build.bazel.remote.execution.v2.NodeProperties - 8, // 11: build.bazel.remote.execution.v2.NodeProperties.properties:type_name -> build.bazel.remote.execution.v2.NodeProperty - 57, // 12: build.bazel.remote.execution.v2.NodeProperties.mtime:type_name -> google.protobuf.Timestamp - 58, // 13: build.bazel.remote.execution.v2.NodeProperties.unix_mode:type_name -> google.protobuf.UInt32Value - 13, // 14: build.bazel.remote.execution.v2.FileNode.digest:type_name -> build.bazel.remote.execution.v2.Digest - 9, // 15: build.bazel.remote.execution.v2.FileNode.node_properties:type_name -> build.bazel.remote.execution.v2.NodeProperties - 13, // 16: build.bazel.remote.execution.v2.DirectoryNode.digest:type_name -> build.bazel.remote.execution.v2.Digest - 9, // 17: build.bazel.remote.execution.v2.SymlinkNode.node_properties:type_name -> build.bazel.remote.execution.v2.NodeProperties - 57, // 18: build.bazel.remote.execution.v2.ExecutedActionMetadata.queued_timestamp:type_name -> google.protobuf.Timestamp - 57, // 19: build.bazel.remote.execution.v2.ExecutedActionMetadata.worker_start_timestamp:type_name -> google.protobuf.Timestamp - 57, // 20: build.bazel.remote.execution.v2.ExecutedActionMetadata.worker_completed_timestamp:type_name -> google.protobuf.Timestamp - 57, // 21: build.bazel.remote.execution.v2.ExecutedActionMetadata.input_fetch_start_timestamp:type_name -> google.protobuf.Timestamp - 57, // 22: build.bazel.remote.execution.v2.ExecutedActionMetadata.input_fetch_completed_timestamp:type_name -> google.protobuf.Timestamp - 57, // 23: build.bazel.remote.execution.v2.ExecutedActionMetadata.execution_start_timestamp:type_name -> google.protobuf.Timestamp - 57, // 24: build.bazel.remote.execution.v2.ExecutedActionMetadata.execution_completed_timestamp:type_name -> google.protobuf.Timestamp - 56, // 25: build.bazel.remote.execution.v2.ExecutedActionMetadata.virtual_execution_duration:type_name -> google.protobuf.Duration - 57, // 26: build.bazel.remote.execution.v2.ExecutedActionMetadata.output_upload_start_timestamp:type_name -> google.protobuf.Timestamp - 57, // 27: build.bazel.remote.execution.v2.ExecutedActionMetadata.output_upload_completed_timestamp:type_name -> google.protobuf.Timestamp - 59, // 28: build.bazel.remote.execution.v2.ExecutedActionMetadata.auxiliary_metadata:type_name -> google.protobuf.Any - 16, // 29: build.bazel.remote.execution.v2.ActionResult.output_files:type_name -> build.bazel.remote.execution.v2.OutputFile - 19, // 30: build.bazel.remote.execution.v2.ActionResult.output_file_symlinks:type_name -> build.bazel.remote.execution.v2.OutputSymlink - 19, // 31: build.bazel.remote.execution.v2.ActionResult.output_symlinks:type_name -> build.bazel.remote.execution.v2.OutputSymlink - 18, // 32: build.bazel.remote.execution.v2.ActionResult.output_directories:type_name -> build.bazel.remote.execution.v2.OutputDirectory - 19, // 33: build.bazel.remote.execution.v2.ActionResult.output_directory_symlinks:type_name -> build.bazel.remote.execution.v2.OutputSymlink - 13, // 34: build.bazel.remote.execution.v2.ActionResult.stdout_digest:type_name -> build.bazel.remote.execution.v2.Digest - 13, // 35: build.bazel.remote.execution.v2.ActionResult.stderr_digest:type_name -> build.bazel.remote.execution.v2.Digest - 14, // 36: build.bazel.remote.execution.v2.ActionResult.execution_metadata:type_name -> build.bazel.remote.execution.v2.ExecutedActionMetadata - 13, // 37: build.bazel.remote.execution.v2.OutputFile.digest:type_name -> build.bazel.remote.execution.v2.Digest - 9, // 38: build.bazel.remote.execution.v2.OutputFile.node_properties:type_name -> build.bazel.remote.execution.v2.NodeProperties - 7, // 39: build.bazel.remote.execution.v2.Tree.root:type_name -> build.bazel.remote.execution.v2.Directory - 7, // 40: build.bazel.remote.execution.v2.Tree.children:type_name -> build.bazel.remote.execution.v2.Directory - 13, // 41: build.bazel.remote.execution.v2.OutputDirectory.tree_digest:type_name -> build.bazel.remote.execution.v2.Digest - 9, // 42: build.bazel.remote.execution.v2.OutputSymlink.node_properties:type_name -> build.bazel.remote.execution.v2.NodeProperties - 13, // 43: build.bazel.remote.execution.v2.ExecuteRequest.action_digest:type_name -> build.bazel.remote.execution.v2.Digest - 20, // 44: build.bazel.remote.execution.v2.ExecuteRequest.execution_policy:type_name -> build.bazel.remote.execution.v2.ExecutionPolicy - 21, // 45: build.bazel.remote.execution.v2.ExecuteRequest.results_cache_policy:type_name -> build.bazel.remote.execution.v2.ResultsCachePolicy - 13, // 46: build.bazel.remote.execution.v2.LogFile.digest:type_name -> build.bazel.remote.execution.v2.Digest - 15, // 47: build.bazel.remote.execution.v2.ExecuteResponse.result:type_name -> build.bazel.remote.execution.v2.ActionResult - 60, // 48: build.bazel.remote.execution.v2.ExecuteResponse.status:type_name -> google.rpc.Status - 51, // 49: build.bazel.remote.execution.v2.ExecuteResponse.server_logs:type_name -> build.bazel.remote.execution.v2.ExecuteResponse.ServerLogsEntry - 0, // 50: build.bazel.remote.execution.v2.ExecuteOperationMetadata.stage:type_name -> build.bazel.remote.execution.v2.ExecutionStage.Value - 13, // 51: build.bazel.remote.execution.v2.ExecuteOperationMetadata.action_digest:type_name -> build.bazel.remote.execution.v2.Digest - 13, // 52: build.bazel.remote.execution.v2.GetActionResultRequest.action_digest:type_name -> build.bazel.remote.execution.v2.Digest - 13, // 53: build.bazel.remote.execution.v2.UpdateActionResultRequest.action_digest:type_name -> build.bazel.remote.execution.v2.Digest - 15, // 54: build.bazel.remote.execution.v2.UpdateActionResultRequest.action_result:type_name -> build.bazel.remote.execution.v2.ActionResult - 21, // 55: build.bazel.remote.execution.v2.UpdateActionResultRequest.results_cache_policy:type_name -> build.bazel.remote.execution.v2.ResultsCachePolicy - 13, // 56: build.bazel.remote.execution.v2.FindMissingBlobsRequest.blob_digests:type_name -> build.bazel.remote.execution.v2.Digest - 13, // 57: build.bazel.remote.execution.v2.FindMissingBlobsResponse.missing_blob_digests:type_name -> build.bazel.remote.execution.v2.Digest - 52, // 58: build.bazel.remote.execution.v2.BatchUpdateBlobsRequest.requests:type_name -> build.bazel.remote.execution.v2.BatchUpdateBlobsRequest.Request - 53, // 59: build.bazel.remote.execution.v2.BatchUpdateBlobsResponse.responses:type_name -> build.bazel.remote.execution.v2.BatchUpdateBlobsResponse.Response - 13, // 60: build.bazel.remote.execution.v2.BatchReadBlobsRequest.digests:type_name -> build.bazel.remote.execution.v2.Digest - 3, // 61: build.bazel.remote.execution.v2.BatchReadBlobsRequest.acceptable_compressors:type_name -> build.bazel.remote.execution.v2.Compressor.Value - 54, // 62: build.bazel.remote.execution.v2.BatchReadBlobsResponse.responses:type_name -> build.bazel.remote.execution.v2.BatchReadBlobsResponse.Response - 13, // 63: build.bazel.remote.execution.v2.GetTreeRequest.root_digest:type_name -> build.bazel.remote.execution.v2.Digest - 7, // 64: build.bazel.remote.execution.v2.GetTreeResponse.directories:type_name -> build.bazel.remote.execution.v2.Directory - 45, // 65: build.bazel.remote.execution.v2.ServerCapabilities.cache_capabilities:type_name -> build.bazel.remote.execution.v2.CacheCapabilities - 46, // 66: build.bazel.remote.execution.v2.ServerCapabilities.execution_capabilities:type_name -> build.bazel.remote.execution.v2.ExecutionCapabilities - 61, // 67: build.bazel.remote.execution.v2.ServerCapabilities.deprecated_api_version:type_name -> build.bazel.semver.SemVer - 61, // 68: build.bazel.remote.execution.v2.ServerCapabilities.low_api_version:type_name -> build.bazel.semver.SemVer - 61, // 69: build.bazel.remote.execution.v2.ServerCapabilities.high_api_version:type_name -> build.bazel.semver.SemVer - 55, // 70: build.bazel.remote.execution.v2.PriorityCapabilities.priorities:type_name -> build.bazel.remote.execution.v2.PriorityCapabilities.PriorityRange - 1, // 71: build.bazel.remote.execution.v2.CacheCapabilities.digest_functions:type_name -> build.bazel.remote.execution.v2.DigestFunction.Value - 41, // 72: build.bazel.remote.execution.v2.CacheCapabilities.action_cache_update_capabilities:type_name -> build.bazel.remote.execution.v2.ActionCacheUpdateCapabilities - 42, // 73: build.bazel.remote.execution.v2.CacheCapabilities.cache_priority_capabilities:type_name -> build.bazel.remote.execution.v2.PriorityCapabilities - 2, // 74: build.bazel.remote.execution.v2.CacheCapabilities.symlink_absolute_path_strategy:type_name -> build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy.Value - 3, // 75: build.bazel.remote.execution.v2.CacheCapabilities.supported_compressors:type_name -> build.bazel.remote.execution.v2.Compressor.Value - 3, // 76: build.bazel.remote.execution.v2.CacheCapabilities.supported_batch_update_compressors:type_name -> build.bazel.remote.execution.v2.Compressor.Value - 1, // 77: build.bazel.remote.execution.v2.ExecutionCapabilities.digest_function:type_name -> build.bazel.remote.execution.v2.DigestFunction.Value - 42, // 78: build.bazel.remote.execution.v2.ExecutionCapabilities.execution_priority_capabilities:type_name -> build.bazel.remote.execution.v2.PriorityCapabilities - 47, // 79: build.bazel.remote.execution.v2.RequestMetadata.tool_details:type_name -> build.bazel.remote.execution.v2.ToolDetails - 23, // 80: build.bazel.remote.execution.v2.ExecuteResponse.ServerLogsEntry.value:type_name -> build.bazel.remote.execution.v2.LogFile - 13, // 81: build.bazel.remote.execution.v2.BatchUpdateBlobsRequest.Request.digest:type_name -> build.bazel.remote.execution.v2.Digest - 3, // 82: build.bazel.remote.execution.v2.BatchUpdateBlobsRequest.Request.compressor:type_name -> build.bazel.remote.execution.v2.Compressor.Value - 13, // 83: build.bazel.remote.execution.v2.BatchUpdateBlobsResponse.Response.digest:type_name -> build.bazel.remote.execution.v2.Digest - 60, // 84: build.bazel.remote.execution.v2.BatchUpdateBlobsResponse.Response.status:type_name -> google.rpc.Status - 13, // 85: build.bazel.remote.execution.v2.BatchReadBlobsResponse.Response.digest:type_name -> build.bazel.remote.execution.v2.Digest - 3, // 86: build.bazel.remote.execution.v2.BatchReadBlobsResponse.Response.compressor:type_name -> build.bazel.remote.execution.v2.Compressor.Value - 60, // 87: build.bazel.remote.execution.v2.BatchReadBlobsResponse.Response.status:type_name -> google.rpc.Status - 22, // 88: build.bazel.remote.execution.v2.Execution.Execute:input_type -> build.bazel.remote.execution.v2.ExecuteRequest - 27, // 89: build.bazel.remote.execution.v2.Execution.WaitExecution:input_type -> build.bazel.remote.execution.v2.WaitExecutionRequest - 28, // 90: build.bazel.remote.execution.v2.ActionCache.GetActionResult:input_type -> build.bazel.remote.execution.v2.GetActionResultRequest - 29, // 91: build.bazel.remote.execution.v2.ActionCache.UpdateActionResult:input_type -> build.bazel.remote.execution.v2.UpdateActionResultRequest - 30, // 92: build.bazel.remote.execution.v2.ContentAddressableStorage.FindMissingBlobs:input_type -> build.bazel.remote.execution.v2.FindMissingBlobsRequest - 32, // 93: build.bazel.remote.execution.v2.ContentAddressableStorage.BatchUpdateBlobs:input_type -> build.bazel.remote.execution.v2.BatchUpdateBlobsRequest - 34, // 94: build.bazel.remote.execution.v2.ContentAddressableStorage.BatchReadBlobs:input_type -> build.bazel.remote.execution.v2.BatchReadBlobsRequest - 36, // 95: build.bazel.remote.execution.v2.ContentAddressableStorage.GetTree:input_type -> build.bazel.remote.execution.v2.GetTreeRequest - 38, // 96: build.bazel.remote.execution.v2.Capabilities.GetCapabilities:input_type -> build.bazel.remote.execution.v2.GetCapabilitiesRequest - 62, // 97: build.bazel.remote.execution.v2.Execution.Execute:output_type -> google.longrunning.Operation - 62, // 98: build.bazel.remote.execution.v2.Execution.WaitExecution:output_type -> google.longrunning.Operation - 15, // 99: build.bazel.remote.execution.v2.ActionCache.GetActionResult:output_type -> build.bazel.remote.execution.v2.ActionResult - 15, // 100: build.bazel.remote.execution.v2.ActionCache.UpdateActionResult:output_type -> build.bazel.remote.execution.v2.ActionResult - 31, // 101: build.bazel.remote.execution.v2.ContentAddressableStorage.FindMissingBlobs:output_type -> build.bazel.remote.execution.v2.FindMissingBlobsResponse - 33, // 102: build.bazel.remote.execution.v2.ContentAddressableStorage.BatchUpdateBlobs:output_type -> build.bazel.remote.execution.v2.BatchUpdateBlobsResponse - 35, // 103: build.bazel.remote.execution.v2.ContentAddressableStorage.BatchReadBlobs:output_type -> build.bazel.remote.execution.v2.BatchReadBlobsResponse - 37, // 104: build.bazel.remote.execution.v2.ContentAddressableStorage.GetTree:output_type -> build.bazel.remote.execution.v2.GetTreeResponse - 39, // 105: build.bazel.remote.execution.v2.Capabilities.GetCapabilities:output_type -> build.bazel.remote.execution.v2.ServerCapabilities - 97, // [97:106] is the sub-list for method output_type - 88, // [88:97] is the sub-list for method input_type - 88, // [88:88] is the sub-list for extension type_name - 88, // [88:88] is the sub-list for extension extendee - 0, // [0:88] is the sub-list for field type_name + 14, // 0: build.bazel.remote.execution.v2.Action.command_digest:type_name -> build.bazel.remote.execution.v2.Digest + 14, // 1: build.bazel.remote.execution.v2.Action.input_root_digest:type_name -> build.bazel.remote.execution.v2.Digest + 57, // 2: build.bazel.remote.execution.v2.Action.timeout:type_name -> google.protobuf.Duration + 7, // 3: build.bazel.remote.execution.v2.Action.platform:type_name -> build.bazel.remote.execution.v2.Platform + 50, // 4: build.bazel.remote.execution.v2.Command.environment_variables:type_name -> build.bazel.remote.execution.v2.Command.EnvironmentVariable + 7, // 5: build.bazel.remote.execution.v2.Command.platform:type_name -> build.bazel.remote.execution.v2.Platform + 0, // 6: build.bazel.remote.execution.v2.Command.output_directory_format:type_name -> build.bazel.remote.execution.v2.Command.OutputDirectoryFormat + 51, // 7: build.bazel.remote.execution.v2.Platform.properties:type_name -> build.bazel.remote.execution.v2.Platform.Property + 11, // 8: build.bazel.remote.execution.v2.Directory.files:type_name -> build.bazel.remote.execution.v2.FileNode + 12, // 9: build.bazel.remote.execution.v2.Directory.directories:type_name -> build.bazel.remote.execution.v2.DirectoryNode + 13, // 10: build.bazel.remote.execution.v2.Directory.symlinks:type_name -> build.bazel.remote.execution.v2.SymlinkNode + 10, // 11: build.bazel.remote.execution.v2.Directory.node_properties:type_name -> build.bazel.remote.execution.v2.NodeProperties + 9, // 12: build.bazel.remote.execution.v2.NodeProperties.properties:type_name -> build.bazel.remote.execution.v2.NodeProperty + 58, // 13: build.bazel.remote.execution.v2.NodeProperties.mtime:type_name -> google.protobuf.Timestamp + 59, // 14: build.bazel.remote.execution.v2.NodeProperties.unix_mode:type_name -> google.protobuf.UInt32Value + 14, // 15: build.bazel.remote.execution.v2.FileNode.digest:type_name -> build.bazel.remote.execution.v2.Digest + 10, // 16: build.bazel.remote.execution.v2.FileNode.node_properties:type_name -> build.bazel.remote.execution.v2.NodeProperties + 14, // 17: build.bazel.remote.execution.v2.DirectoryNode.digest:type_name -> build.bazel.remote.execution.v2.Digest + 10, // 18: build.bazel.remote.execution.v2.SymlinkNode.node_properties:type_name -> build.bazel.remote.execution.v2.NodeProperties + 58, // 19: build.bazel.remote.execution.v2.ExecutedActionMetadata.queued_timestamp:type_name -> google.protobuf.Timestamp + 58, // 20: build.bazel.remote.execution.v2.ExecutedActionMetadata.worker_start_timestamp:type_name -> google.protobuf.Timestamp + 58, // 21: build.bazel.remote.execution.v2.ExecutedActionMetadata.worker_completed_timestamp:type_name -> google.protobuf.Timestamp + 58, // 22: build.bazel.remote.execution.v2.ExecutedActionMetadata.input_fetch_start_timestamp:type_name -> google.protobuf.Timestamp + 58, // 23: build.bazel.remote.execution.v2.ExecutedActionMetadata.input_fetch_completed_timestamp:type_name -> google.protobuf.Timestamp + 58, // 24: build.bazel.remote.execution.v2.ExecutedActionMetadata.execution_start_timestamp:type_name -> google.protobuf.Timestamp + 58, // 25: build.bazel.remote.execution.v2.ExecutedActionMetadata.execution_completed_timestamp:type_name -> google.protobuf.Timestamp + 57, // 26: build.bazel.remote.execution.v2.ExecutedActionMetadata.virtual_execution_duration:type_name -> google.protobuf.Duration + 58, // 27: build.bazel.remote.execution.v2.ExecutedActionMetadata.output_upload_start_timestamp:type_name -> google.protobuf.Timestamp + 58, // 28: build.bazel.remote.execution.v2.ExecutedActionMetadata.output_upload_completed_timestamp:type_name -> google.protobuf.Timestamp + 60, // 29: build.bazel.remote.execution.v2.ExecutedActionMetadata.auxiliary_metadata:type_name -> google.protobuf.Any + 17, // 30: build.bazel.remote.execution.v2.ActionResult.output_files:type_name -> build.bazel.remote.execution.v2.OutputFile + 20, // 31: build.bazel.remote.execution.v2.ActionResult.output_file_symlinks:type_name -> build.bazel.remote.execution.v2.OutputSymlink + 20, // 32: build.bazel.remote.execution.v2.ActionResult.output_symlinks:type_name -> build.bazel.remote.execution.v2.OutputSymlink + 19, // 33: build.bazel.remote.execution.v2.ActionResult.output_directories:type_name -> build.bazel.remote.execution.v2.OutputDirectory + 20, // 34: build.bazel.remote.execution.v2.ActionResult.output_directory_symlinks:type_name -> build.bazel.remote.execution.v2.OutputSymlink + 14, // 35: build.bazel.remote.execution.v2.ActionResult.stdout_digest:type_name -> build.bazel.remote.execution.v2.Digest + 14, // 36: build.bazel.remote.execution.v2.ActionResult.stderr_digest:type_name -> build.bazel.remote.execution.v2.Digest + 15, // 37: build.bazel.remote.execution.v2.ActionResult.execution_metadata:type_name -> build.bazel.remote.execution.v2.ExecutedActionMetadata + 14, // 38: build.bazel.remote.execution.v2.OutputFile.digest:type_name -> build.bazel.remote.execution.v2.Digest + 10, // 39: build.bazel.remote.execution.v2.OutputFile.node_properties:type_name -> build.bazel.remote.execution.v2.NodeProperties + 8, // 40: build.bazel.remote.execution.v2.Tree.root:type_name -> build.bazel.remote.execution.v2.Directory + 8, // 41: build.bazel.remote.execution.v2.Tree.children:type_name -> build.bazel.remote.execution.v2.Directory + 14, // 42: build.bazel.remote.execution.v2.OutputDirectory.tree_digest:type_name -> build.bazel.remote.execution.v2.Digest + 14, // 43: build.bazel.remote.execution.v2.OutputDirectory.root_directory_digest:type_name -> build.bazel.remote.execution.v2.Digest + 10, // 44: build.bazel.remote.execution.v2.OutputSymlink.node_properties:type_name -> build.bazel.remote.execution.v2.NodeProperties + 14, // 45: build.bazel.remote.execution.v2.ExecuteRequest.action_digest:type_name -> build.bazel.remote.execution.v2.Digest + 21, // 46: build.bazel.remote.execution.v2.ExecuteRequest.execution_policy:type_name -> build.bazel.remote.execution.v2.ExecutionPolicy + 22, // 47: build.bazel.remote.execution.v2.ExecuteRequest.results_cache_policy:type_name -> build.bazel.remote.execution.v2.ResultsCachePolicy + 2, // 48: build.bazel.remote.execution.v2.ExecuteRequest.digest_function:type_name -> build.bazel.remote.execution.v2.DigestFunction.Value + 14, // 49: build.bazel.remote.execution.v2.LogFile.digest:type_name -> build.bazel.remote.execution.v2.Digest + 16, // 50: build.bazel.remote.execution.v2.ExecuteResponse.result:type_name -> build.bazel.remote.execution.v2.ActionResult + 61, // 51: build.bazel.remote.execution.v2.ExecuteResponse.status:type_name -> google.rpc.Status + 52, // 52: build.bazel.remote.execution.v2.ExecuteResponse.server_logs:type_name -> build.bazel.remote.execution.v2.ExecuteResponse.ServerLogsEntry + 1, // 53: build.bazel.remote.execution.v2.ExecuteOperationMetadata.stage:type_name -> build.bazel.remote.execution.v2.ExecutionStage.Value + 14, // 54: build.bazel.remote.execution.v2.ExecuteOperationMetadata.action_digest:type_name -> build.bazel.remote.execution.v2.Digest + 15, // 55: build.bazel.remote.execution.v2.ExecuteOperationMetadata.partial_execution_metadata:type_name -> build.bazel.remote.execution.v2.ExecutedActionMetadata + 14, // 56: build.bazel.remote.execution.v2.GetActionResultRequest.action_digest:type_name -> build.bazel.remote.execution.v2.Digest + 2, // 57: build.bazel.remote.execution.v2.GetActionResultRequest.digest_function:type_name -> build.bazel.remote.execution.v2.DigestFunction.Value + 14, // 58: build.bazel.remote.execution.v2.UpdateActionResultRequest.action_digest:type_name -> build.bazel.remote.execution.v2.Digest + 16, // 59: build.bazel.remote.execution.v2.UpdateActionResultRequest.action_result:type_name -> build.bazel.remote.execution.v2.ActionResult + 22, // 60: build.bazel.remote.execution.v2.UpdateActionResultRequest.results_cache_policy:type_name -> build.bazel.remote.execution.v2.ResultsCachePolicy + 2, // 61: build.bazel.remote.execution.v2.UpdateActionResultRequest.digest_function:type_name -> build.bazel.remote.execution.v2.DigestFunction.Value + 14, // 62: build.bazel.remote.execution.v2.FindMissingBlobsRequest.blob_digests:type_name -> build.bazel.remote.execution.v2.Digest + 2, // 63: build.bazel.remote.execution.v2.FindMissingBlobsRequest.digest_function:type_name -> build.bazel.remote.execution.v2.DigestFunction.Value + 14, // 64: build.bazel.remote.execution.v2.FindMissingBlobsResponse.missing_blob_digests:type_name -> build.bazel.remote.execution.v2.Digest + 53, // 65: build.bazel.remote.execution.v2.BatchUpdateBlobsRequest.requests:type_name -> build.bazel.remote.execution.v2.BatchUpdateBlobsRequest.Request + 2, // 66: build.bazel.remote.execution.v2.BatchUpdateBlobsRequest.digest_function:type_name -> build.bazel.remote.execution.v2.DigestFunction.Value + 54, // 67: build.bazel.remote.execution.v2.BatchUpdateBlobsResponse.responses:type_name -> build.bazel.remote.execution.v2.BatchUpdateBlobsResponse.Response + 14, // 68: build.bazel.remote.execution.v2.BatchReadBlobsRequest.digests:type_name -> build.bazel.remote.execution.v2.Digest + 4, // 69: build.bazel.remote.execution.v2.BatchReadBlobsRequest.acceptable_compressors:type_name -> build.bazel.remote.execution.v2.Compressor.Value + 2, // 70: build.bazel.remote.execution.v2.BatchReadBlobsRequest.digest_function:type_name -> build.bazel.remote.execution.v2.DigestFunction.Value + 55, // 71: build.bazel.remote.execution.v2.BatchReadBlobsResponse.responses:type_name -> build.bazel.remote.execution.v2.BatchReadBlobsResponse.Response + 14, // 72: build.bazel.remote.execution.v2.GetTreeRequest.root_digest:type_name -> build.bazel.remote.execution.v2.Digest + 2, // 73: build.bazel.remote.execution.v2.GetTreeRequest.digest_function:type_name -> build.bazel.remote.execution.v2.DigestFunction.Value + 8, // 74: build.bazel.remote.execution.v2.GetTreeResponse.directories:type_name -> build.bazel.remote.execution.v2.Directory + 46, // 75: build.bazel.remote.execution.v2.ServerCapabilities.cache_capabilities:type_name -> build.bazel.remote.execution.v2.CacheCapabilities + 47, // 76: build.bazel.remote.execution.v2.ServerCapabilities.execution_capabilities:type_name -> build.bazel.remote.execution.v2.ExecutionCapabilities + 62, // 77: build.bazel.remote.execution.v2.ServerCapabilities.deprecated_api_version:type_name -> build.bazel.semver.SemVer + 62, // 78: build.bazel.remote.execution.v2.ServerCapabilities.low_api_version:type_name -> build.bazel.semver.SemVer + 62, // 79: build.bazel.remote.execution.v2.ServerCapabilities.high_api_version:type_name -> build.bazel.semver.SemVer + 56, // 80: build.bazel.remote.execution.v2.PriorityCapabilities.priorities:type_name -> build.bazel.remote.execution.v2.PriorityCapabilities.PriorityRange + 2, // 81: build.bazel.remote.execution.v2.CacheCapabilities.digest_functions:type_name -> build.bazel.remote.execution.v2.DigestFunction.Value + 42, // 82: build.bazel.remote.execution.v2.CacheCapabilities.action_cache_update_capabilities:type_name -> build.bazel.remote.execution.v2.ActionCacheUpdateCapabilities + 43, // 83: build.bazel.remote.execution.v2.CacheCapabilities.cache_priority_capabilities:type_name -> build.bazel.remote.execution.v2.PriorityCapabilities + 3, // 84: build.bazel.remote.execution.v2.CacheCapabilities.symlink_absolute_path_strategy:type_name -> build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy.Value + 4, // 85: build.bazel.remote.execution.v2.CacheCapabilities.supported_compressors:type_name -> build.bazel.remote.execution.v2.Compressor.Value + 4, // 86: build.bazel.remote.execution.v2.CacheCapabilities.supported_batch_update_compressors:type_name -> build.bazel.remote.execution.v2.Compressor.Value + 2, // 87: build.bazel.remote.execution.v2.ExecutionCapabilities.digest_function:type_name -> build.bazel.remote.execution.v2.DigestFunction.Value + 43, // 88: build.bazel.remote.execution.v2.ExecutionCapabilities.execution_priority_capabilities:type_name -> build.bazel.remote.execution.v2.PriorityCapabilities + 2, // 89: build.bazel.remote.execution.v2.ExecutionCapabilities.digest_functions:type_name -> build.bazel.remote.execution.v2.DigestFunction.Value + 48, // 90: build.bazel.remote.execution.v2.RequestMetadata.tool_details:type_name -> build.bazel.remote.execution.v2.ToolDetails + 24, // 91: build.bazel.remote.execution.v2.ExecuteResponse.ServerLogsEntry.value:type_name -> build.bazel.remote.execution.v2.LogFile + 14, // 92: build.bazel.remote.execution.v2.BatchUpdateBlobsRequest.Request.digest:type_name -> build.bazel.remote.execution.v2.Digest + 4, // 93: build.bazel.remote.execution.v2.BatchUpdateBlobsRequest.Request.compressor:type_name -> build.bazel.remote.execution.v2.Compressor.Value + 14, // 94: build.bazel.remote.execution.v2.BatchUpdateBlobsResponse.Response.digest:type_name -> build.bazel.remote.execution.v2.Digest + 61, // 95: build.bazel.remote.execution.v2.BatchUpdateBlobsResponse.Response.status:type_name -> google.rpc.Status + 14, // 96: build.bazel.remote.execution.v2.BatchReadBlobsResponse.Response.digest:type_name -> build.bazel.remote.execution.v2.Digest + 4, // 97: build.bazel.remote.execution.v2.BatchReadBlobsResponse.Response.compressor:type_name -> build.bazel.remote.execution.v2.Compressor.Value + 61, // 98: build.bazel.remote.execution.v2.BatchReadBlobsResponse.Response.status:type_name -> google.rpc.Status + 23, // 99: build.bazel.remote.execution.v2.Execution.Execute:input_type -> build.bazel.remote.execution.v2.ExecuteRequest + 28, // 100: build.bazel.remote.execution.v2.Execution.WaitExecution:input_type -> build.bazel.remote.execution.v2.WaitExecutionRequest + 29, // 101: build.bazel.remote.execution.v2.ActionCache.GetActionResult:input_type -> build.bazel.remote.execution.v2.GetActionResultRequest + 30, // 102: build.bazel.remote.execution.v2.ActionCache.UpdateActionResult:input_type -> build.bazel.remote.execution.v2.UpdateActionResultRequest + 31, // 103: build.bazel.remote.execution.v2.ContentAddressableStorage.FindMissingBlobs:input_type -> build.bazel.remote.execution.v2.FindMissingBlobsRequest + 33, // 104: build.bazel.remote.execution.v2.ContentAddressableStorage.BatchUpdateBlobs:input_type -> build.bazel.remote.execution.v2.BatchUpdateBlobsRequest + 35, // 105: build.bazel.remote.execution.v2.ContentAddressableStorage.BatchReadBlobs:input_type -> build.bazel.remote.execution.v2.BatchReadBlobsRequest + 37, // 106: build.bazel.remote.execution.v2.ContentAddressableStorage.GetTree:input_type -> build.bazel.remote.execution.v2.GetTreeRequest + 39, // 107: build.bazel.remote.execution.v2.Capabilities.GetCapabilities:input_type -> build.bazel.remote.execution.v2.GetCapabilitiesRequest + 63, // 108: build.bazel.remote.execution.v2.Execution.Execute:output_type -> google.longrunning.Operation + 63, // 109: build.bazel.remote.execution.v2.Execution.WaitExecution:output_type -> google.longrunning.Operation + 16, // 110: build.bazel.remote.execution.v2.ActionCache.GetActionResult:output_type -> build.bazel.remote.execution.v2.ActionResult + 16, // 111: build.bazel.remote.execution.v2.ActionCache.UpdateActionResult:output_type -> build.bazel.remote.execution.v2.ActionResult + 32, // 112: build.bazel.remote.execution.v2.ContentAddressableStorage.FindMissingBlobs:output_type -> build.bazel.remote.execution.v2.FindMissingBlobsResponse + 34, // 113: build.bazel.remote.execution.v2.ContentAddressableStorage.BatchUpdateBlobs:output_type -> build.bazel.remote.execution.v2.BatchUpdateBlobsResponse + 36, // 114: build.bazel.remote.execution.v2.ContentAddressableStorage.BatchReadBlobs:output_type -> build.bazel.remote.execution.v2.BatchReadBlobsResponse + 38, // 115: build.bazel.remote.execution.v2.ContentAddressableStorage.GetTree:output_type -> build.bazel.remote.execution.v2.GetTreeResponse + 40, // 116: build.bazel.remote.execution.v2.Capabilities.GetCapabilities:output_type -> build.bazel.remote.execution.v2.ServerCapabilities + 108, // [108:117] is the sub-list for method output_type + 99, // [99:108] is the sub-list for method input_type + 99, // [99:99] is the sub-list for extension type_name + 99, // [99:99] is the sub-list for extension extendee + 0, // [0:99] is the sub-list for field type_name } func init() { file_build_bazel_remote_execution_v2_remote_execution_proto_init() } @@ -5492,7 +5995,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Action); i { case 0: return &v.state @@ -5504,7 +6007,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*Command); i { case 0: return &v.state @@ -5516,7 +6019,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*Platform); i { case 0: return &v.state @@ -5528,7 +6031,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*Directory); i { case 0: return &v.state @@ -5540,7 +6043,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*NodeProperty); i { case 0: return &v.state @@ -5552,7 +6055,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*NodeProperties); i { case 0: return &v.state @@ -5564,7 +6067,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*FileNode); i { case 0: return &v.state @@ -5576,7 +6079,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*DirectoryNode); i { case 0: return &v.state @@ -5588,7 +6091,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*SymlinkNode); i { case 0: return &v.state @@ -5600,7 +6103,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*Digest); i { case 0: return &v.state @@ -5612,7 +6115,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*ExecutedActionMetadata); i { case 0: return &v.state @@ -5624,7 +6127,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*ActionResult); i { case 0: return &v.state @@ -5636,7 +6139,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*OutputFile); i { case 0: return &v.state @@ -5648,7 +6151,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*Tree); i { case 0: return &v.state @@ -5660,7 +6163,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[14].Exporter = func(v any, i int) any { switch v := v.(*OutputDirectory); i { case 0: return &v.state @@ -5672,7 +6175,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[15].Exporter = func(v any, i int) any { switch v := v.(*OutputSymlink); i { case 0: return &v.state @@ -5684,7 +6187,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[16].Exporter = func(v any, i int) any { switch v := v.(*ExecutionPolicy); i { case 0: return &v.state @@ -5696,7 +6199,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[17].Exporter = func(v any, i int) any { switch v := v.(*ResultsCachePolicy); i { case 0: return &v.state @@ -5708,7 +6211,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[18].Exporter = func(v any, i int) any { switch v := v.(*ExecuteRequest); i { case 0: return &v.state @@ -5720,7 +6223,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[19].Exporter = func(v any, i int) any { switch v := v.(*LogFile); i { case 0: return &v.state @@ -5732,7 +6235,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[20].Exporter = func(v any, i int) any { switch v := v.(*ExecuteResponse); i { case 0: return &v.state @@ -5744,7 +6247,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[21].Exporter = func(v any, i int) any { switch v := v.(*ExecutionStage); i { case 0: return &v.state @@ -5756,7 +6259,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[22].Exporter = func(v any, i int) any { switch v := v.(*ExecuteOperationMetadata); i { case 0: return &v.state @@ -5768,7 +6271,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[23].Exporter = func(v any, i int) any { switch v := v.(*WaitExecutionRequest); i { case 0: return &v.state @@ -5780,7 +6283,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[24].Exporter = func(v any, i int) any { switch v := v.(*GetActionResultRequest); i { case 0: return &v.state @@ -5792,7 +6295,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[25].Exporter = func(v any, i int) any { switch v := v.(*UpdateActionResultRequest); i { case 0: return &v.state @@ -5804,7 +6307,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[26].Exporter = func(v any, i int) any { switch v := v.(*FindMissingBlobsRequest); i { case 0: return &v.state @@ -5816,7 +6319,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[27].Exporter = func(v any, i int) any { switch v := v.(*FindMissingBlobsResponse); i { case 0: return &v.state @@ -5828,7 +6331,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[28].Exporter = func(v any, i int) any { switch v := v.(*BatchUpdateBlobsRequest); i { case 0: return &v.state @@ -5840,7 +6343,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[29].Exporter = func(v any, i int) any { switch v := v.(*BatchUpdateBlobsResponse); i { case 0: return &v.state @@ -5852,7 +6355,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[30].Exporter = func(v any, i int) any { switch v := v.(*BatchReadBlobsRequest); i { case 0: return &v.state @@ -5864,7 +6367,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[31].Exporter = func(v any, i int) any { switch v := v.(*BatchReadBlobsResponse); i { case 0: return &v.state @@ -5876,7 +6379,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[32].Exporter = func(v any, i int) any { switch v := v.(*GetTreeRequest); i { case 0: return &v.state @@ -5888,7 +6391,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[33].Exporter = func(v any, i int) any { switch v := v.(*GetTreeResponse); i { case 0: return &v.state @@ -5900,7 +6403,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[34].Exporter = func(v any, i int) any { switch v := v.(*GetCapabilitiesRequest); i { case 0: return &v.state @@ -5912,7 +6415,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[35].Exporter = func(v any, i int) any { switch v := v.(*ServerCapabilities); i { case 0: return &v.state @@ -5924,7 +6427,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[36].Exporter = func(v any, i int) any { switch v := v.(*DigestFunction); i { case 0: return &v.state @@ -5936,7 +6439,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[37].Exporter = func(v any, i int) any { switch v := v.(*ActionCacheUpdateCapabilities); i { case 0: return &v.state @@ -5948,7 +6451,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[38].Exporter = func(v any, i int) any { switch v := v.(*PriorityCapabilities); i { case 0: return &v.state @@ -5960,7 +6463,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[39].Exporter = func(v any, i int) any { switch v := v.(*SymlinkAbsolutePathStrategy); i { case 0: return &v.state @@ -5972,7 +6475,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[40].Exporter = func(v any, i int) any { switch v := v.(*Compressor); i { case 0: return &v.state @@ -5984,7 +6487,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[41].Exporter = func(v any, i int) any { switch v := v.(*CacheCapabilities); i { case 0: return &v.state @@ -5996,7 +6499,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[42].Exporter = func(v any, i int) any { switch v := v.(*ExecutionCapabilities); i { case 0: return &v.state @@ -6008,7 +6511,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[43].Exporter = func(v any, i int) any { switch v := v.(*ToolDetails); i { case 0: return &v.state @@ -6020,7 +6523,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[44].Exporter = func(v any, i int) any { switch v := v.(*RequestMetadata); i { case 0: return &v.state @@ -6032,7 +6535,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[45].Exporter = func(v any, i int) any { switch v := v.(*Command_EnvironmentVariable); i { case 0: return &v.state @@ -6044,7 +6547,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[46].Exporter = func(v any, i int) any { switch v := v.(*Platform_Property); i { case 0: return &v.state @@ -6056,7 +6559,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[48].Exporter = func(v any, i int) any { switch v := v.(*BatchUpdateBlobsRequest_Request); i { case 0: return &v.state @@ -6068,7 +6571,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[49].Exporter = func(v any, i int) any { switch v := v.(*BatchUpdateBlobsResponse_Response); i { case 0: return &v.state @@ -6080,7 +6583,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[50].Exporter = func(v any, i int) any { switch v := v.(*BatchReadBlobsResponse_Response); i { case 0: return &v.state @@ -6092,7 +6595,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { return nil } } - file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { + file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[51].Exporter = func(v any, i int) any { switch v := v.(*PriorityCapabilities_PriorityRange); i { case 0: return &v.state @@ -6110,7 +6613,7 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_build_bazel_remote_execution_v2_remote_execution_proto_rawDesc, - NumEnums: 4, + NumEnums: 5, NumMessages: 52, NumExtensions: 0, NumServices: 4, @@ -6125,939 +6628,3 @@ func file_build_bazel_remote_execution_v2_remote_execution_proto_init() { file_build_bazel_remote_execution_v2_remote_execution_proto_goTypes = nil file_build_bazel_remote_execution_v2_remote_execution_proto_depIdxs = nil } - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConnInterface - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion6 - -// ExecutionClient is the client API for Execution service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type ExecutionClient interface { - // Execute an action remotely. - // - // In order to execute an action, the client must first upload all of the - // inputs, the - // [Command][build.bazel.remote.execution.v2.Command] to run, and the - // [Action][build.bazel.remote.execution.v2.Action] into the - // [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage]. - // It then calls `Execute` with an `action_digest` referring to them. The - // server will run the action and eventually return the result. - // - // The input `Action`'s fields MUST meet the various canonicalization - // requirements specified in the documentation for their types so that it has - // the same digest as other logically equivalent `Action`s. The server MAY - // enforce the requirements and return errors if a non-canonical input is - // received. It MAY also proceed without verifying some or all of the - // requirements, such as for performance reasons. If the server does not - // verify the requirement, then it will treat the `Action` as distinct from - // another logically equivalent action if they hash differently. - // - // Returns a stream of - // [google.longrunning.Operation][google.longrunning.Operation] messages - // describing the resulting execution, with eventual `response` - // [ExecuteResponse][build.bazel.remote.execution.v2.ExecuteResponse]. The - // `metadata` on the operation is of type - // [ExecuteOperationMetadata][build.bazel.remote.execution.v2.ExecuteOperationMetadata]. - // - // If the client remains connected after the first response is returned after - // the server, then updates are streamed as if the client had called - // [WaitExecution][build.bazel.remote.execution.v2.Execution.WaitExecution] - // until the execution completes or the request reaches an error. The - // operation can also be queried using [Operations - // API][google.longrunning.Operations.GetOperation]. - // - // The server NEED NOT implement other methods or functionality of the - // Operations API. - // - // Errors discovered during creation of the `Operation` will be reported - // as gRPC Status errors, while errors that occurred while running the - // action will be reported in the `status` field of the `ExecuteResponse`. The - // server MUST NOT set the `error` field of the `Operation` proto. - // The possible errors include: - // - // * `INVALID_ARGUMENT`: One or more arguments are invalid. - // * `FAILED_PRECONDITION`: One or more errors occurred in setting up the - // action requested, such as a missing input or command or no worker being - // available. The client may be able to fix the errors and retry. - // * `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to run - // the action. - // * `UNAVAILABLE`: Due to a transient condition, such as all workers being - // occupied (and the server does not support a queue), the action could not - // be started. The client should retry. - // * `INTERNAL`: An internal error occurred in the execution engine or the - // worker. - // * `DEADLINE_EXCEEDED`: The execution timed out. - // * `CANCELLED`: The operation was cancelled by the client. This status is - // only possible if the server implements the Operations API CancelOperation - // method, and it was called for the current execution. - // - // In the case of a missing input or command, the server SHOULD additionally - // send a [PreconditionFailure][google.rpc.PreconditionFailure] error detail - // where, for each requested blob not present in the CAS, there is a - // `Violation` with a `type` of `MISSING` and a `subject` of - // `"blobs/{hash}/{size}"` indicating the digest of the missing blob. - // - // The server does not need to guarantee that a call to this method leads to - // at most one execution of the action. The server MAY execute the action - // multiple times, potentially in parallel. These redundant executions MAY - // continue to run, even if the operation is completed. - Execute(ctx context.Context, in *ExecuteRequest, opts ...grpc.CallOption) (Execution_ExecuteClient, error) - // Wait for an execution operation to complete. When the client initially - // makes the request, the server immediately responds with the current status - // of the execution. The server will leave the request stream open until the - // operation completes, and then respond with the completed operation. The - // server MAY choose to stream additional updates as execution progresses, - // such as to provide an update as to the state of the execution. - WaitExecution(ctx context.Context, in *WaitExecutionRequest, opts ...grpc.CallOption) (Execution_WaitExecutionClient, error) -} - -type executionClient struct { - cc grpc.ClientConnInterface -} - -func NewExecutionClient(cc grpc.ClientConnInterface) ExecutionClient { - return &executionClient{cc} -} - -func (c *executionClient) Execute(ctx context.Context, in *ExecuteRequest, opts ...grpc.CallOption) (Execution_ExecuteClient, error) { - stream, err := c.cc.NewStream(ctx, &_Execution_serviceDesc.Streams[0], "/build.bazel.remote.execution.v2.Execution/Execute", opts...) - if err != nil { - return nil, err - } - x := &executionExecuteClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err - } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil -} - -type Execution_ExecuteClient interface { - Recv() (*longrunning.Operation, error) - grpc.ClientStream -} - -type executionExecuteClient struct { - grpc.ClientStream -} - -func (x *executionExecuteClient) Recv() (*longrunning.Operation, error) { - m := new(longrunning.Operation) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func (c *executionClient) WaitExecution(ctx context.Context, in *WaitExecutionRequest, opts ...grpc.CallOption) (Execution_WaitExecutionClient, error) { - stream, err := c.cc.NewStream(ctx, &_Execution_serviceDesc.Streams[1], "/build.bazel.remote.execution.v2.Execution/WaitExecution", opts...) - if err != nil { - return nil, err - } - x := &executionWaitExecutionClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err - } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil -} - -type Execution_WaitExecutionClient interface { - Recv() (*longrunning.Operation, error) - grpc.ClientStream -} - -type executionWaitExecutionClient struct { - grpc.ClientStream -} - -func (x *executionWaitExecutionClient) Recv() (*longrunning.Operation, error) { - m := new(longrunning.Operation) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -// ExecutionServer is the server API for Execution service. -type ExecutionServer interface { - // Execute an action remotely. - // - // In order to execute an action, the client must first upload all of the - // inputs, the - // [Command][build.bazel.remote.execution.v2.Command] to run, and the - // [Action][build.bazel.remote.execution.v2.Action] into the - // [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage]. - // It then calls `Execute` with an `action_digest` referring to them. The - // server will run the action and eventually return the result. - // - // The input `Action`'s fields MUST meet the various canonicalization - // requirements specified in the documentation for their types so that it has - // the same digest as other logically equivalent `Action`s. The server MAY - // enforce the requirements and return errors if a non-canonical input is - // received. It MAY also proceed without verifying some or all of the - // requirements, such as for performance reasons. If the server does not - // verify the requirement, then it will treat the `Action` as distinct from - // another logically equivalent action if they hash differently. - // - // Returns a stream of - // [google.longrunning.Operation][google.longrunning.Operation] messages - // describing the resulting execution, with eventual `response` - // [ExecuteResponse][build.bazel.remote.execution.v2.ExecuteResponse]. The - // `metadata` on the operation is of type - // [ExecuteOperationMetadata][build.bazel.remote.execution.v2.ExecuteOperationMetadata]. - // - // If the client remains connected after the first response is returned after - // the server, then updates are streamed as if the client had called - // [WaitExecution][build.bazel.remote.execution.v2.Execution.WaitExecution] - // until the execution completes or the request reaches an error. The - // operation can also be queried using [Operations - // API][google.longrunning.Operations.GetOperation]. - // - // The server NEED NOT implement other methods or functionality of the - // Operations API. - // - // Errors discovered during creation of the `Operation` will be reported - // as gRPC Status errors, while errors that occurred while running the - // action will be reported in the `status` field of the `ExecuteResponse`. The - // server MUST NOT set the `error` field of the `Operation` proto. - // The possible errors include: - // - // * `INVALID_ARGUMENT`: One or more arguments are invalid. - // * `FAILED_PRECONDITION`: One or more errors occurred in setting up the - // action requested, such as a missing input or command or no worker being - // available. The client may be able to fix the errors and retry. - // * `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to run - // the action. - // * `UNAVAILABLE`: Due to a transient condition, such as all workers being - // occupied (and the server does not support a queue), the action could not - // be started. The client should retry. - // * `INTERNAL`: An internal error occurred in the execution engine or the - // worker. - // * `DEADLINE_EXCEEDED`: The execution timed out. - // * `CANCELLED`: The operation was cancelled by the client. This status is - // only possible if the server implements the Operations API CancelOperation - // method, and it was called for the current execution. - // - // In the case of a missing input or command, the server SHOULD additionally - // send a [PreconditionFailure][google.rpc.PreconditionFailure] error detail - // where, for each requested blob not present in the CAS, there is a - // `Violation` with a `type` of `MISSING` and a `subject` of - // `"blobs/{hash}/{size}"` indicating the digest of the missing blob. - // - // The server does not need to guarantee that a call to this method leads to - // at most one execution of the action. The server MAY execute the action - // multiple times, potentially in parallel. These redundant executions MAY - // continue to run, even if the operation is completed. - Execute(*ExecuteRequest, Execution_ExecuteServer) error - // Wait for an execution operation to complete. When the client initially - // makes the request, the server immediately responds with the current status - // of the execution. The server will leave the request stream open until the - // operation completes, and then respond with the completed operation. The - // server MAY choose to stream additional updates as execution progresses, - // such as to provide an update as to the state of the execution. - WaitExecution(*WaitExecutionRequest, Execution_WaitExecutionServer) error -} - -// UnimplementedExecutionServer can be embedded to have forward compatible implementations. -type UnimplementedExecutionServer struct { -} - -func (*UnimplementedExecutionServer) Execute(*ExecuteRequest, Execution_ExecuteServer) error { - return status1.Errorf(codes.Unimplemented, "method Execute not implemented") -} -func (*UnimplementedExecutionServer) WaitExecution(*WaitExecutionRequest, Execution_WaitExecutionServer) error { - return status1.Errorf(codes.Unimplemented, "method WaitExecution not implemented") -} - -func RegisterExecutionServer(s *grpc.Server, srv ExecutionServer) { - s.RegisterService(&_Execution_serviceDesc, srv) -} - -func _Execution_Execute_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(ExecuteRequest) - if err := stream.RecvMsg(m); err != nil { - return err - } - return srv.(ExecutionServer).Execute(m, &executionExecuteServer{stream}) -} - -type Execution_ExecuteServer interface { - Send(*longrunning.Operation) error - grpc.ServerStream -} - -type executionExecuteServer struct { - grpc.ServerStream -} - -func (x *executionExecuteServer) Send(m *longrunning.Operation) error { - return x.ServerStream.SendMsg(m) -} - -func _Execution_WaitExecution_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(WaitExecutionRequest) - if err := stream.RecvMsg(m); err != nil { - return err - } - return srv.(ExecutionServer).WaitExecution(m, &executionWaitExecutionServer{stream}) -} - -type Execution_WaitExecutionServer interface { - Send(*longrunning.Operation) error - grpc.ServerStream -} - -type executionWaitExecutionServer struct { - grpc.ServerStream -} - -func (x *executionWaitExecutionServer) Send(m *longrunning.Operation) error { - return x.ServerStream.SendMsg(m) -} - -var _Execution_serviceDesc = grpc.ServiceDesc{ - ServiceName: "build.bazel.remote.execution.v2.Execution", - HandlerType: (*ExecutionServer)(nil), - Methods: []grpc.MethodDesc{}, - Streams: []grpc.StreamDesc{ - { - StreamName: "Execute", - Handler: _Execution_Execute_Handler, - ServerStreams: true, - }, - { - StreamName: "WaitExecution", - Handler: _Execution_WaitExecution_Handler, - ServerStreams: true, - }, - }, - Metadata: "build/bazel/remote/execution/v2/remote_execution.proto", -} - -// ActionCacheClient is the client API for ActionCache service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type ActionCacheClient interface { - // Retrieve a cached execution result. - // - // Implementations SHOULD ensure that any blobs referenced from the - // [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage] - // are available at the time of returning the - // [ActionResult][build.bazel.remote.execution.v2.ActionResult] and will be - // for some period of time afterwards. The lifetimes of the referenced blobs SHOULD be increased - // if necessary and applicable. - // - // Errors: - // - // * `NOT_FOUND`: The requested `ActionResult` is not in the cache. - GetActionResult(ctx context.Context, in *GetActionResultRequest, opts ...grpc.CallOption) (*ActionResult, error) - // Upload a new execution result. - // - // In order to allow the server to perform access control based on the type of - // action, and to assist with client debugging, the client MUST first upload - // the [Action][build.bazel.remote.execution.v2.Execution] that produced the - // result, along with its - // [Command][build.bazel.remote.execution.v2.Command], into the - // `ContentAddressableStorage`. - // - // Server implementations MAY modify the - // `UpdateActionResultRequest.action_result` and return an equivalent value. - // - // Errors: - // - // * `INVALID_ARGUMENT`: One or more arguments are invalid. - // * `FAILED_PRECONDITION`: One or more errors occurred in updating the - // action result, such as a missing command or action. - // * `RESOURCE_EXHAUSTED`: There is insufficient storage space to add the - // entry to the cache. - UpdateActionResult(ctx context.Context, in *UpdateActionResultRequest, opts ...grpc.CallOption) (*ActionResult, error) -} - -type actionCacheClient struct { - cc grpc.ClientConnInterface -} - -func NewActionCacheClient(cc grpc.ClientConnInterface) ActionCacheClient { - return &actionCacheClient{cc} -} - -func (c *actionCacheClient) GetActionResult(ctx context.Context, in *GetActionResultRequest, opts ...grpc.CallOption) (*ActionResult, error) { - out := new(ActionResult) - err := c.cc.Invoke(ctx, "/build.bazel.remote.execution.v2.ActionCache/GetActionResult", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *actionCacheClient) UpdateActionResult(ctx context.Context, in *UpdateActionResultRequest, opts ...grpc.CallOption) (*ActionResult, error) { - out := new(ActionResult) - err := c.cc.Invoke(ctx, "/build.bazel.remote.execution.v2.ActionCache/UpdateActionResult", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// ActionCacheServer is the server API for ActionCache service. -type ActionCacheServer interface { - // Retrieve a cached execution result. - // - // Implementations SHOULD ensure that any blobs referenced from the - // [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage] - // are available at the time of returning the - // [ActionResult][build.bazel.remote.execution.v2.ActionResult] and will be - // for some period of time afterwards. The lifetimes of the referenced blobs SHOULD be increased - // if necessary and applicable. - // - // Errors: - // - // * `NOT_FOUND`: The requested `ActionResult` is not in the cache. - GetActionResult(context.Context, *GetActionResultRequest) (*ActionResult, error) - // Upload a new execution result. - // - // In order to allow the server to perform access control based on the type of - // action, and to assist with client debugging, the client MUST first upload - // the [Action][build.bazel.remote.execution.v2.Execution] that produced the - // result, along with its - // [Command][build.bazel.remote.execution.v2.Command], into the - // `ContentAddressableStorage`. - // - // Server implementations MAY modify the - // `UpdateActionResultRequest.action_result` and return an equivalent value. - // - // Errors: - // - // * `INVALID_ARGUMENT`: One or more arguments are invalid. - // * `FAILED_PRECONDITION`: One or more errors occurred in updating the - // action result, such as a missing command or action. - // * `RESOURCE_EXHAUSTED`: There is insufficient storage space to add the - // entry to the cache. - UpdateActionResult(context.Context, *UpdateActionResultRequest) (*ActionResult, error) -} - -// UnimplementedActionCacheServer can be embedded to have forward compatible implementations. -type UnimplementedActionCacheServer struct { -} - -func (*UnimplementedActionCacheServer) GetActionResult(context.Context, *GetActionResultRequest) (*ActionResult, error) { - return nil, status1.Errorf(codes.Unimplemented, "method GetActionResult not implemented") -} -func (*UnimplementedActionCacheServer) UpdateActionResult(context.Context, *UpdateActionResultRequest) (*ActionResult, error) { - return nil, status1.Errorf(codes.Unimplemented, "method UpdateActionResult not implemented") -} - -func RegisterActionCacheServer(s *grpc.Server, srv ActionCacheServer) { - s.RegisterService(&_ActionCache_serviceDesc, srv) -} - -func _ActionCache_GetActionResult_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetActionResultRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ActionCacheServer).GetActionResult(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/build.bazel.remote.execution.v2.ActionCache/GetActionResult", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ActionCacheServer).GetActionResult(ctx, req.(*GetActionResultRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ActionCache_UpdateActionResult_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(UpdateActionResultRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ActionCacheServer).UpdateActionResult(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/build.bazel.remote.execution.v2.ActionCache/UpdateActionResult", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ActionCacheServer).UpdateActionResult(ctx, req.(*UpdateActionResultRequest)) - } - return interceptor(ctx, in, info, handler) -} - -var _ActionCache_serviceDesc = grpc.ServiceDesc{ - ServiceName: "build.bazel.remote.execution.v2.ActionCache", - HandlerType: (*ActionCacheServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "GetActionResult", - Handler: _ActionCache_GetActionResult_Handler, - }, - { - MethodName: "UpdateActionResult", - Handler: _ActionCache_UpdateActionResult_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "build/bazel/remote/execution/v2/remote_execution.proto", -} - -// ContentAddressableStorageClient is the client API for ContentAddressableStorage service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type ContentAddressableStorageClient interface { - // Determine if blobs are present in the CAS. - // - // Clients can use this API before uploading blobs to determine which ones are - // already present in the CAS and do not need to be uploaded again. - // - // Servers SHOULD increase the lifetimes of the referenced blobs if necessary and - // applicable. - // - // There are no method-specific errors. - FindMissingBlobs(ctx context.Context, in *FindMissingBlobsRequest, opts ...grpc.CallOption) (*FindMissingBlobsResponse, error) - // Upload many blobs at once. - // - // The server may enforce a limit of the combined total size of blobs - // to be uploaded using this API. This limit may be obtained using the - // [Capabilities][build.bazel.remote.execution.v2.Capabilities] API. - // Requests exceeding the limit should either be split into smaller - // chunks or uploaded using the - // [ByteStream API][google.bytestream.ByteStream], as appropriate. - // - // This request is equivalent to calling a Bytestream `Write` request - // on each individual blob, in parallel. The requests may succeed or fail - // independently. - // - // Errors: - // - // * `INVALID_ARGUMENT`: The client attempted to upload more than the - // server supported limit. - // - // Individual requests may return the following errors, additionally: - // - // * `RESOURCE_EXHAUSTED`: There is insufficient disk quota to store the blob. - // * `INVALID_ARGUMENT`: The - // [Digest][build.bazel.remote.execution.v2.Digest] does not match the - // provided data. - BatchUpdateBlobs(ctx context.Context, in *BatchUpdateBlobsRequest, opts ...grpc.CallOption) (*BatchUpdateBlobsResponse, error) - // Download many blobs at once. - // - // The server may enforce a limit of the combined total size of blobs - // to be downloaded using this API. This limit may be obtained using the - // [Capabilities][build.bazel.remote.execution.v2.Capabilities] API. - // Requests exceeding the limit should either be split into smaller - // chunks or downloaded using the - // [ByteStream API][google.bytestream.ByteStream], as appropriate. - // - // This request is equivalent to calling a Bytestream `Read` request - // on each individual blob, in parallel. The requests may succeed or fail - // independently. - // - // Errors: - // - // * `INVALID_ARGUMENT`: The client attempted to read more than the - // server supported limit. - // - // Every error on individual read will be returned in the corresponding digest - // status. - BatchReadBlobs(ctx context.Context, in *BatchReadBlobsRequest, opts ...grpc.CallOption) (*BatchReadBlobsResponse, error) - // Fetch the entire directory tree rooted at a node. - // - // This request must be targeted at a - // [Directory][build.bazel.remote.execution.v2.Directory] stored in the - // [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage] - // (CAS). The server will enumerate the `Directory` tree recursively and - // return every node descended from the root. - // - // The GetTreeRequest.page_token parameter can be used to skip ahead in - // the stream (e.g. when retrying a partially completed and aborted request), - // by setting it to a value taken from GetTreeResponse.next_page_token of the - // last successfully processed GetTreeResponse). - // - // The exact traversal order is unspecified and, unless retrieving subsequent - // pages from an earlier request, is not guaranteed to be stable across - // multiple invocations of `GetTree`. - // - // If part of the tree is missing from the CAS, the server will return the - // portion present and omit the rest. - // - // Errors: - // - // * `NOT_FOUND`: The requested tree root is not present in the CAS. - GetTree(ctx context.Context, in *GetTreeRequest, opts ...grpc.CallOption) (ContentAddressableStorage_GetTreeClient, error) -} - -type contentAddressableStorageClient struct { - cc grpc.ClientConnInterface -} - -func NewContentAddressableStorageClient(cc grpc.ClientConnInterface) ContentAddressableStorageClient { - return &contentAddressableStorageClient{cc} -} - -func (c *contentAddressableStorageClient) FindMissingBlobs(ctx context.Context, in *FindMissingBlobsRequest, opts ...grpc.CallOption) (*FindMissingBlobsResponse, error) { - out := new(FindMissingBlobsResponse) - err := c.cc.Invoke(ctx, "/build.bazel.remote.execution.v2.ContentAddressableStorage/FindMissingBlobs", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *contentAddressableStorageClient) BatchUpdateBlobs(ctx context.Context, in *BatchUpdateBlobsRequest, opts ...grpc.CallOption) (*BatchUpdateBlobsResponse, error) { - out := new(BatchUpdateBlobsResponse) - err := c.cc.Invoke(ctx, "/build.bazel.remote.execution.v2.ContentAddressableStorage/BatchUpdateBlobs", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *contentAddressableStorageClient) BatchReadBlobs(ctx context.Context, in *BatchReadBlobsRequest, opts ...grpc.CallOption) (*BatchReadBlobsResponse, error) { - out := new(BatchReadBlobsResponse) - err := c.cc.Invoke(ctx, "/build.bazel.remote.execution.v2.ContentAddressableStorage/BatchReadBlobs", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *contentAddressableStorageClient) GetTree(ctx context.Context, in *GetTreeRequest, opts ...grpc.CallOption) (ContentAddressableStorage_GetTreeClient, error) { - stream, err := c.cc.NewStream(ctx, &_ContentAddressableStorage_serviceDesc.Streams[0], "/build.bazel.remote.execution.v2.ContentAddressableStorage/GetTree", opts...) - if err != nil { - return nil, err - } - x := &contentAddressableStorageGetTreeClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err - } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil -} - -type ContentAddressableStorage_GetTreeClient interface { - Recv() (*GetTreeResponse, error) - grpc.ClientStream -} - -type contentAddressableStorageGetTreeClient struct { - grpc.ClientStream -} - -func (x *contentAddressableStorageGetTreeClient) Recv() (*GetTreeResponse, error) { - m := new(GetTreeResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -// ContentAddressableStorageServer is the server API for ContentAddressableStorage service. -type ContentAddressableStorageServer interface { - // Determine if blobs are present in the CAS. - // - // Clients can use this API before uploading blobs to determine which ones are - // already present in the CAS and do not need to be uploaded again. - // - // Servers SHOULD increase the lifetimes of the referenced blobs if necessary and - // applicable. - // - // There are no method-specific errors. - FindMissingBlobs(context.Context, *FindMissingBlobsRequest) (*FindMissingBlobsResponse, error) - // Upload many blobs at once. - // - // The server may enforce a limit of the combined total size of blobs - // to be uploaded using this API. This limit may be obtained using the - // [Capabilities][build.bazel.remote.execution.v2.Capabilities] API. - // Requests exceeding the limit should either be split into smaller - // chunks or uploaded using the - // [ByteStream API][google.bytestream.ByteStream], as appropriate. - // - // This request is equivalent to calling a Bytestream `Write` request - // on each individual blob, in parallel. The requests may succeed or fail - // independently. - // - // Errors: - // - // * `INVALID_ARGUMENT`: The client attempted to upload more than the - // server supported limit. - // - // Individual requests may return the following errors, additionally: - // - // * `RESOURCE_EXHAUSTED`: There is insufficient disk quota to store the blob. - // * `INVALID_ARGUMENT`: The - // [Digest][build.bazel.remote.execution.v2.Digest] does not match the - // provided data. - BatchUpdateBlobs(context.Context, *BatchUpdateBlobsRequest) (*BatchUpdateBlobsResponse, error) - // Download many blobs at once. - // - // The server may enforce a limit of the combined total size of blobs - // to be downloaded using this API. This limit may be obtained using the - // [Capabilities][build.bazel.remote.execution.v2.Capabilities] API. - // Requests exceeding the limit should either be split into smaller - // chunks or downloaded using the - // [ByteStream API][google.bytestream.ByteStream], as appropriate. - // - // This request is equivalent to calling a Bytestream `Read` request - // on each individual blob, in parallel. The requests may succeed or fail - // independently. - // - // Errors: - // - // * `INVALID_ARGUMENT`: The client attempted to read more than the - // server supported limit. - // - // Every error on individual read will be returned in the corresponding digest - // status. - BatchReadBlobs(context.Context, *BatchReadBlobsRequest) (*BatchReadBlobsResponse, error) - // Fetch the entire directory tree rooted at a node. - // - // This request must be targeted at a - // [Directory][build.bazel.remote.execution.v2.Directory] stored in the - // [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage] - // (CAS). The server will enumerate the `Directory` tree recursively and - // return every node descended from the root. - // - // The GetTreeRequest.page_token parameter can be used to skip ahead in - // the stream (e.g. when retrying a partially completed and aborted request), - // by setting it to a value taken from GetTreeResponse.next_page_token of the - // last successfully processed GetTreeResponse). - // - // The exact traversal order is unspecified and, unless retrieving subsequent - // pages from an earlier request, is not guaranteed to be stable across - // multiple invocations of `GetTree`. - // - // If part of the tree is missing from the CAS, the server will return the - // portion present and omit the rest. - // - // Errors: - // - // * `NOT_FOUND`: The requested tree root is not present in the CAS. - GetTree(*GetTreeRequest, ContentAddressableStorage_GetTreeServer) error -} - -// UnimplementedContentAddressableStorageServer can be embedded to have forward compatible implementations. -type UnimplementedContentAddressableStorageServer struct { -} - -func (*UnimplementedContentAddressableStorageServer) FindMissingBlobs(context.Context, *FindMissingBlobsRequest) (*FindMissingBlobsResponse, error) { - return nil, status1.Errorf(codes.Unimplemented, "method FindMissingBlobs not implemented") -} -func (*UnimplementedContentAddressableStorageServer) BatchUpdateBlobs(context.Context, *BatchUpdateBlobsRequest) (*BatchUpdateBlobsResponse, error) { - return nil, status1.Errorf(codes.Unimplemented, "method BatchUpdateBlobs not implemented") -} -func (*UnimplementedContentAddressableStorageServer) BatchReadBlobs(context.Context, *BatchReadBlobsRequest) (*BatchReadBlobsResponse, error) { - return nil, status1.Errorf(codes.Unimplemented, "method BatchReadBlobs not implemented") -} -func (*UnimplementedContentAddressableStorageServer) GetTree(*GetTreeRequest, ContentAddressableStorage_GetTreeServer) error { - return status1.Errorf(codes.Unimplemented, "method GetTree not implemented") -} - -func RegisterContentAddressableStorageServer(s *grpc.Server, srv ContentAddressableStorageServer) { - s.RegisterService(&_ContentAddressableStorage_serviceDesc, srv) -} - -func _ContentAddressableStorage_FindMissingBlobs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(FindMissingBlobsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ContentAddressableStorageServer).FindMissingBlobs(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/build.bazel.remote.execution.v2.ContentAddressableStorage/FindMissingBlobs", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ContentAddressableStorageServer).FindMissingBlobs(ctx, req.(*FindMissingBlobsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ContentAddressableStorage_BatchUpdateBlobs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(BatchUpdateBlobsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ContentAddressableStorageServer).BatchUpdateBlobs(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/build.bazel.remote.execution.v2.ContentAddressableStorage/BatchUpdateBlobs", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ContentAddressableStorageServer).BatchUpdateBlobs(ctx, req.(*BatchUpdateBlobsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ContentAddressableStorage_BatchReadBlobs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(BatchReadBlobsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ContentAddressableStorageServer).BatchReadBlobs(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/build.bazel.remote.execution.v2.ContentAddressableStorage/BatchReadBlobs", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ContentAddressableStorageServer).BatchReadBlobs(ctx, req.(*BatchReadBlobsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ContentAddressableStorage_GetTree_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(GetTreeRequest) - if err := stream.RecvMsg(m); err != nil { - return err - } - return srv.(ContentAddressableStorageServer).GetTree(m, &contentAddressableStorageGetTreeServer{stream}) -} - -type ContentAddressableStorage_GetTreeServer interface { - Send(*GetTreeResponse) error - grpc.ServerStream -} - -type contentAddressableStorageGetTreeServer struct { - grpc.ServerStream -} - -func (x *contentAddressableStorageGetTreeServer) Send(m *GetTreeResponse) error { - return x.ServerStream.SendMsg(m) -} - -var _ContentAddressableStorage_serviceDesc = grpc.ServiceDesc{ - ServiceName: "build.bazel.remote.execution.v2.ContentAddressableStorage", - HandlerType: (*ContentAddressableStorageServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "FindMissingBlobs", - Handler: _ContentAddressableStorage_FindMissingBlobs_Handler, - }, - { - MethodName: "BatchUpdateBlobs", - Handler: _ContentAddressableStorage_BatchUpdateBlobs_Handler, - }, - { - MethodName: "BatchReadBlobs", - Handler: _ContentAddressableStorage_BatchReadBlobs_Handler, - }, - }, - Streams: []grpc.StreamDesc{ - { - StreamName: "GetTree", - Handler: _ContentAddressableStorage_GetTree_Handler, - ServerStreams: true, - }, - }, - Metadata: "build/bazel/remote/execution/v2/remote_execution.proto", -} - -// CapabilitiesClient is the client API for Capabilities service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type CapabilitiesClient interface { - // GetCapabilities returns the server capabilities configuration of the - // remote endpoint. - // Only the capabilities of the services supported by the endpoint will - // be returned: - // * Execution + CAS + Action Cache endpoints should return both - // CacheCapabilities and ExecutionCapabilities. - // * Execution only endpoints should return ExecutionCapabilities. - // * CAS + Action Cache only endpoints should return CacheCapabilities. - GetCapabilities(ctx context.Context, in *GetCapabilitiesRequest, opts ...grpc.CallOption) (*ServerCapabilities, error) -} - -type capabilitiesClient struct { - cc grpc.ClientConnInterface -} - -func NewCapabilitiesClient(cc grpc.ClientConnInterface) CapabilitiesClient { - return &capabilitiesClient{cc} -} - -func (c *capabilitiesClient) GetCapabilities(ctx context.Context, in *GetCapabilitiesRequest, opts ...grpc.CallOption) (*ServerCapabilities, error) { - out := new(ServerCapabilities) - err := c.cc.Invoke(ctx, "/build.bazel.remote.execution.v2.Capabilities/GetCapabilities", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// CapabilitiesServer is the server API for Capabilities service. -type CapabilitiesServer interface { - // GetCapabilities returns the server capabilities configuration of the - // remote endpoint. - // Only the capabilities of the services supported by the endpoint will - // be returned: - // * Execution + CAS + Action Cache endpoints should return both - // CacheCapabilities and ExecutionCapabilities. - // * Execution only endpoints should return ExecutionCapabilities. - // * CAS + Action Cache only endpoints should return CacheCapabilities. - GetCapabilities(context.Context, *GetCapabilitiesRequest) (*ServerCapabilities, error) -} - -// UnimplementedCapabilitiesServer can be embedded to have forward compatible implementations. -type UnimplementedCapabilitiesServer struct { -} - -func (*UnimplementedCapabilitiesServer) GetCapabilities(context.Context, *GetCapabilitiesRequest) (*ServerCapabilities, error) { - return nil, status1.Errorf(codes.Unimplemented, "method GetCapabilities not implemented") -} - -func RegisterCapabilitiesServer(s *grpc.Server, srv CapabilitiesServer) { - s.RegisterService(&_Capabilities_serviceDesc, srv) -} - -func _Capabilities_GetCapabilities_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetCapabilitiesRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(CapabilitiesServer).GetCapabilities(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/build.bazel.remote.execution.v2.Capabilities/GetCapabilities", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(CapabilitiesServer).GetCapabilities(ctx, req.(*GetCapabilitiesRequest)) - } - return interceptor(ctx, in, info, handler) -} - -var _Capabilities_serviceDesc = grpc.ServiceDesc{ - ServiceName: "build.bazel.remote.execution.v2.Capabilities", - HandlerType: (*CapabilitiesServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "GetCapabilities", - Handler: _Capabilities_GetCapabilities_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "build/bazel/remote/execution/v2/remote_execution.proto", -} diff --git a/genproto/build/bazel/remote/execution/v2/remote_execution_grpc.pb.go b/genproto/build/bazel/remote/execution/v2/remote_execution_grpc.pb.go new file mode 100755 index 000000000..3a14ded93 --- /dev/null +++ b/genproto/build/bazel/remote/execution/v2/remote_execution_grpc.pb.go @@ -0,0 +1,1061 @@ +// Copyright 2018 The Bazel Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v5.28.1 +// source: build/bazel/remote/execution/v2/remote_execution.proto + +package remoteexecution + +import ( + longrunningpb "cloud.google.com/go/longrunning/autogen/longrunningpb" + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + Execution_Execute_FullMethodName = "/build.bazel.remote.execution.v2.Execution/Execute" + Execution_WaitExecution_FullMethodName = "/build.bazel.remote.execution.v2.Execution/WaitExecution" +) + +// ExecutionClient is the client API for Execution service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type ExecutionClient interface { + // Execute an action remotely. + // + // In order to execute an action, the client must first upload all of the + // inputs, the + // [Command][build.bazel.remote.execution.v2.Command] to run, and the + // [Action][build.bazel.remote.execution.v2.Action] into the + // [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage]. + // It then calls `Execute` with an `action_digest` referring to them. The + // server will run the action and eventually return the result. + // + // The input `Action`'s fields MUST meet the various canonicalization + // requirements specified in the documentation for their types so that it has + // the same digest as other logically equivalent `Action`s. The server MAY + // enforce the requirements and return errors if a non-canonical input is + // received. It MAY also proceed without verifying some or all of the + // requirements, such as for performance reasons. If the server does not + // verify the requirement, then it will treat the `Action` as distinct from + // another logically equivalent action if they hash differently. + // + // Returns a stream of + // [google.longrunning.Operation][google.longrunning.Operation] messages + // describing the resulting execution, with eventual `response` + // [ExecuteResponse][build.bazel.remote.execution.v2.ExecuteResponse]. The + // `metadata` on the operation is of type + // [ExecuteOperationMetadata][build.bazel.remote.execution.v2.ExecuteOperationMetadata]. + // + // If the client remains connected after the first response is returned after + // the server, then updates are streamed as if the client had called + // [WaitExecution][build.bazel.remote.execution.v2.Execution.WaitExecution] + // until the execution completes or the request reaches an error. The + // operation can also be queried using [Operations + // API][google.longrunning.Operations.GetOperation]. + // + // The server NEED NOT implement other methods or functionality of the + // Operations API. + // + // Errors discovered during creation of the `Operation` will be reported + // as gRPC Status errors, while errors that occurred while running the + // action will be reported in the `status` field of the `ExecuteResponse`. The + // server MUST NOT set the `error` field of the `Operation` proto. + // The possible errors include: + // + // - `INVALID_ARGUMENT`: One or more arguments are invalid. + // - `FAILED_PRECONDITION`: One or more errors occurred in setting up the + // action requested, such as a missing input or command or no worker being + // available. The client may be able to fix the errors and retry. + // - `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to run + // the action. + // - `UNAVAILABLE`: Due to a transient condition, such as all workers being + // occupied (and the server does not support a queue), the action could not + // be started. The client should retry. + // - `INTERNAL`: An internal error occurred in the execution engine or the + // worker. + // - `DEADLINE_EXCEEDED`: The execution timed out. + // - `CANCELLED`: The operation was cancelled by the client. This status is + // only possible if the server implements the Operations API CancelOperation + // method, and it was called for the current execution. + // + // In the case of a missing input or command, the server SHOULD additionally + // send a [PreconditionFailure][google.rpc.PreconditionFailure] error detail + // where, for each requested blob not present in the CAS, there is a + // `Violation` with a `type` of `MISSING` and a `subject` of + // `"blobs/{digest_function/}{hash}/{size}"` indicating the digest of the + // missing blob. The `subject` is formatted the same way as the + // `resource_name` provided to + // [ByteStream.Read][google.bytestream.ByteStream.Read], with the leading + // instance name omitted. `digest_function` MUST thus be omitted if its value + // is one of MD5, MURMUR3, SHA1, SHA256, SHA384, SHA512, or VSO. + // + // The server does not need to guarantee that a call to this method leads to + // at most one execution of the action. The server MAY execute the action + // multiple times, potentially in parallel. These redundant executions MAY + // continue to run, even if the operation is completed. + Execute(ctx context.Context, in *ExecuteRequest, opts ...grpc.CallOption) (Execution_ExecuteClient, error) + // Wait for an execution operation to complete. When the client initially + // makes the request, the server immediately responds with the current status + // of the execution. The server will leave the request stream open until the + // operation completes, and then respond with the completed operation. The + // server MAY choose to stream additional updates as execution progresses, + // such as to provide an update as to the state of the execution. + // + // In addition to the cases describe for Execute, the WaitExecution method + // may fail as follows: + // + // - `NOT_FOUND`: The operation no longer exists due to any of a transient + // condition, an unknown operation name, or if the server implements the + // Operations API DeleteOperation method and it was called for the current + // execution. The client should call `Execute` to retry. + WaitExecution(ctx context.Context, in *WaitExecutionRequest, opts ...grpc.CallOption) (Execution_WaitExecutionClient, error) +} + +type executionClient struct { + cc grpc.ClientConnInterface +} + +func NewExecutionClient(cc grpc.ClientConnInterface) ExecutionClient { + return &executionClient{cc} +} + +func (c *executionClient) Execute(ctx context.Context, in *ExecuteRequest, opts ...grpc.CallOption) (Execution_ExecuteClient, error) { + stream, err := c.cc.NewStream(ctx, &Execution_ServiceDesc.Streams[0], Execution_Execute_FullMethodName, opts...) + if err != nil { + return nil, err + } + x := &executionExecuteClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type Execution_ExecuteClient interface { + Recv() (*longrunningpb.Operation, error) + grpc.ClientStream +} + +type executionExecuteClient struct { + grpc.ClientStream +} + +func (x *executionExecuteClient) Recv() (*longrunningpb.Operation, error) { + m := new(longrunningpb.Operation) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *executionClient) WaitExecution(ctx context.Context, in *WaitExecutionRequest, opts ...grpc.CallOption) (Execution_WaitExecutionClient, error) { + stream, err := c.cc.NewStream(ctx, &Execution_ServiceDesc.Streams[1], Execution_WaitExecution_FullMethodName, opts...) + if err != nil { + return nil, err + } + x := &executionWaitExecutionClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type Execution_WaitExecutionClient interface { + Recv() (*longrunningpb.Operation, error) + grpc.ClientStream +} + +type executionWaitExecutionClient struct { + grpc.ClientStream +} + +func (x *executionWaitExecutionClient) Recv() (*longrunningpb.Operation, error) { + m := new(longrunningpb.Operation) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// ExecutionServer is the server API for Execution service. +// All implementations should embed UnimplementedExecutionServer +// for forward compatibility +type ExecutionServer interface { + // Execute an action remotely. + // + // In order to execute an action, the client must first upload all of the + // inputs, the + // [Command][build.bazel.remote.execution.v2.Command] to run, and the + // [Action][build.bazel.remote.execution.v2.Action] into the + // [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage]. + // It then calls `Execute` with an `action_digest` referring to them. The + // server will run the action and eventually return the result. + // + // The input `Action`'s fields MUST meet the various canonicalization + // requirements specified in the documentation for their types so that it has + // the same digest as other logically equivalent `Action`s. The server MAY + // enforce the requirements and return errors if a non-canonical input is + // received. It MAY also proceed without verifying some or all of the + // requirements, such as for performance reasons. If the server does not + // verify the requirement, then it will treat the `Action` as distinct from + // another logically equivalent action if they hash differently. + // + // Returns a stream of + // [google.longrunning.Operation][google.longrunning.Operation] messages + // describing the resulting execution, with eventual `response` + // [ExecuteResponse][build.bazel.remote.execution.v2.ExecuteResponse]. The + // `metadata` on the operation is of type + // [ExecuteOperationMetadata][build.bazel.remote.execution.v2.ExecuteOperationMetadata]. + // + // If the client remains connected after the first response is returned after + // the server, then updates are streamed as if the client had called + // [WaitExecution][build.bazel.remote.execution.v2.Execution.WaitExecution] + // until the execution completes or the request reaches an error. The + // operation can also be queried using [Operations + // API][google.longrunning.Operations.GetOperation]. + // + // The server NEED NOT implement other methods or functionality of the + // Operations API. + // + // Errors discovered during creation of the `Operation` will be reported + // as gRPC Status errors, while errors that occurred while running the + // action will be reported in the `status` field of the `ExecuteResponse`. The + // server MUST NOT set the `error` field of the `Operation` proto. + // The possible errors include: + // + // - `INVALID_ARGUMENT`: One or more arguments are invalid. + // - `FAILED_PRECONDITION`: One or more errors occurred in setting up the + // action requested, such as a missing input or command or no worker being + // available. The client may be able to fix the errors and retry. + // - `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to run + // the action. + // - `UNAVAILABLE`: Due to a transient condition, such as all workers being + // occupied (and the server does not support a queue), the action could not + // be started. The client should retry. + // - `INTERNAL`: An internal error occurred in the execution engine or the + // worker. + // - `DEADLINE_EXCEEDED`: The execution timed out. + // - `CANCELLED`: The operation was cancelled by the client. This status is + // only possible if the server implements the Operations API CancelOperation + // method, and it was called for the current execution. + // + // In the case of a missing input or command, the server SHOULD additionally + // send a [PreconditionFailure][google.rpc.PreconditionFailure] error detail + // where, for each requested blob not present in the CAS, there is a + // `Violation` with a `type` of `MISSING` and a `subject` of + // `"blobs/{digest_function/}{hash}/{size}"` indicating the digest of the + // missing blob. The `subject` is formatted the same way as the + // `resource_name` provided to + // [ByteStream.Read][google.bytestream.ByteStream.Read], with the leading + // instance name omitted. `digest_function` MUST thus be omitted if its value + // is one of MD5, MURMUR3, SHA1, SHA256, SHA384, SHA512, or VSO. + // + // The server does not need to guarantee that a call to this method leads to + // at most one execution of the action. The server MAY execute the action + // multiple times, potentially in parallel. These redundant executions MAY + // continue to run, even if the operation is completed. + Execute(*ExecuteRequest, Execution_ExecuteServer) error + // Wait for an execution operation to complete. When the client initially + // makes the request, the server immediately responds with the current status + // of the execution. The server will leave the request stream open until the + // operation completes, and then respond with the completed operation. The + // server MAY choose to stream additional updates as execution progresses, + // such as to provide an update as to the state of the execution. + // + // In addition to the cases describe for Execute, the WaitExecution method + // may fail as follows: + // + // - `NOT_FOUND`: The operation no longer exists due to any of a transient + // condition, an unknown operation name, or if the server implements the + // Operations API DeleteOperation method and it was called for the current + // execution. The client should call `Execute` to retry. + WaitExecution(*WaitExecutionRequest, Execution_WaitExecutionServer) error +} + +// UnimplementedExecutionServer should be embedded to have forward compatible implementations. +type UnimplementedExecutionServer struct { +} + +func (UnimplementedExecutionServer) Execute(*ExecuteRequest, Execution_ExecuteServer) error { + return status.Errorf(codes.Unimplemented, "method Execute not implemented") +} +func (UnimplementedExecutionServer) WaitExecution(*WaitExecutionRequest, Execution_WaitExecutionServer) error { + return status.Errorf(codes.Unimplemented, "method WaitExecution not implemented") +} + +// UnsafeExecutionServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to ExecutionServer will +// result in compilation errors. +type UnsafeExecutionServer interface { + mustEmbedUnimplementedExecutionServer() +} + +func RegisterExecutionServer(s grpc.ServiceRegistrar, srv ExecutionServer) { + s.RegisterService(&Execution_ServiceDesc, srv) +} + +func _Execution_Execute_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(ExecuteRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(ExecutionServer).Execute(m, &executionExecuteServer{stream}) +} + +type Execution_ExecuteServer interface { + Send(*longrunningpb.Operation) error + grpc.ServerStream +} + +type executionExecuteServer struct { + grpc.ServerStream +} + +func (x *executionExecuteServer) Send(m *longrunningpb.Operation) error { + return x.ServerStream.SendMsg(m) +} + +func _Execution_WaitExecution_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(WaitExecutionRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(ExecutionServer).WaitExecution(m, &executionWaitExecutionServer{stream}) +} + +type Execution_WaitExecutionServer interface { + Send(*longrunningpb.Operation) error + grpc.ServerStream +} + +type executionWaitExecutionServer struct { + grpc.ServerStream +} + +func (x *executionWaitExecutionServer) Send(m *longrunningpb.Operation) error { + return x.ServerStream.SendMsg(m) +} + +// Execution_ServiceDesc is the grpc.ServiceDesc for Execution service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Execution_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "build.bazel.remote.execution.v2.Execution", + HandlerType: (*ExecutionServer)(nil), + Methods: []grpc.MethodDesc{}, + Streams: []grpc.StreamDesc{ + { + StreamName: "Execute", + Handler: _Execution_Execute_Handler, + ServerStreams: true, + }, + { + StreamName: "WaitExecution", + Handler: _Execution_WaitExecution_Handler, + ServerStreams: true, + }, + }, + Metadata: "build/bazel/remote/execution/v2/remote_execution.proto", +} + +const ( + ActionCache_GetActionResult_FullMethodName = "/build.bazel.remote.execution.v2.ActionCache/GetActionResult" + ActionCache_UpdateActionResult_FullMethodName = "/build.bazel.remote.execution.v2.ActionCache/UpdateActionResult" +) + +// ActionCacheClient is the client API for ActionCache service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type ActionCacheClient interface { + // Retrieve a cached execution result. + // + // Implementations SHOULD ensure that any blobs referenced from the + // [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage] + // are available at the time of returning the + // [ActionResult][build.bazel.remote.execution.v2.ActionResult] and will be + // for some period of time afterwards. The lifetimes of the referenced blobs SHOULD be increased + // if necessary and applicable. + // + // Errors: + // + // * `NOT_FOUND`: The requested `ActionResult` is not in the cache. + GetActionResult(ctx context.Context, in *GetActionResultRequest, opts ...grpc.CallOption) (*ActionResult, error) + // Upload a new execution result. + // + // In order to allow the server to perform access control based on the type of + // action, and to assist with client debugging, the client MUST first upload + // the [Action][build.bazel.remote.execution.v2.Execution] that produced the + // result, along with its + // [Command][build.bazel.remote.execution.v2.Command], into the + // `ContentAddressableStorage`. + // + // Server implementations MAY modify the + // `UpdateActionResultRequest.action_result` and return an equivalent value. + // + // Errors: + // + // - `INVALID_ARGUMENT`: One or more arguments are invalid. + // - `FAILED_PRECONDITION`: One or more errors occurred in updating the + // action result, such as a missing command or action. + // - `RESOURCE_EXHAUSTED`: There is insufficient storage space to add the + // entry to the cache. + UpdateActionResult(ctx context.Context, in *UpdateActionResultRequest, opts ...grpc.CallOption) (*ActionResult, error) +} + +type actionCacheClient struct { + cc grpc.ClientConnInterface +} + +func NewActionCacheClient(cc grpc.ClientConnInterface) ActionCacheClient { + return &actionCacheClient{cc} +} + +func (c *actionCacheClient) GetActionResult(ctx context.Context, in *GetActionResultRequest, opts ...grpc.CallOption) (*ActionResult, error) { + out := new(ActionResult) + err := c.cc.Invoke(ctx, ActionCache_GetActionResult_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *actionCacheClient) UpdateActionResult(ctx context.Context, in *UpdateActionResultRequest, opts ...grpc.CallOption) (*ActionResult, error) { + out := new(ActionResult) + err := c.cc.Invoke(ctx, ActionCache_UpdateActionResult_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// ActionCacheServer is the server API for ActionCache service. +// All implementations should embed UnimplementedActionCacheServer +// for forward compatibility +type ActionCacheServer interface { + // Retrieve a cached execution result. + // + // Implementations SHOULD ensure that any blobs referenced from the + // [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage] + // are available at the time of returning the + // [ActionResult][build.bazel.remote.execution.v2.ActionResult] and will be + // for some period of time afterwards. The lifetimes of the referenced blobs SHOULD be increased + // if necessary and applicable. + // + // Errors: + // + // * `NOT_FOUND`: The requested `ActionResult` is not in the cache. + GetActionResult(context.Context, *GetActionResultRequest) (*ActionResult, error) + // Upload a new execution result. + // + // In order to allow the server to perform access control based on the type of + // action, and to assist with client debugging, the client MUST first upload + // the [Action][build.bazel.remote.execution.v2.Execution] that produced the + // result, along with its + // [Command][build.bazel.remote.execution.v2.Command], into the + // `ContentAddressableStorage`. + // + // Server implementations MAY modify the + // `UpdateActionResultRequest.action_result` and return an equivalent value. + // + // Errors: + // + // - `INVALID_ARGUMENT`: One or more arguments are invalid. + // - `FAILED_PRECONDITION`: One or more errors occurred in updating the + // action result, such as a missing command or action. + // - `RESOURCE_EXHAUSTED`: There is insufficient storage space to add the + // entry to the cache. + UpdateActionResult(context.Context, *UpdateActionResultRequest) (*ActionResult, error) +} + +// UnimplementedActionCacheServer should be embedded to have forward compatible implementations. +type UnimplementedActionCacheServer struct { +} + +func (UnimplementedActionCacheServer) GetActionResult(context.Context, *GetActionResultRequest) (*ActionResult, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetActionResult not implemented") +} +func (UnimplementedActionCacheServer) UpdateActionResult(context.Context, *UpdateActionResultRequest) (*ActionResult, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateActionResult not implemented") +} + +// UnsafeActionCacheServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to ActionCacheServer will +// result in compilation errors. +type UnsafeActionCacheServer interface { + mustEmbedUnimplementedActionCacheServer() +} + +func RegisterActionCacheServer(s grpc.ServiceRegistrar, srv ActionCacheServer) { + s.RegisterService(&ActionCache_ServiceDesc, srv) +} + +func _ActionCache_GetActionResult_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetActionResultRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ActionCacheServer).GetActionResult(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ActionCache_GetActionResult_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ActionCacheServer).GetActionResult(ctx, req.(*GetActionResultRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ActionCache_UpdateActionResult_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateActionResultRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ActionCacheServer).UpdateActionResult(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ActionCache_UpdateActionResult_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ActionCacheServer).UpdateActionResult(ctx, req.(*UpdateActionResultRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// ActionCache_ServiceDesc is the grpc.ServiceDesc for ActionCache service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var ActionCache_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "build.bazel.remote.execution.v2.ActionCache", + HandlerType: (*ActionCacheServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetActionResult", + Handler: _ActionCache_GetActionResult_Handler, + }, + { + MethodName: "UpdateActionResult", + Handler: _ActionCache_UpdateActionResult_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "build/bazel/remote/execution/v2/remote_execution.proto", +} + +const ( + ContentAddressableStorage_FindMissingBlobs_FullMethodName = "/build.bazel.remote.execution.v2.ContentAddressableStorage/FindMissingBlobs" + ContentAddressableStorage_BatchUpdateBlobs_FullMethodName = "/build.bazel.remote.execution.v2.ContentAddressableStorage/BatchUpdateBlobs" + ContentAddressableStorage_BatchReadBlobs_FullMethodName = "/build.bazel.remote.execution.v2.ContentAddressableStorage/BatchReadBlobs" + ContentAddressableStorage_GetTree_FullMethodName = "/build.bazel.remote.execution.v2.ContentAddressableStorage/GetTree" +) + +// ContentAddressableStorageClient is the client API for ContentAddressableStorage service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type ContentAddressableStorageClient interface { + // Determine if blobs are present in the CAS. + // + // Clients can use this API before uploading blobs to determine which ones are + // already present in the CAS and do not need to be uploaded again. + // + // Servers SHOULD increase the lifetimes of the referenced blobs if necessary and + // applicable. + // + // There are no method-specific errors. + FindMissingBlobs(ctx context.Context, in *FindMissingBlobsRequest, opts ...grpc.CallOption) (*FindMissingBlobsResponse, error) + // Upload many blobs at once. + // + // The server may enforce a limit of the combined total size of blobs + // to be uploaded using this API. This limit may be obtained using the + // [Capabilities][build.bazel.remote.execution.v2.Capabilities] API. + // Requests exceeding the limit should either be split into smaller + // chunks or uploaded using the + // [ByteStream API][google.bytestream.ByteStream], as appropriate. + // + // This request is equivalent to calling a Bytestream `Write` request + // on each individual blob, in parallel. The requests may succeed or fail + // independently. + // + // Errors: + // + // - `INVALID_ARGUMENT`: The client attempted to upload more than the + // server supported limit. + // + // Individual requests may return the following errors, additionally: + // + // * `RESOURCE_EXHAUSTED`: There is insufficient disk quota to store the blob. + // * `INVALID_ARGUMENT`: The + // [Digest][build.bazel.remote.execution.v2.Digest] does not match the + // provided data. + BatchUpdateBlobs(ctx context.Context, in *BatchUpdateBlobsRequest, opts ...grpc.CallOption) (*BatchUpdateBlobsResponse, error) + // Download many blobs at once. + // + // The server may enforce a limit of the combined total size of blobs + // to be downloaded using this API. This limit may be obtained using the + // [Capabilities][build.bazel.remote.execution.v2.Capabilities] API. + // Requests exceeding the limit should either be split into smaller + // chunks or downloaded using the + // [ByteStream API][google.bytestream.ByteStream], as appropriate. + // + // This request is equivalent to calling a Bytestream `Read` request + // on each individual blob, in parallel. The requests may succeed or fail + // independently. + // + // Errors: + // + // - `INVALID_ARGUMENT`: The client attempted to read more than the + // server supported limit. + // + // Every error on individual read will be returned in the corresponding digest + // status. + BatchReadBlobs(ctx context.Context, in *BatchReadBlobsRequest, opts ...grpc.CallOption) (*BatchReadBlobsResponse, error) + // Fetch the entire directory tree rooted at a node. + // + // This request must be targeted at a + // [Directory][build.bazel.remote.execution.v2.Directory] stored in the + // [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage] + // (CAS). The server will enumerate the `Directory` tree recursively and + // return every node descended from the root. + // + // The GetTreeRequest.page_token parameter can be used to skip ahead in + // the stream (e.g. when retrying a partially completed and aborted request), + // by setting it to a value taken from GetTreeResponse.next_page_token of the + // last successfully processed GetTreeResponse). + // + // The exact traversal order is unspecified and, unless retrieving subsequent + // pages from an earlier request, is not guaranteed to be stable across + // multiple invocations of `GetTree`. + // + // If part of the tree is missing from the CAS, the server will return the + // portion present and omit the rest. + // + // Errors: + // + // * `NOT_FOUND`: The requested tree root is not present in the CAS. + GetTree(ctx context.Context, in *GetTreeRequest, opts ...grpc.CallOption) (ContentAddressableStorage_GetTreeClient, error) +} + +type contentAddressableStorageClient struct { + cc grpc.ClientConnInterface +} + +func NewContentAddressableStorageClient(cc grpc.ClientConnInterface) ContentAddressableStorageClient { + return &contentAddressableStorageClient{cc} +} + +func (c *contentAddressableStorageClient) FindMissingBlobs(ctx context.Context, in *FindMissingBlobsRequest, opts ...grpc.CallOption) (*FindMissingBlobsResponse, error) { + out := new(FindMissingBlobsResponse) + err := c.cc.Invoke(ctx, ContentAddressableStorage_FindMissingBlobs_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *contentAddressableStorageClient) BatchUpdateBlobs(ctx context.Context, in *BatchUpdateBlobsRequest, opts ...grpc.CallOption) (*BatchUpdateBlobsResponse, error) { + out := new(BatchUpdateBlobsResponse) + err := c.cc.Invoke(ctx, ContentAddressableStorage_BatchUpdateBlobs_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *contentAddressableStorageClient) BatchReadBlobs(ctx context.Context, in *BatchReadBlobsRequest, opts ...grpc.CallOption) (*BatchReadBlobsResponse, error) { + out := new(BatchReadBlobsResponse) + err := c.cc.Invoke(ctx, ContentAddressableStorage_BatchReadBlobs_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *contentAddressableStorageClient) GetTree(ctx context.Context, in *GetTreeRequest, opts ...grpc.CallOption) (ContentAddressableStorage_GetTreeClient, error) { + stream, err := c.cc.NewStream(ctx, &ContentAddressableStorage_ServiceDesc.Streams[0], ContentAddressableStorage_GetTree_FullMethodName, opts...) + if err != nil { + return nil, err + } + x := &contentAddressableStorageGetTreeClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type ContentAddressableStorage_GetTreeClient interface { + Recv() (*GetTreeResponse, error) + grpc.ClientStream +} + +type contentAddressableStorageGetTreeClient struct { + grpc.ClientStream +} + +func (x *contentAddressableStorageGetTreeClient) Recv() (*GetTreeResponse, error) { + m := new(GetTreeResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// ContentAddressableStorageServer is the server API for ContentAddressableStorage service. +// All implementations should embed UnimplementedContentAddressableStorageServer +// for forward compatibility +type ContentAddressableStorageServer interface { + // Determine if blobs are present in the CAS. + // + // Clients can use this API before uploading blobs to determine which ones are + // already present in the CAS and do not need to be uploaded again. + // + // Servers SHOULD increase the lifetimes of the referenced blobs if necessary and + // applicable. + // + // There are no method-specific errors. + FindMissingBlobs(context.Context, *FindMissingBlobsRequest) (*FindMissingBlobsResponse, error) + // Upload many blobs at once. + // + // The server may enforce a limit of the combined total size of blobs + // to be uploaded using this API. This limit may be obtained using the + // [Capabilities][build.bazel.remote.execution.v2.Capabilities] API. + // Requests exceeding the limit should either be split into smaller + // chunks or uploaded using the + // [ByteStream API][google.bytestream.ByteStream], as appropriate. + // + // This request is equivalent to calling a Bytestream `Write` request + // on each individual blob, in parallel. The requests may succeed or fail + // independently. + // + // Errors: + // + // - `INVALID_ARGUMENT`: The client attempted to upload more than the + // server supported limit. + // + // Individual requests may return the following errors, additionally: + // + // * `RESOURCE_EXHAUSTED`: There is insufficient disk quota to store the blob. + // * `INVALID_ARGUMENT`: The + // [Digest][build.bazel.remote.execution.v2.Digest] does not match the + // provided data. + BatchUpdateBlobs(context.Context, *BatchUpdateBlobsRequest) (*BatchUpdateBlobsResponse, error) + // Download many blobs at once. + // + // The server may enforce a limit of the combined total size of blobs + // to be downloaded using this API. This limit may be obtained using the + // [Capabilities][build.bazel.remote.execution.v2.Capabilities] API. + // Requests exceeding the limit should either be split into smaller + // chunks or downloaded using the + // [ByteStream API][google.bytestream.ByteStream], as appropriate. + // + // This request is equivalent to calling a Bytestream `Read` request + // on each individual blob, in parallel. The requests may succeed or fail + // independently. + // + // Errors: + // + // - `INVALID_ARGUMENT`: The client attempted to read more than the + // server supported limit. + // + // Every error on individual read will be returned in the corresponding digest + // status. + BatchReadBlobs(context.Context, *BatchReadBlobsRequest) (*BatchReadBlobsResponse, error) + // Fetch the entire directory tree rooted at a node. + // + // This request must be targeted at a + // [Directory][build.bazel.remote.execution.v2.Directory] stored in the + // [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage] + // (CAS). The server will enumerate the `Directory` tree recursively and + // return every node descended from the root. + // + // The GetTreeRequest.page_token parameter can be used to skip ahead in + // the stream (e.g. when retrying a partially completed and aborted request), + // by setting it to a value taken from GetTreeResponse.next_page_token of the + // last successfully processed GetTreeResponse). + // + // The exact traversal order is unspecified and, unless retrieving subsequent + // pages from an earlier request, is not guaranteed to be stable across + // multiple invocations of `GetTree`. + // + // If part of the tree is missing from the CAS, the server will return the + // portion present and omit the rest. + // + // Errors: + // + // * `NOT_FOUND`: The requested tree root is not present in the CAS. + GetTree(*GetTreeRequest, ContentAddressableStorage_GetTreeServer) error +} + +// UnimplementedContentAddressableStorageServer should be embedded to have forward compatible implementations. +type UnimplementedContentAddressableStorageServer struct { +} + +func (UnimplementedContentAddressableStorageServer) FindMissingBlobs(context.Context, *FindMissingBlobsRequest) (*FindMissingBlobsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method FindMissingBlobs not implemented") +} +func (UnimplementedContentAddressableStorageServer) BatchUpdateBlobs(context.Context, *BatchUpdateBlobsRequest) (*BatchUpdateBlobsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method BatchUpdateBlobs not implemented") +} +func (UnimplementedContentAddressableStorageServer) BatchReadBlobs(context.Context, *BatchReadBlobsRequest) (*BatchReadBlobsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method BatchReadBlobs not implemented") +} +func (UnimplementedContentAddressableStorageServer) GetTree(*GetTreeRequest, ContentAddressableStorage_GetTreeServer) error { + return status.Errorf(codes.Unimplemented, "method GetTree not implemented") +} + +// UnsafeContentAddressableStorageServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to ContentAddressableStorageServer will +// result in compilation errors. +type UnsafeContentAddressableStorageServer interface { + mustEmbedUnimplementedContentAddressableStorageServer() +} + +func RegisterContentAddressableStorageServer(s grpc.ServiceRegistrar, srv ContentAddressableStorageServer) { + s.RegisterService(&ContentAddressableStorage_ServiceDesc, srv) +} + +func _ContentAddressableStorage_FindMissingBlobs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(FindMissingBlobsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ContentAddressableStorageServer).FindMissingBlobs(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ContentAddressableStorage_FindMissingBlobs_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ContentAddressableStorageServer).FindMissingBlobs(ctx, req.(*FindMissingBlobsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ContentAddressableStorage_BatchUpdateBlobs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(BatchUpdateBlobsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ContentAddressableStorageServer).BatchUpdateBlobs(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ContentAddressableStorage_BatchUpdateBlobs_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ContentAddressableStorageServer).BatchUpdateBlobs(ctx, req.(*BatchUpdateBlobsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ContentAddressableStorage_BatchReadBlobs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(BatchReadBlobsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ContentAddressableStorageServer).BatchReadBlobs(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ContentAddressableStorage_BatchReadBlobs_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ContentAddressableStorageServer).BatchReadBlobs(ctx, req.(*BatchReadBlobsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ContentAddressableStorage_GetTree_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(GetTreeRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(ContentAddressableStorageServer).GetTree(m, &contentAddressableStorageGetTreeServer{stream}) +} + +type ContentAddressableStorage_GetTreeServer interface { + Send(*GetTreeResponse) error + grpc.ServerStream +} + +type contentAddressableStorageGetTreeServer struct { + grpc.ServerStream +} + +func (x *contentAddressableStorageGetTreeServer) Send(m *GetTreeResponse) error { + return x.ServerStream.SendMsg(m) +} + +// ContentAddressableStorage_ServiceDesc is the grpc.ServiceDesc for ContentAddressableStorage service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var ContentAddressableStorage_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "build.bazel.remote.execution.v2.ContentAddressableStorage", + HandlerType: (*ContentAddressableStorageServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "FindMissingBlobs", + Handler: _ContentAddressableStorage_FindMissingBlobs_Handler, + }, + { + MethodName: "BatchUpdateBlobs", + Handler: _ContentAddressableStorage_BatchUpdateBlobs_Handler, + }, + { + MethodName: "BatchReadBlobs", + Handler: _ContentAddressableStorage_BatchReadBlobs_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "GetTree", + Handler: _ContentAddressableStorage_GetTree_Handler, + ServerStreams: true, + }, + }, + Metadata: "build/bazel/remote/execution/v2/remote_execution.proto", +} + +const ( + Capabilities_GetCapabilities_FullMethodName = "/build.bazel.remote.execution.v2.Capabilities/GetCapabilities" +) + +// CapabilitiesClient is the client API for Capabilities service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type CapabilitiesClient interface { + // GetCapabilities returns the server capabilities configuration of the + // remote endpoint. + // Only the capabilities of the services supported by the endpoint will + // be returned: + // - Execution + CAS + Action Cache endpoints should return both + // CacheCapabilities and ExecutionCapabilities. + // - Execution only endpoints should return ExecutionCapabilities. + // - CAS + Action Cache only endpoints should return CacheCapabilities. + // + // There are no method-specific errors. + GetCapabilities(ctx context.Context, in *GetCapabilitiesRequest, opts ...grpc.CallOption) (*ServerCapabilities, error) +} + +type capabilitiesClient struct { + cc grpc.ClientConnInterface +} + +func NewCapabilitiesClient(cc grpc.ClientConnInterface) CapabilitiesClient { + return &capabilitiesClient{cc} +} + +func (c *capabilitiesClient) GetCapabilities(ctx context.Context, in *GetCapabilitiesRequest, opts ...grpc.CallOption) (*ServerCapabilities, error) { + out := new(ServerCapabilities) + err := c.cc.Invoke(ctx, Capabilities_GetCapabilities_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// CapabilitiesServer is the server API for Capabilities service. +// All implementations should embed UnimplementedCapabilitiesServer +// for forward compatibility +type CapabilitiesServer interface { + // GetCapabilities returns the server capabilities configuration of the + // remote endpoint. + // Only the capabilities of the services supported by the endpoint will + // be returned: + // - Execution + CAS + Action Cache endpoints should return both + // CacheCapabilities and ExecutionCapabilities. + // - Execution only endpoints should return ExecutionCapabilities. + // - CAS + Action Cache only endpoints should return CacheCapabilities. + // + // There are no method-specific errors. + GetCapabilities(context.Context, *GetCapabilitiesRequest) (*ServerCapabilities, error) +} + +// UnimplementedCapabilitiesServer should be embedded to have forward compatible implementations. +type UnimplementedCapabilitiesServer struct { +} + +func (UnimplementedCapabilitiesServer) GetCapabilities(context.Context, *GetCapabilitiesRequest) (*ServerCapabilities, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetCapabilities not implemented") +} + +// UnsafeCapabilitiesServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to CapabilitiesServer will +// result in compilation errors. +type UnsafeCapabilitiesServer interface { + mustEmbedUnimplementedCapabilitiesServer() +} + +func RegisterCapabilitiesServer(s grpc.ServiceRegistrar, srv CapabilitiesServer) { + s.RegisterService(&Capabilities_ServiceDesc, srv) +} + +func _Capabilities_GetCapabilities_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetCapabilitiesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CapabilitiesServer).GetCapabilities(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Capabilities_GetCapabilities_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CapabilitiesServer).GetCapabilities(ctx, req.(*GetCapabilitiesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// Capabilities_ServiceDesc is the grpc.ServiceDesc for Capabilities service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Capabilities_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "build.bazel.remote.execution.v2.Capabilities", + HandlerType: (*CapabilitiesServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetCapabilities", + Handler: _Capabilities_GetCapabilities_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "build/bazel/remote/execution/v2/remote_execution.proto", +} diff --git a/genproto/build/bazel/semver/BUILD.bazel b/genproto/build/bazel/semver/BUILD.bazel index 5f1866f86..6894088fe 100644 --- a/genproto/build/bazel/semver/BUILD.bazel +++ b/genproto/build/bazel/semver/BUILD.bazel @@ -5,5 +5,8 @@ go_library( srcs = ["semver.pb.go"], importpath = "github.com/buchgr/bazel-remote/v2/genproto/build/bazel/semver", visibility = ["//visibility:public"], - deps = ["@com_github_golang_protobuf//proto:go_default_library"], + deps = [ + "@org_golang_google_protobuf//reflect/protoreflect:go_default_library", + "@org_golang_google_protobuf//runtime/protoimpl:go_default_library", + ], ) diff --git a/genproto/build/bazel/semver/semver.pb.go b/genproto/build/bazel/semver/semver.pb.go index 1ffaca545..e81327d81 100755 --- a/genproto/build/bazel/semver/semver.pb.go +++ b/genproto/build/bazel/semver/semver.pb.go @@ -1,27 +1,45 @@ +// Copyright 2018 The Bazel Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.34.2 +// protoc v5.28.1 // source: build/bazel/semver/semver.proto package semver import ( - fmt "fmt" - proto "github.com/golang/protobuf/proto" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) // The full version of a given tool. type SemVer struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The major version, e.g 10 for 10.2.3. Major int32 `protobuf:"varint,1,opt,name=major,proto3" json:"major,omitempty"` // The minor version, e.g. 2 for 10.2.3. @@ -31,83 +49,151 @@ type SemVer struct { // The pre-release version. Either this field or major/minor/patch fields // must be filled. They are mutually exclusive. Pre-release versions are // assumed to be earlier than any released versions. - Prerelease string `protobuf:"bytes,4,opt,name=prerelease,proto3" json:"prerelease,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Prerelease string `protobuf:"bytes,4,opt,name=prerelease,proto3" json:"prerelease,omitempty"` } -func (m *SemVer) Reset() { *m = SemVer{} } -func (m *SemVer) String() string { return proto.CompactTextString(m) } -func (*SemVer) ProtoMessage() {} -func (*SemVer) Descriptor() ([]byte, []int) { - return fileDescriptor_3d8602885cf21c73, []int{0} +func (x *SemVer) Reset() { + *x = SemVer{} + if protoimpl.UnsafeEnabled { + mi := &file_build_bazel_semver_semver_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *SemVer) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SemVer.Unmarshal(m, b) +func (x *SemVer) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *SemVer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SemVer.Marshal(b, m, deterministic) -} -func (m *SemVer) XXX_Merge(src proto.Message) { - xxx_messageInfo_SemVer.Merge(m, src) -} -func (m *SemVer) XXX_Size() int { - return xxx_messageInfo_SemVer.Size(m) -} -func (m *SemVer) XXX_DiscardUnknown() { - xxx_messageInfo_SemVer.DiscardUnknown(m) + +func (*SemVer) ProtoMessage() {} + +func (x *SemVer) ProtoReflect() protoreflect.Message { + mi := &file_build_bazel_semver_semver_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_SemVer proto.InternalMessageInfo +// Deprecated: Use SemVer.ProtoReflect.Descriptor instead. +func (*SemVer) Descriptor() ([]byte, []int) { + return file_build_bazel_semver_semver_proto_rawDescGZIP(), []int{0} +} -func (m *SemVer) GetMajor() int32 { - if m != nil { - return m.Major +func (x *SemVer) GetMajor() int32 { + if x != nil { + return x.Major } return 0 } -func (m *SemVer) GetMinor() int32 { - if m != nil { - return m.Minor +func (x *SemVer) GetMinor() int32 { + if x != nil { + return x.Minor } return 0 } -func (m *SemVer) GetPatch() int32 { - if m != nil { - return m.Patch +func (x *SemVer) GetPatch() int32 { + if x != nil { + return x.Patch } return 0 } -func (m *SemVer) GetPrerelease() string { - if m != nil { - return m.Prerelease +func (x *SemVer) GetPrerelease() string { + if x != nil { + return x.Prerelease } return "" } -func init() { - proto.RegisterType((*SemVer)(nil), "build.bazel.semver.SemVer") +var File_build_bazel_semver_semver_proto protoreflect.FileDescriptor + +var file_build_bazel_semver_semver_proto_rawDesc = []byte{ + 0x0a, 0x1f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2f, 0x73, 0x65, + 0x6d, 0x76, 0x65, 0x72, 0x2f, 0x73, 0x65, 0x6d, 0x76, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x12, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x73, + 0x65, 0x6d, 0x76, 0x65, 0x72, 0x22, 0x6a, 0x0a, 0x06, 0x53, 0x65, 0x6d, 0x56, 0x65, 0x72, 0x12, + 0x14, 0x0a, 0x05, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, + 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x70, + 0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x70, 0x61, 0x74, 0x63, + 0x68, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x42, 0x74, 0x0a, 0x12, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, + 0x2e, 0x73, 0x65, 0x6d, 0x76, 0x65, 0x72, 0x42, 0x0b, 0x53, 0x65, 0x6d, 0x76, 0x65, 0x72, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x72, 0x65, + 0x6d, 0x6f, 0x74, 0x65, 0x2d, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, + 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2f, 0x73, 0x65, 0x6d, 0x76, 0x65, 0x72, 0xa2, 0x02, 0x03, 0x53, + 0x4d, 0x56, 0xaa, 0x02, 0x12, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x42, 0x61, 0x7a, 0x65, 0x6c, + 0x2e, 0x53, 0x65, 0x6d, 0x76, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_build_bazel_semver_semver_proto_rawDescOnce sync.Once + file_build_bazel_semver_semver_proto_rawDescData = file_build_bazel_semver_semver_proto_rawDesc +) + +func file_build_bazel_semver_semver_proto_rawDescGZIP() []byte { + file_build_bazel_semver_semver_proto_rawDescOnce.Do(func() { + file_build_bazel_semver_semver_proto_rawDescData = protoimpl.X.CompressGZIP(file_build_bazel_semver_semver_proto_rawDescData) + }) + return file_build_bazel_semver_semver_proto_rawDescData +} + +var file_build_bazel_semver_semver_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_build_bazel_semver_semver_proto_goTypes = []any{ + (*SemVer)(nil), // 0: build.bazel.semver.SemVer +} +var file_build_bazel_semver_semver_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name } -func init() { proto.RegisterFile("build/bazel/semver/semver.proto", fileDescriptor_3d8602885cf21c73) } - -var fileDescriptor_3d8602885cf21c73 = []byte{ - // 178 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4f, 0x2a, 0xcd, 0xcc, - 0x49, 0xd1, 0x4f, 0x4a, 0xac, 0x4a, 0xcd, 0xd1, 0x2f, 0x4e, 0xcd, 0x2d, 0x4b, 0x2d, 0x82, 0x52, - 0x7a, 0x05, 0x45, 0xf9, 0x25, 0xf9, 0x42, 0x42, 0x60, 0x05, 0x7a, 0x60, 0x05, 0x7a, 0x10, 0x19, - 0xa5, 0x2c, 0x2e, 0xb6, 0xe0, 0xd4, 0xdc, 0xb0, 0xd4, 0x22, 0x21, 0x11, 0x2e, 0xd6, 0xdc, 0xc4, - 0xac, 0xfc, 0x22, 0x09, 0x46, 0x05, 0x46, 0x0d, 0xd6, 0x20, 0x08, 0x07, 0x2c, 0x9a, 0x99, 0x97, - 0x5f, 0x24, 0xc1, 0x04, 0x15, 0x05, 0x71, 0x40, 0xa2, 0x05, 0x89, 0x25, 0xc9, 0x19, 0x12, 0xcc, - 0x10, 0x51, 0x30, 0x47, 0x48, 0x8e, 0x8b, 0xab, 0xa0, 0x28, 0xb5, 0x28, 0x35, 0x27, 0x35, 0xb1, - 0x38, 0x55, 0x82, 0x45, 0x81, 0x51, 0x83, 0x33, 0x08, 0x49, 0xc4, 0xc9, 0x8d, 0x0b, 0x8b, 0x0b, - 0x9c, 0xb8, 0x83, 0xc1, 0x74, 0x00, 0xc8, 0x89, 0x01, 0x8c, 0x51, 0x6c, 0x10, 0xe1, 0x45, 0x4c, - 0xcc, 0xc1, 0xbe, 0x61, 0xab, 0x98, 0x84, 0x9c, 0xc0, 0x3a, 0x9c, 0xc0, 0x3a, 0x20, 0x2a, 0x93, - 0xd8, 0xc0, 0xde, 0x31, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0x49, 0x4e, 0xf3, 0x93, 0xf1, 0x00, - 0x00, 0x00, +func init() { file_build_bazel_semver_semver_proto_init() } +func file_build_bazel_semver_semver_proto_init() { + if File_build_bazel_semver_semver_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_build_bazel_semver_semver_proto_msgTypes[0].Exporter = func(v any, i int) any { + switch v := v.(*SemVer); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_build_bazel_semver_semver_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_build_bazel_semver_semver_proto_goTypes, + DependencyIndexes: file_build_bazel_semver_semver_proto_depIdxs, + MessageInfos: file_build_bazel_semver_semver_proto_msgTypes, + }.Build() + File_build_bazel_semver_semver_proto = out.File + file_build_bazel_semver_semver_proto_rawDesc = nil + file_build_bazel_semver_semver_proto_goTypes = nil + file_build_bazel_semver_semver_proto_depIdxs = nil } diff --git a/go.mod b/go.mod index 250bb8e45..399a01543 100644 --- a/go.mod +++ b/go.mod @@ -1,10 +1,10 @@ module github.com/buchgr/bazel-remote/v2 require ( + cloud.google.com/go/longrunning v0.5.12 github.com/abbot/go-http-auth v0.4.1-0.20220112235402-e1cee1c72f2f github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect github.com/djherbis/atime v1.1.0 - github.com/golang/protobuf v1.5.4 github.com/google/go-cmp v0.6.0 github.com/google/uuid v1.6.0 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 @@ -16,12 +16,11 @@ require ( github.com/prometheus/client_model v0.6.1 // indirect github.com/slok/go-http-metrics v0.11.0 github.com/urfave/cli/v2 v2.27.1 - golang.org/x/oauth2 v0.19.0 - golang.org/x/sync v0.7.0 - golang.org/x/sys v0.21.0 // indirect - google.golang.org/genproto v0.0.0-20240401170217-c3f982113cda + golang.org/x/oauth2 v0.22.0 + golang.org/x/sync v0.8.0 + golang.org/x/sys v0.22.0 // indirect google.golang.org/grpc v1.64.1 - google.golang.org/protobuf v1.34.1 + google.golang.org/protobuf v1.34.2 gopkg.in/yaml.v3 v3.0.1 ) @@ -32,15 +31,13 @@ require ( github.com/go-ldap/ldap/v3 v3.4.8 github.com/johannesboyne/gofakes3 v0.0.0-20230506070712-04da935ef877 github.com/valyala/gozstd v1.20.1 - google.golang.org/genproto/googleapis/api v0.0.0-20240401170217-c3f982113cda + google.golang.org/genproto/googleapis/api v0.0.0-20240725223205-93522f1f2a9f google.golang.org/genproto/googleapis/bytestream v0.0.0-20240401170217-c3f982113cda - google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda + google.golang.org/genproto/googleapis/rpc v0.0.0-20240730163845-b1a4ccb954bf ) require ( - cloud.google.com/go/compute v1.25.1 // indirect - cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/longrunning v0.5.6 // indirect + cloud.google.com/go/compute/metadata v0.5.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.8.0 // indirect github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 // indirect @@ -67,8 +64,8 @@ require ( github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46 // indirect github.com/shabbyrobe/gocovmerge v0.0.0-20190829150210-3e036491d500 // indirect github.com/xrash/smetrics v0.0.0-20240312152122-5f08fbb34913 // indirect - golang.org/x/crypto v0.24.0 // indirect - golang.org/x/net v0.26.0 // indirect + golang.org/x/crypto v0.25.0 // indirect + golang.org/x/net v0.27.0 // indirect golang.org/x/text v0.16.0 // indirect golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect gopkg.in/ini.v1 v1.67.0 // indirect diff --git a/go.sum b/go.sum index bc5e8a7c0..28befd295 100644 --- a/go.sum +++ b/go.sum @@ -1,9 +1,7 @@ -cloud.google.com/go/compute v1.25.1 h1:ZRpHJedLtTpKgr3RV1Fx23NuaAEN1Zfx9hw1u4aJdjU= -cloud.google.com/go/compute v1.25.1/go.mod h1:oopOIR53ly6viBYxaDhBfJwzUAxf1zE//uf3IB011ls= -cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= -cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= -cloud.google.com/go/longrunning v0.5.6 h1:xAe8+0YaWoCKr9t1+aWe+OeQgN/iJK1fEgZSXmjuEaE= -cloud.google.com/go/longrunning v0.5.6/go.mod h1:vUaDrWYOMKRuhiv6JBnn49YxCPz2Ayn9GqyjaBT8/mA= +cloud.google.com/go/compute/metadata v0.5.0 h1:Zr0eK8JbFv6+Wi4ilXAR8FJ3wyNdpxHKJNPos6LTZOY= +cloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY= +cloud.google.com/go/longrunning v0.5.12 h1:5LqSIdERr71CqfUsFlJdBpOkBH8FBCFD7P1nTWy3TYE= +cloud.google.com/go/longrunning v0.5.12/go.mod h1:S5hMV8CDJ6r50t2ubVJSKQVv5u0rmik5//KgLO3k4lU= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.11.1 h1:E+OJmp2tPvt1W+amx48v1eqbjDYsgN+RzP4q16yV5eM= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.11.1/go.mod h1:a6xsAQUZg+VsS3TJ05SRp524Hs4pZ/AeFSr5ENf0Yjo= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.6.0 h1:U2rTu3Ef+7w9FHKIAXM6ZyqF3UOWJZ12zIm8zECAFfg= @@ -154,8 +152,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= -golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= -golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= +golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= +golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= @@ -170,15 +168,15 @@ golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= -golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= -golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= -golang.org/x/oauth2 v0.19.0 h1:9+E/EZBCbTLNrbN35fHv/a/d/mOBatymz1zbtQrXpIg= -golang.org/x/oauth2 v0.19.0/go.mod h1:vYi7skDa1x015PmRRYZ7+s1cWyPgrPiSYRe4rnsexc8= +golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= +golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= +golang.org/x/oauth2 v0.22.0 h1:BzDx2FehcG7jJwgWLELCdmLuxk2i+x9UDpSiss2u0ZA= +golang.org/x/oauth2 v0.22.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -191,8 +189,8 @@ golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= -golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= +golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -219,18 +217,16 @@ golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4= golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/genproto v0.0.0-20240401170217-c3f982113cda h1:wu/KJm9KJwpfHWhkkZGohVC6KRrc1oJNr4jwtQMOQXw= -google.golang.org/genproto v0.0.0-20240401170217-c3f982113cda/go.mod h1:g2LLCvCeCSir/JJSWosk19BR4NVxGqHUC6rxIRsd7Aw= -google.golang.org/genproto/googleapis/api v0.0.0-20240401170217-c3f982113cda h1:b6F6WIV4xHHD0FA4oIyzU6mHWg2WI2X1RBehwa5QN38= -google.golang.org/genproto/googleapis/api v0.0.0-20240401170217-c3f982113cda/go.mod h1:AHcE/gZH76Bk/ROZhQphlRoWo5xKDEtz3eVEO1LfA8c= +google.golang.org/genproto/googleapis/api v0.0.0-20240725223205-93522f1f2a9f h1:b1Ln/PG8orm0SsBbHZWke8dDp2lrCD4jSmfglFpTZbk= +google.golang.org/genproto/googleapis/api v0.0.0-20240725223205-93522f1f2a9f/go.mod h1:AHT0dDg3SoMOgZGnZk29b5xTbPHMoEC8qthmBLJCpys= google.golang.org/genproto/googleapis/bytestream v0.0.0-20240401170217-c3f982113cda h1:O77/tf8XXfErAKafUOaAtuDyynGoufcD0mnG++LziIs= google.golang.org/genproto/googleapis/bytestream v0.0.0-20240401170217-c3f982113cda/go.mod h1:IN9OQUXZ0xT+26MDwZL8fJcYw+y99b0eYPA2U15Jt8o= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda h1:LI5DOvAxUPMv/50agcLLoo+AdWc1irS9Rzz4vPuD1V4= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240730163845-b1a4ccb954bf h1:liao9UHurZLtiEwBgT9LMOnKYsHze6eA6w1KQCMVN2Q= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240730163845-b1a4ccb954bf/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= google.golang.org/grpc v1.64.1 h1:LKtvyfbX3UGVPFcGqJ9ItpVWW6oN/2XqTxfAnwRRXiA= google.golang.org/grpc v1.64.1/go.mod h1:hiQF4LFZelK2WKaP6W0L92zGHtiQdZxk8CrSdvyjeP0= -google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= -google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=