From 7eff9a948b6b92b03afea1d4e769acd32ca77525 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Jul 2023 16:38:15 +0000 Subject: [PATCH] chore(deps): bump cloud.google.com/go/storage from 1.29.0 to 1.31.0 Bumps [cloud.google.com/go/storage](https://github.com/googleapis/google-cloud-go) from 1.29.0 to 1.31.0. - [Release notes](https://github.com/googleapis/google-cloud-go/releases) - [Changelog](https://github.com/googleapis/google-cloud-go/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-cloud-go/compare/pubsub/v1.29.0...pubsub/v1.31.0) --- updated-dependencies: - dependency-name: cloud.google.com/go/storage dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 33 +- go.sum | 86 +- .../go/compute/internal/version.go | 2 +- vendor/cloud.google.com/go/iam/CHANGES.md | 29 + .../go/iam/apiv1/iampb/iam_policy.pb.go | 44 +- .../go/iam/apiv1/iampb/options.pb.go | 24 +- .../go/iam/apiv1/iampb/policy.pb.go | 107 +- .../go/internal/.repo-metadata-full.json | 578 +-- vendor/cloud.google.com/go/internal/README.md | 23 +- vendor/cloud.google.com/go/storage/CHANGES.md | 52 + vendor/cloud.google.com/go/storage/acl.go | 2 +- vendor/cloud.google.com/go/storage/bucket.go | 33 +- vendor/cloud.google.com/go/storage/client.go | 2 +- vendor/cloud.google.com/go/storage/doc.go | 3 + .../go/storage/grpc_client.go | 127 +- vendor/cloud.google.com/go/storage/hmac.go | 2 +- .../go/storage/http_client.go | 409 +- vendor/cloud.google.com/go/storage/iam.go | 2 +- .../go/storage/internal/apiv2/doc.go | 61 +- .../internal/apiv2/gapic_metadata.json | 16 +- .../storage/internal/apiv2/storage_client.go | 569 ++- .../apiv2/{stubs => storagepb}/storage.pb.go | 3587 +++++++++-------- .../go/storage/internal/version.go | 2 +- vendor/cloud.google.com/go/storage/invoke.go | 5 + .../go/storage/notifications.go | 10 +- vendor/cloud.google.com/go/storage/option.go | 75 + .../go/storage/post_policy_v4.go | 9 +- vendor/cloud.google.com/go/storage/reader.go | 16 +- vendor/cloud.google.com/go/storage/storage.go | 92 +- vendor/cloud.google.com/go/storage/writer.go | 2 +- vendor/github.com/google/s2a-go/.gitignore | 6 + .../google/s2a-go/CODE_OF_CONDUCT.md | 93 + .../github.com/google/s2a-go/CONTRIBUTING.md | 29 + vendor/github.com/google/s2a-go/LICENSE.md | 202 + vendor/github.com/google/s2a-go/README.md | 17 + .../google/s2a-go/fallback/s2a_fallback.go | 167 + .../s2a-go/internal/authinfo/authinfo.go | 119 + .../s2a-go/internal/handshaker/handshaker.go | 438 ++ .../internal/handshaker/service/service.go | 99 + .../proto/common_go_proto/common.pb.go | 389 ++ .../s2a_context_go_proto/s2a_context.pb.go | 267 ++ .../internal/proto/s2a_go_proto/s2a.pb.go | 1377 +++++++ .../proto/s2a_go_proto/s2a_grpc.pb.go | 173 + .../proto/v2/common_go_proto/common.pb.go | 367 ++ .../v2/s2a_context_go_proto/s2a_context.pb.go | 248 ++ .../internal/proto/v2/s2a_go_proto/s2a.pb.go | 2494 ++++++++++++ .../proto/v2/s2a_go_proto/s2a_grpc.pb.go | 159 + .../internal/aeadcrypter/aeadcrypter.go | 34 + .../record/internal/aeadcrypter/aesgcm.go | 70 + .../record/internal/aeadcrypter/chachapoly.go | 67 + .../record/internal/aeadcrypter/common.go | 92 + .../record/internal/halfconn/ciphersuite.go | 98 + .../record/internal/halfconn/counter.go | 60 + .../record/internal/halfconn/expander.go | 59 + .../record/internal/halfconn/halfconn.go | 193 + .../google/s2a-go/internal/record/record.go | 757 ++++ .../s2a-go/internal/record/ticketsender.go | 176 + .../internal/tokenmanager/tokenmanager.go | 70 + .../google/s2a-go/internal/v2/README.md | 1 + .../internal/v2/certverifier/certverifier.go | 122 + .../testdata/client_intermediate_cert.der | Bin 0 -> 998 bytes .../testdata/client_leaf_cert.der | Bin 0 -> 1147 bytes .../testdata/client_root_cert.der | Bin 0 -> 1013 bytes .../testdata/server_intermediate_cert.der | Bin 0 -> 998 bytes .../testdata/server_leaf_cert.der | Bin 0 -> 1147 bytes .../testdata/server_root_cert.der | Bin 0 -> 1013 bytes .../internal/v2/remotesigner/remotesigner.go | 186 + .../v2/remotesigner/testdata/client_cert.der | Bin 0 -> 1013 bytes .../v2/remotesigner/testdata/client_cert.pem | 24 + .../v2/remotesigner/testdata/client_key.pem | 27 + .../v2/remotesigner/testdata/server_cert.der | Bin 0 -> 1013 bytes .../v2/remotesigner/testdata/server_cert.pem | 24 + .../v2/remotesigner/testdata/server_key.pem | 27 + .../google/s2a-go/internal/v2/s2av2.go | 354 ++ .../internal/v2/testdata/client_cert.pem | 24 + .../internal/v2/testdata/client_key.pem | 27 + .../internal/v2/testdata/server_cert.pem | 24 + .../internal/v2/testdata/server_key.pem | 27 + .../tlsconfigstore/testdata/client_cert.pem | 24 + .../v2/tlsconfigstore/testdata/client_key.pem | 27 + .../tlsconfigstore/testdata/server_cert.pem | 24 + .../v2/tlsconfigstore/testdata/server_key.pem | 27 + .../v2/tlsconfigstore/tlsconfigstore.go | 404 ++ vendor/github.com/google/s2a-go/s2a.go | 412 ++ .../github.com/google/s2a-go/s2a_options.go | 208 + vendor/github.com/google/s2a-go/s2a_utils.go | 79 + .../google/s2a-go/stream/s2a_stream.go | 34 + .../google/s2a-go/testdata/client_cert.pem | 24 + .../google/s2a-go/testdata/client_key.pem | 27 + .../google/s2a-go/testdata/server_cert.pem | 24 + .../google/s2a-go/testdata/server_key.pem | 27 + .../gax-go/v2/.release-please-manifest.json | 2 +- .../googleapis/gax-go/v2/CHANGES.md | 52 + .../googleapis/gax-go/v2/apierror/apierror.go | 25 +- .../googleapis/gax-go/v2/call_option.go | 21 + .../github.com/googleapis/gax-go/v2/header.go | 68 +- .../googleapis/gax-go/v2/internal/version.go | 2 +- .../github.com/googleapis/gax-go/v2/invoke.go | 10 + .../chacha20poly1305/chacha20poly1305.go | 98 + .../chacha20poly1305_amd64.go | 87 + .../chacha20poly1305/chacha20poly1305_amd64.s | 2696 +++++++++++++ .../chacha20poly1305_generic.go | 81 + .../chacha20poly1305_noasm.go | 16 + .../chacha20poly1305/xchacha20poly1305.go | 86 + vendor/golang.org/x/crypto/cryptobyte/asn1.go | 824 ++++ .../x/crypto/cryptobyte/asn1/asn1.go | 46 + .../golang.org/x/crypto/cryptobyte/builder.go | 345 ++ .../golang.org/x/crypto/cryptobyte/string.go | 172 + .../x/crypto/curve25519/curve25519.go | 99 +- .../x/crypto/curve25519/curve25519_compat.go | 105 + .../x/crypto/curve25519/curve25519_go120.go | 46 + .../curve25519/internal/field/fe_generic.go | 2 +- vendor/golang.org/x/crypto/hkdf/hkdf.go | 93 + .../golang.org/x/crypto/ssh/agent/server.go | 2 +- vendor/golang.org/x/crypto/ssh/cipher.go | 3 +- vendor/golang.org/x/crypto/ssh/common.go | 24 +- vendor/golang.org/x/crypto/ssh/connection.go | 2 +- vendor/golang.org/x/crypto/ssh/handshake.go | 69 +- vendor/golang.org/x/crypto/ssh/keys.go | 6 +- .../x/crypto/ssh/knownhosts/knownhosts.go | 2 +- vendor/golang.org/x/crypto/ssh/server.go | 13 +- vendor/golang.org/x/crypto/ssh/transport.go | 3 +- vendor/golang.org/x/net/http2/pipe.go | 6 +- vendor/golang.org/x/net/http2/server.go | 7 +- vendor/golang.org/x/net/http2/transport.go | 41 +- .../golang.org/x/net/internal/socks/socks.go | 2 +- vendor/golang.org/x/oauth2/README.md | 12 +- vendor/golang.org/x/oauth2/google/default.go | 25 +- vendor/golang.org/x/oauth2/google/doc.go | 61 +- vendor/golang.org/x/oauth2/google/google.go | 6 +- vendor/golang.org/x/oauth2/internal/oauth2.go | 2 +- vendor/golang.org/x/oauth2/internal/token.go | 60 +- vendor/golang.org/x/oauth2/oauth2.go | 33 +- vendor/golang.org/x/oauth2/token.go | 33 +- vendor/golang.org/x/sys/unix/ioctl_signed.go | 70 + .../sys/unix/{ioctl.go => ioctl_unsigned.go} | 4 +- vendor/golang.org/x/sys/unix/ioctl_zos.go | 12 +- vendor/golang.org/x/sys/unix/mkerrors.sh | 5 +- vendor/golang.org/x/sys/unix/syscall_aix.go | 4 +- .../golang.org/x/sys/unix/syscall_aix_ppc.go | 1 - .../x/sys/unix/syscall_aix_ppc64.go | 1 - .../golang.org/x/sys/unix/syscall_darwin.go | 3 +- .../x/sys/unix/syscall_dragonfly.go | 1 - .../golang.org/x/sys/unix/syscall_freebsd.go | 1 - vendor/golang.org/x/sys/unix/syscall_linux.go | 10 +- .../x/sys/unix/syscall_linux_386.go | 27 - .../x/sys/unix/syscall_linux_amd64.go | 1 - .../x/sys/unix/syscall_linux_arm.go | 27 - .../x/sys/unix/syscall_linux_arm64.go | 10 - .../x/sys/unix/syscall_linux_loong64.go | 5 - .../x/sys/unix/syscall_linux_mips64x.go | 1 - .../x/sys/unix/syscall_linux_mipsx.go | 27 - .../x/sys/unix/syscall_linux_ppc.go | 27 - .../x/sys/unix/syscall_linux_ppc64x.go | 1 - .../x/sys/unix/syscall_linux_riscv64.go | 1 - .../x/sys/unix/syscall_linux_s390x.go | 1 - .../x/sys/unix/syscall_linux_sparc64.go | 1 - .../golang.org/x/sys/unix/syscall_netbsd.go | 2 - .../golang.org/x/sys/unix/syscall_openbsd.go | 1 - .../golang.org/x/sys/unix/syscall_solaris.go | 21 +- vendor/golang.org/x/sys/unix/syscall_unix.go | 7 + .../x/sys/unix/syscall_zos_s390x.go | 4 +- .../x/sys/unix/zerrors_darwin_amd64.go | 19 + .../x/sys/unix/zerrors_darwin_arm64.go | 19 + vendor/golang.org/x/sys/unix/zerrors_linux.go | 14 + .../golang.org/x/sys/unix/zsyscall_aix_ppc.go | 15 +- .../x/sys/unix/zsyscall_aix_ppc64.go | 18 +- .../x/sys/unix/zsyscall_aix_ppc64_gc.go | 10 - .../x/sys/unix/zsyscall_aix_ppc64_gccgo.go | 10 +- .../x/sys/unix/zsyscall_darwin_amd64.go | 39 +- .../x/sys/unix/zsyscall_darwin_amd64.s | 11 +- .../x/sys/unix/zsyscall_darwin_arm64.go | 39 +- .../x/sys/unix/zsyscall_darwin_arm64.s | 11 +- .../x/sys/unix/zsyscall_dragonfly_amd64.go | 10 - .../x/sys/unix/zsyscall_freebsd_386.go | 10 - .../x/sys/unix/zsyscall_freebsd_amd64.go | 10 - .../x/sys/unix/zsyscall_freebsd_arm.go | 10 - .../x/sys/unix/zsyscall_freebsd_arm64.go | 10 - .../x/sys/unix/zsyscall_freebsd_riscv64.go | 10 - .../golang.org/x/sys/unix/zsyscall_linux.go | 10 - .../x/sys/unix/zsyscall_linux_386.go | 10 - .../x/sys/unix/zsyscall_linux_amd64.go | 10 - .../x/sys/unix/zsyscall_linux_arm.go | 10 - .../x/sys/unix/zsyscall_linux_arm64.go | 10 - .../x/sys/unix/zsyscall_linux_mips.go | 10 - .../x/sys/unix/zsyscall_linux_mips64.go | 10 - .../x/sys/unix/zsyscall_linux_mips64le.go | 10 - .../x/sys/unix/zsyscall_linux_mipsle.go | 10 - .../x/sys/unix/zsyscall_linux_ppc.go | 10 - .../x/sys/unix/zsyscall_linux_ppc64.go | 10 - .../x/sys/unix/zsyscall_linux_ppc64le.go | 10 - .../x/sys/unix/zsyscall_linux_riscv64.go | 10 - .../x/sys/unix/zsyscall_linux_s390x.go | 10 - .../x/sys/unix/zsyscall_linux_sparc64.go | 10 - .../x/sys/unix/zsyscall_netbsd_386.go | 10 - .../x/sys/unix/zsyscall_netbsd_amd64.go | 10 - .../x/sys/unix/zsyscall_netbsd_arm.go | 10 - .../x/sys/unix/zsyscall_netbsd_arm64.go | 10 - .../x/sys/unix/zsyscall_openbsd_386.go | 14 - .../x/sys/unix/zsyscall_openbsd_386.s | 5 - .../x/sys/unix/zsyscall_openbsd_amd64.go | 14 - .../x/sys/unix/zsyscall_openbsd_amd64.s | 5 - .../x/sys/unix/zsyscall_openbsd_arm.go | 14 - .../x/sys/unix/zsyscall_openbsd_arm.s | 5 - .../x/sys/unix/zsyscall_openbsd_arm64.go | 14 - .../x/sys/unix/zsyscall_openbsd_arm64.s | 5 - .../x/sys/unix/zsyscall_openbsd_mips64.go | 14 - .../x/sys/unix/zsyscall_openbsd_mips64.s | 5 - .../x/sys/unix/zsyscall_openbsd_ppc64.go | 14 - .../x/sys/unix/zsyscall_openbsd_ppc64.s | 6 - .../x/sys/unix/zsyscall_openbsd_riscv64.go | 14 - .../x/sys/unix/zsyscall_openbsd_riscv64.s | 5 - .../x/sys/unix/zsyscall_solaris_amd64.go | 17 +- .../x/sys/unix/zsyscall_zos_s390x.go | 4 +- .../x/sys/unix/ztypes_darwin_amd64.go | 11 + .../x/sys/unix/ztypes_darwin_arm64.go | 11 + .../golang.org/x/sys/windows/env_windows.go | 6 +- .../golang.org/x/sys/windows/exec_windows.go | 7 +- vendor/golang.org/x/sys/windows/service.go | 7 + .../golang.org/x/sys/windows/types_windows.go | 10 +- .../x/sys/windows/zsyscall_windows.go | 9 + .../api/googleapi/googleapi.go | 5 +- .../iamcredentials/v1/iamcredentials-gen.go | 1 + vendor/google.golang.org/api/internal/cba.go | 282 ++ .../cert/default_cert.go | 0 .../cert/enterprise_cert.go | 0 .../cert/secureconnect_cert.go | 3 +- .../google.golang.org/api/internal/creds.go | 79 +- .../api/internal/gensupport/media.go | 7 +- .../api/internal/gensupport/resumable.go | 9 +- .../api/internal/gensupport/send.go | 5 + .../api/internal/impersonate/impersonate.go | 3 +- vendor/google.golang.org/api/internal/s2a.go | 136 + .../api/internal/settings.go | 1 + .../google.golang.org/api/internal/version.go | 2 +- .../option/internaloption/internaloption.go | 15 + .../api/storage/v1/storage-api.json | 9 +- .../api/storage/v1/storage-gen.go | 13 + .../api/transport/grpc/dial.go | 31 +- .../api/transport/http/dial.go | 21 +- .../api/transport/internal/dca/dca.go | 143 - .../genproto/googleapis/api/LICENSE | 202 + .../googleapis/api/annotations/client.pb.go | 407 +- .../api/annotations/field_behavior.pb.go | 20 +- .../googleapis/api/annotations/http.pb.go | 17 +- .../googleapis/api/annotations/resource.pb.go | 66 +- .../googleapis/api/annotations/routing.pb.go | 62 +- .../googleapis/api/launch_stage.pb.go | 4 +- .../genproto/googleapis/api/tidyfix.go | 23 + .../genproto/googleapis/iam/v1/alias.go | 208 - .../genproto/googleapis/rpc/LICENSE | 202 + .../genproto/internal/doc.go | 17 + vendor/google.golang.org/grpc/CONTRIBUTING.md | 25 +- .../grpclb/grpc_lb_v1/load_balancer.pb.go | 4 +- .../grpc_lb_v1/load_balancer_grpc.pb.go | 10 +- .../grpc_binarylog_v1/binarylog.pb.go | 4 +- vendor/google.golang.org/grpc/clientconn.go | 38 +- .../grpc/codes/code_string.go | 51 +- .../alts/internal/handshaker/handshaker.go | 54 +- .../internal/handshaker/service/service.go | 18 + .../internal/proto/grpc_gcp/altscontext.pb.go | 4 +- .../internal/proto/grpc_gcp/handshaker.pb.go | 4 +- .../proto/grpc_gcp/handshaker_grpc.pb.go | 10 +- .../grpc_gcp/transport_security_common.pb.go | 4 +- vendor/google.golang.org/grpc/dialoptions.go | 26 +- .../grpc/internal/binarylog/binarylog.go | 8 +- .../grpc/internal/binarylog/method_logger.go | 5 +- .../grpc/internal/envconfig/xds.go | 2 +- .../grpc/internal/grpclog/prefixLogger.go | 12 + .../internal/grpcsync/callback_serializer.go | 65 + .../grpc/internal/internal.go | 10 + .../grpc/internal/metadata/metadata.go | 62 +- .../grpc/internal/transport/controlbuf.go | 93 +- .../grpc/internal/transport/handler_server.go | 9 +- .../grpc/internal/transport/http2_client.go | 44 +- .../grpc/internal/transport/http2_server.go | 78 +- .../grpc/internal/transport/http_util.go | 26 +- .../grpc/internal/transport/logging.go | 40 + .../grpc/internal/transport/transport.go | 23 +- .../grpc/metadata/metadata.go | 13 +- .../grpc/resolver/resolver.go | 20 +- vendor/google.golang.org/grpc/rpc_util.go | 53 +- vendor/google.golang.org/grpc/server.go | 203 +- vendor/google.golang.org/grpc/stats/stats.go | 22 +- .../google.golang.org/grpc/status/status.go | 30 +- vendor/google.golang.org/grpc/stream.go | 61 +- vendor/google.golang.org/grpc/version.go | 2 +- vendor/google.golang.org/grpc/vet.sh | 15 +- .../internal/encoding/text/decode_number.go | 6 +- .../protobuf/internal/version/version.go | 2 +- vendor/modules.txt | 71 +- 291 files changed, 21657 insertions(+), 4428 deletions(-) rename vendor/cloud.google.com/go/storage/internal/apiv2/{stubs => storagepb}/storage.pb.go (71%) create mode 100644 vendor/cloud.google.com/go/storage/option.go create mode 100644 vendor/github.com/google/s2a-go/.gitignore create mode 100644 vendor/github.com/google/s2a-go/CODE_OF_CONDUCT.md create mode 100644 vendor/github.com/google/s2a-go/CONTRIBUTING.md create mode 100644 vendor/github.com/google/s2a-go/LICENSE.md create mode 100644 vendor/github.com/google/s2a-go/README.md create mode 100644 vendor/github.com/google/s2a-go/fallback/s2a_fallback.go create mode 100644 vendor/github.com/google/s2a-go/internal/authinfo/authinfo.go create mode 100644 vendor/github.com/google/s2a-go/internal/handshaker/handshaker.go create mode 100644 vendor/github.com/google/s2a-go/internal/handshaker/service/service.go create mode 100644 vendor/github.com/google/s2a-go/internal/proto/common_go_proto/common.pb.go create mode 100644 vendor/github.com/google/s2a-go/internal/proto/s2a_context_go_proto/s2a_context.pb.go create mode 100644 vendor/github.com/google/s2a-go/internal/proto/s2a_go_proto/s2a.pb.go create mode 100644 vendor/github.com/google/s2a-go/internal/proto/s2a_go_proto/s2a_grpc.pb.go create mode 100644 vendor/github.com/google/s2a-go/internal/proto/v2/common_go_proto/common.pb.go create mode 100644 vendor/github.com/google/s2a-go/internal/proto/v2/s2a_context_go_proto/s2a_context.pb.go create mode 100644 vendor/github.com/google/s2a-go/internal/proto/v2/s2a_go_proto/s2a.pb.go create mode 100644 vendor/github.com/google/s2a-go/internal/proto/v2/s2a_go_proto/s2a_grpc.pb.go create mode 100644 vendor/github.com/google/s2a-go/internal/record/internal/aeadcrypter/aeadcrypter.go create mode 100644 vendor/github.com/google/s2a-go/internal/record/internal/aeadcrypter/aesgcm.go create mode 100644 vendor/github.com/google/s2a-go/internal/record/internal/aeadcrypter/chachapoly.go create mode 100644 vendor/github.com/google/s2a-go/internal/record/internal/aeadcrypter/common.go create mode 100644 vendor/github.com/google/s2a-go/internal/record/internal/halfconn/ciphersuite.go create mode 100644 vendor/github.com/google/s2a-go/internal/record/internal/halfconn/counter.go create mode 100644 vendor/github.com/google/s2a-go/internal/record/internal/halfconn/expander.go create mode 100644 vendor/github.com/google/s2a-go/internal/record/internal/halfconn/halfconn.go create mode 100644 vendor/github.com/google/s2a-go/internal/record/record.go create mode 100644 vendor/github.com/google/s2a-go/internal/record/ticketsender.go create mode 100644 vendor/github.com/google/s2a-go/internal/tokenmanager/tokenmanager.go create mode 100644 vendor/github.com/google/s2a-go/internal/v2/README.md create mode 100644 vendor/github.com/google/s2a-go/internal/v2/certverifier/certverifier.go create mode 100644 vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/client_intermediate_cert.der create mode 100644 vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/client_leaf_cert.der create mode 100644 vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/client_root_cert.der create mode 100644 vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/server_intermediate_cert.der create mode 100644 vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/server_leaf_cert.der create mode 100644 vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/server_root_cert.der create mode 100644 vendor/github.com/google/s2a-go/internal/v2/remotesigner/remotesigner.go create mode 100644 vendor/github.com/google/s2a-go/internal/v2/remotesigner/testdata/client_cert.der create mode 100644 vendor/github.com/google/s2a-go/internal/v2/remotesigner/testdata/client_cert.pem create mode 100644 vendor/github.com/google/s2a-go/internal/v2/remotesigner/testdata/client_key.pem create mode 100644 vendor/github.com/google/s2a-go/internal/v2/remotesigner/testdata/server_cert.der create mode 100644 vendor/github.com/google/s2a-go/internal/v2/remotesigner/testdata/server_cert.pem create mode 100644 vendor/github.com/google/s2a-go/internal/v2/remotesigner/testdata/server_key.pem create mode 100644 vendor/github.com/google/s2a-go/internal/v2/s2av2.go create mode 100644 vendor/github.com/google/s2a-go/internal/v2/testdata/client_cert.pem create mode 100644 vendor/github.com/google/s2a-go/internal/v2/testdata/client_key.pem create mode 100644 vendor/github.com/google/s2a-go/internal/v2/testdata/server_cert.pem create mode 100644 vendor/github.com/google/s2a-go/internal/v2/testdata/server_key.pem create mode 100644 vendor/github.com/google/s2a-go/internal/v2/tlsconfigstore/testdata/client_cert.pem create mode 100644 vendor/github.com/google/s2a-go/internal/v2/tlsconfigstore/testdata/client_key.pem create mode 100644 vendor/github.com/google/s2a-go/internal/v2/tlsconfigstore/testdata/server_cert.pem create mode 100644 vendor/github.com/google/s2a-go/internal/v2/tlsconfigstore/testdata/server_key.pem create mode 100644 vendor/github.com/google/s2a-go/internal/v2/tlsconfigstore/tlsconfigstore.go create mode 100644 vendor/github.com/google/s2a-go/s2a.go create mode 100644 vendor/github.com/google/s2a-go/s2a_options.go create mode 100644 vendor/github.com/google/s2a-go/s2a_utils.go create mode 100644 vendor/github.com/google/s2a-go/stream/s2a_stream.go create mode 100644 vendor/github.com/google/s2a-go/testdata/client_cert.pem create mode 100644 vendor/github.com/google/s2a-go/testdata/client_key.pem create mode 100644 vendor/github.com/google/s2a-go/testdata/server_cert.pem create mode 100644 vendor/github.com/google/s2a-go/testdata/server_key.pem create mode 100644 vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305.go create mode 100644 vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.go create mode 100644 vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.s create mode 100644 vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_generic.go create mode 100644 vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_noasm.go create mode 100644 vendor/golang.org/x/crypto/chacha20poly1305/xchacha20poly1305.go create mode 100644 vendor/golang.org/x/crypto/cryptobyte/asn1.go create mode 100644 vendor/golang.org/x/crypto/cryptobyte/asn1/asn1.go create mode 100644 vendor/golang.org/x/crypto/cryptobyte/builder.go create mode 100644 vendor/golang.org/x/crypto/cryptobyte/string.go create mode 100644 vendor/golang.org/x/crypto/curve25519/curve25519_compat.go create mode 100644 vendor/golang.org/x/crypto/curve25519/curve25519_go120.go create mode 100644 vendor/golang.org/x/crypto/hkdf/hkdf.go create mode 100644 vendor/golang.org/x/sys/unix/ioctl_signed.go rename vendor/golang.org/x/sys/unix/{ioctl.go => ioctl_unsigned.go} (92%) create mode 100644 vendor/google.golang.org/api/internal/cba.go rename vendor/google.golang.org/api/{transport => internal}/cert/default_cert.go (100%) rename vendor/google.golang.org/api/{transport => internal}/cert/enterprise_cert.go (100%) rename vendor/google.golang.org/api/{transport => internal}/cert/secureconnect_cert.go (98%) create mode 100644 vendor/google.golang.org/api/internal/s2a.go delete mode 100644 vendor/google.golang.org/api/transport/internal/dca/dca.go create mode 100644 vendor/google.golang.org/genproto/googleapis/api/LICENSE create mode 100644 vendor/google.golang.org/genproto/googleapis/api/tidyfix.go delete mode 100644 vendor/google.golang.org/genproto/googleapis/iam/v1/alias.go create mode 100644 vendor/google.golang.org/genproto/googleapis/rpc/LICENSE create mode 100644 vendor/google.golang.org/genproto/internal/doc.go create mode 100644 vendor/google.golang.org/grpc/internal/grpcsync/callback_serializer.go create mode 100644 vendor/google.golang.org/grpc/internal/transport/logging.go diff --git a/go.mod b/go.mod index c434e2d53d..25b46f709a 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/GoogleContainerTools/kaniko go 1.19 require ( - cloud.google.com/go/storage v1.29.0 + cloud.google.com/go/storage v1.31.0 github.com/Azure/azure-storage-blob-go v0.14.0 github.com/GoogleCloudPlatform/docker-credential-gcr v1.5.1-0.20210909233216-4cdd60d0f2d8 github.com/aws/aws-sdk-go v1.44.24 @@ -27,9 +27,9 @@ require ( github.com/spf13/afero v1.9.2 github.com/spf13/cobra v1.6.1 github.com/spf13/pflag v1.0.5 - golang.org/x/net v0.8.0 - golang.org/x/oauth2 v0.6.0 - golang.org/x/sync v0.1.0 + golang.org/x/net v0.10.0 + golang.org/x/oauth2 v0.8.0 + golang.org/x/sync v0.2.0 ) replace ( @@ -46,10 +46,10 @@ require ( ) require ( - cloud.google.com/go v0.110.0 // indirect - cloud.google.com/go/compute v1.18.0 // indirect + cloud.google.com/go v0.110.2 // indirect + cloud.google.com/go/compute v1.19.3 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v0.12.0 // indirect + cloud.google.com/go/iam v1.1.0 // indirect github.com/Azure/azure-pipeline-go v0.2.3 // indirect github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect @@ -100,7 +100,7 @@ require ( github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/google/uuid v1.3.0 // indirect - github.com/googleapis/gax-go/v2 v2.7.0 // indirect + github.com/googleapis/gax-go/v2 v2.11.0 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/go-memdb v1.3.2 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect @@ -140,16 +140,16 @@ require ( go.etcd.io/etcd/raft/v3 v3.5.6 // indirect go.opencensus.io v0.24.0 // indirect go.uber.org/goleak v1.2.1 // indirect - golang.org/x/crypto v0.2.0 // indirect - golang.org/x/sys v0.6.0 - golang.org/x/text v0.8.0 // indirect + golang.org/x/crypto v0.9.0 // indirect + golang.org/x/sys v0.8.0 + golang.org/x/text v0.9.0 // indirect golang.org/x/time v0.1.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/api v0.110.0 + google.golang.org/api v0.126.0 google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 // indirect - google.golang.org/grpc v1.53.0 // indirect - google.golang.org/protobuf v1.29.0 // indirect + google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc // indirect + google.golang.org/grpc v1.55.0 // indirect + google.golang.org/protobuf v1.30.0 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect ) @@ -160,6 +160,7 @@ require ( github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.6 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/google/go-querystring v1.1.0 // indirect + github.com/google/s2a-go v0.1.4 // indirect github.com/google/subcommands v1.2.0 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/magiconair/properties v1.8.5 // indirect @@ -171,6 +172,8 @@ require ( github.com/spf13/viper v1.8.1 // indirect github.com/subosito/gotenv v1.2.0 // indirect github.com/toqueteos/webbrowser v1.2.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc // indirect gopkg.in/ini.v1 v1.62.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect ) diff --git a/go.sum b/go.sum index e913ae3eb9..e099d789fa 100644 --- a/go.sum +++ b/go.sum @@ -20,24 +20,23 @@ cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPT cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= -cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= +cloud.google.com/go v0.110.2 h1:sdFPBr6xG9/wkBbfhmUz/JmZC7X6LavQgcrVINrKiVA= +cloud.google.com/go v0.110.2/go.mod h1:k04UEeEtb6ZBRTv3dZz4CeJC3jKGxyhl0sAiVVquxiw= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/compute v1.18.0 h1:FEigFqoDbys2cvFkZ9Fjq4gnHBP55anJ0yQyau2f9oY= -cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= +cloud.google.com/go/compute v1.19.3 h1:DcTwsFgGev/wV5+q8o2fzgcHOaac+DKGC91ZlvpsQds= +cloud.google.com/go/compute v1.19.3/go.mod h1:qxvISKp/gYnXkSAD1ppcSOveRAmzxicEv/JlizULFrI= 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/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= -cloud.google.com/go/iam v0.12.0 h1:DRtTY29b75ciH6Ov1PHb4/iat2CLCvrOm40Q0a6DFpE= -cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= -cloud.google.com/go/longrunning v0.4.1 h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM= +cloud.google.com/go/iam v1.1.0 h1:67gSqaPukx7O8WLLHMa0PNs3EBGd2eE4d+psbO/CO94= +cloud.google.com/go/iam v1.1.0/go.mod h1:nxdHjaKfCr7fNYx/HJMM8LgiMugmveWlkatear5gVyk= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= @@ -48,8 +47,8 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= -cloud.google.com/go/storage v1.29.0 h1:6weCgzRvMg7lzuUurI4697AqIRPU1SvzHhynwpW31jI= -cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= +cloud.google.com/go/storage v1.31.0 h1:+S3LjjEN2zZ+L5hOwj4+1OkGCsLVe0NzpXKQ1pSdTCI= +cloud.google.com/go/storage v1.31.0/go.mod h1:81ams1PrhW16L4kF7qg+4mTq7SRs5HsbDTM0bWvrwJ0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/azure-pipeline-go v0.2.3 h1:7U9HBg1JFK3jHl5qmo4CTZKFTVgMwdFHMVtCdfBE21U= github.com/Azure/azure-pipeline-go v0.2.3/go.mod h1:x841ezTBIMG6O3lAcl8ATHnsOPVl2bqk7S3ta6S6u4k= @@ -169,6 +168,10 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo= github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA= github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= @@ -202,8 +205,6 @@ github.com/dimchansky/utfbom v1.1.1 h1:vV6w1AhK4VMnhBno/TPVCoK9U/LP0PkLCS9tbxHdi github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE= github.com/docker/cli v23.0.1+incompatible h1:LRyWITpGzl2C9e9uGxzisptnxAn1zfZKXy13Ul2Q5oM= github.com/docker/cli v23.0.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= -github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v23.0.6+incompatible h1:aBD4np894vatVX99UTx/GyOUOK4uEcROwA3+bQhEcoU= @@ -229,6 +230,7 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= @@ -349,6 +351,8 @@ github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= +github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= github.com/google/slowjam v1.0.0 h1:dA9flW4oGTJcSy8FpEvdq8JKwPFVgqYwMmjhqlb2L+s= github.com/google/slowjam v1.0.0/go.mod h1:mNktULbvWfYVMKKmpt94Rp3jMtmhQZLS0iR+W84S0mM= github.com/google/subcommands v1.2.0 h1:vWQspBTo2nEqTUFita5/KeEWlUL8kQObDFbub/EN9oE= @@ -361,8 +365,8 @@ github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9 github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gax-go/v2 v2.7.0 h1:IcsPKeInNvYi7eqSaDjiZqDDKu5rsmunY0Y1YupQSSQ= -github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= +github.com/googleapis/gax-go/v2 v2.11.0 h1:9V9PWXEsWnPpQhu/PeQIkS4eGzMlTLGgt80cUUI8Ki4= +github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= @@ -643,6 +647,7 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/pkg/v3 v3.5.6/go.mod h1:ggrwbk069qxpKPq8/FKkQ3Xq9y39kbFR4LnKszpRXeQ= @@ -658,6 +663,7 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4= @@ -679,9 +685,10 @@ golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.2.0 h1:BRXPfhNivWL5Yq0BGQ39a2sW6t44aODpfxkWjYdzewE= -golang.org/x/crypto v0.2.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= +golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -717,6 +724,7 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs= golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -765,8 +773,9 @@ golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20220107192237-5cfca573fb4d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -781,8 +790,8 @@ golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.6.0 h1:Lh8GPgSKBfWSwFvtuWOfeI3aAAnbXTSutYxJiOJFgIw= -golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= +golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= +golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -794,8 +803,9 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= -golang.org/x/sync v0.1.0/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.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= +golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -871,13 +881,14 @@ golang.org/x/sys v0.0.0-20220110181412-a018aaa089fe/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= +golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -887,8 +898,9 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= +golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -948,6 +960,7 @@ golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4= golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -978,8 +991,8 @@ google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjR google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= -google.golang.org/api v0.110.0 h1:l+rh0KYUooe9JGbGVx71tbFo4SMbMTXK3I3ia2QSEeU= -google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= +google.golang.org/api v0.126.0 h1:q4GJq+cAdMAC7XP7njvQ4tvohGLiSlytuL4BQxbIZ+o= +google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1031,8 +1044,12 @@ google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 h1:DdoeryqhaXp1LtT/emMP1BRJPHHKFi5akj/nbx/zNTA= -google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= +google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc h1:8DyZCyvI8mE1IdLy/60bS+52xfymkE72wv1asokgtao= +google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= +google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc h1:kVKPf/IiYSBWEWtkIn6wZXwWGCnLKcC8oWfZvXjsGnM= +google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc h1:XSJ8Vk1SWuNr8S18z1NZSziL0CPIXLCCMDOEFtHBOFc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1053,8 +1070,9 @@ google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAG google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= -google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.55.0 h1:3Oj82/tFSCeUrRTg/5E/7d/W5A1tj6Ky1ABAuZuv5ag= +google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -1068,8 +1086,8 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.29.0 h1:44S3JjaKmLEE4YIkjzexaP+NzZsudE3Zin5Njn/pYX0= -google.golang.org/protobuf v1.29.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/vendor/cloud.google.com/go/compute/internal/version.go b/vendor/cloud.google.com/go/compute/internal/version.go index ddddbd21f2..7513e24cc7 100644 --- a/vendor/cloud.google.com/go/compute/internal/version.go +++ b/vendor/cloud.google.com/go/compute/internal/version.go @@ -15,4 +15,4 @@ package internal // Version is the current tagged release of the library. -const Version = "1.18.0" +const Version = "1.19.3" diff --git a/vendor/cloud.google.com/go/iam/CHANGES.md b/vendor/cloud.google.com/go/iam/CHANGES.md index 9d39f98060..d18a339ae1 100644 --- a/vendor/cloud.google.com/go/iam/CHANGES.md +++ b/vendor/cloud.google.com/go/iam/CHANGES.md @@ -1,5 +1,34 @@ # Changes + +## [1.1.0](https://github.com/googleapis/google-cloud-go/compare/iam/v1.0.1...iam/v1.1.0) (2023-05-30) + + +### Features + +* **iam:** Update all direct dependencies ([b340d03](https://github.com/googleapis/google-cloud-go/commit/b340d030f2b52a4ce48846ce63984b28583abde6)) + +## [1.0.1](https://github.com/googleapis/google-cloud-go/compare/iam/v1.0.0...iam/v1.0.1) (2023-05-08) + + +### Bug Fixes + +* **iam:** Update grpc to v1.55.0 ([1147ce0](https://github.com/googleapis/google-cloud-go/commit/1147ce02a990276ca4f8ab7a1ab65c14da4450ef)) + +## [1.0.0](https://github.com/googleapis/google-cloud-go/compare/iam/v0.13.0...iam/v1.0.0) (2023-04-04) + + +### Features + +* **iam:** Promote to GA ([#7627](https://github.com/googleapis/google-cloud-go/issues/7627)) ([b351906](https://github.com/googleapis/google-cloud-go/commit/b351906a10e17a02d7f7e2551bc1585fd9dc3742)) + +## [0.13.0](https://github.com/googleapis/google-cloud-go/compare/iam/v0.12.0...iam/v0.13.0) (2023-03-15) + + +### Features + +* **iam:** Update iam and longrunning deps ([91a1f78](https://github.com/googleapis/google-cloud-go/commit/91a1f784a109da70f63b96414bba8a9b4254cddd)) + ## [0.12.0](https://github.com/googleapis/google-cloud-go/compare/iam/v0.11.0...iam/v0.12.0) (2023-02-17) diff --git a/vendor/cloud.google.com/go/iam/apiv1/iampb/iam_policy.pb.go b/vendor/cloud.google.com/go/iam/apiv1/iampb/iam_policy.pb.go index 9ef7373d2c..fdcca8a52b 100644 --- a/vendor/cloud.google.com/go/iam/apiv1/iampb/iam_policy.pb.go +++ b/vendor/cloud.google.com/go/iam/apiv1/iampb/iam_policy.pb.go @@ -14,8 +14,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.21.12 +// protoc-gen-go v1.30.0 +// protoc v4.23.1 // source: google/iam/v1/iam_policy.proto package iampb @@ -342,37 +342,37 @@ var file_google_iam_v1_iam_policy_proto_rawDesc = []byte{ 0x53, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x23, 0x22, 0x1e, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x73, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0x74, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x50, + 0x02, 0x23, 0x3a, 0x01, 0x2a, 0x22, 0x1e, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x73, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x74, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x22, 0x1e, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x67, 0x65, 0x74, 0x49, - 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0x9a, 0x01, 0x0a, 0x12, + 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x3a, 0x01, 0x2a, 0x22, 0x1e, 0x2f, 0x76, 0x31, + 0x2f, 0x7b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x67, + 0x65, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x9a, 0x01, 0x0a, 0x12, 0x54, 0x65, 0x73, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, - 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3d, 0x2a, - 0x2a, 0x7d, 0x3a, 0x74, 0x65, 0x73, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x01, 0x2a, 0x1a, 0x1e, 0xca, 0x41, 0x1b, 0x69, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, + 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x74, 0x65, 0x73, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x65, 0x72, + 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x1e, 0xca, 0x41, 0x1b, 0x69, 0x61, 0x6d, 0x2d, 0x6d, 0x65, 0x74, 0x61, 0x2d, 0x61, 0x70, 0x69, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x42, 0x86, 0x01, 0x0a, 0x11, 0x63, 0x6f, 0x6d, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42, 0x0e, - 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, - 0x5a, 0x30, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, - 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x3b, 0x69, - 0x61, 0x6d, 0xf8, 0x01, 0x01, 0xaa, 0x02, 0x13, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x43, - 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x49, 0x61, 0x6d, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x13, 0x47, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x5c, 0x49, 0x61, 0x6d, 0x5c, 0x56, - 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x42, 0x7f, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42, 0x0e, 0x49, + 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, + 0x29, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x67, 0x6f, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x69, + 0x61, 0x6d, 0x70, 0x62, 0x3b, 0x69, 0x61, 0x6d, 0x70, 0x62, 0xf8, 0x01, 0x01, 0xaa, 0x02, 0x13, + 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x49, 0x61, 0x6d, + 0x2e, 0x56, 0x31, 0xca, 0x02, 0x13, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f, + 0x75, 0x64, 0x5c, 0x49, 0x61, 0x6d, 0x5c, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( diff --git a/vendor/cloud.google.com/go/iam/apiv1/iampb/options.pb.go b/vendor/cloud.google.com/go/iam/apiv1/iampb/options.pb.go index 026c115c27..7c91cc59af 100644 --- a/vendor/cloud.google.com/go/iam/apiv1/iampb/options.pb.go +++ b/vendor/cloud.google.com/go/iam/apiv1/iampb/options.pb.go @@ -14,8 +14,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.21.12 +// protoc-gen-go v1.30.0 +// protoc v4.23.1 // source: google/iam/v1/options.proto package iampb @@ -111,16 +111,16 @@ var file_google_iam_v1_options_proto_rawDesc = []byte{ 0x12, 0x38, 0x0a, 0x18, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x16, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x84, 0x01, 0x0a, 0x11, 0x63, - 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, - 0x42, 0x0c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, - 0x5a, 0x30, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, - 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x3b, 0x69, - 0x61, 0x6d, 0xf8, 0x01, 0x01, 0xaa, 0x02, 0x13, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x43, - 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x49, 0x61, 0x6d, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x13, 0x47, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x5c, 0x49, 0x61, 0x6d, 0x5c, 0x56, - 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x69, 0x63, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x7d, 0x0a, 0x11, 0x63, 0x6f, + 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42, + 0x0c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, + 0x29, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x67, 0x6f, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x69, + 0x61, 0x6d, 0x70, 0x62, 0x3b, 0x69, 0x61, 0x6d, 0x70, 0x62, 0xf8, 0x01, 0x01, 0xaa, 0x02, 0x13, + 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x49, 0x61, 0x6d, + 0x2e, 0x56, 0x31, 0xca, 0x02, 0x13, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f, + 0x75, 0x64, 0x5c, 0x49, 0x61, 0x6d, 0x5c, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( diff --git a/vendor/cloud.google.com/go/iam/apiv1/iampb/policy.pb.go b/vendor/cloud.google.com/go/iam/apiv1/iampb/policy.pb.go index 16bed436c6..8b82b0f58b 100644 --- a/vendor/cloud.google.com/go/iam/apiv1/iampb/policy.pb.go +++ b/vendor/cloud.google.com/go/iam/apiv1/iampb/policy.pb.go @@ -14,8 +14,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.21.12 +// protoc-gen-go v1.30.0 +// protoc v4.23.1 // source: google/iam/v1/policy.proto package iampb @@ -214,7 +214,8 @@ func (AuditConfigDelta_Action) EnumDescriptor() ([]byte, []int) { // only if the expression evaluates to `true`. A condition can add constraints // based on attributes of the request, the resource, or both. To learn which // resources support conditions in their IAM policies, see the -// [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). +// [IAM +// documentation](https://cloud.google.com/iam/help/conditions/resource-policies). // // **JSON example:** // @@ -237,7 +238,8 @@ func (AuditConfigDelta_Action) EnumDescriptor() ([]byte, []int) { // "condition": { // "title": "expirable access", // "description": "Does not grant access after Sep 2020", -// "expression": "request.time < timestamp('2020-10-01T00:00:00.000Z')", +// "expression": "request.time < +// timestamp('2020-10-01T00:00:00.000Z')", // } // } // ], @@ -279,11 +281,11 @@ type Policy struct { // Any operation that affects conditional role bindings must specify version // `3`. This requirement applies to the following operations: // - // - Getting a policy that includes a conditional role binding - // - Adding a conditional role binding to a policy - // - Changing a conditional role binding in a policy - // - Removing any role binding, with or without a condition, from a policy - // that includes conditions + // * Getting a policy that includes a conditional role binding + // * Adding a conditional role binding to a policy + // * Changing a conditional role binding in a policy + // * Removing any role binding, with or without a condition, from a policy + // that includes conditions // // **Important:** If you use IAM Conditions, you must include the `etag` field // whenever you call `setIamPolicy`. If you omit this field, then IAM allows @@ -294,7 +296,8 @@ type Policy struct { // specify any valid version or leave the field unset. // // To learn which resources support conditions in their IAM policies, see the - // [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). + // [IAM + // documentation](https://cloud.google.com/iam/help/conditions/resource-policies). Version int32 `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"` // Associates a list of `members`, or principals, with a `role`. Optionally, // may specify a `condition` that determines how and when the `bindings` are @@ -396,43 +399,47 @@ type Binding struct { // Specifies the principals requesting access for a Cloud Platform resource. // `members` can have the following values: // - // - `allUsers`: A special identifier that represents anyone who is - // on the internet; with or without a Google account. + // * `allUsers`: A special identifier that represents anyone who is + // on the internet; with or without a Google account. + // + // * `allAuthenticatedUsers`: A special identifier that represents anyone + // who is authenticated with a Google account or a service account. + // + // * `user:{emailid}`: An email address that represents a specific Google + // account. For example, `alice@example.com` . + // + // + // * `serviceAccount:{emailid}`: An email address that represents a service + // account. For example, `my-other-app@appspot.gserviceaccount.com`. // - // - `allAuthenticatedUsers`: A special identifier that represents anyone - // who is authenticated with a Google account or a service account. + // * `group:{emailid}`: An email address that represents a Google group. + // For example, `admins@example.com`. // - // - `user:{emailid}`: An email address that represents a specific Google - // account. For example, `alice@example.com` . + // * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique + // identifier) representing a user that has been recently deleted. For + // example, `alice@example.com?uid=123456789012345678901`. If the user is + // recovered, this value reverts to `user:{emailid}` and the recovered user + // retains the role in the binding. // - // - `serviceAccount:{emailid}`: An email address that represents a service - // account. For example, `my-other-app@appspot.gserviceaccount.com`. + // * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus + // unique identifier) representing a service account that has been recently + // deleted. For example, + // `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. + // If the service account is undeleted, this value reverts to + // `serviceAccount:{emailid}` and the undeleted service account retains the + // role in the binding. // - // - `group:{emailid}`: An email address that represents a Google group. - // For example, `admins@example.com`. + // * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique + // identifier) representing a Google group that has been recently + // deleted. For example, `admins@example.com?uid=123456789012345678901`. If + // the group is recovered, this value reverts to `group:{emailid}` and the + // recovered group retains the role in the binding. // - // - `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique - // identifier) representing a user that has been recently deleted. For - // example, `alice@example.com?uid=123456789012345678901`. If the user is - // recovered, this value reverts to `user:{emailid}` and the recovered user - // retains the role in the binding. // - // - `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus - // unique identifier) representing a service account that has been recently - // deleted. For example, - // `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. - // If the service account is undeleted, this value reverts to - // `serviceAccount:{emailid}` and the undeleted service account retains the - // role in the binding. + // * `domain:{domain}`: The G Suite domain (primary) that represents all the + // users of that domain. For example, `google.com` or `example.com`. // - // - `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique - // identifier) representing a Google group that has been recently - // deleted. For example, `admins@example.com?uid=123456789012345678901`. If - // the group is recovered, this value reverts to `group:{emailid}` and the - // recovered group retains the role in the binding. // - // - `domain:{domain}`: The G Suite domain (primary) that represents all the - // users of that domain. For example, `google.com` or `example.com`. Members []string `protobuf:"bytes,2,rep,name=members,proto3" json:"members,omitempty"` // The condition that is associated with this binding. // @@ -640,7 +647,8 @@ type AuditLogConfig struct { LogType AuditLogConfig_LogType `protobuf:"varint,1,opt,name=log_type,json=logType,proto3,enum=google.iam.v1.AuditLogConfig_LogType" json:"log_type,omitempty"` // Specifies the identities that do not cause logging for this type of // permission. - // Follows the same format of [Binding.members][google.iam.v1.Binding.members]. + // Follows the same format of + // [Binding.members][google.iam.v1.Binding.members]. ExemptedMembers []string `protobuf:"bytes,2,rep,name=exempted_members,json=exemptedMembers,proto3" json:"exempted_members,omitempty"` } @@ -999,16 +1007,15 @@ var file_google_iam_v1_policy_proto_rawDesc = []byte{ 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x12, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x44, 0x44, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x45, 0x4d, 0x4f, 0x56, - 0x45, 0x10, 0x02, 0x42, 0x83, 0x01, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x30, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, - 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x3b, 0x69, 0x61, 0x6d, 0xf8, 0x01, 0x01, 0xaa, 0x02, 0x13, - 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x49, 0x61, 0x6d, - 0x2e, 0x56, 0x31, 0xca, 0x02, 0x13, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f, - 0x75, 0x64, 0x5c, 0x49, 0x61, 0x6d, 0x5c, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x45, 0x10, 0x02, 0x42, 0x7c, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x29, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x2f, 0x69, 0x61, 0x6d, + 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x69, 0x61, 0x6d, 0x70, 0x62, 0x3b, 0x69, 0x61, 0x6d, + 0x70, 0x62, 0xf8, 0x01, 0x01, 0xaa, 0x02, 0x13, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x43, + 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x49, 0x61, 0x6d, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x13, 0x47, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x5c, 0x49, 0x61, 0x6d, 0x5c, 0x56, + 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/vendor/cloud.google.com/go/internal/.repo-metadata-full.json b/vendor/cloud.google.com/go/internal/.repo-metadata-full.json index 2dd0e18146..9482956b1d 100644 --- a/vendor/cloud.google.com/go/internal/.repo-metadata-full.json +++ b/vendor/cloud.google.com/go/internal/.repo-metadata-full.json @@ -4,7 +4,7 @@ "description": "Access Approval API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/accessapproval/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/accessapproval/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -13,16 +13,25 @@ "description": "Access Context Manager API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/accesscontextmanager/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/accesscontextmanager/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, + "cloud.google.com/go/advisorynotifications/apiv1": { + "distribution_name": "cloud.google.com/go/advisorynotifications/apiv1", + "description": "Advisory Notifications API", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/advisorynotifications/apiv1", + "release_level": "beta", + "library_type": "GAPIC_AUTO" + }, "cloud.google.com/go/aiplatform/apiv1": { "distribution_name": "cloud.google.com/go/aiplatform/apiv1", "description": "Vertex AI API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/aiplatform/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/aiplatform/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -31,7 +40,34 @@ "description": "Vertex AI API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/aiplatform/latest/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/aiplatform/apiv1beta1", + "release_level": "beta", + "library_type": "GAPIC_AUTO" + }, + "cloud.google.com/go/alloydb/apiv1": { + "distribution_name": "cloud.google.com/go/alloydb/apiv1", + "description": "AlloyDB API", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/alloydb/apiv1", + "release_level": "ga", + "library_type": "GAPIC_AUTO" + }, + "cloud.google.com/go/alloydb/apiv1alpha": { + "distribution_name": "cloud.google.com/go/alloydb/apiv1alpha", + "description": "AlloyDB API", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/alloydb/apiv1alpha", + "release_level": "alpha", + "library_type": "GAPIC_AUTO" + }, + "cloud.google.com/go/alloydb/apiv1beta": { + "distribution_name": "cloud.google.com/go/alloydb/apiv1beta", + "description": "AlloyDB API", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/alloydb/apiv1beta", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -40,7 +76,7 @@ "description": "Google Analytics Admin API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/analytics/latest/admin/apiv1alpha", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/analytics/admin/apiv1alpha", "release_level": "alpha", "library_type": "GAPIC_AUTO" }, @@ -49,7 +85,7 @@ "description": "API Gateway API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/apigateway/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/apigateway/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -58,7 +94,7 @@ "description": "Apigee Connect API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/apigeeconnect/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/apigeeconnect/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -67,7 +103,7 @@ "description": "Apigee Registry API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/apigeeregistry/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/apigeeregistry/apiv1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -76,8 +112,8 @@ "description": "API Keys API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/apikeys/latest/apiv2", - "release_level": "beta", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/apikeys/apiv2", + "release_level": "ga", "library_type": "GAPIC_AUTO" }, "cloud.google.com/go/appengine/apiv1": { @@ -85,7 +121,7 @@ "description": "App Engine Admin API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/appengine/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/appengine/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -94,7 +130,7 @@ "description": "Area120 Tables API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/area120/latest/tables/apiv1alpha1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/area120/tables/apiv1alpha1", "release_level": "alpha", "library_type": "GAPIC_AUTO" }, @@ -103,8 +139,8 @@ "description": "Artifact Registry API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/artifactregistry/latest/apiv1", - "release_level": "beta", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/artifactregistry/apiv1", + "release_level": "ga", "library_type": "GAPIC_AUTO" }, "cloud.google.com/go/artifactregistry/apiv1beta2": { @@ -112,8 +148,8 @@ "description": "Artifact Registry API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/artifactregistry/latest/apiv1beta2", - "release_level": "ga", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/artifactregistry/apiv1beta2", + "release_level": "beta", "library_type": "GAPIC_AUTO" }, "cloud.google.com/go/asset/apiv1": { @@ -121,7 +157,7 @@ "description": "Cloud Asset API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/asset/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/asset/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -130,7 +166,7 @@ "description": "Cloud Asset API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/asset/latest/apiv1p2beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/asset/apiv1p2beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -139,7 +175,7 @@ "description": "Cloud Asset API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/asset/latest/apiv1p5beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/asset/apiv1p5beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -148,7 +184,7 @@ "description": "Assured Workloads API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/assuredworkloads/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/assuredworkloads/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -157,7 +193,7 @@ "description": "Assured Workloads API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/assuredworkloads/latest/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/assuredworkloads/apiv1beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -166,7 +202,7 @@ "description": "Cloud AutoML API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/automl/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/automl/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -175,7 +211,7 @@ "description": "Cloud AutoML API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/automl/latest/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/automl/apiv1beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -184,8 +220,8 @@ "description": "Bare Metal Solution API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/baremetalsolution/latest/apiv2", - "release_level": "beta", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/baremetalsolution/apiv2", + "release_level": "ga", "library_type": "GAPIC_AUTO" }, "cloud.google.com/go/batch/apiv1": { @@ -193,8 +229,8 @@ "description": "Batch API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/batch/latest/apiv1", - "release_level": "beta", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/batch/apiv1", + "release_level": "ga", "library_type": "GAPIC_AUTO" }, "cloud.google.com/go/beyondcorp/appconnections/apiv1": { @@ -202,7 +238,7 @@ "description": "BeyondCorp API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/beyondcorp/latest/appconnections/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/beyondcorp/appconnections/apiv1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -211,7 +247,7 @@ "description": "BeyondCorp API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/beyondcorp/latest/appconnectors/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/beyondcorp/appconnectors/apiv1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -220,7 +256,7 @@ "description": "BeyondCorp API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/beyondcorp/latest/appgateways/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/beyondcorp/appgateways/apiv1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -229,7 +265,7 @@ "description": "BeyondCorp API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/beyondcorp/latest/clientconnectorservices/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/beyondcorp/clientconnectorservices/apiv1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -238,7 +274,7 @@ "description": "BeyondCorp API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/beyondcorp/latest/clientgateways/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/beyondcorp/clientgateways/apiv1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -256,7 +292,7 @@ "description": "Analytics Hub API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/analyticshub/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/bigquery/analyticshub/apiv1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -265,7 +301,7 @@ "description": "BigQuery Connection API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/connection/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/bigquery/connection/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -274,7 +310,7 @@ "description": "BigQuery Connection API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/connection/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/bigquery/connection/apiv1beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -283,7 +319,7 @@ "description": "Analytics Hub API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/dataexchange/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/bigquery/dataexchange/apiv1beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -292,7 +328,7 @@ "description": "BigQuery Data Policy API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/datapolicies/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/bigquery/datapolicies/apiv1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -301,7 +337,7 @@ "description": "BigQuery Data Policy API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/datapolicies/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/bigquery/datapolicies/apiv1beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -310,7 +346,7 @@ "description": "BigQuery Data Transfer API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/datatransfer/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/bigquery/datatransfer/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -319,7 +355,7 @@ "description": "BigQuery Migration API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/migration/apiv2", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/bigquery/migration/apiv2", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -328,7 +364,7 @@ "description": "BigQuery Migration API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/migration/apiv2alpha", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/bigquery/migration/apiv2alpha", "release_level": "alpha", "library_type": "GAPIC_AUTO" }, @@ -337,7 +373,7 @@ "description": "BigQuery Reservation API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/reservation/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/bigquery/reservation/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -346,7 +382,7 @@ "description": "BigQuery Storage API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/storage/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/bigquery/storage/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -355,7 +391,7 @@ "description": "BigQuery Storage API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/storage/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/bigquery/storage/apiv1beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -364,7 +400,7 @@ "description": "BigQuery Storage API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/storage/apiv1beta2", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/bigquery/storage/apiv1beta2", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -382,7 +418,7 @@ "description": "Cloud Billing API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/billing/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/billing/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -391,7 +427,7 @@ "description": "Cloud Billing Budget API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/billing/latest/budgets/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/billing/budgets/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -400,7 +436,7 @@ "description": "Cloud Billing Budget API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/billing/latest/budgets/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/billing/budgets/apiv1beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -409,7 +445,7 @@ "description": "Binary Authorization API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/binaryauthorization/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/binaryauthorization/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -418,7 +454,7 @@ "description": "Binary Authorization API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/binaryauthorization/latest/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/binaryauthorization/apiv1beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -427,7 +463,7 @@ "description": "Certificate Manager API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/certificatemanager/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/certificatemanager/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -436,7 +472,7 @@ "description": "Cloud Channel API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/channel/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/channel/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -445,7 +481,16 @@ "description": "Cloud Build API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/cloudbuild/latest/apiv1/v2", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/cloudbuild/apiv1/v2", + "release_level": "ga", + "library_type": "GAPIC_AUTO" + }, + "cloud.google.com/go/cloudbuild/apiv2": { + "distribution_name": "cloud.google.com/go/cloudbuild/apiv2", + "description": "Cloud Build API", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/cloudbuild/apiv2", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -454,7 +499,7 @@ "description": "Database Migration API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/clouddms/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/clouddms/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -463,7 +508,7 @@ "description": "Cloud Tasks API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/cloudtasks/latest/apiv2", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/cloudtasks/apiv2", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -472,7 +517,7 @@ "description": "Cloud Tasks API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/cloudtasks/latest/apiv2beta2", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/cloudtasks/apiv2beta2", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -481,7 +526,7 @@ "description": "Cloud Tasks API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/cloudtasks/latest/apiv2beta3", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/cloudtasks/apiv2beta3", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -490,7 +535,7 @@ "description": "Google Compute Engine API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/compute/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/compute/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -503,12 +548,30 @@ "release_level": "ga", "library_type": "CORE" }, + "cloud.google.com/go/confidentialcomputing/apiv1": { + "distribution_name": "cloud.google.com/go/confidentialcomputing/apiv1", + "description": "Confidential Computing API", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/confidentialcomputing/apiv1", + "release_level": "beta", + "library_type": "GAPIC_AUTO" + }, + "cloud.google.com/go/confidentialcomputing/apiv1alpha1": { + "distribution_name": "cloud.google.com/go/confidentialcomputing/apiv1alpha1", + "description": "Confidential Computing API", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/confidentialcomputing/apiv1alpha1", + "release_level": "alpha", + "library_type": "GAPIC_AUTO" + }, "cloud.google.com/go/contactcenterinsights/apiv1": { "distribution_name": "cloud.google.com/go/contactcenterinsights/apiv1", "description": "Contact Center AI Insights API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/contactcenterinsights/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/contactcenterinsights/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -517,7 +580,7 @@ "description": "Kubernetes Engine API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/container/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/container/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -526,7 +589,7 @@ "description": "Container Analysis API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/containeranalysis/latest/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/containeranalysis/apiv1beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -535,7 +598,7 @@ "description": "Google Cloud Data Catalog API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/datacatalog/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/datacatalog/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -544,7 +607,7 @@ "description": "Google Cloud Data Catalog API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/datacatalog/latest/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/datacatalog/apiv1beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -553,7 +616,7 @@ "description": "Data Lineage API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/datacatalog/latest/lineage/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/datacatalog/lineage/apiv1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -562,7 +625,7 @@ "description": "Dataflow API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/dataflow/latest/apiv1beta3", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/dataflow/apiv1beta3", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -571,7 +634,7 @@ "description": "Dataform API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/dataform/latest/apiv1alpha2", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/dataform/apiv1alpha2", "release_level": "alpha", "library_type": "GAPIC_AUTO" }, @@ -580,7 +643,7 @@ "description": "Dataform API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/dataform/latest/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/dataform/apiv1beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -589,7 +652,7 @@ "description": "Cloud Data Fusion API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/datafusion/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/datafusion/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -598,7 +661,7 @@ "description": "Data Labeling API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/datalabeling/latest/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/datalabeling/apiv1beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -607,16 +670,16 @@ "description": "Cloud Dataplex API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/dataplex/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/dataplex/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, - "cloud.google.com/go/dataproc/apiv1": { - "distribution_name": "cloud.google.com/go/dataproc/apiv1", + "cloud.google.com/go/dataproc/v2/apiv1": { + "distribution_name": "cloud.google.com/go/dataproc/v2/apiv1", "description": "Cloud Dataproc API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/dataproc/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/dataproc/v2/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -625,7 +688,7 @@ "description": "Data QnA API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/dataqna/latest/apiv1alpha", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/dataqna/apiv1alpha", "release_level": "alpha", "library_type": "GAPIC_AUTO" }, @@ -643,8 +706,8 @@ "description": "Cloud Datastore API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/datastore/latest/admin/apiv1", - "release_level": "alpha", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/datastore/admin/apiv1", + "release_level": "ga", "library_type": "GAPIC_AUTO" }, "cloud.google.com/go/datastream/apiv1": { @@ -652,7 +715,7 @@ "description": "Datastream API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/datastream/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/datastream/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -661,7 +724,7 @@ "description": "Datastream API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/datastream/latest/apiv1alpha1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/datastream/apiv1alpha1", "release_level": "alpha", "library_type": "GAPIC_AUTO" }, @@ -670,7 +733,7 @@ "description": "Stackdriver Debugger API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/latest/debugger/apiv2", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/debugger/apiv2", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -679,7 +742,7 @@ "description": "Google Cloud Deploy API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/deploy/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/deploy/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -688,7 +751,7 @@ "description": "Dialogflow API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/dialogflow/latest/apiv2", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/dialogflow/apiv2", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -697,7 +760,7 @@ "description": "Dialogflow API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/dialogflow/latest/apiv2beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/dialogflow/apiv2beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -706,7 +769,7 @@ "description": "Dialogflow API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/dialogflow/latest/cx/apiv3", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/dialogflow/cx/apiv3", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -715,7 +778,7 @@ "description": "Dialogflow API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/dialogflow/latest/cx/apiv3beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/dialogflow/cx/apiv3beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -724,7 +787,7 @@ "description": "Discovery Engine API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/discoveryengine/latest/apiv1beta", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/discoveryengine/apiv1beta", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -733,7 +796,7 @@ "description": "Cloud Data Loss Prevention (DLP) API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/dlp/latest/apiv2", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/dlp/apiv2", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -742,7 +805,7 @@ "description": "Cloud Document AI API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/documentai/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/documentai/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -751,7 +814,7 @@ "description": "Cloud Document AI API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/documentai/latest/apiv1beta3", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/documentai/apiv1beta3", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -760,7 +823,7 @@ "description": "Cloud Domains API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/domains/latest/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/domains/apiv1beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -769,8 +832,8 @@ "description": "Distributed Cloud Edge Container API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/edgecontainer/latest/apiv1", - "release_level": "beta", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/edgecontainer/apiv1", + "release_level": "ga", "library_type": "GAPIC_AUTO" }, "cloud.google.com/go/errorreporting": { @@ -787,7 +850,7 @@ "description": "Error Reporting API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/errorreporting/latest/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/errorreporting/apiv1beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -796,7 +859,7 @@ "description": "Essential Contacts API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/essentialcontacts/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/essentialcontacts/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -805,7 +868,7 @@ "description": "Eventarc API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/eventarc/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/eventarc/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -814,7 +877,7 @@ "description": "Eventarc Publishing API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/eventarc/latest/publishing/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/eventarc/publishing/apiv1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -823,7 +886,7 @@ "description": "Cloud Filestore API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/filestore/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/filestore/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -841,16 +904,7 @@ "description": "Cloud Firestore API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/firestore/latest/apiv1", - "release_level": "ga", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/firestore/apiv1/admin": { - "distribution_name": "cloud.google.com/go/firestore/apiv1/admin", - "description": "Cloud Firestore API", - "language": "Go", - "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/firestore/latest/apiv1/admin", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/firestore/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -859,7 +913,7 @@ "description": "Cloud Functions API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/functions/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/functions/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -868,8 +922,8 @@ "description": "Cloud Functions API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/functions/latest/apiv2", - "release_level": "beta", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/functions/apiv2", + "release_level": "ga", "library_type": "GAPIC_AUTO" }, "cloud.google.com/go/functions/apiv2beta": { @@ -877,7 +931,7 @@ "description": "Cloud Functions API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/functions/latest/apiv2beta", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/functions/apiv2beta", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -895,7 +949,7 @@ "description": "Game Services API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/gaming/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/gaming/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -904,7 +958,7 @@ "description": "Game Services API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/gaming/latest/apiv1beta", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/gaming/apiv1beta", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -913,8 +967,8 @@ "description": "Backup for GKE API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/gkebackup/latest/apiv1", - "release_level": "beta", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/gkebackup/apiv1", + "release_level": "ga", "library_type": "GAPIC_AUTO" }, "cloud.google.com/go/gkeconnect/gateway/apiv1beta1": { @@ -922,7 +976,7 @@ "description": "Connect Gateway API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/gkeconnect/latest/gateway/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/gkeconnect/gateway/apiv1beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -931,7 +985,7 @@ "description": "GKE Hub API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/gkehub/latest/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/gkehub/apiv1beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -940,7 +994,7 @@ "description": "Anthos Multi-Cloud API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/gkemulticloud/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/gkemulticloud/apiv1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -949,7 +1003,7 @@ "description": "Google Workspace Add-ons API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/gsuiteaddons/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/gsuiteaddons/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -967,8 +1021,8 @@ "description": "IAM Meta API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/iam/latest/apiv1", - "release_level": "beta", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/iam/apiv1", + "release_level": "ga", "library_type": "GAPIC_AUTO" }, "cloud.google.com/go/iam/apiv2": { @@ -976,8 +1030,8 @@ "description": "Identity and Access Management (IAM) API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/iam/latest/apiv2", - "release_level": "beta", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/iam/apiv2", + "release_level": "ga", "library_type": "GAPIC_AUTO" }, "cloud.google.com/go/iam/credentials/apiv1": { @@ -985,7 +1039,7 @@ "description": "IAM Service Account Credentials API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/iam/latest/credentials/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/iam/credentials/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -994,7 +1048,7 @@ "description": "Cloud Identity-Aware Proxy API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/iap/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/iap/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1003,7 +1057,7 @@ "description": "Cloud IDS API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/ids/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/ids/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1012,7 +1066,7 @@ "description": "Cloud IoT API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/iot/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/iot/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1021,16 +1075,25 @@ "description": "Cloud Key Management Service (KMS) API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/kms/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/kms/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, + "cloud.google.com/go/kms/inventory/apiv1": { + "distribution_name": "cloud.google.com/go/kms/inventory/apiv1", + "description": "KMS Inventory API", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/kms/inventory/apiv1", + "release_level": "beta", + "library_type": "GAPIC_AUTO" + }, "cloud.google.com/go/language/apiv1": { "distribution_name": "cloud.google.com/go/language/apiv1", "description": "Cloud Natural Language API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/language/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/language/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1039,7 +1102,7 @@ "description": "Cloud Natural Language API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/language/latest/apiv1beta2", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/language/apiv1beta2", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -1048,7 +1111,7 @@ "description": "Cloud Life Sciences API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/lifesciences/latest/apiv2beta", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/lifesciences/apiv2beta", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -1066,7 +1129,7 @@ "description": "Cloud Logging API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/logging/latest/apiv2", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/logging/apiv2", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1075,8 +1138,8 @@ "description": "Long Running Operations API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/longrunning/latest/autogen", - "release_level": "alpha", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/longrunning/autogen", + "release_level": "ga", "library_type": "GAPIC_AUTO" }, "cloud.google.com/go/managedidentities/apiv1": { @@ -1084,7 +1147,7 @@ "description": "Managed Service for Microsoft Active Directory API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/managedidentities/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/managedidentities/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1093,8 +1156,8 @@ "description": "Address Validation API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/maps/latest/addressvalidation/apiv1", - "release_level": "beta", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/maps/addressvalidation/apiv1", + "release_level": "ga", "library_type": "GAPIC_AUTO" }, "cloud.google.com/go/maps/mapsplatformdatasets/apiv1alpha": { @@ -1102,7 +1165,7 @@ "description": "Maps Platform Datasets API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/maps/latest/mapsplatformdatasets/apiv1alpha", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/maps/mapsplatformdatasets/apiv1alpha", "release_level": "alpha", "library_type": "GAPIC_AUTO" }, @@ -1111,8 +1174,8 @@ "description": "Routes API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/maps/latest/routing/apiv2", - "release_level": "beta", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/maps/routing/apiv2", + "release_level": "ga", "library_type": "GAPIC_AUTO" }, "cloud.google.com/go/mediatranslation/apiv1beta1": { @@ -1120,7 +1183,7 @@ "description": "Media Translation API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/mediatranslation/latest/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/mediatranslation/apiv1beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -1129,7 +1192,7 @@ "description": "Cloud Memorystore for Memcached API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/memcache/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/memcache/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1138,7 +1201,7 @@ "description": "Cloud Memorystore for Memcached API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/memcache/latest/apiv1beta2", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/memcache/apiv1beta2", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -1147,7 +1210,7 @@ "description": "Dataproc Metastore API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/metastore/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/metastore/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1156,7 +1219,7 @@ "description": "Dataproc Metastore API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/metastore/latest/apiv1alpha", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/metastore/apiv1alpha", "release_level": "alpha", "library_type": "GAPIC_AUTO" }, @@ -1165,7 +1228,7 @@ "description": "Dataproc Metastore API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/metastore/latest/apiv1beta", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/metastore/apiv1beta", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -1174,7 +1237,7 @@ "description": "Cloud Monitoring API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/monitoring/latest/apiv3/v2", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/monitoring/apiv3/v2", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1183,7 +1246,7 @@ "description": "Cloud Monitoring API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/monitoring/latest/dashboard/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/monitoring/dashboard/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1192,7 +1255,7 @@ "description": "Cloud Monitoring API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/monitoring/latest/metricsscope/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/monitoring/metricsscope/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1201,7 +1264,7 @@ "description": "Network Connectivity API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/networkconnectivity/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/networkconnectivity/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1210,7 +1273,7 @@ "description": "Network Connectivity API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/networkconnectivity/latest/apiv1alpha1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/networkconnectivity/apiv1alpha1", "release_level": "alpha", "library_type": "GAPIC_AUTO" }, @@ -1219,7 +1282,7 @@ "description": "Network Management API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/networkmanagement/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/networkmanagement/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1228,7 +1291,7 @@ "description": "Network Security API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/networksecurity/latest/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/networksecurity/apiv1beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -1237,7 +1300,7 @@ "description": "Notebooks API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/notebooks/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/notebooks/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1246,7 +1309,7 @@ "description": "Notebooks API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/notebooks/latest/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/notebooks/apiv1beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -1255,7 +1318,7 @@ "description": "Cloud Optimization API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/optimization/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/optimization/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1264,7 +1327,7 @@ "description": "Cloud Composer API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/orchestration/latest/airflow/service/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/orchestration/airflow/service/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1273,7 +1336,7 @@ "description": "Organization Policy API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/orgpolicy/latest/apiv2", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/orgpolicy/apiv2", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1282,7 +1345,7 @@ "description": "OS Config API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/osconfig/latest/agentendpoint/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/osconfig/agentendpoint/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1291,7 +1354,7 @@ "description": "OS Config API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/osconfig/latest/agentendpoint/apiv1beta", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/osconfig/agentendpoint/apiv1beta", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -1300,7 +1363,7 @@ "description": "OS Config API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/osconfig/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/osconfig/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1309,7 +1372,7 @@ "description": "OS Config API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/osconfig/latest/apiv1alpha", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/osconfig/apiv1alpha", "release_level": "alpha", "library_type": "GAPIC_AUTO" }, @@ -1318,7 +1381,7 @@ "description": "OS Config API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/osconfig/latest/apiv1beta", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/osconfig/apiv1beta", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -1327,7 +1390,7 @@ "description": "Cloud OS Login API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/oslogin/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/oslogin/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1336,7 +1399,7 @@ "description": "Cloud OS Login API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/oslogin/latest/apiv1beta", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/oslogin/apiv1beta", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -1345,7 +1408,7 @@ "description": "Phishing Protection API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/phishingprotection/latest/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/phishingprotection/apiv1beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -1354,7 +1417,7 @@ "description": "Policy Troubleshooter API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/policytroubleshooter/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/policytroubleshooter/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1363,7 +1426,7 @@ "description": "Cloud Private Catalog API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/privatecatalog/latest/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/privatecatalog/apiv1beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -1390,7 +1453,7 @@ "description": "Cloud Pub/Sub API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/pubsub/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/pubsub/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1408,7 +1471,7 @@ "description": "Pub/Sub Lite API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/pubsublite/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/pubsublite/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1417,7 +1480,7 @@ "description": "reCAPTCHA Enterprise API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/recaptchaenterprise/v2/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/recaptchaenterprise/v2/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1426,7 +1489,7 @@ "description": "reCAPTCHA Enterprise API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/recaptchaenterprise/v2/latest/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/recaptchaenterprise/v2/apiv1beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -1435,7 +1498,7 @@ "description": "Recommendations AI", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/recommendationengine/latest/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/recommendationengine/apiv1beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -1444,7 +1507,7 @@ "description": "Recommender API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/recommender/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/recommender/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1453,7 +1516,7 @@ "description": "Recommender API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/recommender/latest/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/recommender/apiv1beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -1462,7 +1525,7 @@ "description": "Google Cloud Memorystore for Redis API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/redis/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/redis/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1471,7 +1534,7 @@ "description": "Google Cloud Memorystore for Redis API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/redis/latest/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/redis/apiv1beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -1480,7 +1543,7 @@ "description": "Cloud Resource Manager API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/resourcemanager/latest/apiv2", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/resourcemanager/apiv2", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1489,8 +1552,8 @@ "description": "Cloud Resource Manager API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/resourcemanager/latest/apiv3", - "release_level": "beta", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/resourcemanager/apiv3", + "release_level": "ga", "library_type": "GAPIC_AUTO" }, "cloud.google.com/go/resourcesettings/apiv1": { @@ -1498,7 +1561,7 @@ "description": "Resource Settings API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/resourcesettings/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/resourcesettings/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1507,7 +1570,7 @@ "description": "Retail API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/retail/latest/apiv2", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/retail/apiv2", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1516,7 +1579,7 @@ "description": "Retail API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/retail/latest/apiv2alpha", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/retail/apiv2alpha", "release_level": "alpha", "library_type": "GAPIC_AUTO" }, @@ -1525,7 +1588,7 @@ "description": "Retail API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/retail/latest/apiv2beta", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/retail/apiv2beta", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -1543,8 +1606,8 @@ "description": "Cloud Run Admin API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/run/latest/apiv2", - "release_level": "beta", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/run/apiv2", + "release_level": "ga", "library_type": "GAPIC_AUTO" }, "cloud.google.com/go/scheduler/apiv1": { @@ -1552,7 +1615,7 @@ "description": "Cloud Scheduler API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/scheduler/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/scheduler/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1561,7 +1624,7 @@ "description": "Cloud Scheduler API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/scheduler/latest/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/scheduler/apiv1beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -1570,7 +1633,7 @@ "description": "Secret Manager API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/secretmanager/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/secretmanager/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1579,25 +1642,16 @@ "description": "Certificate Authority API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/security/latest/privateca/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/security/privateca/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, - "cloud.google.com/go/security/privateca/apiv1beta1": { - "distribution_name": "cloud.google.com/go/security/privateca/apiv1beta1", - "description": "Certificate Authority API", - "language": "Go", - "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/security/latest/privateca/apiv1beta1", - "release_level": "beta", - "library_type": "GAPIC_AUTO" - }, "cloud.google.com/go/security/publicca/apiv1beta1": { "distribution_name": "cloud.google.com/go/security/publicca/apiv1beta1", "description": "Public Certificate Authority API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/security/latest/publicca/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/security/publicca/apiv1beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -1606,7 +1660,7 @@ "description": "Security Command Center API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/securitycenter/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/securitycenter/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1615,7 +1669,7 @@ "description": "Security Command Center API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/securitycenter/latest/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/securitycenter/apiv1beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -1624,7 +1678,7 @@ "description": "Security Command Center API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/securitycenter/latest/apiv1p1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/securitycenter/apiv1p1beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -1633,7 +1687,7 @@ "description": "Cloud Security Command Center API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/securitycenter/latest/settings/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/securitycenter/settings/apiv1beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -1642,7 +1696,7 @@ "description": "Service Control API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/servicecontrol/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/servicecontrol/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1651,7 +1705,7 @@ "description": "Service Directory API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/servicedirectory/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/servicedirectory/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1660,7 +1714,7 @@ "description": "Service Directory API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/servicedirectory/latest/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/servicedirectory/apiv1beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -1669,7 +1723,7 @@ "description": "Service Management API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/servicemanagement/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/servicemanagement/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1678,7 +1732,7 @@ "description": "Service Usage API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/serviceusage/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/serviceusage/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1687,7 +1741,7 @@ "description": "Cloud Shell API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/shell/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/shell/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1705,7 +1759,7 @@ "description": "Cloud Spanner API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/spanner/latest/admin/database/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/spanner/admin/database/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1714,7 +1768,7 @@ "description": "Cloud Spanner Instance Admin API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/spanner/latest/admin/instance/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/spanner/admin/instance/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1723,7 +1777,7 @@ "description": "Cloud Spanner API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/spanner/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/spanner/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1732,7 +1786,7 @@ "description": "Cloud Speech-to-Text API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/speech/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/speech/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1741,7 +1795,7 @@ "description": "Cloud Speech-to-Text API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/speech/latest/apiv1p1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/speech/apiv1p1beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -1750,7 +1804,7 @@ "description": "Cloud Speech-to-Text API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/speech/latest/apiv2", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/speech/apiv2", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -1768,8 +1822,17 @@ "description": "Cloud Storage API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/storage/latest/internal/apiv2", - "release_level": "alpha", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/storage/internal/apiv2", + "release_level": "ga", + "library_type": "GAPIC_AUTO" + }, + "cloud.google.com/go/storageinsights/apiv1": { + "distribution_name": "cloud.google.com/go/storageinsights/apiv1", + "description": "Storage Insights API", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/storageinsights/apiv1", + "release_level": "ga", "library_type": "GAPIC_AUTO" }, "cloud.google.com/go/storagetransfer/apiv1": { @@ -1777,16 +1840,25 @@ "description": "Storage Transfer API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/storagetransfer/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/storagetransfer/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, + "cloud.google.com/go/support/apiv2": { + "distribution_name": "cloud.google.com/go/support/apiv2", + "description": "Google Cloud Support API", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/support/apiv2", + "release_level": "beta", + "library_type": "GAPIC_AUTO" + }, "cloud.google.com/go/talent/apiv4": { "distribution_name": "cloud.google.com/go/talent/apiv4", "description": "Cloud Talent Solution API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/talent/latest/apiv4", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/talent/apiv4", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1795,7 +1867,7 @@ "description": "Cloud Talent Solution API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/talent/latest/apiv4beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/talent/apiv4beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -1804,7 +1876,7 @@ "description": "Cloud Text-to-Speech API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/texttospeech/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/texttospeech/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1813,7 +1885,7 @@ "description": "Cloud TPU API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/tpu/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/tpu/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1822,7 +1894,7 @@ "description": "Stackdriver Trace API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/trace/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/trace/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1831,8 +1903,8 @@ "description": "Stackdriver Trace API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/trace/latest/apiv2", - "release_level": "ga", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/trace/apiv2", + "release_level": "beta", "library_type": "GAPIC_AUTO" }, "cloud.google.com/go/translate/apiv3": { @@ -1840,7 +1912,7 @@ "description": "Cloud Translation API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/translate/latest/apiv3", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/translate/apiv3", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1849,7 +1921,7 @@ "description": "Live Stream API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/video/latest/livestream/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/video/livestream/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1858,7 +1930,7 @@ "description": "Video Stitcher API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/video/latest/stitcher/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/video/stitcher/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1867,7 +1939,7 @@ "description": "Transcoder API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/video/latest/transcoder/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/video/transcoder/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1876,7 +1948,7 @@ "description": "Cloud Video Intelligence API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/videointelligence/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/videointelligence/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1885,7 +1957,7 @@ "description": "Google Cloud Video Intelligence API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/videointelligence/latest/apiv1beta2", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/videointelligence/apiv1beta2", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -1894,7 +1966,7 @@ "description": "Cloud Video Intelligence API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/videointelligence/latest/apiv1p3beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/videointelligence/apiv1p3beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -1903,7 +1975,7 @@ "description": "Cloud Vision API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/vision/v2/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/vision/v2/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1912,7 +1984,7 @@ "description": "Cloud Vision API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/vision/v2/latest/apiv1p1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/vision/v2/apiv1p1beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -1921,7 +1993,7 @@ "description": "VM Migration API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/vmmigration/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/vmmigration/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1930,7 +2002,7 @@ "description": "VMware Engine API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/vmwareengine/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/vmwareengine/apiv1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -1939,7 +2011,7 @@ "description": "Serverless VPC Access API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/vpcaccess/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/vpcaccess/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1948,7 +2020,7 @@ "description": "Web Risk API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/webrisk/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/webrisk/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1957,7 +2029,7 @@ "description": "Web Risk API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/webrisk/latest/apiv1beta1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/webrisk/apiv1beta1", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -1966,7 +2038,7 @@ "description": "Web Security Scanner API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/websecurityscanner/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/websecurityscanner/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1975,7 +2047,7 @@ "description": "Workflows API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/workflows/latest/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/workflows/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -1984,7 +2056,7 @@ "description": "Workflows API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/workflows/latest/apiv1beta", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/workflows/apiv1beta", "release_level": "beta", "library_type": "GAPIC_AUTO" }, @@ -1993,7 +2065,7 @@ "description": "Workflow Executions API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/workflows/latest/executions/apiv1", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/workflows/executions/apiv1", "release_level": "ga", "library_type": "GAPIC_AUTO" }, @@ -2002,7 +2074,25 @@ "description": "Workflow Executions API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/workflows/latest/executions/apiv1beta", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/workflows/executions/apiv1beta", + "release_level": "beta", + "library_type": "GAPIC_AUTO" + }, + "cloud.google.com/go/workstations/apiv1": { + "distribution_name": "cloud.google.com/go/workstations/apiv1", + "description": "Cloud Workstations API", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/workstations/apiv1", + "release_level": "beta", + "library_type": "GAPIC_AUTO" + }, + "cloud.google.com/go/workstations/apiv1beta": { + "distribution_name": "cloud.google.com/go/workstations/apiv1beta", + "description": "Cloud Workstations API", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://cloud.google.com/go/docs/reference/cloud.google.com/go\ncloud.google.com/go/accessapproval\ncloud.google.com/go/accesscontextmanager\ncloud.google.com/go/advisorynotifications\ncloud.google.com/go/aiplatform\ncloud.google.com/go/alloydb\ncloud.google.com/go/analytics\ncloud.google.com/go/apigateway\ncloud.google.com/go/apigeeconnect\ncloud.google.com/go/apigeeregistry\ncloud.google.com/go/apikeys\ncloud.google.com/go/appengine\ncloud.google.com/go/area120\ncloud.google.com/go/artifactregistry\ncloud.google.com/go/asset\ncloud.google.com/go/assuredworkloads\ncloud.google.com/go/automl\ncloud.google.com/go/baremetalsolution\ncloud.google.com/go/batch\ncloud.google.com/go/beyondcorp\ncloud.google.com/go/bigquery\ncloud.google.com/go/bigtable\ncloud.google.com/go/billing\ncloud.google.com/go/binaryauthorization\ncloud.google.com/go/certificatemanager\ncloud.google.com/go/channel\ncloud.google.com/go/cloudbuild\ncloud.google.com/go/clouddms\ncloud.google.com/go/cloudtasks\ncloud.google.com/go/compute\ncloud.google.com/go/compute/metadata\ncloud.google.com/go/confidentialcomputing\ncloud.google.com/go/contactcenterinsights\ncloud.google.com/go/container\ncloud.google.com/go/containeranalysis\ncloud.google.com/go/datacatalog\ncloud.google.com/go/dataflow\ncloud.google.com/go/dataform\ncloud.google.com/go/datafusion\ncloud.google.com/go/datalabeling\ncloud.google.com/go/dataplex\ncloud.google.com/go/dataproc/v2\ncloud.google.com/go/dataqna\ncloud.google.com/go/datastore\ncloud.google.com/go/datastream\ncloud.google.com/go/deploy\ncloud.google.com/go/dialogflow\ncloud.google.com/go/discoveryengine\ncloud.google.com/go/dlp\ncloud.google.com/go/documentai\ncloud.google.com/go/domains\ncloud.google.com/go/edgecontainer\ncloud.google.com/go/errorreporting\ncloud.google.com/go/essentialcontacts\ncloud.google.com/go/eventarc\ncloud.google.com/go/filestore\ncloud.google.com/go/firestore\ncloud.google.com/go/functions\ncloud.google.com/go/gaming\ncloud.google.com/go/gkebackup\ncloud.google.com/go/gkeconnect\ncloud.google.com/go/gkehub\ncloud.google.com/go/gkemulticloud\ncloud.google.com/go/grafeas\ncloud.google.com/go/gsuiteaddons\ncloud.google.com/go/iam\ncloud.google.com/go/iap\ncloud.google.com/go/ids\ncloud.google.com/go/internal/actions\ncloud.google.com/go/internal/aliasfix\ncloud.google.com/go/internal/aliasgen\ncloud.google.com/go/internal/carver\ncloud.google.com/go/internal/examples/fake\ncloud.google.com/go/internal/examples/mock\ncloud.google.com/go/internal/gapicgen\ncloud.google.com/go/internal/generated\ncloud.google.com/go/internal/gensnippets\ncloud.google.com/go/internal/godocfx\ncloud.google.com/go/internal/postprocessor\ncloud.google.com/go/iot\ncloud.google.com/go/kms\ncloud.google.com/go/language\ncloud.google.com/go/lifesciences\ncloud.google.com/go/logging\ncloud.google.com/go/longrunning\ncloud.google.com/go/managedidentities\ncloud.google.com/go/maps\ncloud.google.com/go/mediatranslation\ncloud.google.com/go/memcache\ncloud.google.com/go/metastore\ncloud.google.com/go/monitoring\ncloud.google.com/go/networkconnectivity\ncloud.google.com/go/networkmanagement\ncloud.google.com/go/networksecurity\ncloud.google.com/go/notebooks\ncloud.google.com/go/optimization\ncloud.google.com/go/orchestration\ncloud.google.com/go/orgpolicy\ncloud.google.com/go/osconfig\ncloud.google.com/go/oslogin\ncloud.google.com/go/phishingprotection\ncloud.google.com/go/policytroubleshooter\ncloud.google.com/go/privatecatalog\ncloud.google.com/go/profiler\ncloud.google.com/go/pubsub\ncloud.google.com/go/pubsublite\ncloud.google.com/go/recaptchaenterprise\ncloud.google.com/go/recaptchaenterprise/v2\ncloud.google.com/go/recommendationengine\ncloud.google.com/go/recommender\ncloud.google.com/go/redis\ncloud.google.com/go/resourcemanager\ncloud.google.com/go/resourcesettings\ncloud.google.com/go/retail\ncloud.google.com/go/run\ncloud.google.com/go/scheduler\ncloud.google.com/go/secretmanager\ncloud.google.com/go/security\ncloud.google.com/go/securitycenter\ncloud.google.com/go/servicecontrol\ncloud.google.com/go/servicedirectory\ncloud.google.com/go/servicemanagement\ncloud.google.com/go/serviceusage\ncloud.google.com/go/shell\ncloud.google.com/go/spanner\ncloud.google.com/go/speech\ncloud.google.com/go/storage\nmain\ncloud.google.com/go/storagetransfer\ncloud.google.com/go/talent\ncloud.google.com/go/texttospeech\ncloud.google.com/go/tpu\ncloud.google.com/go/trace\ncloud.google.com/go/translate\ncloud.google.com/go/video\ncloud.google.com/go/videointelligence\ncloud.google.com/go/vision\ncloud.google.com/go/vision/v2\ncloud.google.com/go/vmmigration\ncloud.google.com/go/vmwareengine\ncloud.google.com/go/vpcaccess\ncloud.google.com/go/webrisk\ncloud.google.com/go/websecurityscanner\ncloud.google.com/go/workflows\ncloud.google.com/go/workstations/latest/cloud.google.com/go/workstations/apiv1beta", "release_level": "beta", "library_type": "GAPIC_AUTO" } diff --git a/vendor/cloud.google.com/go/internal/README.md b/vendor/cloud.google.com/go/internal/README.md index c1dc6bdff4..b38a4c1a2d 100644 --- a/vendor/cloud.google.com/go/internal/README.md +++ b/vendor/cloud.google.com/go/internal/README.md @@ -19,25 +19,26 @@ metadata required. For now, `.repo-metadata-full.json` includes everything. ## cloudbuild.yaml -To kick off a build locally run from the repo root: +The `cloudbuild.yaml` Cloud Build configuration currently supports: + +* Building a docker container from the `internal/postprocessor/Dockerfile`. + +The build can be run locally in the `google-cloud-go` root directory: ```bash gcloud builds submit --project=cloud-devrel-kokoro-resources --config=internal/cloudbuild.yaml ``` -### Updating OwlBot SHA +See the [postprocessor/README](postprocessor/README.md) for instructions +regarding updating the post-processor docker container. -You may want to manually update the which version of the post processor will be -used -- to do this you need to update the SHA in the OwlBot lock file. Start by -running the following commands: +### Updating OwlBot SHA -```bash -docker pull gcr.io/cloud-devrel-public-resources/owlbot-go:latest -docker inspect --format='{{index .RepoDigests 0}}' gcr.io/cloud-devrel-public-resources/owlbot-go:latest -``` +You may want to manually update the which version of the post-processor will be +used -- to do this you need to update the SHA in the OwlBot lock file. -This will give you a SHA. You can use this value to update the value in -`.github/.OwlBot.lock.yaml`. +See the [postprocessor/README](postprocessor/README.md) for detailed +instructions. *Note*: OwlBot will eventually open a pull request to update this value if it discovers a new version of the container. diff --git a/vendor/cloud.google.com/go/storage/CHANGES.md b/vendor/cloud.google.com/go/storage/CHANGES.md index 3f4097faea..70251dddec 100644 --- a/vendor/cloud.google.com/go/storage/CHANGES.md +++ b/vendor/cloud.google.com/go/storage/CHANGES.md @@ -1,6 +1,58 @@ # Changes +## [1.31.0](https://github.com/googleapis/google-cloud-go/compare/storage/v1.30.1...storage/v1.31.0) (2023-06-27) + + +### Features + +* **storage/internal:** Add ctype=CORD for ChecksummedData.content ([ca94e27](https://github.com/googleapis/google-cloud-go/commit/ca94e2724f9e2610b46aefd0a3b5ddc06102e91b)) +* **storage:** Add support for MatchGlob ([#8097](https://github.com/googleapis/google-cloud-go/issues/8097)) ([9426a5a](https://github.com/googleapis/google-cloud-go/commit/9426a5a45d4c2fd07f84261f6d602680e79cdc48)), refs [#7727](https://github.com/googleapis/google-cloud-go/issues/7727) [#7728](https://github.com/googleapis/google-cloud-go/issues/7728) +* **storage:** Respect WithEndpoint for SignedURLs and PostPolicy ([#8113](https://github.com/googleapis/google-cloud-go/issues/8113)) ([f918f23](https://github.com/googleapis/google-cloud-go/commit/f918f23a3cda4fbc8d709e32b914ead8b735d664)) +* **storage:** Update all direct dependencies ([b340d03](https://github.com/googleapis/google-cloud-go/commit/b340d030f2b52a4ce48846ce63984b28583abde6)) + + +### Bug Fixes + +* **storage:** Fix CreateBucket logic for gRPC ([#8165](https://github.com/googleapis/google-cloud-go/issues/8165)) ([8424e7e](https://github.com/googleapis/google-cloud-go/commit/8424e7e145a117c91006318fa924a8b2643c1c7e)), refs [#8162](https://github.com/googleapis/google-cloud-go/issues/8162) +* **storage:** Fix reads with "./" in object names [XML] ([#8017](https://github.com/googleapis/google-cloud-go/issues/8017)) ([6b7b21f](https://github.com/googleapis/google-cloud-go/commit/6b7b21f8a334b6ad3a25e1f66ae1265b4d1f0995)) +* **storage:** Fix routing header for writes ([#8159](https://github.com/googleapis/google-cloud-go/issues/8159)) ([42a59f5](https://github.com/googleapis/google-cloud-go/commit/42a59f5a23ab9b4743ab032ad92304922c801d93)), refs [#8142](https://github.com/googleapis/google-cloud-go/issues/8142) [#8143](https://github.com/googleapis/google-cloud-go/issues/8143) [#8144](https://github.com/googleapis/google-cloud-go/issues/8144) [#8145](https://github.com/googleapis/google-cloud-go/issues/8145) [#8149](https://github.com/googleapis/google-cloud-go/issues/8149) +* **storage:** REST query UpdateMask bug ([df52820](https://github.com/googleapis/google-cloud-go/commit/df52820b0e7721954809a8aa8700b93c5662dc9b)) +* **storage:** Update grpc to v1.55.0 ([1147ce0](https://github.com/googleapis/google-cloud-go/commit/1147ce02a990276ca4f8ab7a1ab65c14da4450ef)) + + +### Documentation + +* **storage/internal:** Clarifications about behavior of DeleteObject RPC ([3f1ed9c](https://github.com/googleapis/google-cloud-go/commit/3f1ed9c63fb115f47607a3ab478842fe5ba0df11)) +* **storage/internal:** Clarified the behavior of supplying bucket.name field in CreateBucket to reflect actual implementation ([ebae64d](https://github.com/googleapis/google-cloud-go/commit/ebae64d53397ec5dfe851f098754eaa1f5df7cb1)) +* **storage/internal:** Revert ChecksummedData message definition not to specify ctype=CORD, because it would be a breaking change. ([ef61e47](https://github.com/googleapis/google-cloud-go/commit/ef61e4799280a355b960da8ae240ceb2efbe71ac)) +* **storage/internal:** Update routing annotations for CancelResumableWriteRequest and QueryWriteStatusRequest ([4900851](https://github.com/googleapis/google-cloud-go/commit/49008518e168fe6f7891b907d6fc14eecdef758c)) +* **storage/internal:** Updated ChecksummedData message definition to specify ctype=CORD, and removed incorrect earlier attempt that set that annotation in the ReadObjectResponse message definition ([ef61e47](https://github.com/googleapis/google-cloud-go/commit/ef61e4799280a355b960da8ae240ceb2efbe71ac)) +* **storage:** WithXMLReads should mention XML instead of JSON API ([#7881](https://github.com/googleapis/google-cloud-go/issues/7881)) ([36f56c8](https://github.com/googleapis/google-cloud-go/commit/36f56c80c456ca74ffc03df76844ce15980ced82)) + +## [1.30.1](https://github.com/googleapis/google-cloud-go/compare/storage/v1.30.0...storage/v1.30.1) (2023-03-21) + + +### Bug Fixes + +* **storage:** Retract versions with Copier bug ([#7583](https://github.com/googleapis/google-cloud-go/issues/7583)) ([9c10b6f](https://github.com/googleapis/google-cloud-go/commit/9c10b6f8a54cb8447260148b5e4a9b5160281020)) + * Versions v1.25.0-v1.27.0 are retracted due to [#6857](https://github.com/googleapis/google-cloud-go/issues/6857). +* **storage:** SignedURL v4 allows headers with colons in value ([#7603](https://github.com/googleapis/google-cloud-go/issues/7603)) ([6b50f9b](https://github.com/googleapis/google-cloud-go/commit/6b50f9b368f5b271ade1706c342865cef46712e6)) + +## [1.30.0](https://github.com/googleapis/google-cloud-go/compare/storage/v1.29.0...storage/v1.30.0) (2023-03-15) + + +### Features + +* **storage/internal:** Update routing annotation for CreateBucketRequest docs: Add support for end-to-end checksumming in the gRPC WriteObject flow feat!: BREAKING CHANGE - renaming Notification to NotificationConfig ([2fef56f](https://github.com/googleapis/google-cloud-go/commit/2fef56f75a63dc4ff6e0eea56c7b26d4831c8e27)) +* **storage:** Json downloads ([#7158](https://github.com/googleapis/google-cloud-go/issues/7158)) ([574a86c](https://github.com/googleapis/google-cloud-go/commit/574a86c614445f8c3f5a54446820df774c31cd47)) +* **storage:** Update iam and longrunning deps ([91a1f78](https://github.com/googleapis/google-cloud-go/commit/91a1f784a109da70f63b96414bba8a9b4254cddd)) + + +### Bug Fixes + +* **storage:** Specify credentials with STORAGE_EMULATOR_HOST ([#7271](https://github.com/googleapis/google-cloud-go/issues/7271)) ([940ae15](https://github.com/googleapis/google-cloud-go/commit/940ae15f725ff384e345e627feb03d22e1fd8db5)) + ## [1.29.0](https://github.com/googleapis/google-cloud-go/compare/storage/v1.28.1...storage/v1.29.0) (2023-01-19) diff --git a/vendor/cloud.google.com/go/storage/acl.go b/vendor/cloud.google.com/go/storage/acl.go index e0ab60073c..74799e55e9 100644 --- a/vendor/cloud.google.com/go/storage/acl.go +++ b/vendor/cloud.google.com/go/storage/acl.go @@ -20,7 +20,7 @@ import ( "reflect" "cloud.google.com/go/internal/trace" - storagepb "cloud.google.com/go/storage/internal/apiv2/stubs" + "cloud.google.com/go/storage/internal/apiv2/storagepb" raw "google.golang.org/api/storage/v1" ) diff --git a/vendor/cloud.google.com/go/storage/bucket.go b/vendor/cloud.google.com/go/storage/bucket.go index 19f266ef1e..eb1feba22e 100644 --- a/vendor/cloud.google.com/go/storage/bucket.go +++ b/vendor/cloud.google.com/go/storage/bucket.go @@ -27,7 +27,7 @@ import ( "cloud.google.com/go/compute/metadata" "cloud.google.com/go/internal/optional" "cloud.google.com/go/internal/trace" - storagepb "cloud.google.com/go/storage/internal/apiv2/stubs" + "cloud.google.com/go/storage/internal/apiv2/storagepb" "google.golang.org/api/googleapi" "google.golang.org/api/iamcredentials/v1" "google.golang.org/api/iterator" @@ -173,12 +173,18 @@ func (b *BucketHandle) Update(ctx context.Context, uattrs BucketAttrsToUpdate) ( // [Overview of access control]: https://cloud.google.com/storage/docs/accesscontrol#signed_urls_query_string_authentication // [automatic detection of credentials]: https://pkg.go.dev/cloud.google.com/go/storage#hdr-Credential_requirements_for_signing func (b *BucketHandle) SignedURL(object string, opts *SignedURLOptions) (string, error) { - if opts.GoogleAccessID != "" && (opts.SignBytes != nil || len(opts.PrivateKey) > 0) { - return SignedURL(b.name, object, opts) - } // Make a copy of opts so we don't modify the pointer parameter. newopts := opts.clone() + if newopts.Hostname == "" { + // Extract the correct host from the readhost set on the client + newopts.Hostname = b.c.xmlHost + } + + if opts.GoogleAccessID != "" && (opts.SignBytes != nil || len(opts.PrivateKey) > 0) { + return SignedURL(b.name, object, newopts) + } + if newopts.GoogleAccessID == "" { id, err := b.detectDefaultGoogleAccessID() if err != nil { @@ -215,12 +221,18 @@ func (b *BucketHandle) SignedURL(object string, opts *SignedURLOptions) (string, // // [automatic detection of credentials]: https://pkg.go.dev/cloud.google.com/go/storage#hdr-Credential_requirements_for_signing func (b *BucketHandle) GenerateSignedPostPolicyV4(object string, opts *PostPolicyV4Options) (*PostPolicyV4, error) { - if opts.GoogleAccessID != "" && (opts.SignRawBytes != nil || opts.SignBytes != nil || len(opts.PrivateKey) > 0) { - return GenerateSignedPostPolicyV4(b.name, object, opts) - } // Make a copy of opts so we don't modify the pointer parameter. newopts := opts.clone() + if newopts.Hostname == "" { + // Extract the correct host from the readhost set on the client + newopts.Hostname = b.c.xmlHost + } + + if opts.GoogleAccessID != "" && (opts.SignRawBytes != nil || opts.SignBytes != nil || len(opts.PrivateKey) > 0) { + return GenerateSignedPostPolicyV4(b.name, object, newopts) + } + if newopts.GoogleAccessID == "" { id, err := b.detectDefaultGoogleAccessID() if err != nil { @@ -921,8 +933,6 @@ func (ua *BucketAttrsToUpdate) toProtoBucket() *storagepb.Bucket { return &storagepb.Bucket{} } - // TODO(cathyo): Handle labels. Pending b/230510191. - var v *storagepb.Bucket_Versioning if ua.VersioningEnabled != nil { v = &storagepb.Bucket_Versioning{Enabled: optional.ToBool(ua.VersioningEnabled)} @@ -996,6 +1006,7 @@ func (ua *BucketAttrsToUpdate) toProtoBucket() *storagepb.Bucket { IamConfig: bktIAM, Rpo: ua.RPO.String(), Autoclass: ua.Autoclass.toProtoAutoclass(), + Labels: ua.setLabels, } } @@ -1264,7 +1275,9 @@ func (ua *BucketAttrsToUpdate) toRawBucket() *raw.Bucket { } // If returns a new BucketHandle that applies a set of preconditions. -// Preconditions already set on the BucketHandle are ignored. +// Preconditions already set on the BucketHandle are ignored. The supplied +// BucketConditions must have exactly one field set to a non-zero value; +// otherwise an error will be returned from any operation on the BucketHandle. // Operations on the new handle will return an error if the preconditions are not // satisfied. The only valid preconditions for buckets are MetagenerationMatch // and MetagenerationNotMatch. diff --git a/vendor/cloud.google.com/go/storage/client.go b/vendor/cloud.google.com/go/storage/client.go index d579a2b1ee..3bed9b64c2 100644 --- a/vendor/cloud.google.com/go/storage/client.go +++ b/vendor/cloud.google.com/go/storage/client.go @@ -19,9 +19,9 @@ import ( "io" "time" + "cloud.google.com/go/iam/apiv1/iampb" gax "github.com/googleapis/gax-go/v2" "google.golang.org/api/option" - iampb "google.golang.org/genproto/googleapis/iam/v1" ) // TODO(noahdietz): Move existing factory methods to this file. diff --git a/vendor/cloud.google.com/go/storage/doc.go b/vendor/cloud.google.com/go/storage/doc.go index 8bf3098431..cde7cfdba9 100644 --- a/vendor/cloud.google.com/go/storage/doc.go +++ b/vendor/cloud.google.com/go/storage/doc.go @@ -36,6 +36,9 @@ The client will use your default application credentials. Clients should be reused instead of created as needed. The methods of [Client] are safe for concurrent use by multiple goroutines. +You may configure the client by passing in options from the [google.golang.org/api/option] +package. You may also use options defined in this package, such as [WithJSONReads]. + If you only wish to access public data, you can create an unauthenticated client with diff --git a/vendor/cloud.google.com/go/storage/grpc_client.go b/vendor/cloud.google.com/go/storage/grpc_client.go index 1dfb6f8302..7a1ffff698 100644 --- a/vendor/cloud.google.com/go/storage/grpc_client.go +++ b/vendor/cloud.google.com/go/storage/grpc_client.go @@ -17,19 +17,21 @@ package storage import ( "context" "encoding/base64" + "errors" "fmt" "io" "net/url" "os" + "cloud.google.com/go/iam/apiv1/iampb" "cloud.google.com/go/internal/trace" gapic "cloud.google.com/go/storage/internal/apiv2" - storagepb "cloud.google.com/go/storage/internal/apiv2/stubs" + "cloud.google.com/go/storage/internal/apiv2/storagepb" "github.com/googleapis/gax-go/v2" + "google.golang.org/api/googleapi" "google.golang.org/api/iterator" "google.golang.org/api/option" "google.golang.org/api/option/internaloption" - iampb "google.golang.org/genproto/googleapis/iam/v1" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/metadata" @@ -110,6 +112,11 @@ func newGRPCStorageClient(ctx context.Context, opts ...storageOption) (storageCl s := initSettings(opts...) s.clientOption = append(defaultGRPCOptions(), s.clientOption...) + config := newStorageConfig(s.clientOption...) + if config.readAPIWasSet { + return nil, errors.New("storage: GRPC is incompatible with any option that specifies an API for reads") + } + g, err := gapic.NewClient(ctx, s.clientOption...) if err != nil { return nil, err @@ -147,7 +154,7 @@ func (c *grpcStorageClient) GetServiceAccount(ctx context.Context, project strin func (c *grpcStorageClient) CreateBucket(ctx context.Context, project, bucket string, attrs *BucketAttrs, opts ...storageOption) (*BucketAttrs, error) { s := callSettings(c.settings, opts...) b := attrs.toProtoBucket() - b.Name = bucket + b.Project = toProjectResource(project) // If there is lifecycle information but no location, explicitly set // the location. This is a GCS quirk/bug. if b.GetLocation() == "" && b.GetLifecycle() != nil { @@ -155,9 +162,9 @@ func (c *grpcStorageClient) CreateBucket(ctx context.Context, project, bucket st } req := &storagepb.CreateBucketRequest{ - Parent: toProjectResource(project), + Parent: fmt.Sprintf("projects/%s", globalProjectAlias), Bucket: b, - BucketId: b.GetName(), + BucketId: bucket, } if attrs != nil { req.PredefinedAcl = attrs.PredefinedACL @@ -348,7 +355,16 @@ func (c *grpcStorageClient) UpdateBucket(ctx context.Context, bucket string, uat if uattrs.Autoclass != nil { fieldMask.Paths = append(fieldMask.Paths, "autoclass") } - // TODO(cathyo): Handle labels. Pending b/230510191. + + for label := range uattrs.setLabels { + fieldMask.Paths = append(fieldMask.Paths, fmt.Sprintf("labels.%s", label)) + } + + // Delete a label by not including it in Bucket.Labels but adding the key to the update mask. + for label := range uattrs.deleteLabels { + fieldMask.Paths = append(fieldMask.Paths, fmt.Sprintf("labels.%s", label)) + } + req.UpdateMask = fieldMask var battrs *BucketAttrs @@ -398,6 +414,11 @@ func (c *grpcStorageClient) ListObjects(ctx context.Context, bucket string, q *Q } gitr := c.raw.ListObjects(it.ctx, req, s.gax...) fetch := func(pageSize int, pageToken string) (token string, err error) { + // MatchGlob not yet supported for gRPC. + // TODO: add support when b/287306063 resolved. + if q != nil && q.MatchGlob != "" { + return "", status.Errorf(codes.Unimplemented, "MatchGlob is not supported for gRPC") + } var objects []*storagepb.Object err = run(it.ctx, func() error { objects, token, err = gitr.InternalFetch(pageSize, pageToken) @@ -534,7 +555,19 @@ func (c *grpcStorageClient) UpdateObject(ctx context.Context, bucket, object str if uattrs.ACL != nil || len(uattrs.PredefinedACL) > 0 { fieldMask.Paths = append(fieldMask.Paths, "acl") } - // TODO(cathyo): Handle metadata. Pending b/230510191. + + if uattrs.Metadata != nil { + // We don't support deleting a specific metadata key; metadata is deleted + // as a whole if provided an empty map, so we do not use dot notation here + if len(uattrs.Metadata) == 0 { + fieldMask.Paths = append(fieldMask.Paths, "metadata") + } else { + // We can, however, use dot notation for adding keys + for key := range uattrs.Metadata { + fieldMask.Paths = append(fieldMask.Paths, fmt.Sprintf("metadata.%s", key)) + } + } + } req.UpdateMask = fieldMask @@ -855,13 +888,6 @@ func (c *grpcStorageClient) NewRangeReader(ctx context.Context, params *newRange ctx = setUserProjectMetadata(ctx, s.userProject) } - // A negative length means "read to the end of the object", but the - // read_limit field it corresponds to uses zero to mean the same thing. Thus - // we coerce the length to 0 to read to the end of the object. - if params.length < 0 { - params.length = 0 - } - b := bucketResourceName(globalProjectAlias, params.bucket) req := &storagepb.ReadObjectRequest{ Bucket: b, @@ -884,13 +910,13 @@ func (c *grpcStorageClient) NewRangeReader(ctx context.Context, params *newRange cc, cancel := context.WithCancel(ctx) - start := params.offset + seen - // Only set a ReadLimit if length is greater than zero, because zero - // means read it all. + req.ReadOffset = params.offset + seen + + // Only set a ReadLimit if length is greater than zero, because <= 0 means + // to read it all. if params.length > 0 { req.ReadLimit = params.length - seen } - req.ReadOffset = start if err := applyCondsProto("gRPCReader.reopen", params.gen, params.conds, req); err != nil { cancel() @@ -957,19 +983,27 @@ func (c *grpcStorageClient) NewRangeReader(ctx context.Context, params *newRange // client buffer for reading later. leftovers: msg.GetChecksummedData().GetContent(), settings: s, + zeroRange: params.length == 0, }, } cr := msg.GetContentRange() if cr != nil { r.Attrs.StartOffset = cr.GetStart() - r.remain = cr.GetEnd() - cr.GetStart() + 1 + r.remain = cr.GetEnd() - cr.GetStart() } else { r.remain = size } + // For a zero-length request, explicitly close the stream and set remaining + // bytes to zero. + if params.length == 0 { + r.remain = 0 + r.reader.Close() + } + // Only support checksums when reading an entire object, not a range. - if checksums := msg.GetObjectChecksums(); checksums != nil && checksums.Crc32C != nil && params.offset == 0 && params.length == 0 { + if checksums := msg.GetObjectChecksums(); checksums != nil && checksums.Crc32C != nil && params.offset == 0 && params.length < 0 { r.wantCRC = checksums.GetCrc32C() r.checkCRC = true } @@ -1030,11 +1064,13 @@ func (c *grpcStorageClient) OpenWriter(params *openWriterParams, opts ...storage pr.CloseWithError(err) return } - // At this point, the current buffer has been uploaded. Capture the - // committed offset here in case the upload was not finalized and - // another chunk is to be uploaded. - offset = off - progress(offset) + // At this point, the current buffer has been uploaded. For resumable + // uploads, capture the committed offset here in case the upload was not + // finalized and another chunk is to be uploaded. + if gw.upid != "" { + offset = off + progress(offset) + } // When we are done reading data and the chunk has been finalized, // we are done. @@ -1254,12 +1290,12 @@ func (c *grpcStorageClient) ListNotifications(ctx context.Context, bucket string if s.userProject != "" { ctx = setUserProjectMetadata(ctx, s.userProject) } - req := &storagepb.ListNotificationsRequest{ + req := &storagepb.ListNotificationConfigsRequest{ Parent: bucketResourceName(globalProjectAlias, bucket), } - var notifications []*storagepb.Notification + var notifications []*storagepb.NotificationConfig err = run(ctx, func() error { - gitr := c.raw.ListNotifications(ctx, req, s.gax...) + gitr := c.raw.ListNotificationConfigs(ctx, req, s.gax...) for { // PageSize is not set and fallbacks to the API default pageSize of 100. items, nextPageToken, err := gitr.InternalFetch(int(req.GetPageSize()), req.GetPageToken()) @@ -1286,14 +1322,14 @@ func (c *grpcStorageClient) CreateNotification(ctx context.Context, bucket strin defer func() { trace.EndSpan(ctx, err) }() s := callSettings(c.settings, opts...) - req := &storagepb.CreateNotificationRequest{ - Parent: bucketResourceName(globalProjectAlias, bucket), - Notification: toProtoNotification(n), + req := &storagepb.CreateNotificationConfigRequest{ + Parent: bucketResourceName(globalProjectAlias, bucket), + NotificationConfig: toProtoNotification(n), } - var pbn *storagepb.Notification + var pbn *storagepb.NotificationConfig err = run(ctx, func() error { var err error - pbn, err = c.raw.CreateNotification(ctx, req, s.gax...) + pbn, err = c.raw.CreateNotificationConfig(ctx, req, s.gax...) return err }, s.retry, s.idempotent, setRetryHeaderGRPC(ctx)) if err != nil { @@ -1307,9 +1343,9 @@ func (c *grpcStorageClient) DeleteNotification(ctx context.Context, bucket strin defer func() { trace.EndSpan(ctx, err) }() s := callSettings(c.settings, opts...) - req := &storagepb.DeleteNotificationRequest{Name: id} + req := &storagepb.DeleteNotificationConfigRequest{Name: id} return run(ctx, func() error { - return c.raw.DeleteNotification(ctx, req, s.gax...) + return c.raw.DeleteNotificationConfig(ctx, req, s.gax...) }, s.retry, s.idempotent, setRetryHeaderGRPC(ctx)) } @@ -1329,6 +1365,7 @@ type readStreamResponse struct { type gRPCReader struct { seen, size int64 + zeroRange bool stream storagepb.Storage_ReadObjectClient reopen func(seen int64) (*readStreamResponse, context.CancelFunc, error) leftovers []byte @@ -1338,7 +1375,12 @@ type gRPCReader struct { // Read reads bytes into the user's buffer from an open gRPC stream. func (r *gRPCReader) Read(p []byte) (int, error) { - // No stream to read from, either never initiliazed or Close was called. + // The entire object has been read by this reader, return EOF. + if r.size == r.seen || r.zeroRange { + return 0, io.EOF + } + + // No stream to read from, either never initialized or Close was called. // Note: There is a potential concurrency issue if multiple routines are // using the same reader. One encounters an error and the stream is closed // and then reopened while the other routine attempts to read from it. @@ -1346,11 +1388,6 @@ func (r *gRPCReader) Read(p []byte) (int, error) { return 0, fmt.Errorf("reader has been closed") } - // The entire object has been read by this reader, return EOF. - if r.size != 0 && r.size == r.seen { - return 0, io.EOF - } - var n int // Read leftovers and return what was available to conform to the Reader // interface: https://pkg.go.dev/io#Reader. @@ -1441,6 +1478,12 @@ func (r *gRPCReader) reopenStream() (*storagepb.ReadObjectResponse, error) { func newGRPCWriter(c *grpcStorageClient, params *openWriterParams, r io.Reader) *gRPCWriter { size := params.chunkSize + + // Round up chunksize to nearest 256KiB + if size%googleapi.MinUploadChunkSize != 0 { + size += googleapi.MinUploadChunkSize - (size % googleapi.MinUploadChunkSize) + } + if params.chunkSize == 0 { // TODO: Should we actually use the minimum of 256 KB here when the user // indicates they want minimal memory usage? We cannot do a zero-copy, @@ -1572,7 +1615,7 @@ func (w *gRPCWriter) uploadBuffer(recvd int, start int64, doneReading bool) (*st // The first message on the WriteObject stream must either be the // Object or the Resumable Upload ID. if first { - ctx := gapic.InsertMetadata(w.ctx, metadata.Pairs("x-goog-request-params", "bucket="+url.QueryEscape(w.bucket))) + ctx := gapic.InsertMetadata(w.ctx, metadata.Pairs("x-goog-request-params", fmt.Sprintf("bucket=projects/_/buckets/%s", url.QueryEscape(w.bucket)))) w.stream, err = w.c.raw.WriteObject(ctx) if err != nil { return nil, 0, false, err diff --git a/vendor/cloud.google.com/go/storage/hmac.go b/vendor/cloud.google.com/go/storage/hmac.go index 422a7c2335..c308f73554 100644 --- a/vendor/cloud.google.com/go/storage/hmac.go +++ b/vendor/cloud.google.com/go/storage/hmac.go @@ -20,7 +20,7 @@ import ( "fmt" "time" - storagepb "cloud.google.com/go/storage/internal/apiv2/stubs" + "cloud.google.com/go/storage/internal/apiv2/storagepb" "google.golang.org/api/iterator" raw "google.golang.org/api/storage/v1" ) diff --git a/vendor/cloud.google.com/go/storage/http_client.go b/vendor/cloud.google.com/go/storage/http_client.go index fae96043a9..874be49db3 100644 --- a/vendor/cloud.google.com/go/storage/http_client.go +++ b/vendor/cloud.google.com/go/storage/http_client.go @@ -29,6 +29,7 @@ import ( "strings" "time" + "cloud.google.com/go/iam/apiv1/iampb" "cloud.google.com/go/internal/optional" "cloud.google.com/go/internal/trace" "golang.org/x/oauth2/google" @@ -39,7 +40,6 @@ import ( raw "google.golang.org/api/storage/v1" "google.golang.org/api/transport" htransport "google.golang.org/api/transport/http" - iampb "google.golang.org/genproto/googleapis/iam/v1" ) // httpStorageClient is the HTTP-JSON API implementation of the transport-agnostic @@ -49,10 +49,11 @@ import ( type httpStorageClient struct { creds *google.Credentials hc *http.Client - readHost string + xmlHost string raw *raw.Service scheme string settings *settings + config *storageConfig } // newHTTPStorageClient initializes a new storageClient that uses the HTTP-JSON @@ -62,6 +63,7 @@ type httpStorageClient struct { func newHTTPStorageClient(ctx context.Context, opts ...storageOption) (storageClient, error) { s := initSettings(opts...) o := s.clientOption + config := newStorageConfig(o...) var creds *google.Credentials // In general, it is recommended to use raw.NewService instead of htransport.NewClient @@ -121,7 +123,7 @@ func newHTTPStorageClient(ctx context.Context, opts ...storageOption) (storageCl if err != nil { return nil, fmt.Errorf("storage client: %w", err) } - // Update readHost and scheme with the chosen endpoint. + // Update xmlHost and scheme with the chosen endpoint. u, err := url.Parse(ep) if err != nil { return nil, fmt.Errorf("supplied endpoint %q is not valid: %w", ep, err) @@ -130,10 +132,11 @@ func newHTTPStorageClient(ctx context.Context, opts ...storageOption) (storageCl return &httpStorageClient{ creds: creds, hc: hc, - readHost: u.Host, + xmlHost: u.Host, raw: rawService, scheme: u.Scheme, settings: s, + config: &config, }, nil } @@ -344,6 +347,7 @@ func (c *httpStorageClient) ListObjects(ctx context.Context, bucket string, q *Q req.EndOffset(it.query.EndOffset) req.Versions(it.query.Versions) req.IncludeTrailingDelimiter(it.query.IncludeTrailingDelimiter) + req.MatchGlob(it.query.MatchGlob) if selection := it.query.toFieldSelection(); selection != "" { req.Fields("nextPageToken", googleapi.Field(selection)) } @@ -779,10 +783,18 @@ func (c *httpStorageClient) NewRangeReader(ctx context.Context, params *newRange s := callSettings(c.settings, opts...) + if c.config.useJSONforReads { + return c.newRangeReaderJSON(ctx, params, s) + } + return c.newRangeReaderXML(ctx, params, s) +} + +func (c *httpStorageClient) newRangeReaderXML(ctx context.Context, params *newRangeReaderParams, s *settings) (r *Reader, err error) { u := &url.URL{ - Scheme: c.scheme, - Host: c.readHost, - Path: fmt.Sprintf("/%s/%s", params.bucket, params.object), + Scheme: c.scheme, + Host: c.xmlHost, + Path: fmt.Sprintf("/%s/%s", params.bucket, params.object), + RawPath: fmt.Sprintf("/%s/%s", params.bucket, url.PathEscape(params.object)), } verb := "GET" if params.length == 0 { @@ -793,186 +805,51 @@ func (c *httpStorageClient) NewRangeReader(ctx context.Context, params *newRange return nil, err } req = req.WithContext(ctx) + if s.userProject != "" { req.Header.Set("X-Goog-User-Project", s.userProject) } - if params.readCompressed { - req.Header.Set("Accept-Encoding", "gzip") - } - if err := setEncryptionHeaders(req.Header, params.encryptionKey, false); err != nil { + + if err := setRangeReaderHeaders(req.Header, params); err != nil { return nil, err } - // Define a function that initiates a Read with offset and length, assuming we - // have already read seen bytes. - reopen := func(seen int64) (*http.Response, error) { - // If the context has already expired, return immediately without making a - // call. - if err := ctx.Err(); err != nil { - return nil, err - } - start := params.offset + seen - if params.length < 0 && start < 0 { - req.Header.Set("Range", fmt.Sprintf("bytes=%d", start)) - } else if params.length < 0 && start > 0 { - req.Header.Set("Range", fmt.Sprintf("bytes=%d-", start)) - } else if params.length > 0 { - // The end character isn't affected by how many bytes we've seen. - req.Header.Set("Range", fmt.Sprintf("bytes=%d-%d", start, params.offset+params.length-1)) - } - // We wait to assign conditions here because the generation number can change in between reopen() runs. - if err := setConditionsHeaders(req.Header, params.conds); err != nil { - return nil, err - } - // If an object generation is specified, include generation as query string parameters. - if params.gen >= 0 { - req.URL.RawQuery = fmt.Sprintf("generation=%d", params.gen) - } - - var res *http.Response - err = run(ctx, func() error { - res, err = c.hc.Do(req) - if err != nil { - return err - } - if res.StatusCode == http.StatusNotFound { - res.Body.Close() - return ErrObjectNotExist - } - if res.StatusCode < 200 || res.StatusCode > 299 { - body, _ := ioutil.ReadAll(res.Body) - res.Body.Close() - return &googleapi.Error{ - Code: res.StatusCode, - Header: res.Header, - Body: string(body), - } - } - - partialContentNotSatisfied := - !decompressiveTranscoding(res) && - start > 0 && params.length != 0 && - res.StatusCode != http.StatusPartialContent - - if partialContentNotSatisfied { - res.Body.Close() - return errors.New("storage: partial request not satisfied") - } - - // With "Content-Encoding": "gzip" aka decompressive transcoding, GCS serves - // back the whole file regardless of the range count passed in as per: - // https://cloud.google.com/storage/docs/transcoding#range, - // thus we have to manually move the body forward by seen bytes. - if decompressiveTranscoding(res) && seen > 0 { - _, _ = io.CopyN(ioutil.Discard, res.Body, seen) - } - - // If a generation hasn't been specified, and this is the first response we get, let's record the - // generation. In future requests we'll use this generation as a precondition to avoid data races. - if params.gen < 0 && res.Header.Get("X-Goog-Generation") != "" { - gen64, err := strconv.ParseInt(res.Header.Get("X-Goog-Generation"), 10, 64) - if err != nil { - return err - } - params.gen = gen64 - } - return nil - }, s.retry, s.idempotent, setRetryHeaderHTTP(nil)) - if err != nil { - return nil, err - } - return res, nil - } + reopen := readerReopen(ctx, req.Header, params, s, + func() (*http.Response, error) { return c.hc.Do(req) }, + func() error { return setConditionsHeaders(req.Header, params.conds) }, + func() { req.URL.RawQuery = fmt.Sprintf("generation=%d", params.gen) }) res, err := reopen(0) if err != nil { return nil, err } - var ( - size int64 // total size of object, even if a range was requested. - checkCRC bool - crc uint32 - startOffset int64 // non-zero if range request. - ) - if res.StatusCode == http.StatusPartialContent { - cr := strings.TrimSpace(res.Header.Get("Content-Range")) - if !strings.HasPrefix(cr, "bytes ") || !strings.Contains(cr, "/") { - return nil, fmt.Errorf("storage: invalid Content-Range %q", cr) - } - // Content range is formatted -/. We take - // the total size. - size, err = strconv.ParseInt(cr[strings.LastIndex(cr, "/")+1:], 10, 64) - if err != nil { - return nil, fmt.Errorf("storage: invalid Content-Range %q", cr) - } + return parseReadResponse(res, params, reopen) +} - dashIndex := strings.Index(cr, "-") - if dashIndex >= 0 { - startOffset, err = strconv.ParseInt(cr[len("bytes="):dashIndex], 10, 64) - if err != nil { - return nil, fmt.Errorf("storage: invalid Content-Range %q: %w", cr, err) - } - } - } else { - size = res.ContentLength - // Check the CRC iff all of the following hold: - // - We asked for content (length != 0). - // - We got all the content (status != PartialContent). - // - The server sent a CRC header. - // - The Go http stack did not uncompress the file. - // - We were not served compressed data that was uncompressed on download. - // The problem with the last two cases is that the CRC will not match -- GCS - // computes it on the compressed contents, but we compute it on the - // uncompressed contents. - if params.length != 0 && !res.Uncompressed && !uncompressedByServer(res) { - crc, checkCRC = parseCRC32c(res) - } - } +func (c *httpStorageClient) newRangeReaderJSON(ctx context.Context, params *newRangeReaderParams, s *settings) (r *Reader, err error) { + call := c.raw.Objects.Get(params.bucket, params.object) - remain := res.ContentLength - body := res.Body - if params.length == 0 { - remain = 0 - body.Close() - body = emptyBody - } - var metaGen int64 - if res.Header.Get("X-Goog-Metageneration") != "" { - metaGen, err = strconv.ParseInt(res.Header.Get("X-Goog-Metageneration"), 10, 64) - if err != nil { - return nil, err - } + setClientHeader(call.Header()) + call.Context(ctx) + call.Projection("full") + + if s.userProject != "" { + call.UserProject(s.userProject) } - var lm time.Time - if res.Header.Get("Last-Modified") != "" { - lm, err = http.ParseTime(res.Header.Get("Last-Modified")) - if err != nil { - return nil, err - } + if err := setRangeReaderHeaders(call.Header(), params); err != nil { + return nil, err } - attrs := ReaderObjectAttrs{ - Size: size, - ContentType: res.Header.Get("Content-Type"), - ContentEncoding: res.Header.Get("Content-Encoding"), - CacheControl: res.Header.Get("Cache-Control"), - LastModified: lm, - StartOffset: startOffset, - Generation: params.gen, - Metageneration: metaGen, + reopen := readerReopen(ctx, call.Header(), params, s, func() (*http.Response, error) { return call.Download() }, + func() error { return applyConds("NewReader", params.gen, params.conds, call) }, + func() { call.Generation(params.gen) }) + + res, err := reopen(0) + if err != nil { + return nil, err } - return &Reader{ - Attrs: attrs, - size: size, - remain: remain, - wantCRC: crc, - checkCRC: checkCRC, - reader: &httpReader{ - reopen: reopen, - body: body, - }, - }, nil + return parseReadResponse(res, params, reopen) } func (c *httpStorageClient) OpenWriter(params *openWriterParams, opts ...storageOption) (*io.PipeWriter, error) { @@ -1349,3 +1226,197 @@ func (r *httpReader) Read(p []byte) (int, error) { func (r *httpReader) Close() error { return r.body.Close() } + +func setRangeReaderHeaders(h http.Header, params *newRangeReaderParams) error { + if params.readCompressed { + h.Set("Accept-Encoding", "gzip") + } + if err := setEncryptionHeaders(h, params.encryptionKey, false); err != nil { + return err + } + return nil +} + +// readerReopen initiates a Read with offset and length, assuming we +// have already read seen bytes. +func readerReopen(ctx context.Context, header http.Header, params *newRangeReaderParams, s *settings, + doDownload func() (*http.Response, error), applyConditions func() error, setGeneration func()) func(int64) (*http.Response, error) { + return func(seen int64) (*http.Response, error) { + // If the context has already expired, return immediately without making a + // call. + if err := ctx.Err(); err != nil { + return nil, err + } + start := params.offset + seen + if params.length < 0 && start < 0 { + header.Set("Range", fmt.Sprintf("bytes=%d", start)) + } else if params.length < 0 && start > 0 { + header.Set("Range", fmt.Sprintf("bytes=%d-", start)) + } else if params.length > 0 { + // The end character isn't affected by how many bytes we've seen. + header.Set("Range", fmt.Sprintf("bytes=%d-%d", start, params.offset+params.length-1)) + } + // We wait to assign conditions here because the generation number can change in between reopen() runs. + if err := applyConditions(); err != nil { + return nil, err + } + // If an object generation is specified, include generation as query string parameters. + if params.gen >= 0 { + setGeneration() + } + + var err error + var res *http.Response + err = run(ctx, func() error { + res, err = doDownload() + if err != nil { + var e *googleapi.Error + if errors.As(err, &e) { + if e.Code == http.StatusNotFound { + return ErrObjectNotExist + } + } + return err + } + + if res.StatusCode == http.StatusNotFound { + // this check is necessary only for XML + res.Body.Close() + return ErrObjectNotExist + } + if res.StatusCode < 200 || res.StatusCode > 299 { + body, _ := ioutil.ReadAll(res.Body) + res.Body.Close() + return &googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + Body: string(body), + } + } + + partialContentNotSatisfied := + !decompressiveTranscoding(res) && + start > 0 && params.length != 0 && + res.StatusCode != http.StatusPartialContent + + if partialContentNotSatisfied { + res.Body.Close() + return errors.New("storage: partial request not satisfied") + } + + // With "Content-Encoding": "gzip" aka decompressive transcoding, GCS serves + // back the whole file regardless of the range count passed in as per: + // https://cloud.google.com/storage/docs/transcoding#range, + // thus we have to manually move the body forward by seen bytes. + if decompressiveTranscoding(res) && seen > 0 { + _, _ = io.CopyN(ioutil.Discard, res.Body, seen) + } + + // If a generation hasn't been specified, and this is the first response we get, let's record the + // generation. In future requests we'll use this generation as a precondition to avoid data races. + if params.gen < 0 && res.Header.Get("X-Goog-Generation") != "" { + gen64, err := strconv.ParseInt(res.Header.Get("X-Goog-Generation"), 10, 64) + if err != nil { + return err + } + params.gen = gen64 + } + return nil + }, s.retry, s.idempotent, setRetryHeaderHTTP(nil)) + if err != nil { + return nil, err + } + return res, nil + } +} + +func parseReadResponse(res *http.Response, params *newRangeReaderParams, reopen func(int64) (*http.Response, error)) (*Reader, error) { + var err error + var ( + size int64 // total size of object, even if a range was requested. + checkCRC bool + crc uint32 + startOffset int64 // non-zero if range request. + ) + if res.StatusCode == http.StatusPartialContent { + cr := strings.TrimSpace(res.Header.Get("Content-Range")) + if !strings.HasPrefix(cr, "bytes ") || !strings.Contains(cr, "/") { + return nil, fmt.Errorf("storage: invalid Content-Range %q", cr) + } + // Content range is formatted -/. We take + // the total size. + size, err = strconv.ParseInt(cr[strings.LastIndex(cr, "/")+1:], 10, 64) + if err != nil { + return nil, fmt.Errorf("storage: invalid Content-Range %q", cr) + } + + dashIndex := strings.Index(cr, "-") + if dashIndex >= 0 { + startOffset, err = strconv.ParseInt(cr[len("bytes="):dashIndex], 10, 64) + if err != nil { + return nil, fmt.Errorf("storage: invalid Content-Range %q: %w", cr, err) + } + } + } else { + size = res.ContentLength + // Check the CRC iff all of the following hold: + // - We asked for content (length != 0). + // - We got all the content (status != PartialContent). + // - The server sent a CRC header. + // - The Go http stack did not uncompress the file. + // - We were not served compressed data that was uncompressed on download. + // The problem with the last two cases is that the CRC will not match -- GCS + // computes it on the compressed contents, but we compute it on the + // uncompressed contents. + if params.length != 0 && !res.Uncompressed && !uncompressedByServer(res) { + crc, checkCRC = parseCRC32c(res) + } + } + + remain := res.ContentLength + body := res.Body + // If the user requested zero bytes, explicitly close and remove the request + // body. + if params.length == 0 { + remain = 0 + body.Close() + body = emptyBody + } + var metaGen int64 + if res.Header.Get("X-Goog-Metageneration") != "" { + metaGen, err = strconv.ParseInt(res.Header.Get("X-Goog-Metageneration"), 10, 64) + if err != nil { + return nil, err + } + } + + var lm time.Time + if res.Header.Get("Last-Modified") != "" { + lm, err = http.ParseTime(res.Header.Get("Last-Modified")) + if err != nil { + return nil, err + } + } + + attrs := ReaderObjectAttrs{ + Size: size, + ContentType: res.Header.Get("Content-Type"), + ContentEncoding: res.Header.Get("Content-Encoding"), + CacheControl: res.Header.Get("Cache-Control"), + LastModified: lm, + StartOffset: startOffset, + Generation: params.gen, + Metageneration: metaGen, + } + return &Reader{ + Attrs: attrs, + size: size, + remain: remain, + wantCRC: crc, + checkCRC: checkCRC, + reader: &httpReader{ + reopen: reopen, + body: body, + }, + }, nil +} diff --git a/vendor/cloud.google.com/go/storage/iam.go b/vendor/cloud.google.com/go/storage/iam.go index 408661718f..4c01bff4f3 100644 --- a/vendor/cloud.google.com/go/storage/iam.go +++ b/vendor/cloud.google.com/go/storage/iam.go @@ -18,9 +18,9 @@ import ( "context" "cloud.google.com/go/iam" + "cloud.google.com/go/iam/apiv1/iampb" "cloud.google.com/go/internal/trace" raw "google.golang.org/api/storage/v1" - iampb "google.golang.org/genproto/googleapis/iam/v1" "google.golang.org/genproto/googleapis/type/expr" ) diff --git a/vendor/cloud.google.com/go/storage/internal/apiv2/doc.go b/vendor/cloud.google.com/go/storage/internal/apiv2/doc.go index e33b5222ab..927bcaa356 100644 --- a/vendor/cloud.google.com/go/storage/internal/apiv2/doc.go +++ b/vendor/cloud.google.com/go/storage/internal/apiv2/doc.go @@ -19,8 +19,6 @@ // // Lets you store and retrieve potentially-large, immutable data objects. // -// NOTE: This package is in alpha. It is not stable, and is likely to change. -// // # General documentation // // For information about setting deadlines, reusing contexts, and more @@ -64,13 +62,18 @@ // // req := &storagepb.DeleteBucketRequest{ // // TODO: Fill request struct fields. -// // See https://pkg.go.dev/cloud.google.com/go/storage/internal/apiv2/stubs#DeleteBucketRequest. +// // See https://pkg.go.dev/cloud.google.com/go/storage/internal/apiv2/storagepb#DeleteBucketRequest. // } // err = c.DeleteBucket(ctx, req) // if err != nil { // // TODO: Handle error. // } // +// # Inspecting errors +// +// To see examples of how to inspect errors returned by this package please reference +// [Inspecting errors](https://pkg.go.dev/cloud.google.com/go#hdr-Inspecting_errors). +// // # Use of Context // // The ctx passed to NewClient is used for authentication requests and @@ -82,11 +85,6 @@ package storage // import "cloud.google.com/go/storage/internal/apiv2" import ( "context" - "os" - "runtime" - "strconv" - "strings" - "unicode" "google.golang.org/api/option" "google.golang.org/grpc/metadata" @@ -117,16 +115,6 @@ func insertMetadata(ctx context.Context, mds ...metadata.MD) context.Context { return metadata.NewOutgoingContext(ctx, out) } -func checkDisableDeadlines() (bool, error) { - raw, ok := os.LookupEnv("GOOGLE_API_GO_EXPERIMENTAL_DISABLE_DEFAULT_DEADLINE") - if !ok { - return false, nil - } - - b, err := strconv.ParseBool(raw) - return b, err -} - // DefaultAuthScopes reports the default set of authentication scopes to use with this package. func DefaultAuthScopes() []string { return []string{ @@ -137,40 +125,3 @@ func DefaultAuthScopes() []string { "https://www.googleapis.com/auth/devstorage.read_write", } } - -// versionGo returns the Go runtime version. The returned string -// has no whitespace, suitable for reporting in header. -func versionGo() string { - const develPrefix = "devel +" - - s := runtime.Version() - if strings.HasPrefix(s, develPrefix) { - s = s[len(develPrefix):] - if p := strings.IndexFunc(s, unicode.IsSpace); p >= 0 { - s = s[:p] - } - return s - } - - notSemverRune := func(r rune) bool { - return !strings.ContainsRune("0123456789.", r) - } - - if strings.HasPrefix(s, "go1") { - s = s[2:] - var prerelease string - if p := strings.IndexFunc(s, notSemverRune); p >= 0 { - s, prerelease = s[:p], s[p:] - } - if strings.HasSuffix(s, ".") { - s += "0" - } else if strings.Count(s, ".") < 2 { - s += ".0" - } - if prerelease != "" { - s += "-" + prerelease - } - return s - } - return "UNKNOWN" -} diff --git a/vendor/cloud.google.com/go/storage/internal/apiv2/gapic_metadata.json b/vendor/cloud.google.com/go/storage/internal/apiv2/gapic_metadata.json index 01103fa93b..8bbb154c07 100644 --- a/vendor/cloud.google.com/go/storage/internal/apiv2/gapic_metadata.json +++ b/vendor/cloud.google.com/go/storage/internal/apiv2/gapic_metadata.json @@ -30,9 +30,9 @@ "CreateHmacKey" ] }, - "CreateNotification": { + "CreateNotificationConfig": { "methods": [ - "CreateNotification" + "CreateNotificationConfig" ] }, "DeleteBucket": { @@ -45,9 +45,9 @@ "DeleteHmacKey" ] }, - "DeleteNotification": { + "DeleteNotificationConfig": { "methods": [ - "DeleteNotification" + "DeleteNotificationConfig" ] }, "DeleteObject": { @@ -70,9 +70,9 @@ "GetIamPolicy" ] }, - "GetNotification": { + "GetNotificationConfig": { "methods": [ - "GetNotification" + "GetNotificationConfig" ] }, "GetObject": { @@ -95,9 +95,9 @@ "ListHmacKeys" ] }, - "ListNotifications": { + "ListNotificationConfigs": { "methods": [ - "ListNotifications" + "ListNotificationConfigs" ] }, "ListObjects": { diff --git a/vendor/cloud.google.com/go/storage/internal/apiv2/storage_client.go b/vendor/cloud.google.com/go/storage/internal/apiv2/storage_client.go index aa2c1aff57..4143b0b7ae 100644 --- a/vendor/cloud.google.com/go/storage/internal/apiv2/storage_client.go +++ b/vendor/cloud.google.com/go/storage/internal/apiv2/storage_client.go @@ -23,15 +23,17 @@ import ( "net/url" "regexp" "strings" + "time" - storagepb "cloud.google.com/go/storage/internal/apiv2/stubs" + iampb "cloud.google.com/go/iam/apiv1/iampb" + storagepb "cloud.google.com/go/storage/internal/apiv2/storagepb" gax "github.com/googleapis/gax-go/v2" "google.golang.org/api/iterator" "google.golang.org/api/option" "google.golang.org/api/option/internaloption" gtransport "google.golang.org/api/transport/grpc" - iampb "google.golang.org/genproto/googleapis/iam/v1" "google.golang.org/grpc" + "google.golang.org/grpc/codes" "google.golang.org/grpc/metadata" "google.golang.org/protobuf/proto" ) @@ -49,10 +51,10 @@ type CallOptions struct { SetIamPolicy []gax.CallOption TestIamPermissions []gax.CallOption UpdateBucket []gax.CallOption - DeleteNotification []gax.CallOption - GetNotification []gax.CallOption - CreateNotification []gax.CallOption - ListNotifications []gax.CallOption + DeleteNotificationConfig []gax.CallOption + GetNotificationConfig []gax.CallOption + CreateNotificationConfig []gax.CallOption + ListNotificationConfigs []gax.CallOption ComposeObject []gax.CallOption DeleteObject []gax.CallOption CancelResumableWrite []gax.CallOption @@ -86,36 +88,394 @@ func defaultGRPCClientOptions() []option.ClientOption { func defaultCallOptions() *CallOptions { return &CallOptions{ - DeleteBucket: []gax.CallOption{}, - GetBucket: []gax.CallOption{}, - CreateBucket: []gax.CallOption{}, - ListBuckets: []gax.CallOption{}, - LockBucketRetentionPolicy: []gax.CallOption{}, - GetIamPolicy: []gax.CallOption{}, - SetIamPolicy: []gax.CallOption{}, - TestIamPermissions: []gax.CallOption{}, - UpdateBucket: []gax.CallOption{}, - DeleteNotification: []gax.CallOption{}, - GetNotification: []gax.CallOption{}, - CreateNotification: []gax.CallOption{}, - ListNotifications: []gax.CallOption{}, - ComposeObject: []gax.CallOption{}, - DeleteObject: []gax.CallOption{}, - CancelResumableWrite: []gax.CallOption{}, - GetObject: []gax.CallOption{}, - ReadObject: []gax.CallOption{}, - UpdateObject: []gax.CallOption{}, - WriteObject: []gax.CallOption{}, - ListObjects: []gax.CallOption{}, - RewriteObject: []gax.CallOption{}, - StartResumableWrite: []gax.CallOption{}, - QueryWriteStatus: []gax.CallOption{}, - GetServiceAccount: []gax.CallOption{}, - CreateHmacKey: []gax.CallOption{}, - DeleteHmacKey: []gax.CallOption{}, - GetHmacKey: []gax.CallOption{}, - ListHmacKeys: []gax.CallOption{}, - UpdateHmacKey: []gax.CallOption{}, + DeleteBucket: []gax.CallOption{ + gax.WithTimeout(60000 * time.Millisecond), + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.DeadlineExceeded, + codes.Unavailable, + }, gax.Backoff{ + Initial: 1000 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 2.00, + }) + }), + }, + GetBucket: []gax.CallOption{ + gax.WithTimeout(60000 * time.Millisecond), + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.DeadlineExceeded, + codes.Unavailable, + }, gax.Backoff{ + Initial: 1000 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 2.00, + }) + }), + }, + CreateBucket: []gax.CallOption{ + gax.WithTimeout(60000 * time.Millisecond), + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.DeadlineExceeded, + codes.Unavailable, + }, gax.Backoff{ + Initial: 1000 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 2.00, + }) + }), + }, + ListBuckets: []gax.CallOption{ + gax.WithTimeout(60000 * time.Millisecond), + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.DeadlineExceeded, + codes.Unavailable, + }, gax.Backoff{ + Initial: 1000 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 2.00, + }) + }), + }, + LockBucketRetentionPolicy: []gax.CallOption{ + gax.WithTimeout(60000 * time.Millisecond), + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.DeadlineExceeded, + codes.Unavailable, + }, gax.Backoff{ + Initial: 1000 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 2.00, + }) + }), + }, + GetIamPolicy: []gax.CallOption{ + gax.WithTimeout(60000 * time.Millisecond), + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.DeadlineExceeded, + codes.Unavailable, + }, gax.Backoff{ + Initial: 1000 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 2.00, + }) + }), + }, + SetIamPolicy: []gax.CallOption{ + gax.WithTimeout(60000 * time.Millisecond), + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.DeadlineExceeded, + codes.Unavailable, + }, gax.Backoff{ + Initial: 1000 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 2.00, + }) + }), + }, + TestIamPermissions: []gax.CallOption{ + gax.WithTimeout(60000 * time.Millisecond), + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.DeadlineExceeded, + codes.Unavailable, + }, gax.Backoff{ + Initial: 1000 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 2.00, + }) + }), + }, + UpdateBucket: []gax.CallOption{ + gax.WithTimeout(60000 * time.Millisecond), + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.DeadlineExceeded, + codes.Unavailable, + }, gax.Backoff{ + Initial: 1000 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 2.00, + }) + }), + }, + DeleteNotificationConfig: []gax.CallOption{ + gax.WithTimeout(60000 * time.Millisecond), + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.DeadlineExceeded, + codes.Unavailable, + }, gax.Backoff{ + Initial: 1000 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 2.00, + }) + }), + }, + GetNotificationConfig: []gax.CallOption{ + gax.WithTimeout(60000 * time.Millisecond), + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.DeadlineExceeded, + codes.Unavailable, + }, gax.Backoff{ + Initial: 1000 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 2.00, + }) + }), + }, + CreateNotificationConfig: []gax.CallOption{ + gax.WithTimeout(60000 * time.Millisecond), + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.DeadlineExceeded, + codes.Unavailable, + }, gax.Backoff{ + Initial: 1000 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 2.00, + }) + }), + }, + ListNotificationConfigs: []gax.CallOption{ + gax.WithTimeout(60000 * time.Millisecond), + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.DeadlineExceeded, + codes.Unavailable, + }, gax.Backoff{ + Initial: 1000 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 2.00, + }) + }), + }, + ComposeObject: []gax.CallOption{ + gax.WithTimeout(60000 * time.Millisecond), + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.DeadlineExceeded, + codes.Unavailable, + }, gax.Backoff{ + Initial: 1000 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 2.00, + }) + }), + }, + DeleteObject: []gax.CallOption{ + gax.WithTimeout(60000 * time.Millisecond), + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.DeadlineExceeded, + codes.Unavailable, + }, gax.Backoff{ + Initial: 1000 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 2.00, + }) + }), + }, + CancelResumableWrite: []gax.CallOption{ + gax.WithTimeout(60000 * time.Millisecond), + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.DeadlineExceeded, + codes.Unavailable, + }, gax.Backoff{ + Initial: 1000 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 2.00, + }) + }), + }, + GetObject: []gax.CallOption{ + gax.WithTimeout(60000 * time.Millisecond), + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.DeadlineExceeded, + codes.Unavailable, + }, gax.Backoff{ + Initial: 1000 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 2.00, + }) + }), + }, + ReadObject: []gax.CallOption{ + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.DeadlineExceeded, + codes.Unavailable, + }, gax.Backoff{ + Initial: 1000 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 2.00, + }) + }), + }, + UpdateObject: []gax.CallOption{ + gax.WithTimeout(60000 * time.Millisecond), + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.DeadlineExceeded, + codes.Unavailable, + }, gax.Backoff{ + Initial: 1000 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 2.00, + }) + }), + }, + WriteObject: []gax.CallOption{ + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.DeadlineExceeded, + codes.Unavailable, + }, gax.Backoff{ + Initial: 1000 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 2.00, + }) + }), + }, + ListObjects: []gax.CallOption{ + gax.WithTimeout(60000 * time.Millisecond), + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.DeadlineExceeded, + codes.Unavailable, + }, gax.Backoff{ + Initial: 1000 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 2.00, + }) + }), + }, + RewriteObject: []gax.CallOption{ + gax.WithTimeout(60000 * time.Millisecond), + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.DeadlineExceeded, + codes.Unavailable, + }, gax.Backoff{ + Initial: 1000 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 2.00, + }) + }), + }, + StartResumableWrite: []gax.CallOption{ + gax.WithTimeout(60000 * time.Millisecond), + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.DeadlineExceeded, + codes.Unavailable, + }, gax.Backoff{ + Initial: 1000 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 2.00, + }) + }), + }, + QueryWriteStatus: []gax.CallOption{ + gax.WithTimeout(60000 * time.Millisecond), + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.DeadlineExceeded, + codes.Unavailable, + }, gax.Backoff{ + Initial: 1000 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 2.00, + }) + }), + }, + GetServiceAccount: []gax.CallOption{ + gax.WithTimeout(60000 * time.Millisecond), + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.DeadlineExceeded, + codes.Unavailable, + }, gax.Backoff{ + Initial: 1000 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 2.00, + }) + }), + }, + CreateHmacKey: []gax.CallOption{ + gax.WithTimeout(60000 * time.Millisecond), + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.DeadlineExceeded, + codes.Unavailable, + }, gax.Backoff{ + Initial: 1000 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 2.00, + }) + }), + }, + DeleteHmacKey: []gax.CallOption{ + gax.WithTimeout(60000 * time.Millisecond), + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.DeadlineExceeded, + codes.Unavailable, + }, gax.Backoff{ + Initial: 1000 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 2.00, + }) + }), + }, + GetHmacKey: []gax.CallOption{ + gax.WithTimeout(60000 * time.Millisecond), + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.DeadlineExceeded, + codes.Unavailable, + }, gax.Backoff{ + Initial: 1000 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 2.00, + }) + }), + }, + ListHmacKeys: []gax.CallOption{ + gax.WithTimeout(60000 * time.Millisecond), + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.DeadlineExceeded, + codes.Unavailable, + }, gax.Backoff{ + Initial: 1000 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 2.00, + }) + }), + }, + UpdateHmacKey: []gax.CallOption{ + gax.WithTimeout(60000 * time.Millisecond), + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.DeadlineExceeded, + codes.Unavailable, + }, gax.Backoff{ + Initial: 1000 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 2.00, + }) + }), + }, } } @@ -133,10 +493,10 @@ type internalClient interface { SetIamPolicy(context.Context, *iampb.SetIamPolicyRequest, ...gax.CallOption) (*iampb.Policy, error) TestIamPermissions(context.Context, *iampb.TestIamPermissionsRequest, ...gax.CallOption) (*iampb.TestIamPermissionsResponse, error) UpdateBucket(context.Context, *storagepb.UpdateBucketRequest, ...gax.CallOption) (*storagepb.Bucket, error) - DeleteNotification(context.Context, *storagepb.DeleteNotificationRequest, ...gax.CallOption) error - GetNotification(context.Context, *storagepb.GetNotificationRequest, ...gax.CallOption) (*storagepb.Notification, error) - CreateNotification(context.Context, *storagepb.CreateNotificationRequest, ...gax.CallOption) (*storagepb.Notification, error) - ListNotifications(context.Context, *storagepb.ListNotificationsRequest, ...gax.CallOption) *NotificationIterator + DeleteNotificationConfig(context.Context, *storagepb.DeleteNotificationConfigRequest, ...gax.CallOption) error + GetNotificationConfig(context.Context, *storagepb.GetNotificationConfigRequest, ...gax.CallOption) (*storagepb.NotificationConfig, error) + CreateNotificationConfig(context.Context, *storagepb.CreateNotificationConfigRequest, ...gax.CallOption) (*storagepb.NotificationConfig, error) + ListNotificationConfigs(context.Context, *storagepb.ListNotificationConfigsRequest, ...gax.CallOption) *NotificationConfigIterator ComposeObject(context.Context, *storagepb.ComposeObjectRequest, ...gax.CallOption) (*storagepb.Object, error) DeleteObject(context.Context, *storagepb.DeleteObjectRequest, ...gax.CallOption) error CancelResumableWrite(context.Context, *storagepb.CancelResumableWriteRequest, ...gax.CallOption) (*storagepb.CancelResumableWriteResponse, error) @@ -267,27 +627,27 @@ func (c *Client) UpdateBucket(ctx context.Context, req *storagepb.UpdateBucketRe return c.internalClient.UpdateBucket(ctx, req, opts...) } -// DeleteNotification permanently deletes a notification subscription. -func (c *Client) DeleteNotification(ctx context.Context, req *storagepb.DeleteNotificationRequest, opts ...gax.CallOption) error { - return c.internalClient.DeleteNotification(ctx, req, opts...) +// DeleteNotificationConfig permanently deletes a NotificationConfig. +func (c *Client) DeleteNotificationConfig(ctx context.Context, req *storagepb.DeleteNotificationConfigRequest, opts ...gax.CallOption) error { + return c.internalClient.DeleteNotificationConfig(ctx, req, opts...) } -// GetNotification view a notification config. -func (c *Client) GetNotification(ctx context.Context, req *storagepb.GetNotificationRequest, opts ...gax.CallOption) (*storagepb.Notification, error) { - return c.internalClient.GetNotification(ctx, req, opts...) +// GetNotificationConfig view a NotificationConfig. +func (c *Client) GetNotificationConfig(ctx context.Context, req *storagepb.GetNotificationConfigRequest, opts ...gax.CallOption) (*storagepb.NotificationConfig, error) { + return c.internalClient.GetNotificationConfig(ctx, req, opts...) } -// CreateNotification creates a notification subscription for a given bucket. -// These notifications, when triggered, publish messages to the specified -// Pub/Sub topics. -// See https://cloud.google.com/storage/docs/pubsub-notifications (at https://cloud.google.com/storage/docs/pubsub-notifications). -func (c *Client) CreateNotification(ctx context.Context, req *storagepb.CreateNotificationRequest, opts ...gax.CallOption) (*storagepb.Notification, error) { - return c.internalClient.CreateNotification(ctx, req, opts...) +// CreateNotificationConfig creates a NotificationConfig for a given bucket. +// These NotificationConfigs, when triggered, publish messages to the +// specified Pub/Sub topics. See +// https://cloud.google.com/storage/docs/pubsub-notifications (at https://cloud.google.com/storage/docs/pubsub-notifications). +func (c *Client) CreateNotificationConfig(ctx context.Context, req *storagepb.CreateNotificationConfigRequest, opts ...gax.CallOption) (*storagepb.NotificationConfig, error) { + return c.internalClient.CreateNotificationConfig(ctx, req, opts...) } -// ListNotifications retrieves a list of notification subscriptions for a given bucket. -func (c *Client) ListNotifications(ctx context.Context, req *storagepb.ListNotificationsRequest, opts ...gax.CallOption) *NotificationIterator { - return c.internalClient.ListNotifications(ctx, req, opts...) +// ListNotificationConfigs retrieves a list of NotificationConfigs for a given bucket. +func (c *Client) ListNotificationConfigs(ctx context.Context, req *storagepb.ListNotificationConfigsRequest, opts ...gax.CallOption) *NotificationConfigIterator { + return c.internalClient.ListNotificationConfigs(ctx, req, opts...) } // ComposeObject concatenates a list of existing objects into a new object in the same @@ -296,13 +656,24 @@ func (c *Client) ComposeObject(ctx context.Context, req *storagepb.ComposeObject return c.internalClient.ComposeObject(ctx, req, opts...) } -// DeleteObject deletes an object and its metadata. Deletions are permanent if versioning -// is not enabled for the bucket, or if the generation parameter is used. +// DeleteObject deletes an object and its metadata. +// +// Deletions are normally permanent when versioning is disabled or whenever +// the generation parameter is used. However, if soft delete is enabled for +// the bucket, deleted objects can be restored using RestoreObject until the +// soft delete retention period has passed. func (c *Client) DeleteObject(ctx context.Context, req *storagepb.DeleteObjectRequest, opts ...gax.CallOption) error { return c.internalClient.DeleteObject(ctx, req, opts...) } // CancelResumableWrite cancels an in-progress resumable upload. +// +// Any attempts to write to the resumable upload after cancelling the upload +// will fail. +// +// The behavior for currently in progress write operations is not guaranteed - +// they could either complete before the cancellation or fail if the +// cancellation completes first. func (c *Client) CancelResumableWrite(ctx context.Context, req *storagepb.CancelResumableWriteRequest, opts ...gax.CallOption) (*storagepb.CancelResumableWriteResponse, error) { return c.internalClient.CancelResumableWrite(ctx, req, opts...) } @@ -365,8 +736,12 @@ func (c *Client) UpdateObject(ctx context.Context, req *storagepb.UpdateObjectRe // returned persisted_size; in this case, the service will skip data at // offsets that were already persisted (without checking that it matches // the previously written data), and write only the data starting from the -// persisted offset. This behavior can make client-side handling simpler -// in some cases. +// persisted offset. Even though the data isn’t written, it may still +// incur a performance cost over resuming at the correct write offset. +// This behavior can make client-side handling simpler in some cases. +// +// Clients must only send data that is a multiple of 256 KiB per message, +// unless the object is being finished with finish_write set to true. // // The service will not view the object as complete until the client has // sent a WriteObjectRequest with finish_write set to true. Sending any @@ -454,9 +829,6 @@ type gRPCClient struct { // Connection pool of gRPC connections to the service. connPool gtransport.ConnPool - // flag to opt out of default deadlines via GOOGLE_API_GO_EXPERIMENTAL_DISABLE_DEFAULT_DEADLINE - disableDeadlines bool - // Points back to the CallOptions field of the containing Client CallOptions **CallOptions @@ -502,11 +874,6 @@ func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error clientOpts = append(clientOpts, hookOpts...) } - disableDeadlines, err := checkDisableDeadlines() - if err != nil { - return nil, err - } - connPool, err := gtransport.DialPool(ctx, append(clientOpts, opts...)...) if err != nil { return nil, err @@ -514,10 +881,9 @@ func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error client := Client{CallOptions: defaultCallOptions()} c := &gRPCClient{ - connPool: connPool, - disableDeadlines: disableDeadlines, - client: storagepb.NewStorageClient(connPool), - CallOptions: &client.CallOptions, + connPool: connPool, + client: storagepb.NewStorageClient(connPool), + CallOptions: &client.CallOptions, } c.setGoogleClientInfo() @@ -538,7 +904,7 @@ func (c *gRPCClient) Connection() *grpc.ClientConn { // the `x-goog-api-client` header passed on each request. Intended for // use by Google-written clients. func (c *gRPCClient) setGoogleClientInfo(keyval ...string) { - kv := append([]string{"gl-go", versionGo()}, keyval...) + kv := append([]string{"gl-go", gax.GoVersion}, keyval...) kv = append(kv, "gapic", getVersionClient(), "gax", gax.Version, "grpc", grpc.Version) c.xGoogMetadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...)) } @@ -603,6 +969,9 @@ func (c *gRPCClient) CreateBucket(ctx context.Context, req *storagepb.CreateBuck if reg := regexp.MustCompile("(?P.*)"); reg.MatchString(req.GetParent()) && len(url.QueryEscape(reg.FindStringSubmatch(req.GetParent())[1])) > 0 { routingHeadersMap["project"] = url.QueryEscape(reg.FindStringSubmatch(req.GetParent())[1]) } + if reg := regexp.MustCompile("(?P.*)"); reg.MatchString(req.GetBucket().GetProject()) && len(url.QueryEscape(reg.FindStringSubmatch(req.GetBucket().GetProject())[1])) > 0 { + routingHeadersMap["project"] = url.QueryEscape(reg.FindStringSubmatch(req.GetBucket().GetProject())[1]) + } for headerName, headerValue := range routingHeadersMap { routingHeaders = fmt.Sprintf("%s%s=%s&", routingHeaders, headerName, headerValue) } @@ -816,7 +1185,7 @@ func (c *gRPCClient) UpdateBucket(ctx context.Context, req *storagepb.UpdateBuck return resp, nil } -func (c *gRPCClient) DeleteNotification(ctx context.Context, req *storagepb.DeleteNotificationRequest, opts ...gax.CallOption) error { +func (c *gRPCClient) DeleteNotificationConfig(ctx context.Context, req *storagepb.DeleteNotificationConfigRequest, opts ...gax.CallOption) error { routingHeaders := "" routingHeadersMap := make(map[string]string) if reg := regexp.MustCompile("(?Pprojects/[^/]+/buckets/[^/]+)(?:/.*)?"); reg.MatchString(req.GetName()) && len(url.QueryEscape(reg.FindStringSubmatch(req.GetName())[1])) > 0 { @@ -829,16 +1198,16 @@ func (c *gRPCClient) DeleteNotification(ctx context.Context, req *storagepb.Dele md := metadata.Pairs("x-goog-request-params", routingHeaders) ctx = insertMetadata(ctx, c.xGoogMetadata, md) - opts = append((*c.CallOptions).DeleteNotification[0:len((*c.CallOptions).DeleteNotification):len((*c.CallOptions).DeleteNotification)], opts...) + opts = append((*c.CallOptions).DeleteNotificationConfig[0:len((*c.CallOptions).DeleteNotificationConfig):len((*c.CallOptions).DeleteNotificationConfig)], opts...) err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { var err error - _, err = c.client.DeleteNotification(ctx, req, settings.GRPC...) + _, err = c.client.DeleteNotificationConfig(ctx, req, settings.GRPC...) return err }, opts...) return err } -func (c *gRPCClient) GetNotification(ctx context.Context, req *storagepb.GetNotificationRequest, opts ...gax.CallOption) (*storagepb.Notification, error) { +func (c *gRPCClient) GetNotificationConfig(ctx context.Context, req *storagepb.GetNotificationConfigRequest, opts ...gax.CallOption) (*storagepb.NotificationConfig, error) { routingHeaders := "" routingHeadersMap := make(map[string]string) if reg := regexp.MustCompile("(?Pprojects/[^/]+/buckets/[^/]+)(?:/.*)?"); reg.MatchString(req.GetName()) && len(url.QueryEscape(reg.FindStringSubmatch(req.GetName())[1])) > 0 { @@ -851,11 +1220,11 @@ func (c *gRPCClient) GetNotification(ctx context.Context, req *storagepb.GetNoti md := metadata.Pairs("x-goog-request-params", routingHeaders) ctx = insertMetadata(ctx, c.xGoogMetadata, md) - opts = append((*c.CallOptions).GetNotification[0:len((*c.CallOptions).GetNotification):len((*c.CallOptions).GetNotification)], opts...) - var resp *storagepb.Notification + opts = append((*c.CallOptions).GetNotificationConfig[0:len((*c.CallOptions).GetNotificationConfig):len((*c.CallOptions).GetNotificationConfig)], opts...) + var resp *storagepb.NotificationConfig err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { var err error - resp, err = c.client.GetNotification(ctx, req, settings.GRPC...) + resp, err = c.client.GetNotificationConfig(ctx, req, settings.GRPC...) return err }, opts...) if err != nil { @@ -864,7 +1233,7 @@ func (c *gRPCClient) GetNotification(ctx context.Context, req *storagepb.GetNoti return resp, nil } -func (c *gRPCClient) CreateNotification(ctx context.Context, req *storagepb.CreateNotificationRequest, opts ...gax.CallOption) (*storagepb.Notification, error) { +func (c *gRPCClient) CreateNotificationConfig(ctx context.Context, req *storagepb.CreateNotificationConfigRequest, opts ...gax.CallOption) (*storagepb.NotificationConfig, error) { routingHeaders := "" routingHeadersMap := make(map[string]string) if reg := regexp.MustCompile("(?P.*)"); reg.MatchString(req.GetParent()) && len(url.QueryEscape(reg.FindStringSubmatch(req.GetParent())[1])) > 0 { @@ -877,11 +1246,11 @@ func (c *gRPCClient) CreateNotification(ctx context.Context, req *storagepb.Crea md := metadata.Pairs("x-goog-request-params", routingHeaders) ctx = insertMetadata(ctx, c.xGoogMetadata, md) - opts = append((*c.CallOptions).CreateNotification[0:len((*c.CallOptions).CreateNotification):len((*c.CallOptions).CreateNotification)], opts...) - var resp *storagepb.Notification + opts = append((*c.CallOptions).CreateNotificationConfig[0:len((*c.CallOptions).CreateNotificationConfig):len((*c.CallOptions).CreateNotificationConfig)], opts...) + var resp *storagepb.NotificationConfig err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { var err error - resp, err = c.client.CreateNotification(ctx, req, settings.GRPC...) + resp, err = c.client.CreateNotificationConfig(ctx, req, settings.GRPC...) return err }, opts...) if err != nil { @@ -890,7 +1259,7 @@ func (c *gRPCClient) CreateNotification(ctx context.Context, req *storagepb.Crea return resp, nil } -func (c *gRPCClient) ListNotifications(ctx context.Context, req *storagepb.ListNotificationsRequest, opts ...gax.CallOption) *NotificationIterator { +func (c *gRPCClient) ListNotificationConfigs(ctx context.Context, req *storagepb.ListNotificationConfigsRequest, opts ...gax.CallOption) *NotificationConfigIterator { routingHeaders := "" routingHeadersMap := make(map[string]string) if reg := regexp.MustCompile("(?P.*)"); reg.MatchString(req.GetParent()) && len(url.QueryEscape(reg.FindStringSubmatch(req.GetParent())[1])) > 0 { @@ -903,11 +1272,11 @@ func (c *gRPCClient) ListNotifications(ctx context.Context, req *storagepb.ListN md := metadata.Pairs("x-goog-request-params", routingHeaders) ctx = insertMetadata(ctx, c.xGoogMetadata, md) - opts = append((*c.CallOptions).ListNotifications[0:len((*c.CallOptions).ListNotifications):len((*c.CallOptions).ListNotifications)], opts...) - it := &NotificationIterator{} - req = proto.Clone(req).(*storagepb.ListNotificationsRequest) - it.InternalFetch = func(pageSize int, pageToken string) ([]*storagepb.Notification, string, error) { - resp := &storagepb.ListNotificationsResponse{} + opts = append((*c.CallOptions).ListNotificationConfigs[0:len((*c.CallOptions).ListNotificationConfigs):len((*c.CallOptions).ListNotificationConfigs)], opts...) + it := &NotificationConfigIterator{} + req = proto.Clone(req).(*storagepb.ListNotificationConfigsRequest) + it.InternalFetch = func(pageSize int, pageToken string) ([]*storagepb.NotificationConfig, string, error) { + resp := &storagepb.ListNotificationConfigsResponse{} if pageToken != "" { req.PageToken = pageToken } @@ -918,7 +1287,7 @@ func (c *gRPCClient) ListNotifications(ctx context.Context, req *storagepb.ListN } err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { var err error - resp, err = c.client.ListNotifications(ctx, req, settings.GRPC...) + resp, err = c.client.ListNotificationConfigs(ctx, req, settings.GRPC...) return err }, opts...) if err != nil { @@ -926,7 +1295,7 @@ func (c *gRPCClient) ListNotifications(ctx context.Context, req *storagepb.ListN } it.Response = resp - return resp.GetNotifications(), resp.GetNextPageToken(), nil + return resp.GetNotificationConfigs(), resp.GetNextPageToken(), nil } fetch := func(pageSize int, pageToken string) (string, error) { items, nextPageToken, err := it.InternalFetch(pageSize, pageToken) @@ -1520,9 +1889,9 @@ func (it *HmacKeyMetadataIterator) takeBuf() interface{} { return b } -// NotificationIterator manages a stream of *storagepb.Notification. -type NotificationIterator struct { - items []*storagepb.Notification +// NotificationConfigIterator manages a stream of *storagepb.NotificationConfig. +type NotificationConfigIterator struct { + items []*storagepb.NotificationConfig pageInfo *iterator.PageInfo nextFunc func() error @@ -1537,18 +1906,18 @@ type NotificationIterator struct { // InternalFetch returns results from a single call to the underlying RPC. // The number of results is no greater than pageSize. // If there are no more results, nextPageToken is empty and err is nil. - InternalFetch func(pageSize int, pageToken string) (results []*storagepb.Notification, nextPageToken string, err error) + InternalFetch func(pageSize int, pageToken string) (results []*storagepb.NotificationConfig, nextPageToken string, err error) } // PageInfo supports pagination. See the google.golang.org/api/iterator package for details. -func (it *NotificationIterator) PageInfo() *iterator.PageInfo { +func (it *NotificationConfigIterator) PageInfo() *iterator.PageInfo { return it.pageInfo } // Next returns the next result. Its second return value is iterator.Done if there are no more // results. Once Next returns Done, all subsequent calls will return Done. -func (it *NotificationIterator) Next() (*storagepb.Notification, error) { - var item *storagepb.Notification +func (it *NotificationConfigIterator) Next() (*storagepb.NotificationConfig, error) { + var item *storagepb.NotificationConfig if err := it.nextFunc(); err != nil { return item, err } @@ -1557,11 +1926,11 @@ func (it *NotificationIterator) Next() (*storagepb.Notification, error) { return item, nil } -func (it *NotificationIterator) bufLen() int { +func (it *NotificationConfigIterator) bufLen() int { return len(it.items) } -func (it *NotificationIterator) takeBuf() interface{} { +func (it *NotificationConfigIterator) takeBuf() interface{} { b := it.items it.items = nil return b diff --git a/vendor/cloud.google.com/go/storage/internal/apiv2/stubs/storage.pb.go b/vendor/cloud.google.com/go/storage/internal/apiv2/storagepb/storage.pb.go similarity index 71% rename from vendor/cloud.google.com/go/storage/internal/apiv2/stubs/storage.pb.go rename to vendor/cloud.google.com/go/storage/internal/apiv2/storagepb/storage.pb.go index f81e216c57..b52501b312 100644 --- a/vendor/cloud.google.com/go/storage/internal/apiv2/stubs/storage.pb.go +++ b/vendor/cloud.google.com/go/storage/internal/apiv2/storagepb/storage.pb.go @@ -1,4 +1,4 @@ -// Copyright 2022 Google LLC +// Copyright 2023 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -14,19 +14,19 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.21.9 +// protoc-gen-go v1.30.0 +// protoc v4.23.2 // source: google/storage/v2/storage.proto -package storage +package storagepb import ( context "context" reflect "reflect" sync "sync" + iampb "cloud.google.com/go/iam/apiv1/iampb" _ "google.golang.org/genproto/googleapis/api/annotations" - v1 "google.golang.org/genproto/googleapis/iam/v1" date "google.golang.org/genproto/googleapis/type/date" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" @@ -337,9 +337,12 @@ type CreateBucketRequest struct { // Required. The project to which this bucket will belong. Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"` // Properties of the new bucket being inserted. - // The project and name of the bucket are specified in the parent and - // bucket_id fields, respectively. Populating those fields in `bucket` will - // result in an error. + // The name of the bucket is specified in the `bucket_id` field. Populating + // `bucket.name` field will be ignored. + // The project of the bucket must be specified in the `bucket.project` field. + // This field must be in `projects/{projectIdentifier}` format, + // {projectIdentifier} can be the project ID or project number. The `parent` + // field must be either empty or `projects/_`. Bucket *Bucket `protobuf:"bytes,2,opt,name=bucket,proto3" json:"bucket,omitempty"` // Required. The ID to use for this bucket, which will become the final // component of the bucket's resource name. For example, the value `foo` might @@ -663,8 +666,6 @@ type UpdateBucketRequest struct { // may accidentally reset the new field's value. // // Not specifying any fields is an error. - // Not specifying a field while setting that field to a non-default value is - // an error. UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,6,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` } @@ -742,18 +743,18 @@ func (x *UpdateBucketRequest) GetUpdateMask() *fieldmaskpb.FieldMask { return nil } -// Request message for DeleteNotification. -type DeleteNotificationRequest struct { +// Request message for DeleteNotificationConfig. +type DeleteNotificationConfigRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Required. The parent bucket of the notification. + // Required. The parent bucket of the NotificationConfig. Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` } -func (x *DeleteNotificationRequest) Reset() { - *x = DeleteNotificationRequest{} +func (x *DeleteNotificationConfigRequest) Reset() { + *x = DeleteNotificationConfigRequest{} if protoimpl.UnsafeEnabled { mi := &file_google_storage_v2_storage_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -761,13 +762,13 @@ func (x *DeleteNotificationRequest) Reset() { } } -func (x *DeleteNotificationRequest) String() string { +func (x *DeleteNotificationConfigRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DeleteNotificationRequest) ProtoMessage() {} +func (*DeleteNotificationConfigRequest) ProtoMessage() {} -func (x *DeleteNotificationRequest) ProtoReflect() protoreflect.Message { +func (x *DeleteNotificationConfigRequest) ProtoReflect() protoreflect.Message { mi := &file_google_storage_v2_storage_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -779,32 +780,32 @@ func (x *DeleteNotificationRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DeleteNotificationRequest.ProtoReflect.Descriptor instead. -func (*DeleteNotificationRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use DeleteNotificationConfigRequest.ProtoReflect.Descriptor instead. +func (*DeleteNotificationConfigRequest) Descriptor() ([]byte, []int) { return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{7} } -func (x *DeleteNotificationRequest) GetName() string { +func (x *DeleteNotificationConfigRequest) GetName() string { if x != nil { return x.Name } return "" } -// Request message for GetNotification. -type GetNotificationRequest struct { +// Request message for GetNotificationConfig. +type GetNotificationConfigRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Required. The parent bucket of the notification. + // Required. The parent bucket of the NotificationConfig. // Format: - // `projects/{project}/buckets/{bucket}/notificationConfigs/{notification}` + // `projects/{project}/buckets/{bucket}/notificationConfigs/{notificationConfig}` Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` } -func (x *GetNotificationRequest) Reset() { - *x = GetNotificationRequest{} +func (x *GetNotificationConfigRequest) Reset() { + *x = GetNotificationConfigRequest{} if protoimpl.UnsafeEnabled { mi := &file_google_storage_v2_storage_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -812,13 +813,13 @@ func (x *GetNotificationRequest) Reset() { } } -func (x *GetNotificationRequest) String() string { +func (x *GetNotificationConfigRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetNotificationRequest) ProtoMessage() {} +func (*GetNotificationConfigRequest) ProtoMessage() {} -func (x *GetNotificationRequest) ProtoReflect() protoreflect.Message { +func (x *GetNotificationConfigRequest) ProtoReflect() protoreflect.Message { mi := &file_google_storage_v2_storage_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -830,32 +831,32 @@ func (x *GetNotificationRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetNotificationRequest.ProtoReflect.Descriptor instead. -func (*GetNotificationRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use GetNotificationConfigRequest.ProtoReflect.Descriptor instead. +func (*GetNotificationConfigRequest) Descriptor() ([]byte, []int) { return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{8} } -func (x *GetNotificationRequest) GetName() string { +func (x *GetNotificationConfigRequest) GetName() string { if x != nil { return x.Name } return "" } -// Request message for CreateNotification. -type CreateNotificationRequest struct { +// Request message for CreateNotificationConfig. +type CreateNotificationConfigRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Required. The bucket to which this notification belongs. + // Required. The bucket to which this NotificationConfig belongs. Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"` - // Required. Properties of the notification to be inserted. - Notification *Notification `protobuf:"bytes,2,opt,name=notification,proto3" json:"notification,omitempty"` + // Required. Properties of the NotificationConfig to be inserted. + NotificationConfig *NotificationConfig `protobuf:"bytes,2,opt,name=notification_config,json=notificationConfig,proto3" json:"notification_config,omitempty"` } -func (x *CreateNotificationRequest) Reset() { - *x = CreateNotificationRequest{} +func (x *CreateNotificationConfigRequest) Reset() { + *x = CreateNotificationConfigRequest{} if protoimpl.UnsafeEnabled { mi := &file_google_storage_v2_storage_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -863,13 +864,13 @@ func (x *CreateNotificationRequest) Reset() { } } -func (x *CreateNotificationRequest) String() string { +func (x *CreateNotificationConfigRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CreateNotificationRequest) ProtoMessage() {} +func (*CreateNotificationConfigRequest) ProtoMessage() {} -func (x *CreateNotificationRequest) ProtoReflect() protoreflect.Message { +func (x *CreateNotificationConfigRequest) ProtoReflect() protoreflect.Message { mi := &file_google_storage_v2_storage_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -881,48 +882,47 @@ func (x *CreateNotificationRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CreateNotificationRequest.ProtoReflect.Descriptor instead. -func (*CreateNotificationRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use CreateNotificationConfigRequest.ProtoReflect.Descriptor instead. +func (*CreateNotificationConfigRequest) Descriptor() ([]byte, []int) { return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{9} } -func (x *CreateNotificationRequest) GetParent() string { +func (x *CreateNotificationConfigRequest) GetParent() string { if x != nil { return x.Parent } return "" } -func (x *CreateNotificationRequest) GetNotification() *Notification { +func (x *CreateNotificationConfigRequest) GetNotificationConfig() *NotificationConfig { if x != nil { - return x.Notification + return x.NotificationConfig } return nil } // Request message for ListNotifications. -type ListNotificationsRequest struct { +type ListNotificationConfigsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Required. Name of a Google Cloud Storage bucket. Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"` - // The maximum number of notifications to return. The service may return fewer - // than this value. - // The default value is 100. Specifying a value above 100 will result in a - // page_size of 100. + // The maximum number of NotificationConfigs to return. The service may + // return fewer than this value. The default value is 100. Specifying a value + // above 100 will result in a page_size of 100. PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - // A page token, received from a previous `ListNotifications` call. + // A page token, received from a previous `ListNotificationConfigs` call. // Provide this to retrieve the subsequent page. // - // When paginating, all other parameters provided to `ListNotifications` must - // match the call that provided the page token. + // When paginating, all other parameters provided to `ListNotificationConfigs` + // must match the call that provided the page token. PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` } -func (x *ListNotificationsRequest) Reset() { - *x = ListNotificationsRequest{} +func (x *ListNotificationConfigsRequest) Reset() { + *x = ListNotificationConfigsRequest{} if protoimpl.UnsafeEnabled { mi := &file_google_storage_v2_storage_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -930,13 +930,13 @@ func (x *ListNotificationsRequest) Reset() { } } -func (x *ListNotificationsRequest) String() string { +func (x *ListNotificationConfigsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListNotificationsRequest) ProtoMessage() {} +func (*ListNotificationConfigsRequest) ProtoMessage() {} -func (x *ListNotificationsRequest) ProtoReflect() protoreflect.Message { +func (x *ListNotificationConfigsRequest) ProtoReflect() protoreflect.Message { mi := &file_google_storage_v2_storage_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -948,47 +948,47 @@ func (x *ListNotificationsRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListNotificationsRequest.ProtoReflect.Descriptor instead. -func (*ListNotificationsRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use ListNotificationConfigsRequest.ProtoReflect.Descriptor instead. +func (*ListNotificationConfigsRequest) Descriptor() ([]byte, []int) { return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{10} } -func (x *ListNotificationsRequest) GetParent() string { +func (x *ListNotificationConfigsRequest) GetParent() string { if x != nil { return x.Parent } return "" } -func (x *ListNotificationsRequest) GetPageSize() int32 { +func (x *ListNotificationConfigsRequest) GetPageSize() int32 { if x != nil { return x.PageSize } return 0 } -func (x *ListNotificationsRequest) GetPageToken() string { +func (x *ListNotificationConfigsRequest) GetPageToken() string { if x != nil { return x.PageToken } return "" } -// The result of a call to Notifications.ListNotifications -type ListNotificationsResponse struct { +// The result of a call to ListNotificationConfigs +type ListNotificationConfigsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The list of items. - Notifications []*Notification `protobuf:"bytes,1,rep,name=notifications,proto3" json:"notifications,omitempty"` + NotificationConfigs []*NotificationConfig `protobuf:"bytes,1,rep,name=notification_configs,json=notificationConfigs,proto3" json:"notification_configs,omitempty"` // A token, which can be sent as `page_token` to retrieve the next page. // If this field is omitted, there are no subsequent pages. NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` } -func (x *ListNotificationsResponse) Reset() { - *x = ListNotificationsResponse{} +func (x *ListNotificationConfigsResponse) Reset() { + *x = ListNotificationConfigsResponse{} if protoimpl.UnsafeEnabled { mi := &file_google_storage_v2_storage_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -996,13 +996,13 @@ func (x *ListNotificationsResponse) Reset() { } } -func (x *ListNotificationsResponse) String() string { +func (x *ListNotificationConfigsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListNotificationsResponse) ProtoMessage() {} +func (*ListNotificationConfigsResponse) ProtoMessage() {} -func (x *ListNotificationsResponse) ProtoReflect() protoreflect.Message { +func (x *ListNotificationConfigsResponse) ProtoReflect() protoreflect.Message { mi := &file_google_storage_v2_storage_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1014,19 +1014,19 @@ func (x *ListNotificationsResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListNotificationsResponse.ProtoReflect.Descriptor instead. -func (*ListNotificationsResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use ListNotificationConfigsResponse.ProtoReflect.Descriptor instead. +func (*ListNotificationConfigsResponse) Descriptor() ([]byte, []int) { return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{11} } -func (x *ListNotificationsResponse) GetNotifications() []*Notification { +func (x *ListNotificationConfigsResponse) GetNotificationConfigs() []*NotificationConfig { if x != nil { - return x.Notifications + return x.NotificationConfigs } return nil } -func (x *ListNotificationsResponse) GetNextPageToken() string { +func (x *ListNotificationConfigsResponse) GetNextPageToken() string { if x != nil { return x.NextPageToken } @@ -1676,9 +1676,9 @@ type ReadObjectResponse struct { // client that the request is still live while it is running an operation to // generate more data. ChecksummedData *ChecksummedData `protobuf:"bytes,1,opt,name=checksummed_data,json=checksummedData,proto3" json:"checksummed_data,omitempty"` - // The checksums of the complete object. The client should compute one of - // these checksums over the downloaded object and compare it against the value - // provided here. + // The checksums of the complete object. If the object is downloaded in full, + // the client should compute one of these checksums over the downloaded object + // and compare it against the value provided here. ObjectChecksums *ObjectChecksums `protobuf:"bytes,2,opt,name=object_checksums,json=objectChecksums,proto3" json:"object_checksums,omitempty"` // If read_offset and or read_limit was specified on the // ReadObjectRequest, ContentRange will be populated on the first @@ -1783,8 +1783,6 @@ type WriteObjectSpec struct { // This situation is considered a client error, and if such an error occurs // you must start the upload over from scratch, this time sending the correct // number of bytes. - // - // The `object_size` value is ignored for one-shot (non-resumable) writes. ObjectSize *int64 `protobuf:"varint,8,opt,name=object_size,json=objectSize,proto3,oneof" json:"object_size,omitempty"` } @@ -1878,7 +1876,6 @@ type WriteObjectRequest struct { // The first message of each stream should set one of the following. // // Types that are assignable to FirstMessage: - // // *WriteObjectRequest_UploadId // *WriteObjectRequest_WriteObjectSpec FirstMessage isWriteObjectRequest_FirstMessage `protobuf_oneof:"first_message"` @@ -1899,11 +1896,10 @@ type WriteObjectRequest struct { // A portion of the data for the object. // // Types that are assignable to Data: - // // *WriteObjectRequest_ChecksummedData Data isWriteObjectRequest_Data `protobuf_oneof:"data"` // Checksums for the complete object. If the checksums computed by the service - // don't match the specifified checksums the call will fail. May only be + // don't match the specified checksums the call will fail. May only be // provided in the first or last request (either with first_message, or // finish_write set). ObjectChecksums *ObjectChecksums `protobuf:"bytes,6,opt,name=object_checksums,json=objectChecksums,proto3" json:"object_checksums,omitempty"` @@ -2054,7 +2050,6 @@ type WriteObjectResponse struct { // The response will set one of the following. // // Types that are assignable to WriteStatus: - // // *WriteObjectResponse_PersistedSize // *WriteObjectResponse_Resource WriteStatus isWriteObjectResponse_WriteStatus `protobuf_oneof:"write_status"` @@ -2354,7 +2349,6 @@ type QueryWriteStatusResponse struct { // The response will set one of the following. // // Types that are assignable to WriteStatus: - // // *QueryWriteStatusResponse_PersistedSize // *QueryWriteStatusResponse_Resource WriteStatus isQueryWriteStatusResponse_WriteStatus `protobuf_oneof:"write_status"` @@ -2987,8 +2981,6 @@ type UpdateObjectRequest struct { // may accidentally reset the new field's value. // // Not specifying any fields is an error. - // Not specifying a field while setting that field to a non-default value is - // an error. UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,7,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` // A set of parameters common to Storage API requests concerning an object. CommonObjectRequestParams *CommonObjectRequestParams `protobuf:"bytes,8,opt,name=common_object_request_params,json=commonObjectRequestParams,proto3" json:"common_object_request_params,omitempty"` @@ -3088,8 +3080,8 @@ type GetServiceAccountRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Required. Project ID, in the format of "projects/". - // can be the project ID or project number. + // Required. Project ID, in the format of "projects/{projectIdentifier}". + // {projectIdentifier} can be the project ID or project number. Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` } @@ -3139,7 +3131,7 @@ type CreateHmacKeyRequest struct { unknownFields protoimpl.UnknownFields // Required. The project that the HMAC-owning service account lives in, in the - // format of "projects/". can be the + // format of "projects/{projectIdentifier}". {projectIdentifier} can be the // project ID or project number. Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` // Required. The service account to create the HMAC for. @@ -3260,8 +3252,8 @@ type DeleteHmacKeyRequest struct { // Required. The identifying key for the HMAC to delete. AccessId string `protobuf:"bytes,1,opt,name=access_id,json=accessId,proto3" json:"access_id,omitempty"` // Required. The project that owns the HMAC key, in the format of - // "projects/". - // can be the project ID or project number. + // "projects/{projectIdentifier}". + // {projectIdentifier} can be the project ID or project number. Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"` } @@ -3320,8 +3312,8 @@ type GetHmacKeyRequest struct { // Required. The identifying key for the HMAC to delete. AccessId string `protobuf:"bytes,1,opt,name=access_id,json=accessId,proto3" json:"access_id,omitempty"` // Required. The project the HMAC key lies in, in the format of - // "projects/". - // can be the project ID or project number. + // "projects/{projectIdentifier}". + // {projectIdentifier} can be the project ID or project number. Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"` } @@ -3378,8 +3370,8 @@ type ListHmacKeysRequest struct { unknownFields protoimpl.UnknownFields // Required. The project to list HMAC keys for, in the format of - // "projects/". - // can be the project ID or project number. + // "projects/{projectIdentifier}". + // {projectIdentifier} can be the project ID or project number. Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` // The maximum number of keys to return. PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` @@ -3699,6 +3691,7 @@ type Bucket struct { unknownFields protoimpl.UnknownFields // Immutable. The name of the bucket. + // Format: `projects/{project}/buckets/{bucket}` Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Output only. The user-chosen part of the bucket name. The `{bucket}` // portion of the `name` field. For globally unique buckets, this is equal to @@ -3709,8 +3702,8 @@ type Bucket struct { // only be performed if the etag matches that of the bucket. Etag string `protobuf:"bytes,29,opt,name=etag,proto3" json:"etag,omitempty"` // Immutable. The project which owns this bucket, in the format of - // "projects/". - // can be the project ID or project number. + // "projects/{projectIdentifier}". + // {projectIdentifier} can be the project ID or project number. Project string `protobuf:"bytes,3,opt,name=project,proto3" json:"project,omitempty"` // Output only. The metadata generation of this bucket. // Attempting to set or update this field will result in a @@ -4255,7 +4248,7 @@ type ObjectChecksums struct { // CRC32C digest of the object data. Computed by the Cloud Storage service for // all written objects. - // If set in an WriteObjectRequest, service will validate that the stored + // If set in a WriteObjectRequest, service will validate that the stored // object matches this checksum. Crc32C *uint32 `protobuf:"fixed32,1,opt,name=crc32c,proto3,oneof" json:"crc32c,omitempty"` // 128 bit MD5 hash of the object data. @@ -4321,14 +4314,14 @@ type HmacKeyMetadata struct { unknownFields protoimpl.UnknownFields // Immutable. Resource name ID of the key in the format - // /. - // can be the project ID or project number. + // {projectIdentifier}/{accessId}. + // {projectIdentifier} can be the project ID or project number. Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Immutable. Globally unique id for keys. AccessId string `protobuf:"bytes,2,opt,name=access_id,json=accessId,proto3" json:"access_id,omitempty"` // Immutable. Identifies the project that owns the service account of the - // specified HMAC key, in the format "projects/". - // can be the project ID or project number. + // specified HMAC key, in the format "projects/{projectIdentifier}". + // {projectIdentifier} can be the project ID or project number. Project string `protobuf:"bytes,3,opt,name=project,proto3" json:"project,omitempty"` // Output only. Email of the service account the key authenticates as. ServiceAccountEmail string `protobuf:"bytes,4,opt,name=service_account_email,json=serviceAccountEmail,proto3" json:"service_account_email,omitempty"` @@ -4432,39 +4425,39 @@ func (x *HmacKeyMetadata) GetEtag() string { } // A directive to publish Pub/Sub notifications upon changes to a bucket. -type Notification struct { +type NotificationConfig struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Required. The resource name of this notification. + // Required. The resource name of this NotificationConfig. // Format: - // `projects/{project}/buckets/{bucket}/notificationConfigs/{notification}` + // `projects/{project}/buckets/{bucket}/notificationConfigs/{notificationConfig}` // The `{project}` portion may be `_` for globally unique buckets. Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Required. The Pub/Sub topic to which this subscription publishes. Formatted // as: // '//pubsub.googleapis.com/projects/{project-identifier}/topics/{my-topic}' Topic string `protobuf:"bytes,2,opt,name=topic,proto3" json:"topic,omitempty"` - // The etag of the Notification. - // If included in the metadata of GetNotificationRequest, the operation will - // only be performed if the etag matches that of the Notification. + // The etag of the NotificationConfig. + // If included in the metadata of GetNotificationConfigRequest, the operation + // will only be performed if the etag matches that of the NotificationConfig. Etag string `protobuf:"bytes,7,opt,name=etag,proto3" json:"etag,omitempty"` - // If present, only send notifications about listed event types. If empty, - // sent notifications for all event types. + // If present, only send notifications about listed event types. If + // empty, sent notifications for all event types. EventTypes []string `protobuf:"bytes,3,rep,name=event_types,json=eventTypes,proto3" json:"event_types,omitempty"` // A list of additional attributes to attach to each Pub/Sub - // message published for this notification subscription. + // message published for this NotificationConfig. CustomAttributes map[string]string `protobuf:"bytes,4,rep,name=custom_attributes,json=customAttributes,proto3" json:"custom_attributes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // If present, only apply this notification config to object names that + // If present, only apply this NotificationConfig to object names that // begin with this prefix. ObjectNamePrefix string `protobuf:"bytes,5,opt,name=object_name_prefix,json=objectNamePrefix,proto3" json:"object_name_prefix,omitempty"` // Required. The desired content of the Payload. PayloadFormat string `protobuf:"bytes,6,opt,name=payload_format,json=payloadFormat,proto3" json:"payload_format,omitempty"` } -func (x *Notification) Reset() { - *x = Notification{} +func (x *NotificationConfig) Reset() { + *x = NotificationConfig{} if protoimpl.UnsafeEnabled { mi := &file_google_storage_v2_storage_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -4472,13 +4465,13 @@ func (x *Notification) Reset() { } } -func (x *Notification) String() string { +func (x *NotificationConfig) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Notification) ProtoMessage() {} +func (*NotificationConfig) ProtoMessage() {} -func (x *Notification) ProtoReflect() protoreflect.Message { +func (x *NotificationConfig) ProtoReflect() protoreflect.Message { mi := &file_google_storage_v2_storage_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -4490,54 +4483,54 @@ func (x *Notification) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Notification.ProtoReflect.Descriptor instead. -func (*Notification) Descriptor() ([]byte, []int) { +// Deprecated: Use NotificationConfig.ProtoReflect.Descriptor instead. +func (*NotificationConfig) Descriptor() ([]byte, []int) { return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{45} } -func (x *Notification) GetName() string { +func (x *NotificationConfig) GetName() string { if x != nil { return x.Name } return "" } -func (x *Notification) GetTopic() string { +func (x *NotificationConfig) GetTopic() string { if x != nil { return x.Topic } return "" } -func (x *Notification) GetEtag() string { +func (x *NotificationConfig) GetEtag() string { if x != nil { return x.Etag } return "" } -func (x *Notification) GetEventTypes() []string { +func (x *NotificationConfig) GetEventTypes() []string { if x != nil { return x.EventTypes } return nil } -func (x *Notification) GetCustomAttributes() map[string]string { +func (x *NotificationConfig) GetCustomAttributes() map[string]string { if x != nil { return x.CustomAttributes } return nil } -func (x *Notification) GetObjectNamePrefix() string { +func (x *NotificationConfig) GetObjectNamePrefix() string { if x != nil { return x.ObjectNamePrefix } return "" } -func (x *Notification) GetPayloadFormat() string { +func (x *NotificationConfig) GetPayloadFormat() string { if x != nil { return x.PayloadFormat } @@ -4660,9 +4653,8 @@ type Object struct { // Content-Language of the object data, matching // [https://tools.ietf.org/html/rfc7231#section-3.1.3.2][RFC 7231 §3.1.3.2]. ContentLanguage string `protobuf:"bytes,11,opt,name=content_language,json=contentLanguage,proto3" json:"content_language,omitempty"` - // Output only. The deletion time of the object. Will be returned if and only - // if this version of the object has been deleted. Attempting to set or update - // this field will result in a + // Output only. If this object is noncurrent, this is the time when the object + // became noncurrent. Attempting to set or update this field will result in a // [FieldViolation][google.rpc.BadRequest.FieldViolation]. DeleteTime *timestamppb.Timestamp `protobuf:"bytes,12,opt,name=delete_time,json=deleteTime,proto3" json:"delete_time,omitempty"` // Content-Type of the object data, matching @@ -5889,11 +5881,6 @@ type Bucket_RetentionPolicy struct { EffectiveTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=effective_time,json=effectiveTime,proto3" json:"effective_time,omitempty"` // Once locked, an object retention policy cannot be modified. IsLocked bool `protobuf:"varint,2,opt,name=is_locked,json=isLocked,proto3" json:"is_locked,omitempty"` - // The duration in seconds that objects need to be retained. Retention - // duration must be greater than zero and less than 100 years. Note that - // enforcement of retention periods less than a day is not guaranteed. Such - // periods should only be used for testing purposes. - RetentionPeriod *int64 `protobuf:"varint,3,opt,name=retention_period,json=retentionPeriod,proto3,oneof" json:"retention_period,omitempty"` // The duration that objects need to be retained. Retention duration must be // greater than zero and less than 100 years. Note that enforcement of // retention periods less than a day is not guaranteed. Such periods should @@ -5948,13 +5935,6 @@ func (x *Bucket_RetentionPolicy) GetIsLocked() bool { return false } -func (x *Bucket_RetentionPolicy) GetRetentionPeriod() int64 { - if x != nil && x.RetentionPeriod != nil { - return *x.RetentionPeriod - } - return 0 -} - func (x *Bucket_RetentionPolicy) GetRetentionDuration() *durationpb.Duration { if x != nil { return x.RetentionDuration @@ -6599,109 +6579,25 @@ var file_google_storage_v2_storage_proto_rawDesc = []byte{ 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, - 0x22, 0xa1, 0x02, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x33, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x2d, - 0x0a, 0x2b, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, - 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x06, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x20, 0x0a, 0x09, 0x62, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, - 0x52, 0x08, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, - 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x41, 0x63, - 0x6c, 0x12, 0x41, 0x0a, 0x1d, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x5f, - 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x61, - 0x63, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1a, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, - 0x69, 0x6e, 0x65, 0x64, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x41, 0x63, 0x6c, 0x22, 0x81, 0x02, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x06, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x33, 0xe0, 0x41, 0x02, - 0xfa, 0x41, 0x2d, 0x0a, 0x2b, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, - 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, - 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x3c, 0x0a, 0x09, - 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 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, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x48, 0x00, 0x52, 0x08, 0x72, - 0x65, 0x61, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, - 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x22, 0x72, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, - 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x33, 0x0a, 0x07, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x07, 0x62, 0x75, 0x63, - 0x6b, 0x65, 0x74, 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, 0x9e, 0x01, 0x0a, - 0x20, 0x4c, 0x6f, 0x63, 0x6b, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x74, 0x65, 0x6e, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f, 0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x22, 0xb6, 0x03, - 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x3b, 0x0a, - 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, - 0x52, 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, 0x1b, 0x69, 0x66, - 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, - 0x01, 0x52, 0x18, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x25, - 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x6c, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, - 0x65, 0x64, 0x41, 0x63, 0x6c, 0x12, 0x41, 0x0a, 0x1d, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, - 0x6e, 0x65, 0x64, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1a, 0x70, 0x72, - 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x63, 0x6c, 0x12, 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 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, - 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0a, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, - 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, - 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, - 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0x5c, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x2b, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x25, 0x0a, 0x23, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x53, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, - 0x02, 0xfa, 0x41, 0x1f, 0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xa4, 0x01, 0x0a, 0x19, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f, 0x12, - 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, - 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x06, - 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x0c, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, - 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x03, 0xe0, - 0x41, 0x02, 0x52, 0x0c, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x22, 0x95, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, + 0x22, 0x93, 0x02, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f, + 0x12, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, + 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x20, 0x0a, 0x09, 0x62, 0x75, + 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, + 0x41, 0x02, 0x52, 0x08, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, + 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, + 0x41, 0x63, 0x6c, 0x12, 0x41, 0x0a, 0x1d, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, + 0x64, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1a, 0x70, 0x72, 0x65, 0x64, + 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x41, 0x63, 0x6c, 0x22, 0xf3, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x42, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f, 0x12, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, @@ -6709,1460 +6605,1562 @@ var file_google_storage_v2_storage_proto_rawDesc = []byte{ 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, - 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x8a, 0x01, 0x0a, 0x19, 0x4c, 0x69, 0x73, - 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, - 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, - 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 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, 0xc3, 0x07, 0x0a, 0x14, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, - 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, - 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x03, - 0xe0, 0x41, 0x02, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x5b, 0x0a, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, - 0x70, 0x6f, 0x73, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x0d, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x3c, 0x0a, - 0x1a, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, - 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x18, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, - 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x41, 0x63, 0x6c, 0x12, 0x33, 0x0a, 0x13, 0x69, - 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, - 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x11, 0x69, 0x66, 0x47, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, - 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x03, 0x48, 0x01, 0x52, 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3f, 0x0a, - 0x07, 0x6b, 0x6d, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x26, - 0xfa, 0x41, 0x23, 0x0a, 0x21, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x6b, 0x6d, 0x73, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x72, 0x79, - 0x70, 0x74, 0x6f, 0x4b, 0x65, 0x79, 0x52, 0x06, 0x6b, 0x6d, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x6d, - 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x52, 0x19, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x4d, 0x0a, - 0x10, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, - 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x52, 0x0f, 0x6f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x1a, 0xa8, 0x02, 0x0a, - 0x0c, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x17, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x7b, 0x0a, 0x14, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x5f, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x13, - 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x1a, 0x62, 0x0a, 0x13, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x50, 0x72, 0x65, - 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x33, 0x0a, 0x13, 0x69, 0x66, - 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, - 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x11, 0x69, 0x66, 0x47, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x42, - 0x16, 0x0a, 0x14, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x69, 0x66, 0x5f, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, - 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0xc0, 0x04, 0x0a, 0x13, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x12, 0x1b, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1e, 0x0a, - 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x0a, - 0x13, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, - 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x11, 0x69, 0x66, - 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, - 0x01, 0x01, 0x12, 0x3a, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x14, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3b, - 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x48, - 0x02, 0x52, 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, 0x1b, 0x69, - 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, - 0x48, 0x03, 0x52, 0x18, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, - 0x6d, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x52, 0x19, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0x16, - 0x0a, 0x14, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, - 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, - 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0x3f, - 0x0a, 0x1b, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x61, 0x62, 0x6c, - 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, - 0x09, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x08, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x22, - 0x1e, 0x0a, 0x1c, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x61, 0x62, - 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0xca, 0x05, 0x0a, 0x11, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x12, 0x1b, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, - 0x1e, 0x0a, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x72, 0x65, 0x61, 0x64, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, - 0x33, 0x0a, 0x13, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x11, - 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x88, 0x01, 0x01, 0x12, 0x3a, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x14, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, - 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x03, 0x48, 0x02, 0x52, 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, - 0x1b, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x03, 0x48, 0x03, 0x52, 0x18, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, - 0x01, 0x12, 0x6d, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x19, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x12, 0x3c, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x0c, 0x20, + 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, + 0x69, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, + 0x12, 0x3c, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 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, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x48, - 0x04, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x88, 0x01, 0x01, 0x42, 0x16, - 0x0a, 0x14, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, - 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, - 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x0c, - 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x22, 0x89, 0x05, 0x0a, - 0x10, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1b, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x1b, - 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, - 0xe0, 0x41, 0x02, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x13, 0x69, - 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, - 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x11, 0x69, 0x66, 0x47, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, - 0x12, 0x3a, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x03, 0x48, 0x01, 0x52, 0x14, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3b, 0x0a, 0x17, - 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x48, 0x02, 0x52, - 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, 0x1b, 0x69, 0x66, 0x5f, - 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, - 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x48, 0x03, - 0x52, 0x18, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x6d, 0x0a, - 0x1c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x52, 0x19, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x3c, 0x0a, 0x09, - 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 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, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x48, 0x04, 0x52, 0x08, 0x72, - 0x65, 0x61, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x88, 0x01, 0x01, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x69, - 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, - 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, + 0x00, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x88, 0x01, 0x01, 0x42, 0x0c, + 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x22, 0x72, 0x0a, 0x13, + 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, + 0x07, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 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, 0x9e, 0x01, 0x0a, 0x20, 0x4c, 0x6f, 0x63, 0x6b, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, + 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f, 0x0a, 0x1d, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, + 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x06, 0x62, 0x75, + 0x63, 0x6b, 0x65, 0x74, 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x15, 0x69, 0x66, 0x4d, 0x65, + 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x22, 0xb6, 0x03, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x06, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, + 0x63, 0x6b, 0x65, 0x74, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x03, 0x48, 0x00, 0x52, 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x42, + 0x0a, 0x1b, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x18, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, + 0x01, 0x01, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, + 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x64, + 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x41, 0x63, 0x6c, 0x12, 0x41, 0x0a, 0x1d, 0x70, 0x72, 0x65, + 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, + 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x1a, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x44, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x63, 0x6c, 0x12, 0x40, 0x0a, 0x0b, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 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, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x42, 0x03, 0xe0, + 0x41, 0x02, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, - 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x22, 0xaf, 0x02, 0x0a, 0x12, 0x52, 0x65, 0x61, - 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x4d, 0x0a, 0x10, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x6d, 0x65, 0x64, 0x5f, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x6d, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0f, 0x63, - 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x6d, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4d, - 0x0a, 0x10, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, - 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x52, 0x0f, 0x6f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x12, 0x44, 0x0a, - 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x61, - 0x6e, 0x67, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, + 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0x68, 0x0a, 0x1f, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x45, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x31, 0xe0, 0x41, 0x02, + 0xfa, 0x41, 0x2b, 0x0a, 0x29, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x65, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x45, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x31, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x2b, 0x0a, 0x29, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xc9, 0x01, 0x0a, 0x1f, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x49, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x31, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x2b, 0x12, 0x29, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x5b, 0x0a, 0x13, 0x6e, 0x6f, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x03, + 0xe0, 0x41, 0x02, 0x52, 0x12, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xa7, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x49, 0x0a, 0x06, 0x70, 0x61, + 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x31, 0xe0, 0x41, 0x02, 0xfa, + 0x41, 0x2b, 0x12, 0x29, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x70, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, + 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, + 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x22, 0xa3, 0x01, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x14, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x13, 0x6e, 0x6f, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 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, 0xc3, 0x07, 0x0a, 0x14, 0x43, 0x6f, 0x6d, 0x70, + 0x6f, 0x73, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x40, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x8c, 0x04, 0x0a, 0x0f, 0x57, - 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x3a, - 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x03, 0xe0, 0x41, 0x02, - 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, - 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x41, 0x63, - 0x6c, 0x12, 0x33, 0x0a, 0x13, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, + 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x5b, 0x0a, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, + 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x52, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, + 0x3c, 0x0a, 0x1a, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, + 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x18, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x50, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x41, 0x63, 0x6c, 0x12, 0x33, 0x0a, + 0x13, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, + 0x61, 0x74, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x11, 0x69, 0x66, + 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, + 0x01, 0x01, 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, + 0x3f, 0x0a, 0x07, 0x6b, 0x6d, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x26, 0xfa, 0x41, 0x23, 0x0a, 0x21, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x6b, 0x6d, 0x73, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, + 0x72, 0x79, 0x70, 0x74, 0x6f, 0x4b, 0x65, 0x79, 0x52, 0x06, 0x6b, 0x6d, 0x73, 0x4b, 0x65, 0x79, + 0x12, 0x6d, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x52, 0x19, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, + 0x4d, 0x0a, 0x10, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, + 0x75, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x52, 0x0f, 0x6f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x1a, 0xa8, + 0x02, 0x0a, 0x0c, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, + 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, + 0x41, 0x02, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x7b, 0x0a, 0x14, 0x6f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x5f, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, + 0x73, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, + 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x13, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x62, 0x0a, 0x13, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x50, + 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x33, 0x0a, 0x13, + 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, + 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x11, 0x69, 0x66, 0x47, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, + 0x01, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x69, 0x66, + 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, + 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0xe2, 0x04, + 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f, 0x0a, 0x1d, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, + 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x06, 0x62, 0x75, + 0x63, 0x6b, 0x65, 0x74, 0x12, 0x1b, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x33, 0x0a, 0x13, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x11, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3a, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, - 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x14, 0x69, 0x66, 0x47, 0x65, 0x6e, + 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x14, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x48, 0x02, 0x52, 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, 0x1b, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x06, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x48, 0x03, 0x52, 0x18, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x88, 0x01, 0x01, 0x12, 0x24, 0x0a, 0x0b, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x73, 0x69, - 0x7a, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x48, 0x04, 0x52, 0x0a, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x88, 0x01, 0x01, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x69, 0x66, - 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, - 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, - 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, - 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x6f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x22, 0xf8, 0x03, 0x0a, 0x12, 0x57, 0x72, - 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1d, 0x0a, 0x09, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x12, - 0x50, 0x0a, 0x11, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, - 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x57, - 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, - 0x52, 0x0f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x70, 0x65, - 0x63, 0x12, 0x26, 0x0a, 0x0c, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0b, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x4f, 0x0a, 0x10, 0x63, 0x68, 0x65, - 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x6d, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, - 0x6d, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x48, 0x01, 0x52, 0x0f, 0x63, 0x68, 0x65, 0x63, 0x6b, - 0x73, 0x75, 0x6d, 0x6d, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4d, 0x0a, 0x10, 0x6f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x52, 0x0f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x69, 0x6e, - 0x69, 0x73, 0x68, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0b, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x6d, 0x0a, 0x1c, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x52, 0x19, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0x0f, 0x0a, 0x0d, 0x66, - 0x69, 0x72, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x06, 0x0a, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x22, 0x87, 0x01, 0x0a, 0x13, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x0e, - 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, - 0x64, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x37, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x0e, - 0x0a, 0x0c, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xd3, - 0x03, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f, 0x12, 0x1d, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, - 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x06, 0x70, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, - 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x12, 0x3c, - 0x0a, 0x1a, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x69, - 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x18, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x69, 0x6c, - 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, - 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, - 0x65, 0x66, 0x69, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x3c, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 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, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x48, - 0x00, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x88, 0x01, 0x01, 0x12, 0x34, - 0x0a, 0x13, 0x6c, 0x65, 0x78, 0x69, 0x63, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x5f, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, - 0x52, 0x12, 0x6c, 0x65, 0x78, 0x69, 0x63, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x12, 0x30, 0x0a, 0x11, 0x6c, 0x65, 0x78, 0x69, 0x63, 0x6f, 0x67, 0x72, - 0x61, 0x70, 0x68, 0x69, 0x63, 0x5f, 0x65, 0x6e, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x03, 0xe0, 0x41, 0x01, 0x52, 0x10, 0x6c, 0x65, 0x78, 0x69, 0x63, 0x6f, 0x67, 0x72, 0x61, 0x70, - 0x68, 0x69, 0x63, 0x45, 0x6e, 0x64, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, - 0x6d, 0x61, 0x73, 0x6b, 0x22, 0xaa, 0x01, 0x0a, 0x17, 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x72, - 0x69, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x20, 0x0a, 0x09, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x08, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, - 0x49, 0x64, 0x12, 0x6d, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x19, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x22, 0x8c, 0x01, 0x0a, 0x18, 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x72, 0x69, 0x74, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, - 0x0a, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, - 0x74, 0x65, 0x64, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x37, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x42, 0x0e, 0x0a, 0x0c, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x22, 0x93, 0x0e, 0x0a, 0x14, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x10, 0x64, 0x65, 0x73, - 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x18, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x06, 0xe0, 0x41, 0x02, 0xe0, 0x41, 0x05, 0x52, 0x0f, 0x64, 0x65, 0x73, - 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x57, 0x0a, 0x12, - 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x18, 0x19, 0x20, 0x01, 0x28, 0x09, 0x42, 0x28, 0xe0, 0x41, 0x02, 0xe0, 0x41, 0x05, - 0xfa, 0x41, 0x1f, 0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x52, 0x11, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x56, 0x0a, 0x13, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x6d, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x1b, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x26, 0xfa, 0x41, 0x23, 0x0a, 0x21, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x6b, 0x6d, - 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x43, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x4b, 0x65, 0x79, 0x52, 0x11, 0x64, 0x65, 0x73, 0x74, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x6d, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x3b, 0x0a, - 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x0b, 0x64, - 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x0d, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x12, 0x28, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, - 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2b, - 0x0a, 0x11, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x72, - 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x12, 0x3c, 0x0a, 0x1a, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x1c, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x50, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x41, 0x63, 0x6c, 0x12, 0x33, - 0x0a, 0x13, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x11, 0x69, - 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x88, 0x01, 0x01, 0x12, 0x3a, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x14, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, - 0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, - 0x48, 0x02, 0x52, 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, 0x1b, - 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x03, 0x48, 0x03, 0x52, 0x18, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, - 0x12, 0x40, 0x0a, 0x1a, 0x69, 0x66, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x03, 0x48, 0x04, 0x52, 0x17, 0x69, 0x66, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, - 0x01, 0x01, 0x12, 0x47, 0x0a, 0x1e, 0x69, 0x66, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, - 0x61, 0x74, 0x63, 0x68, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x48, 0x05, 0x52, 0x1a, 0x69, 0x66, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x48, 0x0a, 0x1e, 0x69, - 0x66, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x0d, 0x20, - 0x01, 0x28, 0x03, 0x48, 0x06, 0x52, 0x1b, 0x69, 0x66, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, - 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x4f, 0x0a, 0x22, 0x69, 0x66, 0x5f, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x0e, 0x20, 0x01, 0x28, - 0x03, 0x48, 0x07, 0x52, 0x1e, 0x69, 0x66, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, - 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3e, 0x0a, 0x1c, 0x6d, 0x61, 0x78, 0x5f, 0x62, 0x79, - 0x74, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x5f, 0x70, 0x65, - 0x72, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x18, 0x6d, 0x61, - 0x78, 0x42, 0x79, 0x74, 0x65, 0x73, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x50, - 0x65, 0x72, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x47, 0x0a, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x1d, 0x63, 0x6f, 0x70, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x45, 0x6e, 0x63, 0x72, - 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, - 0x46, 0x0a, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x65, - 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x62, 0x79, - 0x74, 0x65, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x1c, 0x63, 0x6f, 0x70, 0x79, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, - 0x65, 0x79, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x53, 0x0a, 0x27, 0x63, 0x6f, 0x70, 0x79, 0x5f, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x5f, 0x62, 0x79, 0x74, - 0x65, 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x22, 0x63, 0x6f, 0x70, 0x79, 0x53, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, - 0x79, 0x53, 0x68, 0x61, 0x32, 0x35, 0x36, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x6d, 0x0a, 0x1c, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x13, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x52, 0x19, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x4d, 0x0a, 0x10, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x18, - 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x52, 0x0f, 0x6f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x69, - 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, - 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, - 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, - 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1d, 0x0a, 0x1b, 0x5f, 0x69, - 0x66, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x21, 0x0a, 0x1f, 0x5f, 0x69, 0x66, - 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x21, 0x0a, 0x1f, - 0x5f, 0x69, 0x66, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, - 0x25, 0x0a, 0x23, 0x5f, 0x69, 0x66, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6d, 0x65, - 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, - 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0xd6, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, - 0x74, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x42, 0x79, 0x74, 0x65, 0x73, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x12, 0x1f, - 0x0a, 0x0b, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x64, 0x6f, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x64, - 0x6f, 0x6e, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x35, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, - 0xaf, 0x02, 0x0a, 0x1a, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x61, 0x62, - 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x53, - 0x0a, 0x11, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x73, - 0x70, 0x65, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x57, 0x72, - 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x42, 0x03, 0xe0, - 0x41, 0x02, 0x52, 0x0f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, - 0x70, 0x65, 0x63, 0x12, 0x6d, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6f, 0x62, + 0x88, 0x01, 0x01, 0x12, 0x6d, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x61, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x19, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x12, 0x4d, 0x0a, 0x10, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x68, 0x65, - 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, + 0x6d, 0x73, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, + 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, + 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, + 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, + 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, + 0x63, 0x68, 0x22, 0x3f, 0x0a, 0x1b, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x75, + 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x20, 0x0a, 0x09, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x08, 0x75, 0x70, 0x6c, 0x6f, 0x61, + 0x64, 0x49, 0x64, 0x22, 0x1e, 0x0a, 0x1c, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x73, + 0x75, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0xec, 0x05, 0x0a, 0x11, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, + 0x1f, 0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x1b, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x06, 0x6f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x64, + 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x72, 0x65, 0x61, 0x64, + 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x33, 0x0a, 0x13, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x03, 0x48, 0x00, 0x52, 0x11, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3a, 0x0a, 0x17, 0x69, 0x66, + 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x14, 0x69, + 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, + 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, + 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x48, 0x02, 0x52, 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, + 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, 0x1b, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, + 0x63, 0x68, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x48, 0x03, 0x52, 0x18, 0x69, 0x66, 0x4d, 0x65, + 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x6d, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, + 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x19, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x3c, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, + 0x61, 0x73, 0x6b, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, + 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x48, 0x04, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x61, 0x73, + 0x6b, 0x88, 0x01, 0x01, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, + 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, + 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, + 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, + 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, + 0x61, 0x74, 0x63, 0x68, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x61, + 0x73, 0x6b, 0x22, 0xab, 0x05, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f, 0x0a, + 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, + 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x06, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x1b, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x06, 0x6f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x13, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, + 0x48, 0x00, 0x52, 0x11, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3a, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, + 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x14, 0x69, 0x66, 0x47, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x88, 0x01, 0x01, 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x03, 0x48, 0x02, 0x52, 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, + 0x01, 0x12, 0x42, 0x0a, 0x1b, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x48, 0x03, 0x52, 0x18, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x6d, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, + 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, + 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x19, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x12, 0x3c, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x61, 0x73, + 0x6b, 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, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, + 0x61, 0x73, 0x6b, 0x48, 0x04, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x88, + 0x01, 0x01, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, + 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, + 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, + 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, + 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, + 0x63, 0x68, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, + 0x22, 0xaf, 0x02, 0x0a, 0x12, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x10, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x73, 0x75, 0x6d, 0x6d, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x6d, 0x65, + 0x64, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x6d, + 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4d, 0x0a, 0x10, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x73, 0x75, 0x6d, 0x73, 0x52, 0x0f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x12, 0x44, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, + 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0c, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, + 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x22, 0x8c, 0x04, 0x0a, 0x0f, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x3a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, + 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x64, + 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x41, 0x63, 0x6c, 0x12, 0x33, 0x0a, 0x13, 0x69, 0x66, 0x5f, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x11, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3a, + 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x48, + 0x01, 0x52, 0x14, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, + 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66, + 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x48, 0x02, 0x52, 0x15, 0x69, + 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, 0x1b, 0x69, 0x66, 0x5f, 0x6d, 0x65, + 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, + 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x48, 0x03, 0x52, 0x18, + 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x24, 0x0a, 0x0b, 0x6f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, + 0x48, 0x04, 0x52, 0x0a, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x88, 0x01, + 0x01, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, + 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, + 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, + 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, + 0x68, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x73, 0x69, 0x7a, + 0x65, 0x22, 0xf8, 0x03, 0x0a, 0x12, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x09, 0x75, 0x70, 0x6c, 0x6f, + 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x75, + 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x12, 0x50, 0x0a, 0x11, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x0f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0c, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x42, + 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0b, 0x77, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, + 0x74, 0x12, 0x4f, 0x0a, 0x10, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x6d, 0x65, 0x64, + 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x6d, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x48, + 0x01, 0x52, 0x0f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x6d, 0x65, 0x64, 0x44, 0x61, + 0x74, 0x61, 0x12, 0x4d, 0x0a, 0x10, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x68, 0x65, + 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x52, 0x0f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, - 0x73, 0x22, 0x3a, 0x0a, 0x1b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x61, - 0x62, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x22, 0x87, 0x05, - 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x33, 0x0a, - 0x13, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, - 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x11, 0x69, 0x66, - 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, - 0x01, 0x01, 0x12, 0x3a, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x14, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3b, - 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x48, - 0x02, 0x52, 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, 0x1b, 0x69, - 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, - 0x48, 0x03, 0x52, 0x18, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, - 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x63, - 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, - 0x6e, 0x65, 0x64, 0x41, 0x63, 0x6c, 0x12, 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x5f, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x57, + 0x72, 0x69, 0x74, 0x65, 0x12, 0x6d, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x19, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x42, 0x0f, 0x0a, 0x0d, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x87, 0x01, 0x0a, + 0x13, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, + 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x0d, + 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x64, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x37, 0x0a, + 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xd3, 0x03, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, + 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, + 0x41, 0x02, 0xfa, 0x41, 0x1f, 0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, + 0x63, 0x6b, 0x65, 0x74, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, + 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, + 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, + 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x69, + 0x6d, 0x69, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x12, 0x3c, 0x0a, 0x1a, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, + 0x65, 0x5f, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x6c, 0x69, 0x6d, + 0x69, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x69, 0x6e, 0x63, 0x6c, + 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x69, 0x6d, + 0x69, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x1a, 0x0a, 0x08, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3c, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, + 0x5f, 0x6d, 0x61, 0x73, 0x6b, 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, 0x46, 0x69, - 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0a, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x6d, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x19, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x69, 0x66, 0x5f, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, - 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, - 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d, - 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, - 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0x69, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, + 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4d, + 0x61, 0x73, 0x6b, 0x88, 0x01, 0x01, 0x12, 0x34, 0x0a, 0x13, 0x6c, 0x65, 0x78, 0x69, 0x63, 0x6f, + 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x12, 0x6c, 0x65, 0x78, 0x69, 0x63, 0x6f, + 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x30, 0x0a, 0x11, + 0x6c, 0x65, 0x78, 0x69, 0x63, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x5f, 0x65, 0x6e, + 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x10, 0x6c, 0x65, + 0x78, 0x69, 0x63, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x45, 0x6e, 0x64, 0x42, 0x0c, + 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x22, 0xaa, 0x01, 0x0a, + 0x17, 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x72, 0x69, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x09, 0x75, 0x70, 0x6c, 0x6f, + 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, + 0x52, 0x08, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x12, 0x6d, 0x0a, 0x1c, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x19, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x8c, 0x01, 0x0a, 0x18, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x57, 0x72, 0x69, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, + 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, + 0x52, 0x0d, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x64, 0x53, 0x69, 0x7a, 0x65, 0x12, + 0x37, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x48, 0x00, 0x52, 0x08, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xb5, 0x0e, 0x0a, 0x14, 0x52, 0x65, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x31, 0x0a, 0x10, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xe0, 0x41, 0x02, + 0xe0, 0x41, 0x05, 0x52, 0x0f, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x57, 0x0a, 0x12, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x19, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x28, 0xe0, 0x41, 0x02, 0xe0, 0x41, 0x05, 0xfa, 0x41, 0x1f, 0x0a, 0x1d, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x11, 0x64, 0x65, 0x73, 0x74, + 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x56, 0x0a, + 0x13, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x6d, 0x73, + 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x42, 0x26, 0xfa, 0x41, 0x23, 0x0a, + 0x21, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x6b, 0x6d, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x4b, + 0x65, 0x79, 0x52, 0x11, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, + 0x6d, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x3b, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x4a, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, + 0x1f, 0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x28, + 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x3c, 0x0a, 0x1a, 0x64, 0x65, + 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, + 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, + 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x64, 0x65, + 0x66, 0x69, 0x6e, 0x65, 0x64, 0x41, 0x63, 0x6c, 0x12, 0x33, 0x0a, 0x13, 0x69, 0x66, 0x5f, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x11, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3a, 0x0a, + 0x17, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, + 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, + 0x52, 0x14, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, + 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f, + 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, + 0x61, 0x74, 0x63, 0x68, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x48, 0x02, 0x52, 0x15, 0x69, 0x66, + 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, 0x1b, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, + 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x48, 0x03, 0x52, 0x18, 0x69, + 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, + 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x40, 0x0a, 0x1a, 0x69, 0x66, + 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x48, 0x04, + 0x52, 0x17, 0x69, 0x66, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x47, 0x0a, 0x1e, + 0x69, 0x66, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x0c, + 0x20, 0x01, 0x28, 0x03, 0x48, 0x05, 0x52, 0x1a, 0x69, 0x66, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x48, 0x0a, 0x1e, 0x69, 0x66, 0x5f, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x48, 0x06, 0x52, + 0x1b, 0x69, 0x66, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, + 0x4f, 0x0a, 0x22, 0x69, 0x66, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x74, + 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x48, 0x07, 0x52, 0x1e, 0x69, + 0x66, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, + 0x12, 0x3e, 0x0a, 0x1c, 0x6d, 0x61, 0x78, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x72, 0x65, + 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x63, 0x61, 0x6c, 0x6c, + 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x18, 0x6d, 0x61, 0x78, 0x42, 0x79, 0x74, 0x65, 0x73, + 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x50, 0x65, 0x72, 0x43, 0x61, 0x6c, 0x6c, + 0x12, 0x47, 0x0a, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, + 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, + 0x69, 0x74, 0x68, 0x6d, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1d, 0x63, 0x6f, 0x70, 0x79, + 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x46, 0x0a, 0x20, 0x63, 0x6f, 0x70, + 0x79, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x15, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x1c, 0x63, 0x6f, 0x70, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x45, + 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x42, 0x79, 0x74, 0x65, + 0x73, 0x12, 0x53, 0x0a, 0x27, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x5f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x5f, + 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x16, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x22, 0x63, 0x6f, 0x70, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x45, 0x6e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x53, 0x68, 0x61, 0x32, 0x35, + 0x36, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x6d, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, + 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, + 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x19, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x4d, 0x0a, 0x10, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, + 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, + 0x75, 0x6d, 0x73, 0x52, 0x0f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x73, 0x75, 0x6d, 0x73, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, + 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, + 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, + 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, + 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, + 0x61, 0x74, 0x63, 0x68, 0x42, 0x1d, 0x0a, 0x1b, 0x5f, 0x69, 0x66, 0x5f, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, + 0x74, 0x63, 0x68, 0x42, 0x21, 0x0a, 0x1f, 0x5f, 0x69, 0x66, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, + 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x21, 0x0a, 0x1f, 0x5f, 0x69, 0x66, 0x5f, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x25, 0x0a, 0x23, 0x5f, 0x69, 0x66, + 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, + 0x22, 0xd6, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, + 0x74, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x13, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x52, + 0x65, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x6f, 0x6e, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x64, 0x6f, 0x6e, 0x65, 0x12, 0x23, 0x0a, + 0x0d, 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x12, 0x35, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, + 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xaf, 0x02, 0x0a, 0x1a, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x53, 0x0a, 0x11, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0f, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x6d, 0x0a, + 0x1c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x52, 0x19, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x4d, 0x0a, 0x10, + 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x52, 0x0f, 0x6f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x22, 0x3a, 0x0a, 0x1b, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x69, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x70, + 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, + 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x22, 0x87, 0x05, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x36, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, + 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x33, 0x0a, 0x13, 0x69, 0x66, 0x5f, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x11, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3a, 0x0a, 0x17, + 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, + 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, + 0x14, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, + 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, + 0x74, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x48, 0x02, 0x52, 0x15, 0x69, 0x66, 0x4d, + 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, 0x1b, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, + 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x48, 0x03, 0x52, 0x18, 0x69, 0x66, + 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, + 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x65, + 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x41, 0x63, 0x6c, + 0x12, 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 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, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, + 0x6b, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, + 0x73, 0x6b, 0x12, 0x6d, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x19, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, + 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, + 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, + 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, + 0x68, 0x22, 0x69, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, + 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x33, + 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x2d, 0x0a, 0x2b, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x9e, 0x01, 0x0a, + 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x33, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x2d, 0x0a, 0x2b, + 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x6d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x72, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x12, 0x37, 0x0a, 0x15, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x13, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x81, 0x01, + 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x6d, + 0x61, 0x63, 0x4b, 0x65, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x0e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x42, 0x79, 0x74, 0x65, + 0x73, 0x22, 0x87, 0x01, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6d, 0x61, 0x63, + 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x09, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, + 0x41, 0x02, 0x52, 0x08, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x49, 0x64, 0x12, 0x4d, 0x0a, 0x07, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x33, 0xe0, + 0x41, 0x02, 0xfa, 0x41, 0x2d, 0x0a, 0x2b, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x84, 0x01, 0x0a, 0x11, + 0x47, 0x65, 0x74, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x20, 0x0a, 0x09, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x08, 0x61, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x49, 0x64, 0x12, 0x4d, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x33, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x2d, 0x0a, 0x2b, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x22, 0x9e, 0x01, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6d, 0x61, - 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x07, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x33, 0xe0, 0x41, - 0x02, 0xfa, 0x41, 0x2d, 0x0a, 0x2b, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x37, 0x0a, 0x15, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x65, 0x6d, - 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x13, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6d, - 0x61, 0x69, 0x6c, 0x22, 0x81, 0x01, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6d, - 0x61, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, - 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x28, 0x0a, - 0x10, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x62, 0x79, 0x74, 0x65, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x4b, - 0x65, 0x79, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0x87, 0x01, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x20, 0x0a, 0x09, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x08, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x49, 0x64, 0x12, 0x4d, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x33, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x2d, 0x0a, 0x2b, 0x63, 0x6c, 0x6f, - 0x75, 0x64, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x72, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x22, 0x84, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x09, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, - 0x08, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x49, 0x64, 0x12, 0x4d, 0x0a, 0x07, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x33, 0xe0, 0x41, 0x02, 0xfa, + 0x63, 0x74, 0x22, 0x80, 0x02, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6d, 0x61, 0x63, 0x4b, + 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x07, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x33, 0xe0, 0x41, 0x02, + 0xfa, 0x41, 0x2d, 0x0a, 0x2b, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, + 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, + 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x32, 0x0a, 0x15, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x68, 0x6f, + 0x77, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x73, 0x68, 0x6f, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x64, 0x4b, 0x65, 0x79, 0x73, 0x22, 0x7f, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6d, 0x61, + 0x63, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, + 0x09, 0x68, 0x6d, 0x61, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x68, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 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, 0x97, 0x01, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x42, 0x0a, 0x08, 0x68, 0x6d, 0x61, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x07, 0x68, 0x6d, 0x61, 0x63, + 0x4b, 0x65, 0x79, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, + 0x73, 0x6b, 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, 0x46, 0x69, 0x65, 0x6c, 0x64, + 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, + 0x22, 0xbf, 0x01, 0x0a, 0x19, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x31, + 0x0a, 0x14, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x6c, 0x67, + 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x6e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, + 0x6d, 0x12, 0x30, 0x0a, 0x14, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x6b, 0x65, 0x79, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x12, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x42, 0x79, + 0x74, 0x65, 0x73, 0x12, 0x3d, 0x0a, 0x1b, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x5f, 0x62, 0x79, 0x74, + 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x18, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x53, 0x68, 0x61, 0x32, 0x35, 0x36, 0x42, 0x79, 0x74, + 0x65, 0x73, 0x22, 0xca, 0x05, 0x0a, 0x10, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x22, 0xb5, 0x05, 0x0a, 0x06, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x73, 0x12, 0x16, 0x0a, 0x12, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x53, 0x5f, 0x55, 0x4e, 0x53, + 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x14, 0x4d, 0x41, + 0x58, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x43, 0x48, 0x55, 0x4e, 0x4b, 0x5f, 0x42, 0x59, 0x54, + 0x45, 0x53, 0x10, 0x80, 0x80, 0x80, 0x01, 0x12, 0x1c, 0x0a, 0x15, 0x4d, 0x41, 0x58, 0x5f, 0x57, + 0x52, 0x49, 0x54, 0x45, 0x5f, 0x43, 0x48, 0x55, 0x4e, 0x4b, 0x5f, 0x42, 0x59, 0x54, 0x45, 0x53, + 0x10, 0x80, 0x80, 0x80, 0x01, 0x12, 0x19, 0x0a, 0x12, 0x4d, 0x41, 0x58, 0x5f, 0x4f, 0x42, 0x4a, + 0x45, 0x43, 0x54, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x5f, 0x4d, 0x42, 0x10, 0x80, 0x80, 0xc0, 0x02, + 0x12, 0x29, 0x0a, 0x24, 0x4d, 0x41, 0x58, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x4d, + 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x46, 0x49, 0x45, 0x4c, 0x44, 0x5f, 0x4e, 0x41, + 0x4d, 0x45, 0x5f, 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x80, 0x08, 0x12, 0x2a, 0x0a, 0x25, 0x4d, + 0x41, 0x58, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, + 0x54, 0x41, 0x5f, 0x46, 0x49, 0x45, 0x4c, 0x44, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x42, + 0x59, 0x54, 0x45, 0x53, 0x10, 0x80, 0x20, 0x12, 0x29, 0x0a, 0x24, 0x4d, 0x41, 0x58, 0x5f, 0x43, + 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, + 0x4f, 0x54, 0x41, 0x4c, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x5f, 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, + 0x80, 0x40, 0x12, 0x2a, 0x0a, 0x24, 0x4d, 0x41, 0x58, 0x5f, 0x42, 0x55, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x4f, 0x54, 0x41, 0x4c, 0x5f, + 0x53, 0x49, 0x5a, 0x45, 0x5f, 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x80, 0xa0, 0x01, 0x12, 0x27, + 0x0a, 0x23, 0x4d, 0x41, 0x58, 0x5f, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x53, 0x5f, 0x50, 0x45, 0x52, 0x5f, 0x42, + 0x55, 0x43, 0x4b, 0x45, 0x54, 0x10, 0x64, 0x12, 0x22, 0x0a, 0x1e, 0x4d, 0x41, 0x58, 0x5f, 0x4c, + 0x49, 0x46, 0x45, 0x43, 0x59, 0x43, 0x4c, 0x45, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x53, 0x5f, 0x50, + 0x45, 0x52, 0x5f, 0x42, 0x55, 0x43, 0x4b, 0x45, 0x54, 0x10, 0x64, 0x12, 0x26, 0x0a, 0x22, 0x4d, + 0x41, 0x58, 0x5f, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, + 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, + 0x53, 0x10, 0x05, 0x12, 0x31, 0x0a, 0x2c, 0x4d, 0x41, 0x58, 0x5f, 0x4e, 0x4f, 0x54, 0x49, 0x46, + 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x41, + 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x4c, 0x45, 0x4e, + 0x47, 0x54, 0x48, 0x10, 0x80, 0x02, 0x12, 0x33, 0x0a, 0x2e, 0x4d, 0x41, 0x58, 0x5f, 0x4e, 0x4f, + 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, + 0x4d, 0x5f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f, 0x56, 0x41, 0x4c, 0x55, + 0x45, 0x5f, 0x4c, 0x45, 0x4e, 0x47, 0x54, 0x48, 0x10, 0x80, 0x08, 0x12, 0x1c, 0x0a, 0x18, 0x4d, + 0x41, 0x58, 0x5f, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x53, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x49, 0x45, + 0x53, 0x5f, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x10, 0x40, 0x12, 0x1f, 0x0a, 0x1b, 0x4d, 0x41, 0x58, + 0x5f, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x53, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x56, 0x41, 0x4c, 0x55, + 0x45, 0x5f, 0x4c, 0x45, 0x4e, 0x47, 0x54, 0x48, 0x10, 0x3f, 0x12, 0x1f, 0x0a, 0x1a, 0x4d, 0x41, + 0x58, 0x5f, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x53, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x56, 0x41, 0x4c, + 0x55, 0x45, 0x5f, 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x80, 0x01, 0x12, 0x2e, 0x0a, 0x29, 0x4d, + 0x41, 0x58, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x49, 0x44, 0x53, 0x5f, 0x50, 0x45, + 0x52, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x53, + 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0xe8, 0x07, 0x12, 0x1e, 0x0a, 0x1a, 0x53, + 0x50, 0x4c, 0x49, 0x54, 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x5f, 0x4d, 0x41, 0x58, 0x5f, 0x56, + 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x44, 0x41, 0x59, 0x53, 0x10, 0x0e, 0x1a, 0x02, 0x10, 0x01, 0x22, + 0xab, 0x1e, 0x0a, 0x06, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x05, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x09, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x08, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x1d, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x12, 0x4d, 0x0a, 0x07, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x33, 0xe0, 0x41, 0x05, 0xfa, 0x41, 0x2d, 0x0a, 0x2b, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, - 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x80, 0x02, 0x0a, 0x13, 0x4c, 0x69, 0x73, - 0x74, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x4d, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x33, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x2d, 0x0a, 0x2b, 0x63, 0x6c, 0x6f, 0x75, 0x64, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, - 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, - 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x32, 0x0a, 0x15, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x65, - 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, - 0x2a, 0x0a, 0x11, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, - 0x6b, 0x65, 0x79, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x73, 0x68, 0x6f, 0x77, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x22, 0x7f, 0x0a, 0x14, 0x4c, - 0x69, 0x73, 0x74, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x09, 0x68, 0x6d, 0x61, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x6d, 0x61, 0x63, 0x4b, - 0x65, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x68, 0x6d, 0x61, 0x63, - 0x4b, 0x65, 0x79, 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, 0x97, 0x01, 0x0a, - 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x08, 0x68, 0x6d, 0x61, 0x63, 0x5f, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x6d, 0x61, 0x63, - 0x4b, 0x65, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x03, 0xe0, 0x41, 0x02, - 0x52, 0x07, 0x68, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 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, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0xbf, 0x01, 0x0a, 0x19, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x12, 0x31, 0x0a, 0x14, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x13, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6c, - 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x30, 0x0a, 0x14, 0x65, 0x6e, 0x63, 0x72, 0x79, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x12, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x4b, 0x65, 0x79, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x3d, 0x0a, 0x1b, 0x65, 0x6e, 0x63, - 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x32, - 0x35, 0x36, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x18, - 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x53, 0x68, 0x61, - 0x32, 0x35, 0x36, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0xca, 0x05, 0x0a, 0x10, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x22, 0xb5, 0x05, - 0x0a, 0x06, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x12, 0x56, 0x41, 0x4c, 0x55, - 0x45, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x1b, 0x0a, 0x14, 0x4d, 0x41, 0x58, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x43, 0x48, 0x55, - 0x4e, 0x4b, 0x5f, 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x80, 0x80, 0x80, 0x01, 0x12, 0x1c, 0x0a, - 0x15, 0x4d, 0x41, 0x58, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x5f, 0x43, 0x48, 0x55, 0x4e, 0x4b, - 0x5f, 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x80, 0x80, 0x80, 0x01, 0x12, 0x19, 0x0a, 0x12, 0x4d, - 0x41, 0x58, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x5f, 0x4d, - 0x42, 0x10, 0x80, 0x80, 0xc0, 0x02, 0x12, 0x29, 0x0a, 0x24, 0x4d, 0x41, 0x58, 0x5f, 0x43, 0x55, - 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x46, 0x49, - 0x45, 0x4c, 0x44, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x80, - 0x08, 0x12, 0x2a, 0x0a, 0x25, 0x4d, 0x41, 0x58, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, - 0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x46, 0x49, 0x45, 0x4c, 0x44, 0x5f, 0x56, - 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x80, 0x20, 0x12, 0x29, 0x0a, - 0x24, 0x4d, 0x41, 0x58, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x4d, 0x45, 0x54, 0x41, - 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x4f, 0x54, 0x41, 0x4c, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x5f, - 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x80, 0x40, 0x12, 0x2a, 0x0a, 0x24, 0x4d, 0x41, 0x58, 0x5f, - 0x42, 0x55, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, 0x41, 0x5f, - 0x54, 0x4f, 0x54, 0x41, 0x4c, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x5f, 0x42, 0x59, 0x54, 0x45, 0x53, - 0x10, 0x80, 0xa0, 0x01, 0x12, 0x27, 0x0a, 0x23, 0x4d, 0x41, 0x58, 0x5f, 0x4e, 0x4f, 0x54, 0x49, - 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x53, - 0x5f, 0x50, 0x45, 0x52, 0x5f, 0x42, 0x55, 0x43, 0x4b, 0x45, 0x54, 0x10, 0x64, 0x12, 0x22, 0x0a, - 0x1e, 0x4d, 0x41, 0x58, 0x5f, 0x4c, 0x49, 0x46, 0x45, 0x43, 0x59, 0x43, 0x4c, 0x45, 0x5f, 0x52, - 0x55, 0x4c, 0x45, 0x53, 0x5f, 0x50, 0x45, 0x52, 0x5f, 0x42, 0x55, 0x43, 0x4b, 0x45, 0x54, 0x10, - 0x64, 0x12, 0x26, 0x0a, 0x22, 0x4d, 0x41, 0x58, 0x5f, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, - 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x41, 0x54, 0x54, - 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x53, 0x10, 0x05, 0x12, 0x31, 0x0a, 0x2c, 0x4d, 0x41, 0x58, - 0x5f, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x55, - 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f, 0x4b, - 0x45, 0x59, 0x5f, 0x4c, 0x45, 0x4e, 0x47, 0x54, 0x48, 0x10, 0x80, 0x02, 0x12, 0x33, 0x0a, 0x2e, - 0x4d, 0x41, 0x58, 0x5f, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, - 0x45, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x4c, 0x45, 0x4e, 0x47, 0x54, 0x48, 0x10, 0x80, - 0x08, 0x12, 0x1c, 0x0a, 0x18, 0x4d, 0x41, 0x58, 0x5f, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x53, 0x5f, - 0x45, 0x4e, 0x54, 0x52, 0x49, 0x45, 0x53, 0x5f, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x10, 0x40, 0x12, - 0x1f, 0x0a, 0x1b, 0x4d, 0x41, 0x58, 0x5f, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x53, 0x5f, 0x4b, 0x45, - 0x59, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x4c, 0x45, 0x4e, 0x47, 0x54, 0x48, 0x10, 0x3f, - 0x12, 0x1f, 0x0a, 0x1a, 0x4d, 0x41, 0x58, 0x5f, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x53, 0x5f, 0x4b, - 0x45, 0x59, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x80, - 0x01, 0x12, 0x2e, 0x0a, 0x29, 0x4d, 0x41, 0x58, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, - 0x49, 0x44, 0x53, 0x5f, 0x50, 0x45, 0x52, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x5f, 0x4f, - 0x42, 0x4a, 0x45, 0x43, 0x54, 0x53, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0xe8, - 0x07, 0x12, 0x1e, 0x0a, 0x1a, 0x53, 0x50, 0x4c, 0x49, 0x54, 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e, - 0x5f, 0x4d, 0x41, 0x58, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x44, 0x41, 0x59, 0x53, 0x10, - 0x0e, 0x1a, 0x02, 0x10, 0x01, 0x22, 0xf0, 0x1e, 0x0a, 0x06, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, - 0xe0, 0x41, 0x05, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x09, 0x62, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, - 0x03, 0x52, 0x08, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x65, - 0x74, 0x61, 0x67, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x12, - 0x4d, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x33, 0xe0, 0x41, 0x05, 0xfa, 0x41, 0x2d, 0x0a, 0x2b, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2b, - 0x0a, 0x0e, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0e, 0x6d, 0x65, 0x74, - 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x08, 0x6c, - 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, - 0x41, 0x05, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x0d, - 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x72, - 0x70, 0x6f, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x70, 0x6f, 0x12, 0x38, 0x0a, - 0x03, 0x61, 0x63, 0x6c, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x6c, 0x52, 0x03, 0x61, 0x63, 0x6c, 0x12, 0x54, 0x0a, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, - 0x6c, 0x74, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x09, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x10, 0x64, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x63, 0x6c, 0x12, 0x41, 0x0a, - 0x09, 0x6c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x4c, 0x69, 0x66, 0x65, - 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x09, 0x6c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, - 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, - 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x04, 0x63, 0x6f, 0x72, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x43, 0x6f, 0x72, 0x73, - 0x52, 0x04, 0x63, 0x6f, 0x72, 0x73, 0x12, 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x64, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x64, 0x5f, - 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x64, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x61, 0x73, 0x65, 0x64, 0x48, 0x6f, 0x6c, - 0x64, 0x12, 0x3d, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x4c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x12, 0x3b, 0x0a, 0x07, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x57, 0x65, 0x62, - 0x73, 0x69, 0x74, 0x65, 0x52, 0x07, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x12, 0x44, 0x0a, - 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x11, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x52, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x69, 0x6e, 0x67, 0x12, 0x3b, 0x0a, 0x07, 0x6c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x18, 0x12, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, - 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x6c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, - 0x12, 0x33, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x18, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x05, - 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x0a, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x0a, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3b, 0x0a, 0x07, 0x62, - 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, - 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x42, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x52, - 0x07, 0x62, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x54, 0x0a, 0x10, 0x72, 0x65, 0x74, 0x65, - 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x16, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x52, 0x65, - 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0f, 0x72, - 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x42, - 0x0a, 0x0a, 0x69, 0x61, 0x6d, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x17, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x49, 0x61, - 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x09, 0x69, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x61, 0x74, 0x69, 0x73, 0x66, 0x69, 0x65, 0x73, 0x5f, - 0x70, 0x7a, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x73, 0x61, 0x74, 0x69, 0x73, - 0x66, 0x69, 0x65, 0x73, 0x50, 0x7a, 0x73, 0x12, 0x67, 0x0a, 0x17, 0x63, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x5f, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x15, 0x63, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x41, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x6f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x1c, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x41, - 0x75, 0x74, 0x6f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x52, 0x09, 0x61, 0x75, 0x74, 0x6f, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x1a, 0x30, 0x0a, 0x07, 0x42, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x25, - 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x70, 0x61, 0x79, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, - 0x72, 0x50, 0x61, 0x79, 0x73, 0x1a, 0x87, 0x01, 0x0a, 0x04, 0x43, 0x6f, 0x72, 0x73, 0x12, 0x16, - 0x0a, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, - 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x27, - 0x0a, 0x0f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x61, 0x78, 0x5f, 0x61, - 0x67, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x41, 0x67, 0x65, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x1a, - 0x5c, 0x0a, 0x0a, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a, - 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x6b, 0x6d, 0x73, 0x5f, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x26, 0xfa, 0x41, 0x23, 0x0a, 0x21, 0x63, 0x6c, 0x6f, - 0x75, 0x64, 0x6b, 0x6d, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x4b, 0x65, 0x79, 0x52, 0x0d, - 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4b, 0x6d, 0x73, 0x4b, 0x65, 0x79, 0x1a, 0xb1, 0x02, - 0x0a, 0x09, 0x49, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x7b, 0x0a, 0x1b, 0x75, - 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6c, 0x65, - 0x76, 0x65, 0x6c, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x3c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x49, 0x61, 0x6d, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x18, - 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x70, 0x72, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x72, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x69, - 0x6f, 0x6e, 0x1a, 0x6d, 0x0a, 0x18, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, - 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x37, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x6b, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, - 0x65, 0x1a, 0xdb, 0x07, 0x0a, 0x09, 0x4c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x12, - 0x3c, 0x0a, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, + 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2b, 0x0a, 0x0e, 0x6d, 0x65, 0x74, 0x61, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, + 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0e, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x05, 0x52, 0x08, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, + 0x41, 0x03, 0x52, 0x0c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, + 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x70, 0x6f, 0x18, 0x1b, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x72, 0x70, 0x6f, 0x12, 0x38, 0x0a, 0x03, 0x61, 0x63, 0x6c, 0x18, 0x08, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x03, 0x61, 0x63, + 0x6c, 0x12, 0x54, 0x0a, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x6f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, - 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x4c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, - 0x6c, 0x65, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x1a, 0x8f, 0x07, - 0x0a, 0x04, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x47, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x2e, 0x4c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x2e, 0x52, 0x75, 0x6c, 0x65, - 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x50, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x4c, 0x69, - 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x2e, 0x43, 0x6f, 0x6e, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x1a, 0x41, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, - 0x23, 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, - 0x6c, 0x61, 0x73, 0x73, 0x1a, 0xa8, 0x05, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x08, 0x61, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x07, 0x61, 0x67, 0x65, 0x44, 0x61, 0x79, 0x73, 0x88, - 0x01, 0x01, 0x12, 0x38, 0x0a, 0x0e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x65, - 0x66, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x44, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, 0x1c, 0x0a, 0x07, - 0x69, 0x73, 0x5f, 0x6c, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, - 0x06, 0x69, 0x73, 0x4c, 0x69, 0x76, 0x65, 0x88, 0x01, 0x01, 0x12, 0x31, 0x0a, 0x12, 0x6e, 0x75, - 0x6d, 0x5f, 0x6e, 0x65, 0x77, 0x65, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x48, 0x02, 0x52, 0x10, 0x6e, 0x75, 0x6d, 0x4e, 0x65, 0x77, - 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x88, 0x01, 0x01, 0x12, 0x32, 0x0a, - 0x15, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x6d, 0x61, - 0x74, 0x63, 0x68, 0x65, 0x73, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, - 0x73, 0x12, 0x38, 0x0a, 0x16, 0x64, 0x61, 0x79, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, - 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x05, 0x48, 0x03, 0x52, 0x13, 0x64, 0x61, 0x79, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x43, 0x75, - 0x73, 0x74, 0x6f, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x3f, 0x0a, 0x12, 0x63, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x62, 0x65, 0x66, 0x6f, 0x72, - 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x44, 0x61, 0x74, 0x65, 0x52, 0x10, 0x63, 0x75, 0x73, 0x74, - 0x6f, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, 0x40, 0x0a, 0x1a, - 0x64, 0x61, 0x79, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x6f, 0x6e, 0x63, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, - 0x48, 0x04, 0x52, 0x17, 0x64, 0x61, 0x79, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4e, 0x6f, 0x6e, - 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x47, - 0x0a, 0x16, 0x6e, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x5f, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x44, 0x61, 0x74, - 0x65, 0x52, 0x14, 0x6e, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, - 0x65, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x61, 0x74, 0x63, 0x68, - 0x65, 0x73, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x0d, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x25, - 0x0a, 0x0e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x5f, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, - 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x53, - 0x75, 0x66, 0x66, 0x69, 0x78, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x61, 0x67, 0x65, 0x5f, 0x64, 0x61, - 0x79, 0x73, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x69, 0x73, 0x5f, 0x6c, 0x69, 0x76, 0x65, 0x42, 0x15, - 0x0a, 0x13, 0x5f, 0x6e, 0x75, 0x6d, 0x5f, 0x6e, 0x65, 0x77, 0x65, 0x72, 0x5f, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x19, 0x0a, 0x17, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x5f, 0x73, - 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x42, 0x1d, 0x0a, 0x1b, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, - 0x6e, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x1a, - 0x54, 0x0a, 0x07, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x6f, - 0x67, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x6c, 0x6f, 0x67, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x6c, 0x6f, 0x67, - 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x6f, 0x67, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x50, - 0x72, 0x65, 0x66, 0x69, 0x78, 0x1a, 0x80, 0x02, 0x0a, 0x0f, 0x52, 0x65, 0x74, 0x65, 0x6e, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x41, 0x0a, 0x0e, 0x65, 0x66, 0x66, - 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x65, - 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, - 0x69, 0x73, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x08, 0x69, 0x73, 0x4c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x10, 0x72, 0x65, 0x74, - 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x0f, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, - 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x88, 0x01, 0x01, 0x12, 0x48, 0x0a, 0x12, 0x72, 0x65, 0x74, - 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x11, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x1a, 0x26, 0x0a, 0x0a, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x1a, 0x59, 0x0a, 0x07, 0x57, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x6d, - 0x61, 0x69, 0x6e, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6d, 0x61, 0x69, 0x6e, 0x50, 0x61, 0x67, 0x65, 0x53, - 0x75, 0x66, 0x66, 0x69, 0x78, 0x12, 0x24, 0x0a, 0x0e, 0x6e, 0x6f, 0x74, 0x5f, 0x66, 0x6f, 0x75, - 0x6e, 0x64, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6e, - 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x50, 0x61, 0x67, 0x65, 0x1a, 0x3e, 0x0a, 0x15, 0x43, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x61, - 0x74, 0x61, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x67, 0x0a, 0x09, 0x41, - 0x75, 0x74, 0x6f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x12, 0x40, 0x0a, 0x0b, 0x74, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x67, 0x67, 0x6c, 0x65, - 0x54, 0x69, 0x6d, 0x65, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, - 0x47, 0xea, 0x41, 0x44, 0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x12, 0x23, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, - 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x7d, 0x22, 0x97, 0x02, 0x0a, 0x13, 0x42, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, - 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x22, 0x0a, 0x0a, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x61, 0x6c, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x41, 0x6c, 0x74, - 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, - 0x67, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, - 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, - 0x41, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x74, 0x65, 0x61, 0x6d, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x54, 0x65, 0x61, 0x6d, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, - 0x61, 0x6d, 0x22, 0x53, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x6d, 0x65, - 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, - 0x1b, 0x0a, 0x06, 0x63, 0x72, 0x63, 0x33, 0x32, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x07, 0x48, - 0x00, 0x52, 0x06, 0x63, 0x72, 0x63, 0x33, 0x32, 0x63, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, - 0x5f, 0x63, 0x72, 0x63, 0x33, 0x32, 0x63, 0x22, 0x54, 0x0a, 0x0f, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x12, 0x1b, 0x0a, 0x06, 0x63, 0x72, - 0x63, 0x33, 0x32, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x48, 0x00, 0x52, 0x06, 0x63, 0x72, - 0x63, 0x33, 0x32, 0x63, 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x64, 0x35, 0x5f, 0x68, - 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6d, 0x64, 0x35, 0x48, 0x61, - 0x73, 0x68, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x63, 0x72, 0x63, 0x33, 0x32, 0x63, 0x22, 0xfe, 0x02, - 0x0a, 0x0f, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x12, 0x13, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, - 0x41, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x09, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x05, 0x52, 0x08, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x49, 0x64, 0x12, 0x4d, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x33, 0xe0, 0x41, 0x05, 0xfa, 0x41, - 0x2d, 0x0a, 0x2b, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, - 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x37, 0x0a, 0x15, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x13, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6d, 0x61, 0x69, 0x6c, - 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, - 0x61, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x22, 0xec, - 0x03, 0x0a, 0x0c, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, - 0x41, 0x02, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, - 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x05, 0x74, 0x6f, - 0x70, 0x69, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x62, 0x0a, 0x11, 0x63, 0x75, 0x73, 0x74, - 0x6f, 0x6d, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x41, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x63, 0x75, 0x73, 0x74, - 0x6f, 0x6d, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x12, - 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x70, 0x72, 0x65, 0x66, - 0x69, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x4e, 0x61, 0x6d, 0x65, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x2a, 0x0a, 0x0e, 0x70, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0d, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, - 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x1a, 0x43, 0x0a, 0x15, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, - 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x70, 0xea, 0x41, 0x6d, - 0x0a, 0x23, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x46, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, - 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x73, 0x2f, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x7d, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x2f, 0x7b, - 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x22, 0x71, 0x0a, - 0x12, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x14, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x13, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6c, 0x67, - 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x28, 0x0a, 0x10, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x68, - 0x61, 0x32, 0x35, 0x36, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x0e, 0x6b, 0x65, 0x79, 0x53, 0x68, 0x61, 0x32, 0x35, 0x36, 0x42, 0x79, 0x74, 0x65, 0x73, - 0x22, 0xec, 0x0b, 0x0a, 0x06, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x17, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x05, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x05, 0xfa, 0x41, 0x1f, 0x0a, 0x1d, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x06, 0x62, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x1b, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x12, 0x23, 0x0a, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, 0x05, - 0x52, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x0e, - 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0e, 0x6d, 0x65, 0x74, 0x61, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x17, - 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, - 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x5f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, - 0x6e, 0x67, 0x12, 0x2f, 0x0a, 0x13, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x69, - 0x73, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x6f, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x61, 0x63, 0x68, - 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x38, 0x0a, 0x03, 0x61, 0x63, 0x6c, 0x18, - 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x03, 0x61, - 0x63, 0x6c, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x61, - 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, 0x40, 0x0a, - 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, - 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, - 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x42, 0x03, 0xe0, - 0x41, 0x03, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x45, 0x0a, 0x09, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x18, - 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x09, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x12, 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, - 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x07, 0x6b, - 0x6d, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x42, 0x26, 0xfa, 0x41, - 0x23, 0x0a, 0x21, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x6b, 0x6d, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x72, 0x79, 0x70, 0x74, - 0x6f, 0x4b, 0x65, 0x79, 0x52, 0x06, 0x6b, 0x6d, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x5a, 0x0a, 0x19, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, + 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x10, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x41, 0x63, 0x6c, 0x12, 0x41, 0x0a, 0x09, 0x6c, 0x69, 0x66, 0x65, 0x63, + 0x79, 0x63, 0x6c, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x4c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, + 0x09, 0x6c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, - 0x52, 0x16, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, - 0x6c, 0x61, 0x73, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x65, 0x6d, 0x70, - 0x6f, 0x72, 0x61, 0x72, 0x79, 0x5f, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x48, 0x6f, 0x6c, 0x64, 0x12, - 0x4e, 0x0a, 0x15, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x78, 0x70, - 0x69, 0x72, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x15, 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, 0x13, 0x72, 0x65, 0x74, 0x65, - 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, - 0x43, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x16, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x27, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x12, 0x2d, 0x0a, 0x10, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x61, - 0x73, 0x65, 0x64, 0x5f, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, - 0x52, 0x0e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x61, 0x73, 0x65, 0x64, 0x48, 0x6f, 0x6c, 0x64, - 0x88, 0x01, 0x01, 0x12, 0x33, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x18, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x42, 0x03, 0xe0, 0x41, - 0x03, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x56, 0x0a, 0x13, 0x63, 0x75, 0x73, 0x74, - 0x6f, 0x6d, 0x65, 0x72, 0x5f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, - 0x65, 0x72, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x12, 0x63, 0x75, - 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, - 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x04, + 0x63, 0x6f, 0x72, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x43, 0x6f, 0x72, 0x73, 0x52, 0x04, 0x63, 0x6f, 0x72, 0x73, + 0x12, 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x0a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x1a, 0x3b, 0x0a, - 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x64, 0x5f, 0x68, 0x6f, 0x6c, 0x64, 0x22, - 0x97, 0x02, 0x0a, 0x13, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x12, 0x22, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x61, 0x6c, - 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x09, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x41, 0x6c, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, - 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x16, - 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x41, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x5f, 0x74, 0x65, 0x61, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, + 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, + 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x64, 0x5f, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x0e, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x42, 0x61, 0x73, 0x65, 0x64, 0x48, 0x6f, 0x6c, 0x64, 0x12, 0x3d, 0x0a, 0x06, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, + 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x3b, 0x0a, 0x07, 0x77, 0x65, + 0x62, 0x73, 0x69, 0x74, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, + 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x57, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x52, 0x07, + 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x12, 0x44, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, + 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, + 0x67, 0x52, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x3b, 0x0a, + 0x07, 0x6c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, + 0x67, 0x52, 0x07, 0x6c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x12, 0x33, 0x0a, 0x05, 0x6f, 0x77, + 0x6e, 0x65, 0x72, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x77, + 0x6e, 0x65, 0x72, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, + 0x44, 0x0a, 0x0a, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x14, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x45, + 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x65, 0x6e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3b, 0x0a, 0x07, 0x62, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, + 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x2e, 0x42, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x62, 0x69, 0x6c, 0x6c, 0x69, + 0x6e, 0x67, 0x12, 0x54, 0x0a, 0x10, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, - 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x52, 0x0b, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x22, 0x8e, 0x01, 0x0a, 0x13, 0x4c, 0x69, - 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x33, 0x0a, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, - 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, - 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, - 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x48, 0x0a, 0x0b, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x74, 0x65, 0x61, 0x6d, 0x22, 0x35, 0x0a, 0x0e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, - 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x3c, 0x0a, 0x05, 0x4f, - 0x77, 0x6e, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1b, 0x0a, 0x09, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x22, 0x5f, 0x0a, 0x0c, 0x43, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, - 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x65, 0x6e, - 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x6c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x32, 0xaf, 0x25, 0x0a, 0x07, 0x53, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x72, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x22, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, - 0x2a, 0x2a, 0x7d, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x6f, 0x0a, 0x09, 0x47, 0x65, - 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x42, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, + 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x52, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0f, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x42, 0x0a, 0x0a, 0x69, 0x61, 0x6d, 0x5f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, - 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x22, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, - 0x13, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x3d, 0x2a, 0x2a, 0x7d, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x8b, 0x01, 0x0a, 0x0c, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x26, 0x2e, 0x67, + 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x49, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x52, 0x09, 0x69, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x23, 0x0a, 0x0d, + 0x73, 0x61, 0x74, 0x69, 0x73, 0x66, 0x69, 0x65, 0x73, 0x5f, 0x70, 0x7a, 0x73, 0x18, 0x19, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0c, 0x73, 0x61, 0x74, 0x69, 0x73, 0x66, 0x69, 0x65, 0x73, 0x50, 0x7a, + 0x73, 0x12, 0x67, 0x0a, 0x17, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x70, 0x6c, 0x61, 0x63, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x1a, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x43, 0x75, + 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x52, 0x15, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x6c, 0x61, 0x63, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x41, 0x0a, 0x09, 0x61, 0x75, + 0x74, 0x6f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, + 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x41, 0x75, 0x74, 0x6f, 0x63, 0x6c, 0x61, + 0x73, 0x73, 0x52, 0x09, 0x61, 0x75, 0x74, 0x6f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x1a, 0x30, 0x0a, + 0x07, 0x42, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x70, 0x61, 0x79, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x79, 0x73, 0x1a, + 0x87, 0x01, 0x0a, 0x04, 0x43, 0x6f, 0x72, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x72, 0x69, 0x67, + 0x69, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, + 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x41, + 0x67, 0x65, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x1a, 0x5c, 0x0a, 0x0a, 0x45, 0x6e, 0x63, + 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x5f, 0x6b, 0x6d, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x26, 0xfa, 0x41, 0x23, 0x0a, 0x21, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x6b, 0x6d, 0x73, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, + 0x72, 0x79, 0x70, 0x74, 0x6f, 0x4b, 0x65, 0x79, 0x52, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x4b, 0x6d, 0x73, 0x4b, 0x65, 0x79, 0x1a, 0xb1, 0x02, 0x0a, 0x09, 0x49, 0x61, 0x6d, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x7b, 0x0a, 0x1b, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, + 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x5f, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x49, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4c, 0x65, 0x76, + 0x65, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x18, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, + 0x6d, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x5f, 0x70, 0x72, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x50, 0x72, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x6d, 0x0a, 0x18, + 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4c, 0x65, 0x76, + 0x65, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x64, 0x12, 0x37, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x1a, 0xdb, 0x07, 0x0a, 0x09, + 0x4c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x3c, 0x0a, 0x04, 0x72, 0x75, 0x6c, + 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x2e, 0x4c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x2e, 0x52, 0x75, 0x6c, + 0x65, 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x1a, 0x8f, 0x07, 0x0a, 0x04, 0x52, 0x75, 0x6c, 0x65, + 0x12, 0x47, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x4c, 0x69, 0x66, 0x65, + 0x63, 0x79, 0x63, 0x6c, 0x65, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x50, 0x0a, 0x09, 0x63, 0x6f, 0x6e, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x22, - 0x38, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x12, 0x0c, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0xda, - 0x41, 0x17, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x2c, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2c, - 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x12, 0x85, 0x01, 0x0a, 0x0b, 0x4c, 0x69, - 0x73, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x18, - 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x0c, 0x7b, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0xda, 0x41, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x12, 0x93, 0x01, 0x0a, 0x19, 0x4c, 0x6f, 0x63, 0x6b, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x52, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, - 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x6f, 0x63, 0x6b, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, - 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x22, - 0x26, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0xda, 0x41, - 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0xab, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x49, + 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x4c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, + 0x65, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x41, 0x0a, 0x06, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x1a, 0xa8, + 0x05, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x08, + 0x61, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, + 0x52, 0x07, 0x61, 0x67, 0x65, 0x44, 0x61, 0x79, 0x73, 0x88, 0x01, 0x01, 0x12, 0x38, 0x0a, 0x0e, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x74, 0x79, + 0x70, 0x65, 0x2e, 0x44, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, 0x1c, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x6c, 0x69, 0x76, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x06, 0x69, 0x73, 0x4c, 0x69, 0x76, + 0x65, 0x88, 0x01, 0x01, 0x12, 0x31, 0x0a, 0x12, 0x6e, 0x75, 0x6d, 0x5f, 0x6e, 0x65, 0x77, 0x65, + 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x48, 0x02, 0x52, 0x10, 0x6e, 0x75, 0x6d, 0x4e, 0x65, 0x77, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x88, 0x01, 0x01, 0x12, 0x32, 0x0a, 0x15, 0x6d, 0x61, 0x74, 0x63, 0x68, + 0x65, 0x73, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, + 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x53, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x38, 0x0a, 0x16, 0x64, + 0x61, 0x79, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x48, 0x03, 0x52, 0x13, 0x64, + 0x61, 0x79, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x54, 0x69, + 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x3f, 0x0a, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e, + 0x44, 0x61, 0x74, 0x65, 0x52, 0x10, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x54, 0x69, 0x6d, 0x65, + 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, 0x40, 0x0a, 0x1a, 0x64, 0x61, 0x79, 0x73, 0x5f, 0x73, + 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x48, 0x04, 0x52, 0x17, 0x64, 0x61, + 0x79, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4e, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x74, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x47, 0x0a, 0x16, 0x6e, 0x6f, 0x6e, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x62, 0x65, 0x66, 0x6f, + 0x72, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x44, 0x61, 0x74, 0x65, 0x52, 0x14, 0x6e, 0x6f, 0x6e, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x65, 0x66, 0x6f, 0x72, + 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x5f, 0x70, 0x72, 0x65, + 0x66, 0x69, 0x78, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x6d, 0x61, 0x74, 0x63, 0x68, + 0x65, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x61, 0x74, 0x63, + 0x68, 0x65, 0x73, 0x5f, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x0d, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x53, 0x75, 0x66, 0x66, 0x69, 0x78, 0x42, + 0x0b, 0x0a, 0x09, 0x5f, 0x61, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x42, 0x0a, 0x0a, 0x08, + 0x5f, 0x69, 0x73, 0x5f, 0x6c, 0x69, 0x76, 0x65, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x6e, 0x75, 0x6d, + 0x5f, 0x6e, 0x65, 0x77, 0x65, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, + 0x19, 0x0a, 0x17, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x63, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x1d, 0x0a, 0x1b, 0x5f, 0x64, + 0x61, 0x79, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x6f, 0x6e, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x1a, 0x54, 0x0a, 0x07, 0x4c, 0x6f, 0x67, + 0x67, 0x69, 0x6e, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x6f, 0x67, 0x5f, 0x62, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x6f, 0x67, 0x42, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x6c, 0x6f, 0x67, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, + 0x6c, 0x6f, 0x67, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x1a, + 0xbb, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x12, 0x41, 0x0a, 0x0e, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x6c, 0x6f, 0x63, + 0x6b, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4c, 0x6f, 0x63, + 0x6b, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x12, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x72, 0x65, 0x74, 0x65, + 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x26, 0x0a, + 0x0a, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x64, 0x1a, 0x59, 0x0a, 0x07, 0x57, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, + 0x12, 0x28, 0x0a, 0x10, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x75, + 0x66, 0x66, 0x69, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6d, 0x61, 0x69, 0x6e, + 0x50, 0x61, 0x67, 0x65, 0x53, 0x75, 0x66, 0x66, 0x69, 0x78, 0x12, 0x24, 0x0a, 0x0e, 0x6e, 0x6f, + 0x74, 0x5f, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0c, 0x6e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x50, 0x61, 0x67, 0x65, + 0x1a, 0x3e, 0x0a, 0x15, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x61, 0x74, + 0x61, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x0d, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x1a, 0x67, 0x0a, 0x09, 0x41, 0x75, 0x74, 0x6f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x18, 0x0a, + 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, + 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x40, 0x0a, 0x0b, 0x74, 0x6f, 0x67, 0x67, 0x6c, + 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x74, + 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x47, 0xea, 0x41, 0x44, 0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x23, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x7d, 0x22, 0x97, 0x02, + 0x0a, 0x13, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, + 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x12, 0x22, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x61, 0x6c, 0x74, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x09, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x41, 0x6c, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, + 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x16, 0x0a, 0x06, + 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, + 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x41, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, + 0x74, 0x65, 0x61, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x22, 0x57, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x73, 0x75, 0x6d, 0x6d, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1c, 0x0a, 0x07, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x02, 0x08, 0x01, 0x52, + 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x06, 0x63, 0x72, 0x63, 0x33, + 0x32, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x07, 0x48, 0x00, 0x52, 0x06, 0x63, 0x72, 0x63, 0x33, + 0x32, 0x63, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x63, 0x72, 0x63, 0x33, 0x32, 0x63, + 0x22, 0x54, 0x0a, 0x0f, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, + 0x75, 0x6d, 0x73, 0x12, 0x1b, 0x0a, 0x06, 0x63, 0x72, 0x63, 0x33, 0x32, 0x63, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x07, 0x48, 0x00, 0x52, 0x06, 0x63, 0x72, 0x63, 0x33, 0x32, 0x63, 0x88, 0x01, 0x01, + 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x64, 0x35, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x07, 0x6d, 0x64, 0x35, 0x48, 0x61, 0x73, 0x68, 0x42, 0x09, 0x0a, 0x07, 0x5f, + 0x63, 0x72, 0x63, 0x33, 0x32, 0x63, 0x22, 0xfe, 0x02, 0x0a, 0x0f, 0x48, 0x6d, 0x61, 0x63, 0x4b, + 0x65, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x13, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x20, 0x0a, 0x09, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x05, 0x52, 0x08, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x49, + 0x64, 0x12, 0x4d, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x33, 0xe0, 0x41, 0x05, 0xfa, 0x41, 0x2d, 0x0a, 0x2b, 0x63, 0x6c, 0x6f, 0x75, + 0x64, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x12, 0x37, 0x0a, 0x15, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x03, 0xe0, 0x41, 0x03, 0x52, 0x13, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, + 0x40, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x22, 0x85, 0x04, 0x0a, 0x12, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x17, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, + 0x02, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x05, 0x74, 0x6f, 0x70, + 0x69, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x68, 0x0a, 0x11, 0x63, 0x75, 0x73, 0x74, 0x6f, + 0x6d, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, + 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x10, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, + 0x2a, 0x0a, 0x0e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0d, 0x70, 0x61, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x1a, 0x43, 0x0a, 0x15, 0x43, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x3a, 0x7d, 0xea, 0x41, 0x7a, 0x0a, 0x29, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x4d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x62, 0x75, + 0x63, 0x6b, 0x65, 0x74, 0x7d, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x2f, 0x7b, 0x6e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x7d, 0x22, + 0x71, 0x0a, 0x12, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x45, 0x6e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x14, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x41, + 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x28, 0x0a, 0x10, 0x6b, 0x65, 0x79, 0x5f, + 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x0e, 0x6b, 0x65, 0x79, 0x53, 0x68, 0x61, 0x32, 0x35, 0x36, 0x42, 0x79, 0x74, + 0x65, 0x73, 0x22, 0xec, 0x0b, 0x0a, 0x06, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x17, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x05, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x05, 0xfa, 0x41, 0x1f, 0x0a, 0x1d, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, + 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x06, 0x62, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x1b, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x12, 0x23, 0x0a, 0x0a, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, + 0x41, 0x05, 0x52, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, + 0x0a, 0x0e, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0e, 0x6d, 0x65, 0x74, + 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, + 0x12, 0x17, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, + 0xe0, 0x41, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x63, 0x6f, + 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2f, 0x0a, 0x13, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, + 0x64, 0x69, 0x73, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x63, + 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x61, + 0x63, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x38, 0x0a, 0x03, 0x61, 0x63, + 0x6c, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, + 0x03, 0x61, 0x63, 0x6c, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, + 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, + 0x40, 0x0a, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0c, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x42, + 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x45, 0x0a, 0x09, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, + 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x42, 0x03, 0xe0, 0x41, 0x03, + 0x52, 0x09, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x12, 0x40, 0x0a, 0x0b, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, + 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3f, 0x0a, + 0x07, 0x6b, 0x6d, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x42, 0x26, + 0xfa, 0x41, 0x23, 0x0a, 0x21, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x6b, 0x6d, 0x73, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x72, 0x79, + 0x70, 0x74, 0x6f, 0x4b, 0x65, 0x79, 0x52, 0x06, 0x6b, 0x6d, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x5a, + 0x0a, 0x19, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, + 0x41, 0x03, 0x52, 0x16, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x65, + 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x5f, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x14, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x48, 0x6f, 0x6c, + 0x64, 0x12, 0x4e, 0x0a, 0x15, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, + 0x78, 0x70, 0x69, 0x72, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x15, 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, 0x13, 0x72, 0x65, + 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x43, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x16, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2d, 0x0a, 0x10, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, + 0x62, 0x61, 0x73, 0x65, 0x64, 0x5f, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, + 0x48, 0x00, 0x52, 0x0e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x61, 0x73, 0x65, 0x64, 0x48, 0x6f, + 0x6c, 0x64, 0x88, 0x01, 0x01, 0x12, 0x33, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x18, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x42, 0x03, + 0xe0, 0x41, 0x03, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x56, 0x0a, 0x13, 0x63, 0x75, + 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x5f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x73, 0x74, + 0x6f, 0x6d, 0x65, 0x72, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x12, + 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x1a, + 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x13, 0x0a, 0x11, + 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x64, 0x5f, 0x68, 0x6f, 0x6c, + 0x64, 0x22, 0x97, 0x02, 0x0a, 0x13, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, + 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x22, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, + 0x61, 0x6c, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x09, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x41, 0x6c, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, + 0x61, 0x69, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, + 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x41, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x5f, 0x74, 0x65, 0x61, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x76, 0x32, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x52, 0x0b, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x22, 0x8e, 0x01, 0x0a, 0x13, + 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, + 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x66, + 0x69, 0x78, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x65, 0x66, + 0x69, 0x78, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, + 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, + 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x48, 0x0a, 0x0b, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x12, 0x25, 0x0a, 0x0e, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x74, 0x65, 0x61, 0x6d, 0x22, 0x35, 0x0a, 0x0e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6d, 0x61, 0x69, + 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x3c, 0x0a, + 0x05, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1b, + 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x22, 0x5f, 0x0a, 0x0c, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, + 0x65, 0x6e, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x5f, + 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, 0x6f, + 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x32, 0x98, 0x26, 0x0a, + 0x07, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x72, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x22, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0x6f, 0x0a, 0x09, + 0x47, 0x65, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, + 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x22, 0xda, 0x41, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0xab, 0x01, + 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x26, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x22, 0x58, 0xda, 0x41, 0x17, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x2c, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x2c, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x8a, 0xd3, 0xe4, + 0x93, 0x02, 0x38, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x0c, 0x7b, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0x1e, 0x0a, 0x0e, 0x62, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x0c, 0x7b, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0x85, 0x01, 0x0a, 0x0b, + 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0xda, 0x41, 0x06, 0x70, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x0a, 0x06, 0x70, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x0c, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x3d, + 0x2a, 0x2a, 0x7d, 0x12, 0x93, 0x01, 0x0a, 0x19, 0x4c, 0x6f, 0x63, 0x6b, 0x42, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x52, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x12, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x6f, 0x63, 0x6b, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x52, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x22, 0x26, 0xda, 0x41, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x8a, 0xd3, 0xe4, 0x93, + 0x02, 0x17, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x0b, 0x7b, 0x62, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0xab, 0x01, 0x0a, 0x0c, 0x47, 0x65, + 0x74, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x22, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x61, + 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x60, 0xda, 0x41, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x4f, 0x12, 0x17, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, + 0x7d, 0x12, 0x34, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x28, 0x7b, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, + 0x2a, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x6f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2a, 0x12, 0xb2, 0x01, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x50, + 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x22, 0x60, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x4f, 0x12, 0x17, 0x0a, 0x08, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0x34, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x12, 0x28, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, - 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2a, 0xda, 0x41, 0x08, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0xb2, 0x01, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x49, 0x61, 0x6d, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x22, 0x67, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x4f, 0x12, 0x17, 0x0a, 0x08, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, - 0x2a, 0x7d, 0x12, 0x34, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x28, - 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x2f, 0x2a, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x6f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2a, 0xda, 0x41, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x2c, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0xd7, 0x01, 0x0a, 0x12, 0x54, - 0x65, 0x73, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, - 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, - 0x49, 0x61, 0x6d, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6c, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x4f, 0x12, 0x17, - 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0x34, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x12, 0x28, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, - 0x2a, 0x7d, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2a, 0xda, 0x41, 0x14, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2c, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x8a, 0x01, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, - 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x37, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x1c, - 0x12, 0x1a, 0x0a, 0x0b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0xda, 0x41, 0x12, 0x62, + 0x69, 0x63, 0x79, 0x22, 0x67, 0xda, 0x41, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x2c, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x4f, 0x12, 0x17, 0x0a, + 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0x34, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x12, 0x28, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x2a, + 0x7d, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2a, 0x12, 0xd7, 0x01, 0x0a, + 0x12, 0x54, 0x65, 0x73, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, + 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x65, 0x72, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, + 0x73, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6c, 0xda, 0x41, 0x14, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2c, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x4f, 0x12, 0x17, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, + 0x12, 0x34, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x28, 0x7b, 0x62, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, + 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x6f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2a, 0x12, 0x8a, 0x01, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x37, 0xda, 0x41, 0x12, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, - 0x6b, 0x12, 0x93, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x37, + 0x6b, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x0a, 0x0b, 0x62, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, + 0x2a, 0x2a, 0x7d, 0x12, 0x9f, 0x01, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x37, 0xda, 0x41, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x20, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, + 0x2a, 0x7d, 0x2f, 0x2a, 0x2a, 0x12, 0xa8, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, + 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x37, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x2a, 0x2a, - 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x96, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4e, - 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, - 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x37, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, - 0x28, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x2a, 0x2a, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x98, 0x01, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x33, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, - 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0xda, 0x41, 0x13, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x2c, 0x6e, - 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x96, 0x01, 0x0a, 0x11, - 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x8a, 0xd3, - 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x0b, - 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0xda, 0x41, 0x06, 0x70, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x12, 0x7e, 0x0a, 0x0d, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x27, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, - 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x29, 0x8a, 0xd3, 0xe4, 0x93, 0x02, - 0x23, 0x12, 0x21, 0x0a, 0x12, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0x98, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x48, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x0a, - 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x3d, 0x2a, 0x2a, 0x7d, 0xda, 0x41, 0x0d, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x6f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0xda, 0x41, 0x18, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x6f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x2c, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0xba, 0x01, 0x0a, 0x14, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x61, - 0x62, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x61, 0x6e, - 0x63, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x61, 0x6e, - 0x63, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0x8a, 0xd3, 0xe4, 0x93, 0x02, - 0x2f, 0x12, 0x2d, 0x0a, 0x09, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x12, 0x20, - 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x2f, 0x2a, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x2a, 0x2a, - 0xda, 0x41, 0x09, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x12, 0x95, 0x01, 0x0a, - 0x09, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x23, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x47, - 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x48, 0x8a, 0xd3, 0xe4, 0x93, - 0x02, 0x17, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x0b, 0x7b, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0xda, 0x41, 0x0d, 0x62, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x2c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0xda, 0x41, 0x18, 0x62, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x2c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2c, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xa5, 0x01, 0x0a, 0x0a, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x12, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, - 0x61, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x48, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0xda, - 0x41, 0x0d, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0xda, - 0x41, 0x18, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2c, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x30, 0x01, 0x12, 0x8c, 0x01, 0x0a, - 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x26, 0x2e, + 0x12, 0xb1, 0x01, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, - 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x22, 0x39, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x0a, 0x0d, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0xda, 0x41, 0x12, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2c, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x12, 0x60, 0x0a, 0x0b, 0x57, - 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x57, - 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x28, 0x01, 0x12, 0x84, 0x01, - 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x25, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, - 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x8a, 0xd3, - 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x0b, - 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0xda, 0x41, 0x06, 0x70, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x12, 0x98, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x27, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x12, 0x0f, 0x0a, 0x0d, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x21, 0x0a, 0x12, - 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x75, 0x63, 0x6b, + 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x3a, 0xda, 0x41, 0x1a, 0x70, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x2c, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x0a, + 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0xa8, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, + 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0xda, 0x41, 0x06, 0x70, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, + 0x7e, 0x0a, 0x0d, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x12, 0x27, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x22, 0x29, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x12, 0x21, 0x0a, 0x12, + 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, - 0xae, 0x01, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x61, 0x62, - 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x52, 0x65, 0x73, 0x75, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x12, 0x30, - 0x0a, 0x21, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x73, - 0x70, 0x65, 0x63, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x62, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, - 0x12, 0xae, 0x01, 0x0a, 0x10, 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x72, 0x69, 0x74, 0x65, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, - 0x72, 0x69, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x72, 0x69, 0x74, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, - 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x12, 0x2d, 0x0a, 0x09, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, - 0x5f, 0x69, 0x64, 0x12, 0x20, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, - 0x2a, 0x7d, 0x2f, 0x2a, 0x2a, 0xda, 0x41, 0x09, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, - 0x64, 0x12, 0x80, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x1b, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x12, - 0x09, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0xda, 0x41, 0x07, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x12, 0x95, 0x01, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, - 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x27, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x8a, 0xd3, 0xe4, 0x93, 0x02, - 0x0b, 0x12, 0x09, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0xda, 0x41, 0x1d, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x77, 0x0a, 0x0d, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x27, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, - 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x25, - 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x12, 0x09, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0xda, 0x41, 0x11, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x64, 0x2c, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x7d, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x48, 0x6d, 0x61, 0x63, - 0x4b, 0x65, 0x79, 0x12, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x6d, 0x61, 0x63, 0x4b, - 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x6d, - 0x61, 0x63, 0x4b, 0x65, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x25, 0x8a, - 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x12, 0x09, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0xda, 0x41, 0x11, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x64, 0x2c, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x12, 0x7c, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6d, 0x61, 0x63, - 0x4b, 0x65, 0x79, 0x73, 0x12, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6d, 0x61, - 0x63, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, + 0x98, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x12, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x48, 0xda, 0x41, 0x0d, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x6f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0xda, 0x41, 0x18, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x6f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x2c, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x8a, 0xd3, 0xe4, + 0x93, 0x02, 0x17, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x0b, 0x7b, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0xba, 0x01, 0x0a, 0x14, 0x43, + 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x57, 0x72, + 0x69, 0x74, 0x65, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, + 0x73, 0x75, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, + 0x73, 0x75, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0xda, 0x41, 0x09, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, + 0x69, 0x64, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x12, 0x2d, 0x0a, 0x09, 0x75, 0x70, 0x6c, 0x6f, + 0x61, 0x64, 0x5f, 0x69, 0x64, 0x12, 0x20, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x2a, 0x2a, 0x12, 0x95, 0x01, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x48, 0xda, 0x41, 0x0d, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x2c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0xda, 0x41, 0x18, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x2c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2c, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, + 0xa5, 0x01, 0x0a, 0x0a, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x24, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x76, 0x32, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x48, 0xda, 0x41, 0x0d, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0xda, 0x41, 0x18, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2c, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, + 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x30, 0x01, 0x12, 0x8c, 0x01, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x39, 0xda, 0x41, 0x12, + 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, + 0x73, 0x6b, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x0a, 0x0d, 0x6f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0x60, 0x0a, 0x0b, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x12, 0x09, 0x0a, - 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0xda, 0x41, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x12, 0x9d, 0x01, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6d, 0x61, - 0x63, 0x4b, 0x65, 0x79, 0x12, 0x27, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, - 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, - 0x32, 0x2e, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x22, 0x3f, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x12, 0x20, 0x0a, 0x10, 0x68, 0x6d, 0x61, - 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x0c, 0x7b, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0xda, 0x41, 0x14, 0x68, 0x6d, - 0x61, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x2c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, - 0x73, 0x6b, 0x1a, 0xa7, 0x02, 0xca, 0x41, 0x16, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0xd2, 0x41, - 0x8a, 0x02, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, - 0x68, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2d, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2c, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, - 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2d, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x72, 0x65, 0x61, 0x64, 0x2d, 0x6f, 0x6e, 0x6c, 0x79, 0x2c, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, - 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x64, 0x65, 0x76, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, - 0x6c, 0x2c, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, + 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x28, 0x01, 0x12, 0x84, 0x01, 0x0a, 0x0b, 0x4c, 0x69, 0x73, + 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0xda, 0x41, 0x06, 0x70, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, + 0x98, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x12, 0x27, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x52, + 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, + 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x12, 0x0f, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x21, 0x0a, 0x12, 0x64, 0x65, 0x73, 0x74, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x0b, 0x7b, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0xae, 0x01, 0x0a, 0x13, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x69, + 0x74, 0x65, 0x12, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x75, + 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6d, + 0x61, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x38, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x12, 0x30, 0x0a, 0x21, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x0b, + 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0xae, 0x01, 0x0a, 0x10, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x72, 0x69, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x72, 0x69, 0x74, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x72, 0x69, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0xda, 0x41, 0x09, 0x75, 0x70, + 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x12, 0x2d, 0x0a, + 0x09, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x12, 0x20, 0x7b, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x62, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x2a, 0x2a, 0x12, 0x80, 0x01, 0x0a, + 0x11, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x22, 0x1b, 0xda, 0x41, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x8a, 0xd3, + 0xe4, 0x93, 0x02, 0x0b, 0x12, 0x09, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, + 0x95, 0x01, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, + 0x79, 0x12, 0x27, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6d, 0x61, 0x63, + 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0xda, 0x41, 0x1d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x2c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x12, 0x09, 0x0a, 0x07, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x77, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x27, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x25, 0xda, 0x41, 0x11, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x64, 0x2c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x8a, + 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x12, 0x09, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x12, 0x7d, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x24, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x25, 0xda, 0x41, 0x11, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x5f, 0x69, 0x64, 0x2c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x8a, 0xd3, + 0xe4, 0x93, 0x02, 0x0b, 0x12, 0x09, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, + 0x7c, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x12, + 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x1b, 0xda, 0x41, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x8a, 0xd3, 0xe4, 0x93, + 0x02, 0x0b, 0x12, 0x09, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x9d, 0x01, + 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x12, + 0x27, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x6d, 0x61, + 0x63, 0x4b, 0x65, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x3f, 0xda, 0x41, + 0x14, 0x68, 0x6d, 0x61, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x2c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x12, 0x20, 0x0a, 0x10, 0x68, + 0x6d, 0x61, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, + 0x0c, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x1a, 0xa7, 0x02, + 0xca, 0x41, 0x16, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0xd2, 0x41, 0x8a, 0x02, 0x68, 0x74, 0x74, + 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, + 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x63, 0x6c, 0x6f, + 0x75, 0x64, 0x2d, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2c, 0x68, 0x74, 0x74, 0x70, + 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, + 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x63, 0x6c, 0x6f, 0x75, + 0x64, 0x2d, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2d, + 0x6f, 0x6e, 0x6c, 0x79, 0x2c, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x61, 0x75, 0x74, 0x68, 0x2f, 0x64, 0x65, 0x76, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2c, 0x68, 0x74, 0x74, + 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, + 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x64, 0x65, 0x76, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, + 0x79, 0x2c, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x64, 0x65, 0x76, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x72, 0x65, 0x61, - 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x2c, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, - 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x64, 0x65, 0x76, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x42, 0xdc, 0x01, 0x0a, - 0x15, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x42, 0x0c, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x38, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, - 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2f, 0x76, 0x32, 0x3b, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0xea, 0x41, 0x78, 0x0a, 0x21, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x6b, 0x6d, 0x73, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x72, 0x79, - 0x70, 0x74, 0x6f, 0x4b, 0x65, 0x79, 0x12, 0x53, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x2f, - 0x6b, 0x65, 0x79, 0x52, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x6b, 0x65, 0x79, 0x5f, 0x72, 0x69, - 0x6e, 0x67, 0x7d, 0x2f, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x4b, 0x65, 0x79, 0x73, 0x2f, 0x7b, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x5f, 0x6b, 0x65, 0x79, 0x7d, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x64, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x42, 0xe2, 0x01, 0xea, 0x41, 0x78, 0x0a, 0x21, 0x63, + 0x6c, 0x6f, 0x75, 0x64, 0x6b, 0x6d, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, + 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x4b, 0x65, 0x79, + 0x12, 0x53, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, + 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x2f, 0x6b, 0x65, 0x79, 0x52, 0x69, 0x6e, + 0x67, 0x73, 0x2f, 0x7b, 0x6b, 0x65, 0x79, 0x5f, 0x72, 0x69, 0x6e, 0x67, 0x7d, 0x2f, 0x63, 0x72, + 0x79, 0x70, 0x74, 0x6f, 0x4b, 0x65, 0x79, 0x73, 0x2f, 0x7b, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, + 0x5f, 0x6b, 0x65, 0x79, 0x7d, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x42, 0x0c, 0x53, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3e, 0x63, 0x6c, + 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, + 0x6f, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x70, 0x62, 0x3b, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -8188,11 +8186,11 @@ var file_google_storage_v2_storage_proto_goTypes = []interface{}{ (*ListBucketsResponse)(nil), // 5: google.storage.v2.ListBucketsResponse (*LockBucketRetentionPolicyRequest)(nil), // 6: google.storage.v2.LockBucketRetentionPolicyRequest (*UpdateBucketRequest)(nil), // 7: google.storage.v2.UpdateBucketRequest - (*DeleteNotificationRequest)(nil), // 8: google.storage.v2.DeleteNotificationRequest - (*GetNotificationRequest)(nil), // 9: google.storage.v2.GetNotificationRequest - (*CreateNotificationRequest)(nil), // 10: google.storage.v2.CreateNotificationRequest - (*ListNotificationsRequest)(nil), // 11: google.storage.v2.ListNotificationsRequest - (*ListNotificationsResponse)(nil), // 12: google.storage.v2.ListNotificationsResponse + (*DeleteNotificationConfigRequest)(nil), // 8: google.storage.v2.DeleteNotificationConfigRequest + (*GetNotificationConfigRequest)(nil), // 9: google.storage.v2.GetNotificationConfigRequest + (*CreateNotificationConfigRequest)(nil), // 10: google.storage.v2.CreateNotificationConfigRequest + (*ListNotificationConfigsRequest)(nil), // 11: google.storage.v2.ListNotificationConfigsRequest + (*ListNotificationConfigsResponse)(nil), // 12: google.storage.v2.ListNotificationConfigsResponse (*ComposeObjectRequest)(nil), // 13: google.storage.v2.ComposeObjectRequest (*DeleteObjectRequest)(nil), // 14: google.storage.v2.DeleteObjectRequest (*CancelResumableWriteRequest)(nil), // 15: google.storage.v2.CancelResumableWriteRequest @@ -8226,7 +8224,7 @@ var file_google_storage_v2_storage_proto_goTypes = []interface{}{ (*ChecksummedData)(nil), // 43: google.storage.v2.ChecksummedData (*ObjectChecksums)(nil), // 44: google.storage.v2.ObjectChecksums (*HmacKeyMetadata)(nil), // 45: google.storage.v2.HmacKeyMetadata - (*Notification)(nil), // 46: google.storage.v2.Notification + (*NotificationConfig)(nil), // 46: google.storage.v2.NotificationConfig (*CustomerEncryption)(nil), // 47: google.storage.v2.CustomerEncryption (*Object)(nil), // 48: google.storage.v2.Object (*ObjectAccessControl)(nil), // 49: google.storage.v2.ObjectAccessControl @@ -8253,18 +8251,18 @@ var file_google_storage_v2_storage_proto_goTypes = []interface{}{ (*Bucket_Lifecycle_Rule)(nil), // 70: google.storage.v2.Bucket.Lifecycle.Rule (*Bucket_Lifecycle_Rule_Action)(nil), // 71: google.storage.v2.Bucket.Lifecycle.Rule.Action (*Bucket_Lifecycle_Rule_Condition)(nil), // 72: google.storage.v2.Bucket.Lifecycle.Rule.Condition - nil, // 73: google.storage.v2.Notification.CustomAttributesEntry + nil, // 73: google.storage.v2.NotificationConfig.CustomAttributesEntry nil, // 74: google.storage.v2.Object.MetadataEntry (*fieldmaskpb.FieldMask)(nil), // 75: google.protobuf.FieldMask (*timestamppb.Timestamp)(nil), // 76: google.protobuf.Timestamp (*durationpb.Duration)(nil), // 77: google.protobuf.Duration (*date.Date)(nil), // 78: google.type.Date - (*v1.GetIamPolicyRequest)(nil), // 79: google.iam.v1.GetIamPolicyRequest - (*v1.SetIamPolicyRequest)(nil), // 80: google.iam.v1.SetIamPolicyRequest - (*v1.TestIamPermissionsRequest)(nil), // 81: google.iam.v1.TestIamPermissionsRequest + (*iampb.GetIamPolicyRequest)(nil), // 79: google.iam.v1.GetIamPolicyRequest + (*iampb.SetIamPolicyRequest)(nil), // 80: google.iam.v1.SetIamPolicyRequest + (*iampb.TestIamPermissionsRequest)(nil), // 81: google.iam.v1.TestIamPermissionsRequest (*emptypb.Empty)(nil), // 82: google.protobuf.Empty - (*v1.Policy)(nil), // 83: google.iam.v1.Policy - (*v1.TestIamPermissionsResponse)(nil), // 84: google.iam.v1.TestIamPermissionsResponse + (*iampb.Policy)(nil), // 83: google.iam.v1.Policy + (*iampb.TestIamPermissionsResponse)(nil), // 84: google.iam.v1.TestIamPermissionsResponse } var file_google_storage_v2_storage_proto_depIdxs = []int32{ 75, // 0: google.storage.v2.GetBucketRequest.read_mask:type_name -> google.protobuf.FieldMask @@ -8273,8 +8271,8 @@ var file_google_storage_v2_storage_proto_depIdxs = []int32{ 41, // 3: google.storage.v2.ListBucketsResponse.buckets:type_name -> google.storage.v2.Bucket 41, // 4: google.storage.v2.UpdateBucketRequest.bucket:type_name -> google.storage.v2.Bucket 75, // 5: google.storage.v2.UpdateBucketRequest.update_mask:type_name -> google.protobuf.FieldMask - 46, // 6: google.storage.v2.CreateNotificationRequest.notification:type_name -> google.storage.v2.Notification - 46, // 7: google.storage.v2.ListNotificationsResponse.notifications:type_name -> google.storage.v2.Notification + 46, // 6: google.storage.v2.CreateNotificationConfigRequest.notification_config:type_name -> google.storage.v2.NotificationConfig + 46, // 7: google.storage.v2.ListNotificationConfigsResponse.notification_configs:type_name -> google.storage.v2.NotificationConfig 48, // 8: google.storage.v2.ComposeObjectRequest.destination:type_name -> google.storage.v2.Object 55, // 9: google.storage.v2.ComposeObjectRequest.source_objects:type_name -> google.storage.v2.ComposeObjectRequest.SourceObject 39, // 10: google.storage.v2.ComposeObjectRequest.common_object_request_params:type_name -> google.storage.v2.CommonObjectRequestParams @@ -8331,7 +8329,7 @@ var file_google_storage_v2_storage_proto_depIdxs = []int32{ 51, // 61: google.storage.v2.BucketAccessControl.project_team:type_name -> google.storage.v2.ProjectTeam 76, // 62: google.storage.v2.HmacKeyMetadata.create_time:type_name -> google.protobuf.Timestamp 76, // 63: google.storage.v2.HmacKeyMetadata.update_time:type_name -> google.protobuf.Timestamp - 73, // 64: google.storage.v2.Notification.custom_attributes:type_name -> google.storage.v2.Notification.CustomAttributesEntry + 73, // 64: google.storage.v2.NotificationConfig.custom_attributes:type_name -> google.storage.v2.NotificationConfig.CustomAttributesEntry 49, // 65: google.storage.v2.Object.acl:type_name -> google.storage.v2.ObjectAccessControl 76, // 66: google.storage.v2.Object.delete_time:type_name -> google.protobuf.Timestamp 76, // 67: google.storage.v2.Object.create_time:type_name -> google.protobuf.Timestamp @@ -8366,10 +8364,10 @@ var file_google_storage_v2_storage_proto_depIdxs = []int32{ 80, // 96: google.storage.v2.Storage.SetIamPolicy:input_type -> google.iam.v1.SetIamPolicyRequest 81, // 97: google.storage.v2.Storage.TestIamPermissions:input_type -> google.iam.v1.TestIamPermissionsRequest 7, // 98: google.storage.v2.Storage.UpdateBucket:input_type -> google.storage.v2.UpdateBucketRequest - 8, // 99: google.storage.v2.Storage.DeleteNotification:input_type -> google.storage.v2.DeleteNotificationRequest - 9, // 100: google.storage.v2.Storage.GetNotification:input_type -> google.storage.v2.GetNotificationRequest - 10, // 101: google.storage.v2.Storage.CreateNotification:input_type -> google.storage.v2.CreateNotificationRequest - 11, // 102: google.storage.v2.Storage.ListNotifications:input_type -> google.storage.v2.ListNotificationsRequest + 8, // 99: google.storage.v2.Storage.DeleteNotificationConfig:input_type -> google.storage.v2.DeleteNotificationConfigRequest + 9, // 100: google.storage.v2.Storage.GetNotificationConfig:input_type -> google.storage.v2.GetNotificationConfigRequest + 10, // 101: google.storage.v2.Storage.CreateNotificationConfig:input_type -> google.storage.v2.CreateNotificationConfigRequest + 11, // 102: google.storage.v2.Storage.ListNotificationConfigs:input_type -> google.storage.v2.ListNotificationConfigsRequest 13, // 103: google.storage.v2.Storage.ComposeObject:input_type -> google.storage.v2.ComposeObjectRequest 14, // 104: google.storage.v2.Storage.DeleteObject:input_type -> google.storage.v2.DeleteObjectRequest 15, // 105: google.storage.v2.Storage.CancelResumableWrite:input_type -> google.storage.v2.CancelResumableWriteRequest @@ -8396,10 +8394,10 @@ var file_google_storage_v2_storage_proto_depIdxs = []int32{ 83, // 126: google.storage.v2.Storage.SetIamPolicy:output_type -> google.iam.v1.Policy 84, // 127: google.storage.v2.Storage.TestIamPermissions:output_type -> google.iam.v1.TestIamPermissionsResponse 41, // 128: google.storage.v2.Storage.UpdateBucket:output_type -> google.storage.v2.Bucket - 82, // 129: google.storage.v2.Storage.DeleteNotification:output_type -> google.protobuf.Empty - 46, // 130: google.storage.v2.Storage.GetNotification:output_type -> google.storage.v2.Notification - 46, // 131: google.storage.v2.Storage.CreateNotification:output_type -> google.storage.v2.Notification - 12, // 132: google.storage.v2.Storage.ListNotifications:output_type -> google.storage.v2.ListNotificationsResponse + 82, // 129: google.storage.v2.Storage.DeleteNotificationConfig:output_type -> google.protobuf.Empty + 46, // 130: google.storage.v2.Storage.GetNotificationConfig:output_type -> google.storage.v2.NotificationConfig + 46, // 131: google.storage.v2.Storage.CreateNotificationConfig:output_type -> google.storage.v2.NotificationConfig + 12, // 132: google.storage.v2.Storage.ListNotificationConfigs:output_type -> google.storage.v2.ListNotificationConfigsResponse 48, // 133: google.storage.v2.Storage.ComposeObject:output_type -> google.storage.v2.Object 82, // 134: google.storage.v2.Storage.DeleteObject:output_type -> google.protobuf.Empty 16, // 135: google.storage.v2.Storage.CancelResumableWrite:output_type -> google.storage.v2.CancelResumableWriteResponse @@ -8515,7 +8513,7 @@ func file_google_storage_v2_storage_proto_init() { } } file_google_storage_v2_storage_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteNotificationRequest); i { + switch v := v.(*DeleteNotificationConfigRequest); i { case 0: return &v.state case 1: @@ -8527,7 +8525,7 @@ func file_google_storage_v2_storage_proto_init() { } } file_google_storage_v2_storage_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetNotificationRequest); i { + switch v := v.(*GetNotificationConfigRequest); i { case 0: return &v.state case 1: @@ -8539,7 +8537,7 @@ func file_google_storage_v2_storage_proto_init() { } } file_google_storage_v2_storage_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateNotificationRequest); i { + switch v := v.(*CreateNotificationConfigRequest); i { case 0: return &v.state case 1: @@ -8551,7 +8549,7 @@ func file_google_storage_v2_storage_proto_init() { } } file_google_storage_v2_storage_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListNotificationsRequest); i { + switch v := v.(*ListNotificationConfigsRequest); i { case 0: return &v.state case 1: @@ -8563,7 +8561,7 @@ func file_google_storage_v2_storage_proto_init() { } } file_google_storage_v2_storage_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListNotificationsResponse); i { + switch v := v.(*ListNotificationConfigsResponse); i { case 0: return &v.state case 1: @@ -8971,7 +8969,7 @@ func file_google_storage_v2_storage_proto_init() { } } file_google_storage_v2_storage_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Notification); i { + switch v := v.(*NotificationConfig); i { case 0: return &v.state case 1: @@ -9312,7 +9310,6 @@ func file_google_storage_v2_storage_proto_init() { file_google_storage_v2_storage_proto_msgTypes[43].OneofWrappers = []interface{}{} file_google_storage_v2_storage_proto_msgTypes[47].OneofWrappers = []interface{}{} file_google_storage_v2_storage_proto_msgTypes[55].OneofWrappers = []interface{}{} - file_google_storage_v2_storage_proto_msgTypes[62].OneofWrappers = []interface{}{} file_google_storage_v2_storage_proto_msgTypes[71].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ @@ -9361,38 +9358,49 @@ type StorageClient interface { // The `resource` field in the request should be // projects/_/buckets/ for a bucket or // projects/_/buckets//objects/ for an object. - GetIamPolicy(ctx context.Context, in *v1.GetIamPolicyRequest, opts ...grpc.CallOption) (*v1.Policy, error) + GetIamPolicy(ctx context.Context, in *iampb.GetIamPolicyRequest, opts ...grpc.CallOption) (*iampb.Policy, error) // Updates an IAM policy for the specified bucket or object. // The `resource` field in the request should be // projects/_/buckets/ for a bucket or // projects/_/buckets//objects/ for an object. - SetIamPolicy(ctx context.Context, in *v1.SetIamPolicyRequest, opts ...grpc.CallOption) (*v1.Policy, error) + SetIamPolicy(ctx context.Context, in *iampb.SetIamPolicyRequest, opts ...grpc.CallOption) (*iampb.Policy, error) // Tests a set of permissions on the given bucket or object to see which, if // any, are held by the caller. // The `resource` field in the request should be // projects/_/buckets/ for a bucket or // projects/_/buckets//objects/ for an object. - TestIamPermissions(ctx context.Context, in *v1.TestIamPermissionsRequest, opts ...grpc.CallOption) (*v1.TestIamPermissionsResponse, error) + TestIamPermissions(ctx context.Context, in *iampb.TestIamPermissionsRequest, opts ...grpc.CallOption) (*iampb.TestIamPermissionsResponse, error) // Updates a bucket. Equivalent to JSON API's storage.buckets.patch method. UpdateBucket(ctx context.Context, in *UpdateBucketRequest, opts ...grpc.CallOption) (*Bucket, error) - // Permanently deletes a notification subscription. - DeleteNotification(ctx context.Context, in *DeleteNotificationRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) - // View a notification config. - GetNotification(ctx context.Context, in *GetNotificationRequest, opts ...grpc.CallOption) (*Notification, error) - // Creates a notification subscription for a given bucket. - // These notifications, when triggered, publish messages to the specified - // Pub/Sub topics. - // See https://cloud.google.com/storage/docs/pubsub-notifications. - CreateNotification(ctx context.Context, in *CreateNotificationRequest, opts ...grpc.CallOption) (*Notification, error) - // Retrieves a list of notification subscriptions for a given bucket. - ListNotifications(ctx context.Context, in *ListNotificationsRequest, opts ...grpc.CallOption) (*ListNotificationsResponse, error) + // Permanently deletes a NotificationConfig. + DeleteNotificationConfig(ctx context.Context, in *DeleteNotificationConfigRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + // View a NotificationConfig. + GetNotificationConfig(ctx context.Context, in *GetNotificationConfigRequest, opts ...grpc.CallOption) (*NotificationConfig, error) + // Creates a NotificationConfig for a given bucket. + // These NotificationConfigs, when triggered, publish messages to the + // specified Pub/Sub topics. See + // https://cloud.google.com/storage/docs/pubsub-notifications. + CreateNotificationConfig(ctx context.Context, in *CreateNotificationConfigRequest, opts ...grpc.CallOption) (*NotificationConfig, error) + // Retrieves a list of NotificationConfigs for a given bucket. + ListNotificationConfigs(ctx context.Context, in *ListNotificationConfigsRequest, opts ...grpc.CallOption) (*ListNotificationConfigsResponse, error) // Concatenates a list of existing objects into a new object in the same // bucket. ComposeObject(ctx context.Context, in *ComposeObjectRequest, opts ...grpc.CallOption) (*Object, error) - // Deletes an object and its metadata. Deletions are permanent if versioning - // is not enabled for the bucket, or if the `generation` parameter is used. + // Deletes an object and its metadata. + // + // Deletions are normally permanent when versioning is disabled or whenever + // the generation parameter is used. However, if soft delete is enabled for + // the bucket, deleted objects can be restored using RestoreObject until the + // soft delete retention period has passed. DeleteObject(ctx context.Context, in *DeleteObjectRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) // Cancels an in-progress resumable upload. + // + // Any attempts to write to the resumable upload after cancelling the upload + // will fail. + // + // The behavior for currently in progress write operations is not guaranteed - + // they could either complete before the cancellation or fail if the + // cancellation completes first. CancelResumableWrite(ctx context.Context, in *CancelResumableWriteRequest, opts ...grpc.CallOption) (*CancelResumableWriteResponse, error) // Retrieves an object's metadata. GetObject(ctx context.Context, in *GetObjectRequest, opts ...grpc.CallOption) (*Object, error) @@ -9440,8 +9448,11 @@ type StorageClient interface { // returned `persisted_size`; in this case, the service will skip data at // offsets that were already persisted (without checking that it matches // the previously written data), and write only the data starting from the - // persisted offset. This behavior can make client-side handling simpler - // in some cases. + // persisted offset. Even though the data isn't written, it may still + // incur a performance cost over resuming at the correct write offset. + // This behavior can make client-side handling simpler in some cases. + // - Clients must only send data that is a multiple of 256 KiB per message, + // unless the object is being finished with `finish_write` set to `true`. // // The service will not view the object as complete until the client has // sent a `WriteObjectRequest` with `finish_write` set to `true`. Sending any @@ -9453,6 +9464,7 @@ type StorageClient interface { // Attempting to resume an already finalized object will result in an OK // status, with a WriteObjectResponse containing the finalized object's // metadata. + // WriteObject(ctx context.Context, opts ...grpc.CallOption) (Storage_WriteObjectClient, error) // Retrieves a list of objects matching the criteria. ListObjects(ctx context.Context, in *ListObjectsRequest, opts ...grpc.CallOption) (*ListObjectsResponse, error) @@ -9544,8 +9556,8 @@ func (c *storageClient) LockBucketRetentionPolicy(ctx context.Context, in *LockB return out, nil } -func (c *storageClient) GetIamPolicy(ctx context.Context, in *v1.GetIamPolicyRequest, opts ...grpc.CallOption) (*v1.Policy, error) { - out := new(v1.Policy) +func (c *storageClient) GetIamPolicy(ctx context.Context, in *iampb.GetIamPolicyRequest, opts ...grpc.CallOption) (*iampb.Policy, error) { + out := new(iampb.Policy) err := c.cc.Invoke(ctx, "/google.storage.v2.Storage/GetIamPolicy", in, out, opts...) if err != nil { return nil, err @@ -9553,8 +9565,8 @@ func (c *storageClient) GetIamPolicy(ctx context.Context, in *v1.GetIamPolicyReq return out, nil } -func (c *storageClient) SetIamPolicy(ctx context.Context, in *v1.SetIamPolicyRequest, opts ...grpc.CallOption) (*v1.Policy, error) { - out := new(v1.Policy) +func (c *storageClient) SetIamPolicy(ctx context.Context, in *iampb.SetIamPolicyRequest, opts ...grpc.CallOption) (*iampb.Policy, error) { + out := new(iampb.Policy) err := c.cc.Invoke(ctx, "/google.storage.v2.Storage/SetIamPolicy", in, out, opts...) if err != nil { return nil, err @@ -9562,8 +9574,8 @@ func (c *storageClient) SetIamPolicy(ctx context.Context, in *v1.SetIamPolicyReq return out, nil } -func (c *storageClient) TestIamPermissions(ctx context.Context, in *v1.TestIamPermissionsRequest, opts ...grpc.CallOption) (*v1.TestIamPermissionsResponse, error) { - out := new(v1.TestIamPermissionsResponse) +func (c *storageClient) TestIamPermissions(ctx context.Context, in *iampb.TestIamPermissionsRequest, opts ...grpc.CallOption) (*iampb.TestIamPermissionsResponse, error) { + out := new(iampb.TestIamPermissionsResponse) err := c.cc.Invoke(ctx, "/google.storage.v2.Storage/TestIamPermissions", in, out, opts...) if err != nil { return nil, err @@ -9580,36 +9592,36 @@ func (c *storageClient) UpdateBucket(ctx context.Context, in *UpdateBucketReques return out, nil } -func (c *storageClient) DeleteNotification(ctx context.Context, in *DeleteNotificationRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { +func (c *storageClient) DeleteNotificationConfig(ctx context.Context, in *DeleteNotificationConfigRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { out := new(emptypb.Empty) - err := c.cc.Invoke(ctx, "/google.storage.v2.Storage/DeleteNotification", in, out, opts...) + err := c.cc.Invoke(ctx, "/google.storage.v2.Storage/DeleteNotificationConfig", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *storageClient) GetNotification(ctx context.Context, in *GetNotificationRequest, opts ...grpc.CallOption) (*Notification, error) { - out := new(Notification) - err := c.cc.Invoke(ctx, "/google.storage.v2.Storage/GetNotification", in, out, opts...) +func (c *storageClient) GetNotificationConfig(ctx context.Context, in *GetNotificationConfigRequest, opts ...grpc.CallOption) (*NotificationConfig, error) { + out := new(NotificationConfig) + err := c.cc.Invoke(ctx, "/google.storage.v2.Storage/GetNotificationConfig", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *storageClient) CreateNotification(ctx context.Context, in *CreateNotificationRequest, opts ...grpc.CallOption) (*Notification, error) { - out := new(Notification) - err := c.cc.Invoke(ctx, "/google.storage.v2.Storage/CreateNotification", in, out, opts...) +func (c *storageClient) CreateNotificationConfig(ctx context.Context, in *CreateNotificationConfigRequest, opts ...grpc.CallOption) (*NotificationConfig, error) { + out := new(NotificationConfig) + err := c.cc.Invoke(ctx, "/google.storage.v2.Storage/CreateNotificationConfig", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *storageClient) ListNotifications(ctx context.Context, in *ListNotificationsRequest, opts ...grpc.CallOption) (*ListNotificationsResponse, error) { - out := new(ListNotificationsResponse) - err := c.cc.Invoke(ctx, "/google.storage.v2.Storage/ListNotifications", in, out, opts...) +func (c *storageClient) ListNotificationConfigs(ctx context.Context, in *ListNotificationConfigsRequest, opts ...grpc.CallOption) (*ListNotificationConfigsResponse, error) { + out := new(ListNotificationConfigsResponse) + err := c.cc.Invoke(ctx, "/google.storage.v2.Storage/ListNotificationConfigs", in, out, opts...) if err != nil { return nil, err } @@ -9833,38 +9845,49 @@ type StorageServer interface { // The `resource` field in the request should be // projects/_/buckets/ for a bucket or // projects/_/buckets//objects/ for an object. - GetIamPolicy(context.Context, *v1.GetIamPolicyRequest) (*v1.Policy, error) + GetIamPolicy(context.Context, *iampb.GetIamPolicyRequest) (*iampb.Policy, error) // Updates an IAM policy for the specified bucket or object. // The `resource` field in the request should be // projects/_/buckets/ for a bucket or // projects/_/buckets//objects/ for an object. - SetIamPolicy(context.Context, *v1.SetIamPolicyRequest) (*v1.Policy, error) + SetIamPolicy(context.Context, *iampb.SetIamPolicyRequest) (*iampb.Policy, error) // Tests a set of permissions on the given bucket or object to see which, if // any, are held by the caller. // The `resource` field in the request should be // projects/_/buckets/ for a bucket or // projects/_/buckets//objects/ for an object. - TestIamPermissions(context.Context, *v1.TestIamPermissionsRequest) (*v1.TestIamPermissionsResponse, error) + TestIamPermissions(context.Context, *iampb.TestIamPermissionsRequest) (*iampb.TestIamPermissionsResponse, error) // Updates a bucket. Equivalent to JSON API's storage.buckets.patch method. UpdateBucket(context.Context, *UpdateBucketRequest) (*Bucket, error) - // Permanently deletes a notification subscription. - DeleteNotification(context.Context, *DeleteNotificationRequest) (*emptypb.Empty, error) - // View a notification config. - GetNotification(context.Context, *GetNotificationRequest) (*Notification, error) - // Creates a notification subscription for a given bucket. - // These notifications, when triggered, publish messages to the specified - // Pub/Sub topics. - // See https://cloud.google.com/storage/docs/pubsub-notifications. - CreateNotification(context.Context, *CreateNotificationRequest) (*Notification, error) - // Retrieves a list of notification subscriptions for a given bucket. - ListNotifications(context.Context, *ListNotificationsRequest) (*ListNotificationsResponse, error) + // Permanently deletes a NotificationConfig. + DeleteNotificationConfig(context.Context, *DeleteNotificationConfigRequest) (*emptypb.Empty, error) + // View a NotificationConfig. + GetNotificationConfig(context.Context, *GetNotificationConfigRequest) (*NotificationConfig, error) + // Creates a NotificationConfig for a given bucket. + // These NotificationConfigs, when triggered, publish messages to the + // specified Pub/Sub topics. See + // https://cloud.google.com/storage/docs/pubsub-notifications. + CreateNotificationConfig(context.Context, *CreateNotificationConfigRequest) (*NotificationConfig, error) + // Retrieves a list of NotificationConfigs for a given bucket. + ListNotificationConfigs(context.Context, *ListNotificationConfigsRequest) (*ListNotificationConfigsResponse, error) // Concatenates a list of existing objects into a new object in the same // bucket. ComposeObject(context.Context, *ComposeObjectRequest) (*Object, error) - // Deletes an object and its metadata. Deletions are permanent if versioning - // is not enabled for the bucket, or if the `generation` parameter is used. + // Deletes an object and its metadata. + // + // Deletions are normally permanent when versioning is disabled or whenever + // the generation parameter is used. However, if soft delete is enabled for + // the bucket, deleted objects can be restored using RestoreObject until the + // soft delete retention period has passed. DeleteObject(context.Context, *DeleteObjectRequest) (*emptypb.Empty, error) // Cancels an in-progress resumable upload. + // + // Any attempts to write to the resumable upload after cancelling the upload + // will fail. + // + // The behavior for currently in progress write operations is not guaranteed - + // they could either complete before the cancellation or fail if the + // cancellation completes first. CancelResumableWrite(context.Context, *CancelResumableWriteRequest) (*CancelResumableWriteResponse, error) // Retrieves an object's metadata. GetObject(context.Context, *GetObjectRequest) (*Object, error) @@ -9912,8 +9935,11 @@ type StorageServer interface { // returned `persisted_size`; in this case, the service will skip data at // offsets that were already persisted (without checking that it matches // the previously written data), and write only the data starting from the - // persisted offset. This behavior can make client-side handling simpler - // in some cases. + // persisted offset. Even though the data isn't written, it may still + // incur a performance cost over resuming at the correct write offset. + // This behavior can make client-side handling simpler in some cases. + // - Clients must only send data that is a multiple of 256 KiB per message, + // unless the object is being finished with `finish_write` set to `true`. // // The service will not view the object as complete until the client has // sent a `WriteObjectRequest` with `finish_write` set to `true`. Sending any @@ -9925,6 +9951,7 @@ type StorageServer interface { // Attempting to resume an already finalized object will result in an OK // status, with a WriteObjectResponse containing the finalized object's // metadata. + // WriteObject(Storage_WriteObjectServer) error // Retrieves a list of objects matching the criteria. ListObjects(context.Context, *ListObjectsRequest) (*ListObjectsResponse, error) @@ -9982,29 +10009,29 @@ func (*UnimplementedStorageServer) ListBuckets(context.Context, *ListBucketsRequ func (*UnimplementedStorageServer) LockBucketRetentionPolicy(context.Context, *LockBucketRetentionPolicyRequest) (*Bucket, error) { return nil, status.Errorf(codes.Unimplemented, "method LockBucketRetentionPolicy not implemented") } -func (*UnimplementedStorageServer) GetIamPolicy(context.Context, *v1.GetIamPolicyRequest) (*v1.Policy, error) { +func (*UnimplementedStorageServer) GetIamPolicy(context.Context, *iampb.GetIamPolicyRequest) (*iampb.Policy, error) { return nil, status.Errorf(codes.Unimplemented, "method GetIamPolicy not implemented") } -func (*UnimplementedStorageServer) SetIamPolicy(context.Context, *v1.SetIamPolicyRequest) (*v1.Policy, error) { +func (*UnimplementedStorageServer) SetIamPolicy(context.Context, *iampb.SetIamPolicyRequest) (*iampb.Policy, error) { return nil, status.Errorf(codes.Unimplemented, "method SetIamPolicy not implemented") } -func (*UnimplementedStorageServer) TestIamPermissions(context.Context, *v1.TestIamPermissionsRequest) (*v1.TestIamPermissionsResponse, error) { +func (*UnimplementedStorageServer) TestIamPermissions(context.Context, *iampb.TestIamPermissionsRequest) (*iampb.TestIamPermissionsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method TestIamPermissions not implemented") } func (*UnimplementedStorageServer) UpdateBucket(context.Context, *UpdateBucketRequest) (*Bucket, error) { return nil, status.Errorf(codes.Unimplemented, "method UpdateBucket not implemented") } -func (*UnimplementedStorageServer) DeleteNotification(context.Context, *DeleteNotificationRequest) (*emptypb.Empty, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeleteNotification not implemented") +func (*UnimplementedStorageServer) DeleteNotificationConfig(context.Context, *DeleteNotificationConfigRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeleteNotificationConfig not implemented") } -func (*UnimplementedStorageServer) GetNotification(context.Context, *GetNotificationRequest) (*Notification, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetNotification not implemented") +func (*UnimplementedStorageServer) GetNotificationConfig(context.Context, *GetNotificationConfigRequest) (*NotificationConfig, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetNotificationConfig not implemented") } -func (*UnimplementedStorageServer) CreateNotification(context.Context, *CreateNotificationRequest) (*Notification, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateNotification not implemented") +func (*UnimplementedStorageServer) CreateNotificationConfig(context.Context, *CreateNotificationConfigRequest) (*NotificationConfig, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateNotificationConfig not implemented") } -func (*UnimplementedStorageServer) ListNotifications(context.Context, *ListNotificationsRequest) (*ListNotificationsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListNotifications not implemented") +func (*UnimplementedStorageServer) ListNotificationConfigs(context.Context, *ListNotificationConfigsRequest) (*ListNotificationConfigsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListNotificationConfigs not implemented") } func (*UnimplementedStorageServer) ComposeObject(context.Context, *ComposeObjectRequest) (*Object, error) { return nil, status.Errorf(codes.Unimplemented, "method ComposeObject not implemented") @@ -10153,7 +10180,7 @@ func _Storage_LockBucketRetentionPolicy_Handler(srv interface{}, ctx context.Con } func _Storage_GetIamPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(v1.GetIamPolicyRequest) + in := new(iampb.GetIamPolicyRequest) if err := dec(in); err != nil { return nil, err } @@ -10165,13 +10192,13 @@ func _Storage_GetIamPolicy_Handler(srv interface{}, ctx context.Context, dec fun FullMethod: "/google.storage.v2.Storage/GetIamPolicy", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(StorageServer).GetIamPolicy(ctx, req.(*v1.GetIamPolicyRequest)) + return srv.(StorageServer).GetIamPolicy(ctx, req.(*iampb.GetIamPolicyRequest)) } return interceptor(ctx, in, info, handler) } func _Storage_SetIamPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(v1.SetIamPolicyRequest) + in := new(iampb.SetIamPolicyRequest) if err := dec(in); err != nil { return nil, err } @@ -10183,13 +10210,13 @@ func _Storage_SetIamPolicy_Handler(srv interface{}, ctx context.Context, dec fun FullMethod: "/google.storage.v2.Storage/SetIamPolicy", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(StorageServer).SetIamPolicy(ctx, req.(*v1.SetIamPolicyRequest)) + return srv.(StorageServer).SetIamPolicy(ctx, req.(*iampb.SetIamPolicyRequest)) } return interceptor(ctx, in, info, handler) } func _Storage_TestIamPermissions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(v1.TestIamPermissionsRequest) + in := new(iampb.TestIamPermissionsRequest) if err := dec(in); err != nil { return nil, err } @@ -10201,7 +10228,7 @@ func _Storage_TestIamPermissions_Handler(srv interface{}, ctx context.Context, d FullMethod: "/google.storage.v2.Storage/TestIamPermissions", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(StorageServer).TestIamPermissions(ctx, req.(*v1.TestIamPermissionsRequest)) + return srv.(StorageServer).TestIamPermissions(ctx, req.(*iampb.TestIamPermissionsRequest)) } return interceptor(ctx, in, info, handler) } @@ -10224,74 +10251,74 @@ func _Storage_UpdateBucket_Handler(srv interface{}, ctx context.Context, dec fun return interceptor(ctx, in, info, handler) } -func _Storage_DeleteNotification_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DeleteNotificationRequest) +func _Storage_DeleteNotificationConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteNotificationConfigRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(StorageServer).DeleteNotification(ctx, in) + return srv.(StorageServer).DeleteNotificationConfig(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/google.storage.v2.Storage/DeleteNotification", + FullMethod: "/google.storage.v2.Storage/DeleteNotificationConfig", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(StorageServer).DeleteNotification(ctx, req.(*DeleteNotificationRequest)) + return srv.(StorageServer).DeleteNotificationConfig(ctx, req.(*DeleteNotificationConfigRequest)) } return interceptor(ctx, in, info, handler) } -func _Storage_GetNotification_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetNotificationRequest) +func _Storage_GetNotificationConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetNotificationConfigRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(StorageServer).GetNotification(ctx, in) + return srv.(StorageServer).GetNotificationConfig(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/google.storage.v2.Storage/GetNotification", + FullMethod: "/google.storage.v2.Storage/GetNotificationConfig", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(StorageServer).GetNotification(ctx, req.(*GetNotificationRequest)) + return srv.(StorageServer).GetNotificationConfig(ctx, req.(*GetNotificationConfigRequest)) } return interceptor(ctx, in, info, handler) } -func _Storage_CreateNotification_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CreateNotificationRequest) +func _Storage_CreateNotificationConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateNotificationConfigRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(StorageServer).CreateNotification(ctx, in) + return srv.(StorageServer).CreateNotificationConfig(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/google.storage.v2.Storage/CreateNotification", + FullMethod: "/google.storage.v2.Storage/CreateNotificationConfig", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(StorageServer).CreateNotification(ctx, req.(*CreateNotificationRequest)) + return srv.(StorageServer).CreateNotificationConfig(ctx, req.(*CreateNotificationConfigRequest)) } return interceptor(ctx, in, info, handler) } -func _Storage_ListNotifications_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ListNotificationsRequest) +func _Storage_ListNotificationConfigs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListNotificationConfigsRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(StorageServer).ListNotifications(ctx, in) + return srv.(StorageServer).ListNotificationConfigs(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/google.storage.v2.Storage/ListNotifications", + FullMethod: "/google.storage.v2.Storage/ListNotificationConfigs", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(StorageServer).ListNotifications(ctx, req.(*ListNotificationsRequest)) + return srv.(StorageServer).ListNotificationConfigs(ctx, req.(*ListNotificationConfigsRequest)) } return interceptor(ctx, in, info, handler) } @@ -10654,20 +10681,20 @@ var _Storage_serviceDesc = grpc.ServiceDesc{ Handler: _Storage_UpdateBucket_Handler, }, { - MethodName: "DeleteNotification", - Handler: _Storage_DeleteNotification_Handler, + MethodName: "DeleteNotificationConfig", + Handler: _Storage_DeleteNotificationConfig_Handler, }, { - MethodName: "GetNotification", - Handler: _Storage_GetNotification_Handler, + MethodName: "GetNotificationConfig", + Handler: _Storage_GetNotificationConfig_Handler, }, { - MethodName: "CreateNotification", - Handler: _Storage_CreateNotification_Handler, + MethodName: "CreateNotificationConfig", + Handler: _Storage_CreateNotificationConfig_Handler, }, { - MethodName: "ListNotifications", - Handler: _Storage_ListNotifications_Handler, + MethodName: "ListNotificationConfigs", + Handler: _Storage_ListNotificationConfigs_Handler, }, { MethodName: "ComposeObject", diff --git a/vendor/cloud.google.com/go/storage/internal/version.go b/vendor/cloud.google.com/go/storage/internal/version.go index a08cb7cabc..9c7380dc51 100644 --- a/vendor/cloud.google.com/go/storage/internal/version.go +++ b/vendor/cloud.google.com/go/storage/internal/version.go @@ -15,4 +15,4 @@ package internal // Version is the current tagged release of the library. -const Version = "1.29.0" +const Version = "1.31.0" diff --git a/vendor/cloud.google.com/go/storage/invoke.go b/vendor/cloud.google.com/go/storage/invoke.go index 810d64285d..6fde482404 100644 --- a/vendor/cloud.google.com/go/storage/invoke.go +++ b/vendor/cloud.google.com/go/storage/invoke.go @@ -76,9 +76,14 @@ func setRetryHeaderHTTP(req interface{ Header() http.Header }) func(string, int) return } header := req.Header() + // TODO(b/274504690): Consider dropping gccl-invocation-id key since it + // duplicates the X-Goog-Gcs-Idempotency-Token header (added in v1.31.0). invocationHeader := fmt.Sprintf("gccl-invocation-id/%v gccl-attempt-count/%v", invocationID, attempts) xGoogHeader := strings.Join([]string{invocationHeader, xGoogDefaultHeader}, " ") header.Set("x-goog-api-client", xGoogHeader) + // Also use the invocationID for the idempotency token header, which will + // enable idempotent retries for more operations. + header.Set("x-goog-gcs-idempotency-token", invocationID) } } diff --git a/vendor/cloud.google.com/go/storage/notifications.go b/vendor/cloud.google.com/go/storage/notifications.go index 614feb7b6d..56f3e3daa5 100644 --- a/vendor/cloud.google.com/go/storage/notifications.go +++ b/vendor/cloud.google.com/go/storage/notifications.go @@ -21,7 +21,7 @@ import ( "regexp" "cloud.google.com/go/internal/trace" - storagepb "cloud.google.com/go/storage/internal/apiv2/stubs" + "cloud.google.com/go/storage/internal/apiv2/storagepb" raw "google.golang.org/api/storage/v1" ) @@ -92,7 +92,7 @@ func toNotification(rn *raw.Notification) *Notification { return n } -func toNotificationFromProto(pbn *storagepb.Notification) *Notification { +func toNotificationFromProto(pbn *storagepb.NotificationConfig) *Notification { n := &Notification{ ID: pbn.GetName(), EventTypes: pbn.GetEventTypes(), @@ -104,8 +104,8 @@ func toNotificationFromProto(pbn *storagepb.Notification) *Notification { return n } -func toProtoNotification(n *Notification) *storagepb.Notification { - return &storagepb.Notification{ +func toProtoNotification(n *Notification) *storagepb.NotificationConfig { + return &storagepb.NotificationConfig{ Name: n.ID, Topic: fmt.Sprintf("//pubsub.googleapis.com/projects/%s/topics/%s", n.TopicProjectID, n.TopicID), @@ -182,7 +182,7 @@ func notificationsToMap(rns []*raw.Notification) map[string]*Notification { return m } -func notificationsToMapFromProto(ns []*storagepb.Notification) map[string]*Notification { +func notificationsToMapFromProto(ns []*storagepb.NotificationConfig) map[string]*Notification { m := map[string]*Notification{} for _, n := range ns { m[n.Name] = toNotificationFromProto(n) diff --git a/vendor/cloud.google.com/go/storage/option.go b/vendor/cloud.google.com/go/storage/option.go new file mode 100644 index 0000000000..e72ceb78f0 --- /dev/null +++ b/vendor/cloud.google.com/go/storage/option.go @@ -0,0 +1,75 @@ +// Copyright 2023 Google LLC +// +// 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. + +package storage + +import ( + "google.golang.org/api/option" + "google.golang.org/api/option/internaloption" +) + +// storageConfig contains the Storage client option configuration that can be +// set through storageClientOptions. +type storageConfig struct { + useJSONforReads bool + readAPIWasSet bool +} + +// newStorageConfig generates a new storageConfig with all the given +// storageClientOptions applied. +func newStorageConfig(opts ...option.ClientOption) storageConfig { + var conf storageConfig + for _, opt := range opts { + if storageOpt, ok := opt.(storageClientOption); ok { + storageOpt.ApplyStorageOpt(&conf) + } + } + return conf +} + +// A storageClientOption is an option for a Google Storage client. +type storageClientOption interface { + option.ClientOption + ApplyStorageOpt(*storageConfig) +} + +// WithJSONReads is an option that may be passed to a Storage Client on creation. +// It sets the client to use the JSON API for object reads. Currently, the +// default API used for reads is XML. +// Setting this option is required to use the GenerationNotMatch condition. +// +// Note that when this option is set, reads will return a zero date for +// [ReaderObjectAttrs].LastModified and may return a different value for +// [ReaderObjectAttrs].CacheControl. +func WithJSONReads() option.ClientOption { + return &withReadAPI{useJSON: true} +} + +// WithXMLReads is an option that may be passed to a Storage Client on creation. +// It sets the client to use the XML API for object reads. +// +// This is the current default. +func WithXMLReads() option.ClientOption { + return &withReadAPI{useJSON: false} +} + +type withReadAPI struct { + internaloption.EmbeddableAdapter + useJSON bool +} + +func (w *withReadAPI) ApplyStorageOpt(c *storageConfig) { + c.useJSONforReads = w.useJSON + c.readAPIWasSet = true +} diff --git a/vendor/cloud.google.com/go/storage/post_policy_v4.go b/vendor/cloud.google.com/go/storage/post_policy_v4.go index 2961aca206..fd105d4faf 100644 --- a/vendor/cloud.google.com/go/storage/post_policy_v4.go +++ b/vendor/cloud.google.com/go/storage/post_policy_v4.go @@ -113,6 +113,12 @@ type PostPolicyV4Options struct { // Optional. Conditions []PostPolicyV4Condition + // Hostname sets the host of the signed post policy. This field overrides + // any endpoint set on a storage Client or through STORAGE_EMULATOR_HOST. + // Only compatible with PathStyle URLStyle. + // Optional. + Hostname string + shouldHashSignBytes bool } @@ -128,6 +134,7 @@ func (opts *PostPolicyV4Options) clone() *PostPolicyV4Options { Fields: opts.Fields, Conditions: opts.Conditions, shouldHashSignBytes: opts.shouldHashSignBytes, + Hostname: opts.Hostname, } } @@ -370,7 +377,7 @@ func GenerateSignedPostPolicyV4(bucket, object string, opts *PostPolicyV4Options u := &url.URL{ Path: path, RawPath: pathEncodeV4(path), - Host: opts.Style.host(bucket), + Host: opts.Style.host(opts.Hostname, bucket), Scheme: scheme, } diff --git a/vendor/cloud.google.com/go/storage/reader.go b/vendor/cloud.google.com/go/storage/reader.go index 46487d2b77..1bb65ec810 100644 --- a/vendor/cloud.google.com/go/storage/reader.go +++ b/vendor/cloud.google.com/go/storage/reader.go @@ -139,15 +139,23 @@ func uncompressedByServer(res *http.Response) bool { res.Header.Get("Content-Encoding") != "gzip" } +// parseCRC32c parses the crc32c hash from the X-Goog-Hash header. +// It can parse headers in the form [crc32c=xxx md5=xxx] (XML responses) or the +// form [crc32c=xxx,md5=xxx] (JSON responses). The md5 hash is ignored. func parseCRC32c(res *http.Response) (uint32, bool) { const prefix = "crc32c=" for _, spec := range res.Header["X-Goog-Hash"] { - if strings.HasPrefix(spec, prefix) { - c, err := decodeUint32(spec[len(prefix):]) - if err == nil { - return c, true + values := strings.Split(spec, ",") + + for _, v := range values { + if strings.HasPrefix(v, prefix) { + c, err := decodeUint32(v[len(prefix):]) + if err == nil { + return c, true + } } } + } return 0, false } diff --git a/vendor/cloud.google.com/go/storage/storage.go b/vendor/cloud.google.com/go/storage/storage.go index 7fc3fc4cb9..ba485ddcda 100644 --- a/vendor/cloud.google.com/go/storage/storage.go +++ b/vendor/cloud.google.com/go/storage/storage.go @@ -41,7 +41,7 @@ import ( "cloud.google.com/go/internal/optional" "cloud.google.com/go/internal/trace" "cloud.google.com/go/storage/internal" - storagepb "cloud.google.com/go/storage/internal/apiv2/stubs" + "cloud.google.com/go/storage/internal/apiv2/storagepb" "github.com/googleapis/gax-go/v2" "golang.org/x/oauth2/google" "google.golang.org/api/googleapi" @@ -109,8 +109,8 @@ type Client struct { raw *raw.Service // Scheme describes the scheme under the current host. scheme string - // ReadHost is the default host used on the reader. - readHost string + // xmlHost is the default host used for XML requests. + xmlHost string // May be nil. creds *google.Credentials retry *retryConfig @@ -129,8 +129,10 @@ type Client struct { // // Clients should be reused instead of created as needed. The methods of Client // are safe for concurrent use by multiple goroutines. +// +// You may configure the client by passing in options from the [google.golang.org/api/option] +// package. You may also use options defined in this package, such as [WithJSONReads]. func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error) { - // Use the experimental gRPC client if the env var is set. // This is an experimental API and not intended for public use. if withGRPC := os.Getenv("STORAGE_USE_GRPC"); withGRPC != "" { @@ -179,10 +181,12 @@ func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error endpoint := hostURL.String() // Append the emulator host as default endpoint for the user - opts = append([]option.ClientOption{option.WithoutAuthentication()}, opts...) - - opts = append(opts, internaloption.WithDefaultEndpoint(endpoint)) - opts = append(opts, internaloption.WithDefaultMTLSEndpoint(endpoint)) + opts = append([]option.ClientOption{ + option.WithoutAuthentication(), + internaloption.SkipDialSettingsValidation(), + internaloption.WithDefaultEndpoint(endpoint), + internaloption.WithDefaultMTLSEndpoint(endpoint), + }, opts...) } // htransport selects the correct endpoint among WithEndpoint (user override), WithDefaultEndpoint, and WithDefaultMTLSEndpoint. @@ -195,7 +199,7 @@ func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error if err != nil { return nil, fmt.Errorf("storage client: %w", err) } - // Update readHost and scheme with the chosen endpoint. + // Update xmlHost and scheme with the chosen endpoint. u, err := url.Parse(ep) if err != nil { return nil, fmt.Errorf("supplied endpoint %q is not valid: %w", ep, err) @@ -207,12 +211,12 @@ func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error } return &Client{ - hc: hc, - raw: rawService, - scheme: u.Scheme, - readHost: u.Host, - creds: creds, - tc: tc, + hc: hc, + raw: rawService, + scheme: u.Scheme, + xmlHost: u.Host, + creds: creds, + tc: tc, }, nil } @@ -258,13 +262,13 @@ const ( SigningSchemeV4 ) -// URLStyle determines the style to use for the signed URL. pathStyle is the +// URLStyle determines the style to use for the signed URL. PathStyle is the // default. All non-default options work with V4 scheme only. See // https://cloud.google.com/storage/docs/request-endpoints for details. type URLStyle interface { // host should return the host portion of the signed URL, not including // the scheme (e.g. storage.googleapis.com). - host(bucket string) string + host(hostname, bucket string) string // path should return the path portion of the signed URL, which may include // both the bucket and object name or only the object name depending on the @@ -280,7 +284,11 @@ type bucketBoundHostname struct { hostname string } -func (s pathStyle) host(bucket string) string { +func (s pathStyle) host(hostname, bucket string) string { + if hostname != "" { + return stripScheme(hostname) + } + if host := os.Getenv("STORAGE_EMULATOR_HOST"); host != "" { return stripScheme(host) } @@ -288,7 +296,7 @@ func (s pathStyle) host(bucket string) string { return "storage.googleapis.com" } -func (s virtualHostedStyle) host(bucket string) string { +func (s virtualHostedStyle) host(_, bucket string) string { if host := os.Getenv("STORAGE_EMULATOR_HOST"); host != "" { return bucket + "." + stripScheme(host) } @@ -296,7 +304,7 @@ func (s virtualHostedStyle) host(bucket string) string { return bucket + ".storage.googleapis.com" } -func (s bucketBoundHostname) host(bucket string) string { +func (s bucketBoundHostname) host(_, bucket string) string { return s.hostname } @@ -317,7 +325,10 @@ func (s bucketBoundHostname) path(bucket, object string) string { } // PathStyle is the default style, and will generate a URL of the form -// "storage.googleapis.com//". +// "//". By default, is +// storage.googleapis.com, but setting an endpoint on the storage Client or +// through STORAGE_EMULATOR_HOST overrides this. Setting Hostname on +// SignedURLOptions or PostPolicyV4Options overrides everything else. func PathStyle() URLStyle { return pathStyle{} } @@ -438,6 +449,12 @@ type SignedURLOptions struct { // Scheme determines the version of URL signing to use. Default is // SigningSchemeV2. Scheme SigningScheme + + // Hostname sets the host of the signed URL. This field overrides any + // endpoint set on a storage Client or through STORAGE_EMULATOR_HOST. + // Only compatible with PathStyle URLStyle. + // Optional. + Hostname string } func (opts *SignedURLOptions) clone() *SignedURLOptions { @@ -454,6 +471,7 @@ func (opts *SignedURLOptions) clone() *SignedURLOptions { Style: opts.Style, Insecure: opts.Insecure, Scheme: opts.Scheme, + Hostname: opts.Hostname, } } @@ -535,7 +553,7 @@ func v4SanitizeHeaders(hdrs []string) []string { sanitizedHeader := strings.TrimSpace(hdr) var key, value string - headerMatches := strings.Split(sanitizedHeader, ":") + headerMatches := strings.SplitN(sanitizedHeader, ":", 2) if len(headerMatches) < 2 { continue } @@ -649,7 +667,7 @@ var utcNow = func() time.Time { func extractHeaderNames(kvs []string) []string { var res []string for _, header := range kvs { - nameValue := strings.Split(header, ":") + nameValue := strings.SplitN(header, ":", 2) res = append(res, nameValue[0]) } return res @@ -712,7 +730,7 @@ func signedURLV4(bucket, name string, opts *SignedURLOptions, now time.Time) (st fmt.Fprintf(buf, "%s\n", escapedQuery) // Fill in the hostname based on the desired URL style. - u.Host = opts.Style.host(bucket) + u.Host = opts.Style.host(opts.Hostname, bucket) // Fill in the URL scheme. if opts.Insecure { @@ -793,7 +811,7 @@ func sortHeadersByKey(hdrs []string) []string { headersMap := map[string]string{} var headersKeys []string for _, h := range hdrs { - parts := strings.Split(h, ":") + parts := strings.SplitN(h, ":", 2) k := parts[0] v := parts[1] headersMap[k] = v @@ -846,7 +864,7 @@ func signedURLV2(bucket, name string, opts *SignedURLOptions) (string, error) { } encoded := base64.StdEncoding.EncodeToString(b) u.Scheme = "https" - u.Host = PathStyle().host(bucket) + u.Host = PathStyle().host(opts.Hostname, bucket) q := u.Query() q.Set("GoogleAccessId", opts.GoogleAccessID) q.Set("Expires", fmt.Sprintf("%d", opts.Expires.Unix())) @@ -889,7 +907,9 @@ func (o *ObjectHandle) Generation(gen int64) *ObjectHandle { } // If returns a new ObjectHandle that applies a set of preconditions. -// Preconditions already set on the ObjectHandle are ignored. +// Preconditions already set on the ObjectHandle are ignored. The supplied +// Conditions must have at least one field set to a non-default value; +// otherwise an error will be returned from any operation on the ObjectHandle. // Operations on the new handle will return an error if the preconditions are not // satisfied. See https://cloud.google.com/storage/docs/generations-preconditions // for more details. @@ -1159,7 +1179,7 @@ func (uattrs *ObjectAttrsToUpdate) toProtoObject(bucket, object string) *storage o.Acl = toProtoObjectACL(uattrs.ACL) } - // TODO(cathyo): Handle metadata. Pending b/230510191. + o.Metadata = uattrs.Metadata return o } @@ -1480,6 +1500,8 @@ type Query struct { // aside from the prefix, contain delimiter will have their name, // truncated after the delimiter, returned in prefixes. // Duplicate prefixes are omitted. + // Must be set to / when used with the MatchGlob parameter to filter results + // in a directory-like mode. // Optional. Delimiter string @@ -1493,9 +1515,9 @@ type Query struct { Versions bool // attrSelection is used to select only specific fields to be returned by - // the query. It is set by the user calling calling SetAttrSelection. These + // the query. It is set by the user calling SetAttrSelection. These // are used by toFieldMask and toFieldSelection for gRPC and HTTP/JSON - // clients repsectively. + // clients respectively. attrSelection []string // StartOffset is used to filter results to objects whose names are @@ -1521,6 +1543,12 @@ type Query struct { // true, they will also be included as objects and their metadata will be // populated in the returned ObjectAttrs. IncludeTrailingDelimiter bool + + // MatchGlob is a glob pattern used to filter results (for example, foo*bar). See + // https://cloud.google.com/storage/docs/json_api/v1/objects/list#list-object-glob + // for syntax details. When Delimiter is set in conjunction with MatchGlob, + // it must be set to /. + MatchGlob string } // attrToFieldMap maps the field names of ObjectAttrs to the underlying field @@ -1713,6 +1741,8 @@ type Conditions struct { // GenerationNotMatch specifies that the object must not have the given // generation for the operation to occur. // If GenerationNotMatch is zero, it has no effect. + // This condition only works for object reads if the WithJSONReads client + // option is set. GenerationNotMatch int64 // DoesNotExist specifies that the object must not exist in the bucket for @@ -1731,6 +1761,8 @@ type Conditions struct { // MetagenerationNotMatch specifies that the object must not have the given // metageneration for the operation to occur. // If MetagenerationNotMatch is zero, it has no effect. + // This condition only works for object reads if the WithJSONReads client + // option is set. MetagenerationNotMatch int64 } diff --git a/vendor/cloud.google.com/go/storage/writer.go b/vendor/cloud.google.com/go/storage/writer.go index 3a6a1ce0f5..f06c311626 100644 --- a/vendor/cloud.google.com/go/storage/writer.go +++ b/vendor/cloud.google.com/go/storage/writer.go @@ -86,7 +86,7 @@ type Writer struct { // cancellation. ChunkRetryDeadline time.Duration - // ProgressFunc can be used to monitor the progress of a large write. + // ProgressFunc can be used to monitor the progress of a large write // operation. If ProgressFunc is not nil and writing requires multiple // calls to the underlying service (see // https://cloud.google.com/storage/docs/json_api/v1/how-tos/resumable-upload), diff --git a/vendor/github.com/google/s2a-go/.gitignore b/vendor/github.com/google/s2a-go/.gitignore new file mode 100644 index 0000000000..01764d1cdf --- /dev/null +++ b/vendor/github.com/google/s2a-go/.gitignore @@ -0,0 +1,6 @@ +# Ignore binaries without extension +//example/client/client +//example/server/server +//internal/v2/fakes2av2_server/fakes2av2_server + +.idea/ \ No newline at end of file diff --git a/vendor/github.com/google/s2a-go/CODE_OF_CONDUCT.md b/vendor/github.com/google/s2a-go/CODE_OF_CONDUCT.md new file mode 100644 index 0000000000..dc079b4d66 --- /dev/null +++ b/vendor/github.com/google/s2a-go/CODE_OF_CONDUCT.md @@ -0,0 +1,93 @@ +# Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of +experience, education, socio-economic status, nationality, personal appearance, +race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, or to ban temporarily or permanently any +contributor for other behaviors that they deem inappropriate, threatening, +offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +This Code of Conduct also applies outside the project spaces when the Project +Steward has a reasonable belief that an individual's behavior may have a +negative impact on the project or its community. + +## Conflict Resolution + +We do not believe that all conflict is bad; healthy debate and disagreement +often yield positive results. However, it is never okay to be disrespectful or +to engage in behavior that violates the project’s code of conduct. + +If you see someone violating the code of conduct, you are encouraged to address +the behavior directly with those involved. Many issues can be resolved quickly +and easily, and this gives people more control over the outcome of their +dispute. If you are unable to resolve the matter for any reason, or if the +behavior is threatening or harassing, report it. We are dedicated to providing +an environment where participants feel welcome and safe. + +Reports should be directed to *[PROJECT STEWARD NAME(s) AND EMAIL(s)]*, the +Project Steward(s) for *[PROJECT NAME]*. It is the Project Steward’s duty to +receive and address reported violations of the code of conduct. They will then +work with a committee consisting of representatives from the Open Source +Programs Office and the Google Open Source Strategy team. If for any reason you +are uncomfortable reaching out to the Project Steward, please email +opensource@google.com. + +We will investigate every complaint, but you may not receive a direct response. +We will use our discretion in determining when and how to follow up on reported +incidents, which may range from not taking action to permanent expulsion from +the project and project-sponsored spaces. We will notify the accused of the +report and provide them an opportunity to discuss it before any action is taken. +The identity of the reporter will be omitted from the details of the report +supplied to the accused. In potentially harmful situations, such as ongoing +harassment or threats to anyone's safety, we may take action without notice. + +## Attribution + +This Code of Conduct is adapted from the Contributor Covenant, version 1.4, +available at +https://www.contributor-covenant.org/version/1/4/code-of-conduct.html diff --git a/vendor/github.com/google/s2a-go/CONTRIBUTING.md b/vendor/github.com/google/s2a-go/CONTRIBUTING.md new file mode 100644 index 0000000000..22b241cb73 --- /dev/null +++ b/vendor/github.com/google/s2a-go/CONTRIBUTING.md @@ -0,0 +1,29 @@ +# How to Contribute + +We'd love to accept your patches and contributions to this project. There are +just a few small guidelines you need to follow. + +## Contributor License Agreement + +Contributions to this project must be accompanied by a Contributor License +Agreement (CLA). You (or your employer) retain the copyright to your +contribution; this simply gives us permission to use and redistribute your +contributions as part of the project. Head over to + to see your current agreements on file or +to sign a new one. + +You generally only need to submit a CLA once, so if you've already submitted one +(even if it was for a different project), you probably don't need to do it +again. + +## Code reviews + +All submissions, including submissions by project members, require review. We +use GitHub pull requests for this purpose. Consult +[GitHub Help](https://help.github.com/articles/about-pull-requests/) for more +information on using pull requests. + +## Community Guidelines + +This project follows +[Google's Open Source Community Guidelines](https://opensource.google/conduct/). diff --git a/vendor/github.com/google/s2a-go/LICENSE.md b/vendor/github.com/google/s2a-go/LICENSE.md new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/vendor/github.com/google/s2a-go/LICENSE.md @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/vendor/github.com/google/s2a-go/README.md b/vendor/github.com/google/s2a-go/README.md new file mode 100644 index 0000000000..d566950f38 --- /dev/null +++ b/vendor/github.com/google/s2a-go/README.md @@ -0,0 +1,17 @@ +# Secure Session Agent Client Libraries + +The Secure Session Agent is a service that enables a workload to offload select +operations from the mTLS handshake and protects a workload's private key +material from exfiltration. Specifically, the workload asks the Secure Session +Agent for the TLS configuration to use during the handshake, to perform private +key operations, and to validate the peer certificate chain. The Secure Session +Agent's client libraries enable applications to communicate with the Secure +Session Agent during the TLS handshake, and to encrypt traffic to the peer +after the TLS handshake is complete. + +This repository contains the source code for the Secure Session Agent's Go +client libraries, which allow gRPC-Go applications to use the Secure Session +Agent. This repository supports the Bazel and Golang build systems. + +All code in this repository is experimental and subject to change. We do not +guarantee API stability at this time. diff --git a/vendor/github.com/google/s2a-go/fallback/s2a_fallback.go b/vendor/github.com/google/s2a-go/fallback/s2a_fallback.go new file mode 100644 index 0000000000..034d1b912c --- /dev/null +++ b/vendor/github.com/google/s2a-go/fallback/s2a_fallback.go @@ -0,0 +1,167 @@ +/* + * + * Copyright 2023 Google LLC + * + * 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 + * + * https://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. + * + */ + +// Package fallback provides default implementations of fallback options when S2A fails. +package fallback + +import ( + "context" + "crypto/tls" + "fmt" + "net" + + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/grpclog" +) + +const ( + alpnProtoStrH2 = "h2" + alpnProtoStrHTTP = "http/1.1" + defaultHTTPSPort = "443" +) + +// FallbackTLSConfigGRPC is a tls.Config used by the DefaultFallbackClientHandshakeFunc function. +// It supports GRPC use case, thus the alpn is set to 'h2'. +var FallbackTLSConfigGRPC = tls.Config{ + MinVersion: tls.VersionTLS13, + ClientSessionCache: nil, + NextProtos: []string{alpnProtoStrH2}, +} + +// FallbackTLSConfigHTTP is a tls.Config used by the DefaultFallbackDialerAndAddress func. +// It supports the HTTP use case and the alpn is set to both 'http/1.1' and 'h2'. +var FallbackTLSConfigHTTP = tls.Config{ + MinVersion: tls.VersionTLS13, + ClientSessionCache: nil, + NextProtos: []string{alpnProtoStrH2, alpnProtoStrHTTP}, +} + +// ClientHandshake establishes a TLS connection and returns it, plus its auth info. +// Inputs: +// +// targetServer: the server attempted with S2A. +// conn: the tcp connection to the server at address targetServer that was passed into S2A's ClientHandshake func. +// If fallback is successful, the `conn` should be closed. +// err: the error encountered when performing the client-side TLS handshake with S2A. +type ClientHandshake func(ctx context.Context, targetServer string, conn net.Conn, err error) (net.Conn, credentials.AuthInfo, error) + +// DefaultFallbackClientHandshakeFunc returns a ClientHandshake function, +// which establishes a TLS connection to the provided fallbackAddr, returns the new connection and its auth info. +// Example use: +// +// transportCreds, _ = s2a.NewClientCreds(&s2a.ClientOptions{ +// S2AAddress: s2aAddress, +// FallbackOpts: &s2a.FallbackOptions{ // optional +// FallbackClientHandshakeFunc: fallback.DefaultFallbackClientHandshakeFunc(fallbackAddr), +// }, +// }) +// +// The fallback server's certificate must be verifiable using OS root store. +// The fallbackAddr is expected to be a network address, e.g. example.com:port. If port is not specified, +// it uses default port 443. +// In the returned function's TLS config, ClientSessionCache is explicitly set to nil to disable TLS resumption, +// and min TLS version is set to 1.3. +func DefaultFallbackClientHandshakeFunc(fallbackAddr string) (ClientHandshake, error) { + var fallbackDialer = tls.Dialer{Config: &FallbackTLSConfigGRPC} + return defaultFallbackClientHandshakeFuncInternal(fallbackAddr, fallbackDialer.DialContext) +} + +func defaultFallbackClientHandshakeFuncInternal(fallbackAddr string, dialContextFunc func(context.Context, string, string) (net.Conn, error)) (ClientHandshake, error) { + fallbackServerAddr, err := processFallbackAddr(fallbackAddr) + if err != nil { + if grpclog.V(1) { + grpclog.Infof("error processing fallback address [%s]: %v", fallbackAddr, err) + } + return nil, err + } + return func(ctx context.Context, targetServer string, conn net.Conn, s2aErr error) (net.Conn, credentials.AuthInfo, error) { + fbConn, fbErr := dialContextFunc(ctx, "tcp", fallbackServerAddr) + if fbErr != nil { + grpclog.Infof("dialing to fallback server %s failed: %v", fallbackServerAddr, fbErr) + return nil, nil, fmt.Errorf("dialing to fallback server %s failed: %v; S2A client handshake with %s error: %w", fallbackServerAddr, fbErr, targetServer, s2aErr) + } + + tc, success := fbConn.(*tls.Conn) + if !success { + grpclog.Infof("the connection with fallback server is expected to be tls but isn't") + return nil, nil, fmt.Errorf("the connection with fallback server is expected to be tls but isn't; S2A client handshake with %s error: %w", targetServer, s2aErr) + } + + tlsInfo := credentials.TLSInfo{ + State: tc.ConnectionState(), + CommonAuthInfo: credentials.CommonAuthInfo{ + SecurityLevel: credentials.PrivacyAndIntegrity, + }, + } + if grpclog.V(1) { + grpclog.Infof("ConnectionState.NegotiatedProtocol: %v", tc.ConnectionState().NegotiatedProtocol) + grpclog.Infof("ConnectionState.HandshakeComplete: %v", tc.ConnectionState().HandshakeComplete) + grpclog.Infof("ConnectionState.ServerName: %v", tc.ConnectionState().ServerName) + } + conn.Close() + return fbConn, tlsInfo, nil + }, nil +} + +// DefaultFallbackDialerAndAddress returns a TLS dialer and the network address to dial. +// Example use: +// +// fallbackDialer, fallbackServerAddr := fallback.DefaultFallbackDialerAndAddress(fallbackAddr) +// dialTLSContext := s2a.NewS2aDialTLSContextFunc(&s2a.ClientOptions{ +// S2AAddress: s2aAddress, // required +// FallbackOpts: &s2a.FallbackOptions{ +// FallbackDialer: &s2a.FallbackDialer{ +// Dialer: fallbackDialer, +// ServerAddr: fallbackServerAddr, +// }, +// }, +// }) +// +// The fallback server's certificate should be verifiable using OS root store. +// The fallbackAddr is expected to be a network address, e.g. example.com:port. If port is not specified, +// it uses default port 443. +// In the returned function's TLS config, ClientSessionCache is explicitly set to nil to disable TLS resumption, +// and min TLS version is set to 1.3. +func DefaultFallbackDialerAndAddress(fallbackAddr string) (*tls.Dialer, string, error) { + fallbackServerAddr, err := processFallbackAddr(fallbackAddr) + if err != nil { + if grpclog.V(1) { + grpclog.Infof("error processing fallback address [%s]: %v", fallbackAddr, err) + } + return nil, "", err + } + return &tls.Dialer{Config: &FallbackTLSConfigHTTP}, fallbackServerAddr, nil +} + +func processFallbackAddr(fallbackAddr string) (string, error) { + var fallbackServerAddr string + var err error + + if fallbackAddr == "" { + return "", fmt.Errorf("empty fallback address") + } + _, _, err = net.SplitHostPort(fallbackAddr) + if err != nil { + // fallbackAddr does not have port suffix + fallbackServerAddr = net.JoinHostPort(fallbackAddr, defaultHTTPSPort) + } else { + // FallbackServerAddr already has port suffix + fallbackServerAddr = fallbackAddr + } + return fallbackServerAddr, nil +} diff --git a/vendor/github.com/google/s2a-go/internal/authinfo/authinfo.go b/vendor/github.com/google/s2a-go/internal/authinfo/authinfo.go new file mode 100644 index 0000000000..aa3967f9d1 --- /dev/null +++ b/vendor/github.com/google/s2a-go/internal/authinfo/authinfo.go @@ -0,0 +1,119 @@ +/* + * + * Copyright 2021 Google LLC + * + * 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 + * + * https://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. + * + */ + +// Package authinfo provides authentication and authorization information that +// results from the TLS handshake. +package authinfo + +import ( + "errors" + + commonpb "github.com/google/s2a-go/internal/proto/common_go_proto" + contextpb "github.com/google/s2a-go/internal/proto/s2a_context_go_proto" + grpcpb "github.com/google/s2a-go/internal/proto/s2a_go_proto" + "google.golang.org/grpc/credentials" +) + +var _ credentials.AuthInfo = (*S2AAuthInfo)(nil) + +const s2aAuthType = "s2a" + +// S2AAuthInfo exposes authentication and authorization information from the +// S2A session result to the gRPC stack. +type S2AAuthInfo struct { + s2aContext *contextpb.S2AContext + commonAuthInfo credentials.CommonAuthInfo +} + +// NewS2AAuthInfo returns a new S2AAuthInfo object from the S2A session result. +func NewS2AAuthInfo(result *grpcpb.SessionResult) (credentials.AuthInfo, error) { + return newS2AAuthInfo(result) +} + +func newS2AAuthInfo(result *grpcpb.SessionResult) (*S2AAuthInfo, error) { + if result == nil { + return nil, errors.New("NewS2aAuthInfo given nil session result") + } + return &S2AAuthInfo{ + s2aContext: &contextpb.S2AContext{ + ApplicationProtocol: result.GetApplicationProtocol(), + TlsVersion: result.GetState().GetTlsVersion(), + Ciphersuite: result.GetState().GetTlsCiphersuite(), + PeerIdentity: result.GetPeerIdentity(), + LocalIdentity: result.GetLocalIdentity(), + PeerCertFingerprint: result.GetPeerCertFingerprint(), + LocalCertFingerprint: result.GetLocalCertFingerprint(), + IsHandshakeResumed: result.GetState().GetIsHandshakeResumed(), + }, + commonAuthInfo: credentials.CommonAuthInfo{SecurityLevel: credentials.PrivacyAndIntegrity}, + }, nil +} + +// AuthType returns the authentication type. +func (s *S2AAuthInfo) AuthType() string { + return s2aAuthType +} + +// ApplicationProtocol returns the application protocol, e.g. "grpc". +func (s *S2AAuthInfo) ApplicationProtocol() string { + return s.s2aContext.GetApplicationProtocol() +} + +// TLSVersion returns the TLS version negotiated during the handshake. +func (s *S2AAuthInfo) TLSVersion() commonpb.TLSVersion { + return s.s2aContext.GetTlsVersion() +} + +// Ciphersuite returns the ciphersuite negotiated during the handshake. +func (s *S2AAuthInfo) Ciphersuite() commonpb.Ciphersuite { + return s.s2aContext.GetCiphersuite() +} + +// PeerIdentity returns the authenticated identity of the peer. +func (s *S2AAuthInfo) PeerIdentity() *commonpb.Identity { + return s.s2aContext.GetPeerIdentity() +} + +// LocalIdentity returns the local identity of the application used during +// session setup. +func (s *S2AAuthInfo) LocalIdentity() *commonpb.Identity { + return s.s2aContext.GetLocalIdentity() +} + +// PeerCertFingerprint returns the SHA256 hash of the peer certificate used in +// the S2A handshake. +func (s *S2AAuthInfo) PeerCertFingerprint() []byte { + return s.s2aContext.GetPeerCertFingerprint() +} + +// LocalCertFingerprint returns the SHA256 hash of the local certificate used +// in the S2A handshake. +func (s *S2AAuthInfo) LocalCertFingerprint() []byte { + return s.s2aContext.GetLocalCertFingerprint() +} + +// IsHandshakeResumed returns true if a cached session was used to resume +// the handshake. +func (s *S2AAuthInfo) IsHandshakeResumed() bool { + return s.s2aContext.GetIsHandshakeResumed() +} + +// SecurityLevel returns the security level of the connection. +func (s *S2AAuthInfo) SecurityLevel() credentials.SecurityLevel { + return s.commonAuthInfo.SecurityLevel +} diff --git a/vendor/github.com/google/s2a-go/internal/handshaker/handshaker.go b/vendor/github.com/google/s2a-go/internal/handshaker/handshaker.go new file mode 100644 index 0000000000..8297c9a974 --- /dev/null +++ b/vendor/github.com/google/s2a-go/internal/handshaker/handshaker.go @@ -0,0 +1,438 @@ +/* + * + * Copyright 2021 Google LLC + * + * 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 + * + * https://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. + * + */ + +// Package handshaker communicates with the S2A handshaker service. +package handshaker + +import ( + "context" + "errors" + "fmt" + "io" + "net" + "sync" + + "github.com/google/s2a-go/internal/authinfo" + commonpb "github.com/google/s2a-go/internal/proto/common_go_proto" + s2apb "github.com/google/s2a-go/internal/proto/s2a_go_proto" + "github.com/google/s2a-go/internal/record" + "github.com/google/s2a-go/internal/tokenmanager" + grpc "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/grpclog" +) + +var ( + // appProtocol contains the application protocol accepted by the handshaker. + appProtocol = "grpc" + // frameLimit is the maximum size of a frame in bytes. + frameLimit = 1024 * 64 + // peerNotRespondingError is the error thrown when the peer doesn't respond. + errPeerNotResponding = errors.New("peer is not responding and re-connection should be attempted") +) + +// Handshaker defines a handshaker interface. +type Handshaker interface { + // ClientHandshake starts and completes a TLS handshake from the client side, + // and returns a secure connection along with additional auth information. + ClientHandshake(ctx context.Context) (net.Conn, credentials.AuthInfo, error) + // ServerHandshake starts and completes a TLS handshake from the server side, + // and returns a secure connection along with additional auth information. + ServerHandshake(ctx context.Context) (net.Conn, credentials.AuthInfo, error) + // Close terminates the Handshaker. It should be called when the handshake + // is complete. + Close() error +} + +// ClientHandshakerOptions contains the options needed to configure the S2A +// handshaker service on the client-side. +type ClientHandshakerOptions struct { + // MinTLSVersion specifies the min TLS version supported by the client. + MinTLSVersion commonpb.TLSVersion + // MaxTLSVersion specifies the max TLS version supported by the client. + MaxTLSVersion commonpb.TLSVersion + // TLSCiphersuites is the ordered list of ciphersuites supported by the + // client. + TLSCiphersuites []commonpb.Ciphersuite + // TargetIdentities contains a list of allowed server identities. One of the + // target identities should match the peer identity in the handshake + // result; otherwise, the handshake fails. + TargetIdentities []*commonpb.Identity + // LocalIdentity is the local identity of the client application. If none is + // provided, then the S2A will choose the default identity. + LocalIdentity *commonpb.Identity + // TargetName is the allowed server name, which may be used for server + // authorization check by the S2A if it is provided. + TargetName string + // EnsureProcessSessionTickets allows users to wait and ensure that all + // available session tickets are sent to S2A before a process completes. + EnsureProcessSessionTickets *sync.WaitGroup +} + +// ServerHandshakerOptions contains the options needed to configure the S2A +// handshaker service on the server-side. +type ServerHandshakerOptions struct { + // MinTLSVersion specifies the min TLS version supported by the server. + MinTLSVersion commonpb.TLSVersion + // MaxTLSVersion specifies the max TLS version supported by the server. + MaxTLSVersion commonpb.TLSVersion + // TLSCiphersuites is the ordered list of ciphersuites supported by the + // server. + TLSCiphersuites []commonpb.Ciphersuite + // LocalIdentities is the list of local identities that may be assumed by + // the server. If no local identity is specified, then the S2A chooses a + // default local identity. + LocalIdentities []*commonpb.Identity +} + +// s2aHandshaker performs a TLS handshake using the S2A handshaker service. +type s2aHandshaker struct { + // stream is used to communicate with the S2A handshaker service. + stream s2apb.S2AService_SetUpSessionClient + // conn is the connection to the peer. + conn net.Conn + // clientOpts should be non-nil iff the handshaker is client-side. + clientOpts *ClientHandshakerOptions + // serverOpts should be non-nil iff the handshaker is server-side. + serverOpts *ServerHandshakerOptions + // isClient determines if the handshaker is client or server side. + isClient bool + // hsAddr stores the address of the S2A handshaker service. + hsAddr string + // tokenManager manages access tokens for authenticating to S2A. + tokenManager tokenmanager.AccessTokenManager + // localIdentities is the set of local identities for whom the + // tokenManager should fetch a token when preparing a request to be + // sent to S2A. + localIdentities []*commonpb.Identity +} + +// NewClientHandshaker creates an s2aHandshaker instance that performs a +// client-side TLS handshake using the S2A handshaker service. +func NewClientHandshaker(ctx context.Context, conn *grpc.ClientConn, c net.Conn, hsAddr string, opts *ClientHandshakerOptions) (Handshaker, error) { + stream, err := s2apb.NewS2AServiceClient(conn).SetUpSession(ctx, grpc.WaitForReady(true)) + if err != nil { + return nil, err + } + tokenManager, err := tokenmanager.NewSingleTokenAccessTokenManager() + if err != nil { + grpclog.Infof("failed to create single token access token manager: %v", err) + } + return newClientHandshaker(stream, c, hsAddr, opts, tokenManager), nil +} + +func newClientHandshaker(stream s2apb.S2AService_SetUpSessionClient, c net.Conn, hsAddr string, opts *ClientHandshakerOptions, tokenManager tokenmanager.AccessTokenManager) *s2aHandshaker { + var localIdentities []*commonpb.Identity + if opts != nil { + localIdentities = []*commonpb.Identity{opts.LocalIdentity} + } + return &s2aHandshaker{ + stream: stream, + conn: c, + clientOpts: opts, + isClient: true, + hsAddr: hsAddr, + tokenManager: tokenManager, + localIdentities: localIdentities, + } +} + +// NewServerHandshaker creates an s2aHandshaker instance that performs a +// server-side TLS handshake using the S2A handshaker service. +func NewServerHandshaker(ctx context.Context, conn *grpc.ClientConn, c net.Conn, hsAddr string, opts *ServerHandshakerOptions) (Handshaker, error) { + stream, err := s2apb.NewS2AServiceClient(conn).SetUpSession(ctx, grpc.WaitForReady(true)) + if err != nil { + return nil, err + } + tokenManager, err := tokenmanager.NewSingleTokenAccessTokenManager() + if err != nil { + grpclog.Infof("failed to create single token access token manager: %v", err) + } + return newServerHandshaker(stream, c, hsAddr, opts, tokenManager), nil +} + +func newServerHandshaker(stream s2apb.S2AService_SetUpSessionClient, c net.Conn, hsAddr string, opts *ServerHandshakerOptions, tokenManager tokenmanager.AccessTokenManager) *s2aHandshaker { + var localIdentities []*commonpb.Identity + if opts != nil { + localIdentities = opts.LocalIdentities + } + return &s2aHandshaker{ + stream: stream, + conn: c, + serverOpts: opts, + isClient: false, + hsAddr: hsAddr, + tokenManager: tokenManager, + localIdentities: localIdentities, + } +} + +// ClientHandshake performs a client-side TLS handshake using the S2A handshaker +// service. When complete, returns a TLS connection. +func (h *s2aHandshaker) ClientHandshake(_ context.Context) (net.Conn, credentials.AuthInfo, error) { + if !h.isClient { + return nil, nil, errors.New("only handshakers created using NewClientHandshaker can perform a client-side handshake") + } + // Extract the hostname from the target name. The target name is assumed to be an authority. + hostname, _, err := net.SplitHostPort(h.clientOpts.TargetName) + if err != nil { + // If the target name had no host port or could not be parsed, use it as is. + hostname = h.clientOpts.TargetName + } + + // Prepare a client start message to send to the S2A handshaker service. + req := &s2apb.SessionReq{ + ReqOneof: &s2apb.SessionReq_ClientStart{ + ClientStart: &s2apb.ClientSessionStartReq{ + ApplicationProtocols: []string{appProtocol}, + MinTlsVersion: h.clientOpts.MinTLSVersion, + MaxTlsVersion: h.clientOpts.MaxTLSVersion, + TlsCiphersuites: h.clientOpts.TLSCiphersuites, + TargetIdentities: h.clientOpts.TargetIdentities, + LocalIdentity: h.clientOpts.LocalIdentity, + TargetName: hostname, + }, + }, + AuthMechanisms: h.getAuthMechanisms(), + } + conn, result, err := h.setUpSession(req) + if err != nil { + return nil, nil, err + } + authInfo, err := authinfo.NewS2AAuthInfo(result) + if err != nil { + return nil, nil, err + } + return conn, authInfo, nil +} + +// ServerHandshake performs a server-side TLS handshake using the S2A handshaker +// service. When complete, returns a TLS connection. +func (h *s2aHandshaker) ServerHandshake(_ context.Context) (net.Conn, credentials.AuthInfo, error) { + if h.isClient { + return nil, nil, errors.New("only handshakers created using NewServerHandshaker can perform a server-side handshake") + } + p := make([]byte, frameLimit) + n, err := h.conn.Read(p) + if err != nil { + return nil, nil, err + } + // Prepare a server start message to send to the S2A handshaker service. + req := &s2apb.SessionReq{ + ReqOneof: &s2apb.SessionReq_ServerStart{ + ServerStart: &s2apb.ServerSessionStartReq{ + ApplicationProtocols: []string{appProtocol}, + MinTlsVersion: h.serverOpts.MinTLSVersion, + MaxTlsVersion: h.serverOpts.MaxTLSVersion, + TlsCiphersuites: h.serverOpts.TLSCiphersuites, + LocalIdentities: h.serverOpts.LocalIdentities, + InBytes: p[:n], + }, + }, + AuthMechanisms: h.getAuthMechanisms(), + } + conn, result, err := h.setUpSession(req) + if err != nil { + return nil, nil, err + } + authInfo, err := authinfo.NewS2AAuthInfo(result) + if err != nil { + return nil, nil, err + } + return conn, authInfo, nil +} + +// setUpSession proxies messages between the peer and the S2A handshaker +// service. +func (h *s2aHandshaker) setUpSession(req *s2apb.SessionReq) (net.Conn, *s2apb.SessionResult, error) { + resp, err := h.accessHandshakerService(req) + if err != nil { + return nil, nil, err + } + // Check if the returned status is an error. + if resp.GetStatus() != nil { + if got, want := resp.GetStatus().Code, uint32(codes.OK); got != want { + return nil, nil, fmt.Errorf("%v", resp.GetStatus().Details) + } + } + // Calculate the extra unread bytes from the Session. Attempting to consume + // more than the bytes sent will throw an error. + var extra []byte + if req.GetServerStart() != nil { + if resp.GetBytesConsumed() > uint32(len(req.GetServerStart().GetInBytes())) { + return nil, nil, errors.New("handshaker service consumed bytes value is out-of-bounds") + } + extra = req.GetServerStart().GetInBytes()[resp.GetBytesConsumed():] + } + result, extra, err := h.processUntilDone(resp, extra) + if err != nil { + return nil, nil, err + } + if result.GetLocalIdentity() == nil { + return nil, nil, errors.New("local identity must be populated in session result") + } + + // Create a new TLS record protocol using the Session Result. + newConn, err := record.NewConn(&record.ConnParameters{ + NetConn: h.conn, + Ciphersuite: result.GetState().GetTlsCiphersuite(), + TLSVersion: result.GetState().GetTlsVersion(), + InTrafficSecret: result.GetState().GetInKey(), + OutTrafficSecret: result.GetState().GetOutKey(), + UnusedBuf: extra, + InSequence: result.GetState().GetInSequence(), + OutSequence: result.GetState().GetOutSequence(), + HSAddr: h.hsAddr, + ConnectionID: result.GetState().GetConnectionId(), + LocalIdentity: result.GetLocalIdentity(), + EnsureProcessSessionTickets: h.ensureProcessSessionTickets(), + }) + if err != nil { + return nil, nil, err + } + return newConn, result, nil +} + +func (h *s2aHandshaker) ensureProcessSessionTickets() *sync.WaitGroup { + if h.clientOpts == nil { + return nil + } + return h.clientOpts.EnsureProcessSessionTickets +} + +// accessHandshakerService sends the session request to the S2A handshaker +// service and returns the session response. +func (h *s2aHandshaker) accessHandshakerService(req *s2apb.SessionReq) (*s2apb.SessionResp, error) { + if err := h.stream.Send(req); err != nil { + return nil, err + } + resp, err := h.stream.Recv() + if err != nil { + return nil, err + } + return resp, nil +} + +// processUntilDone continues proxying messages between the peer and the S2A +// handshaker service until the handshaker service returns the SessionResult at +// the end of the handshake or an error occurs. +func (h *s2aHandshaker) processUntilDone(resp *s2apb.SessionResp, unusedBytes []byte) (*s2apb.SessionResult, []byte, error) { + for { + if len(resp.OutFrames) > 0 { + if _, err := h.conn.Write(resp.OutFrames); err != nil { + return nil, nil, err + } + } + if resp.Result != nil { + return resp.Result, unusedBytes, nil + } + buf := make([]byte, frameLimit) + n, err := h.conn.Read(buf) + if err != nil && err != io.EOF { + return nil, nil, err + } + // If there is nothing to send to the handshaker service and nothing is + // received from the peer, then we are stuck. This covers the case when + // the peer is not responding. Note that handshaker service connection + // issues are caught in accessHandshakerService before we even get + // here. + if len(resp.OutFrames) == 0 && n == 0 { + return nil, nil, errPeerNotResponding + } + // Append extra bytes from the previous interaction with the handshaker + // service with the current buffer read from conn. + p := append(unusedBytes, buf[:n]...) + // From here on, p and unusedBytes point to the same slice. + resp, err = h.accessHandshakerService(&s2apb.SessionReq{ + ReqOneof: &s2apb.SessionReq_Next{ + Next: &s2apb.SessionNextReq{ + InBytes: p, + }, + }, + AuthMechanisms: h.getAuthMechanisms(), + }) + if err != nil { + return nil, nil, err + } + + // Cache the local identity returned by S2A, if it is populated. This + // overwrites any existing local identities. This is done because, once the + // S2A has selected a local identity, then only that local identity should + // be asserted in future requests until the end of the current handshake. + if resp.GetLocalIdentity() != nil { + h.localIdentities = []*commonpb.Identity{resp.GetLocalIdentity()} + } + + // Set unusedBytes based on the handshaker service response. + if resp.GetBytesConsumed() > uint32(len(p)) { + return nil, nil, errors.New("handshaker service consumed bytes value is out-of-bounds") + } + unusedBytes = p[resp.GetBytesConsumed():] + } +} + +// Close shuts down the handshaker and the stream to the S2A handshaker service +// when the handshake is complete. It should be called when the caller obtains +// the secure connection at the end of the handshake. +func (h *s2aHandshaker) Close() error { + return h.stream.CloseSend() +} + +func (h *s2aHandshaker) getAuthMechanisms() []*s2apb.AuthenticationMechanism { + if h.tokenManager == nil { + return nil + } + // First handle the special case when no local identities have been provided + // by the application. In this case, an AuthenticationMechanism with no local + // identity will be sent. + if len(h.localIdentities) == 0 { + token, err := h.tokenManager.DefaultToken() + if err != nil { + grpclog.Infof("unable to get token for empty local identity: %v", err) + return nil + } + return []*s2apb.AuthenticationMechanism{ + { + MechanismOneof: &s2apb.AuthenticationMechanism_Token{ + Token: token, + }, + }, + } + } + + // Next, handle the case where the application (or the S2A) has provided + // one or more local identities. + var authMechanisms []*s2apb.AuthenticationMechanism + for _, localIdentity := range h.localIdentities { + token, err := h.tokenManager.Token(localIdentity) + if err != nil { + grpclog.Infof("unable to get token for local identity %v: %v", localIdentity, err) + continue + } + + authMechanism := &s2apb.AuthenticationMechanism{ + Identity: localIdentity, + MechanismOneof: &s2apb.AuthenticationMechanism_Token{ + Token: token, + }, + } + authMechanisms = append(authMechanisms, authMechanism) + } + return authMechanisms +} diff --git a/vendor/github.com/google/s2a-go/internal/handshaker/service/service.go b/vendor/github.com/google/s2a-go/internal/handshaker/service/service.go new file mode 100644 index 0000000000..49573af887 --- /dev/null +++ b/vendor/github.com/google/s2a-go/internal/handshaker/service/service.go @@ -0,0 +1,99 @@ +/* + * + * Copyright 2021 Google LLC + * + * 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 + * + * https://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. + * + */ + +// Package service is a utility for calling the S2A handshaker service. +package service + +import ( + "context" + "net" + "os" + "strings" + "sync" + "time" + + "google.golang.org/appengine" + "google.golang.org/appengine/socket" + grpc "google.golang.org/grpc" + "google.golang.org/grpc/grpclog" +) + +// An environment variable, if true, opportunistically use AppEngine-specific dialer to call S2A. +const enableAppEngineDialerEnv = "S2A_ENABLE_APP_ENGINE_DIALER" + +var ( + // appEngineDialerHook is an AppEngine-specific dial option that is set + // during init time. If nil, then the application is not running on Google + // AppEngine. + appEngineDialerHook func(context.Context) grpc.DialOption + // mu guards hsConnMap and hsDialer. + mu sync.Mutex + // hsConnMap represents a mapping from an S2A handshaker service address + // to a corresponding connection to an S2A handshaker service instance. + hsConnMap = make(map[string]*grpc.ClientConn) + // hsDialer will be reassigned in tests. + hsDialer = grpc.Dial +) + +func init() { + if !appengine.IsAppEngine() && !appengine.IsDevAppServer() { + return + } + appEngineDialerHook = func(ctx context.Context) grpc.DialOption { + return grpc.WithDialer(func(addr string, timeout time.Duration) (net.Conn, error) { + return socket.DialTimeout(ctx, "tcp", addr, timeout) + }) + } +} + +// Dial dials the S2A handshaker service. If a connection has already been +// established, this function returns it. Otherwise, a new connection is +// created. +func Dial(handshakerServiceAddress string) (*grpc.ClientConn, error) { + mu.Lock() + defer mu.Unlock() + + hsConn, ok := hsConnMap[handshakerServiceAddress] + if !ok { + // Create a new connection to the S2A handshaker service. Note that + // this connection stays open until the application is closed. + grpcOpts := []grpc.DialOption{ + grpc.WithInsecure(), + } + if enableAppEngineDialer() && appEngineDialerHook != nil { + if grpclog.V(1) { + grpclog.Info("Using AppEngine-specific dialer to talk to S2A.") + } + grpcOpts = append(grpcOpts, appEngineDialerHook(context.Background())) + } + var err error + hsConn, err = hsDialer(handshakerServiceAddress, grpcOpts...) + if err != nil { + return nil, err + } + hsConnMap[handshakerServiceAddress] = hsConn + } + return hsConn, nil +} + +func enableAppEngineDialer() bool { + if strings.ToLower(os.Getenv(enableAppEngineDialerEnv)) == "true" { + return true + } + return false +} diff --git a/vendor/github.com/google/s2a-go/internal/proto/common_go_proto/common.pb.go b/vendor/github.com/google/s2a-go/internal/proto/common_go_proto/common.pb.go new file mode 100644 index 0000000000..16278a1d99 --- /dev/null +++ b/vendor/github.com/google/s2a-go/internal/proto/common_go_proto/common.pb.go @@ -0,0 +1,389 @@ +// Copyright 2021 Google LLC +// +// 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 +// +// https://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.30.0 +// protoc v3.21.12 +// source: internal/proto/common/common.proto + +package common_go_proto + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +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 ciphersuites supported by S2A. The name determines the confidentiality, +// and authentication ciphers as well as the hash algorithm used for PRF in +// TLS 1.2 or HKDF in TLS 1.3. Thus, the components of the name are: +// - AEAD -- for encryption and authentication, e.g., AES_128_GCM. +// - Hash algorithm -- used in PRF or HKDF, e.g., SHA256. +type Ciphersuite int32 + +const ( + Ciphersuite_AES_128_GCM_SHA256 Ciphersuite = 0 + Ciphersuite_AES_256_GCM_SHA384 Ciphersuite = 1 + Ciphersuite_CHACHA20_POLY1305_SHA256 Ciphersuite = 2 +) + +// Enum value maps for Ciphersuite. +var ( + Ciphersuite_name = map[int32]string{ + 0: "AES_128_GCM_SHA256", + 1: "AES_256_GCM_SHA384", + 2: "CHACHA20_POLY1305_SHA256", + } + Ciphersuite_value = map[string]int32{ + "AES_128_GCM_SHA256": 0, + "AES_256_GCM_SHA384": 1, + "CHACHA20_POLY1305_SHA256": 2, + } +) + +func (x Ciphersuite) Enum() *Ciphersuite { + p := new(Ciphersuite) + *p = x + return p +} + +func (x Ciphersuite) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Ciphersuite) Descriptor() protoreflect.EnumDescriptor { + return file_internal_proto_common_common_proto_enumTypes[0].Descriptor() +} + +func (Ciphersuite) Type() protoreflect.EnumType { + return &file_internal_proto_common_common_proto_enumTypes[0] +} + +func (x Ciphersuite) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Ciphersuite.Descriptor instead. +func (Ciphersuite) EnumDescriptor() ([]byte, []int) { + return file_internal_proto_common_common_proto_rawDescGZIP(), []int{0} +} + +// The TLS versions supported by S2A's handshaker module. +type TLSVersion int32 + +const ( + TLSVersion_TLS1_2 TLSVersion = 0 + TLSVersion_TLS1_3 TLSVersion = 1 +) + +// Enum value maps for TLSVersion. +var ( + TLSVersion_name = map[int32]string{ + 0: "TLS1_2", + 1: "TLS1_3", + } + TLSVersion_value = map[string]int32{ + "TLS1_2": 0, + "TLS1_3": 1, + } +) + +func (x TLSVersion) Enum() *TLSVersion { + p := new(TLSVersion) + *p = x + return p +} + +func (x TLSVersion) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (TLSVersion) Descriptor() protoreflect.EnumDescriptor { + return file_internal_proto_common_common_proto_enumTypes[1].Descriptor() +} + +func (TLSVersion) Type() protoreflect.EnumType { + return &file_internal_proto_common_common_proto_enumTypes[1] +} + +func (x TLSVersion) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use TLSVersion.Descriptor instead. +func (TLSVersion) EnumDescriptor() ([]byte, []int) { + return file_internal_proto_common_common_proto_rawDescGZIP(), []int{1} +} + +type Identity struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to IdentityOneof: + // + // *Identity_SpiffeId + // *Identity_Hostname + // *Identity_Uid + // *Identity_MdbUsername + // *Identity_GaiaId + IdentityOneof isIdentity_IdentityOneof `protobuf_oneof:"identity_oneof"` + // Additional identity-specific attributes. + Attributes map[string]string `protobuf:"bytes,3,rep,name=attributes,proto3" json:"attributes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *Identity) Reset() { + *x = Identity{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_proto_common_common_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Identity) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Identity) ProtoMessage() {} + +func (x *Identity) ProtoReflect() protoreflect.Message { + mi := &file_internal_proto_common_common_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) +} + +// Deprecated: Use Identity.ProtoReflect.Descriptor instead. +func (*Identity) Descriptor() ([]byte, []int) { + return file_internal_proto_common_common_proto_rawDescGZIP(), []int{0} +} + +func (m *Identity) GetIdentityOneof() isIdentity_IdentityOneof { + if m != nil { + return m.IdentityOneof + } + return nil +} + +func (x *Identity) GetSpiffeId() string { + if x, ok := x.GetIdentityOneof().(*Identity_SpiffeId); ok { + return x.SpiffeId + } + return "" +} + +func (x *Identity) GetHostname() string { + if x, ok := x.GetIdentityOneof().(*Identity_Hostname); ok { + return x.Hostname + } + return "" +} + +func (x *Identity) GetUid() string { + if x, ok := x.GetIdentityOneof().(*Identity_Uid); ok { + return x.Uid + } + return "" +} + +func (x *Identity) GetMdbUsername() string { + if x, ok := x.GetIdentityOneof().(*Identity_MdbUsername); ok { + return x.MdbUsername + } + return "" +} + +func (x *Identity) GetGaiaId() string { + if x, ok := x.GetIdentityOneof().(*Identity_GaiaId); ok { + return x.GaiaId + } + return "" +} + +func (x *Identity) GetAttributes() map[string]string { + if x != nil { + return x.Attributes + } + return nil +} + +type isIdentity_IdentityOneof interface { + isIdentity_IdentityOneof() +} + +type Identity_SpiffeId struct { + // The SPIFFE ID of a connection endpoint. + SpiffeId string `protobuf:"bytes,1,opt,name=spiffe_id,json=spiffeId,proto3,oneof"` +} + +type Identity_Hostname struct { + // The hostname of a connection endpoint. + Hostname string `protobuf:"bytes,2,opt,name=hostname,proto3,oneof"` +} + +type Identity_Uid struct { + // The UID of a connection endpoint. + Uid string `protobuf:"bytes,4,opt,name=uid,proto3,oneof"` +} + +type Identity_MdbUsername struct { + // The MDB username of a connection endpoint. + MdbUsername string `protobuf:"bytes,5,opt,name=mdb_username,json=mdbUsername,proto3,oneof"` +} + +type Identity_GaiaId struct { + // The Gaia ID of a connection endpoint. + GaiaId string `protobuf:"bytes,6,opt,name=gaia_id,json=gaiaId,proto3,oneof"` +} + +func (*Identity_SpiffeId) isIdentity_IdentityOneof() {} + +func (*Identity_Hostname) isIdentity_IdentityOneof() {} + +func (*Identity_Uid) isIdentity_IdentityOneof() {} + +func (*Identity_MdbUsername) isIdentity_IdentityOneof() {} + +func (*Identity_GaiaId) isIdentity_IdentityOneof() {} + +var File_internal_proto_common_common_proto protoreflect.FileDescriptor + +var file_internal_proto_common_common_proto_rawDesc = []byte{ + 0x0a, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, + 0xb1, 0x02, 0x0a, 0x08, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1d, 0x0a, 0x09, + 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x00, 0x52, 0x08, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x08, 0x68, + 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, + 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x03, 0x75, 0x69, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x23, 0x0a, + 0x0c, 0x6d, 0x64, 0x62, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x6d, 0x64, 0x62, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x07, 0x67, 0x61, 0x69, 0x61, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x67, 0x61, 0x69, 0x61, 0x49, 0x64, 0x12, 0x43, 0x0a, + 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x42, 0x10, 0x0a, 0x0e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6f, 0x6e, + 0x65, 0x6f, 0x66, 0x2a, 0x5b, 0x0a, 0x0b, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x73, 0x75, 0x69, + 0x74, 0x65, 0x12, 0x16, 0x0a, 0x12, 0x41, 0x45, 0x53, 0x5f, 0x31, 0x32, 0x38, 0x5f, 0x47, 0x43, + 0x4d, 0x5f, 0x53, 0x48, 0x41, 0x32, 0x35, 0x36, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x41, 0x45, + 0x53, 0x5f, 0x32, 0x35, 0x36, 0x5f, 0x47, 0x43, 0x4d, 0x5f, 0x53, 0x48, 0x41, 0x33, 0x38, 0x34, + 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x43, 0x48, 0x41, 0x43, 0x48, 0x41, 0x32, 0x30, 0x5f, 0x50, + 0x4f, 0x4c, 0x59, 0x31, 0x33, 0x30, 0x35, 0x5f, 0x53, 0x48, 0x41, 0x32, 0x35, 0x36, 0x10, 0x02, + 0x2a, 0x24, 0x0a, 0x0a, 0x54, 0x4c, 0x53, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0a, + 0x0a, 0x06, 0x54, 0x4c, 0x53, 0x31, 0x5f, 0x32, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x54, 0x4c, + 0x53, 0x31, 0x5f, 0x33, 0x10, 0x01, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x73, 0x32, 0x61, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x67, 0x6f, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_internal_proto_common_common_proto_rawDescOnce sync.Once + file_internal_proto_common_common_proto_rawDescData = file_internal_proto_common_common_proto_rawDesc +) + +func file_internal_proto_common_common_proto_rawDescGZIP() []byte { + file_internal_proto_common_common_proto_rawDescOnce.Do(func() { + file_internal_proto_common_common_proto_rawDescData = protoimpl.X.CompressGZIP(file_internal_proto_common_common_proto_rawDescData) + }) + return file_internal_proto_common_common_proto_rawDescData +} + +var file_internal_proto_common_common_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_internal_proto_common_common_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_internal_proto_common_common_proto_goTypes = []interface{}{ + (Ciphersuite)(0), // 0: s2a.proto.Ciphersuite + (TLSVersion)(0), // 1: s2a.proto.TLSVersion + (*Identity)(nil), // 2: s2a.proto.Identity + nil, // 3: s2a.proto.Identity.AttributesEntry +} +var file_internal_proto_common_common_proto_depIdxs = []int32{ + 3, // 0: s2a.proto.Identity.attributes:type_name -> s2a.proto.Identity.AttributesEntry + 1, // [1:1] is the sub-list for method output_type + 1, // [1:1] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +func init() { file_internal_proto_common_common_proto_init() } +func file_internal_proto_common_common_proto_init() { + if File_internal_proto_common_common_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_internal_proto_common_common_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Identity); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_internal_proto_common_common_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*Identity_SpiffeId)(nil), + (*Identity_Hostname)(nil), + (*Identity_Uid)(nil), + (*Identity_MdbUsername)(nil), + (*Identity_GaiaId)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_internal_proto_common_common_proto_rawDesc, + NumEnums: 2, + NumMessages: 2, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_internal_proto_common_common_proto_goTypes, + DependencyIndexes: file_internal_proto_common_common_proto_depIdxs, + EnumInfos: file_internal_proto_common_common_proto_enumTypes, + MessageInfos: file_internal_proto_common_common_proto_msgTypes, + }.Build() + File_internal_proto_common_common_proto = out.File + file_internal_proto_common_common_proto_rawDesc = nil + file_internal_proto_common_common_proto_goTypes = nil + file_internal_proto_common_common_proto_depIdxs = nil +} diff --git a/vendor/github.com/google/s2a-go/internal/proto/s2a_context_go_proto/s2a_context.pb.go b/vendor/github.com/google/s2a-go/internal/proto/s2a_context_go_proto/s2a_context.pb.go new file mode 100644 index 0000000000..f4f763ae10 --- /dev/null +++ b/vendor/github.com/google/s2a-go/internal/proto/s2a_context_go_proto/s2a_context.pb.go @@ -0,0 +1,267 @@ +// Copyright 2021 Google LLC +// +// 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 +// +// https://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.30.0 +// protoc v3.21.12 +// source: internal/proto/s2a_context/s2a_context.proto + +package s2a_context_go_proto + +import ( + common_go_proto "github.com/google/s2a-go/internal/proto/common_go_proto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +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) +) + +type S2AContext struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The application protocol negotiated for this connection, e.g., 'grpc'. + ApplicationProtocol string `protobuf:"bytes,1,opt,name=application_protocol,json=applicationProtocol,proto3" json:"application_protocol,omitempty"` + // The TLS version number that the S2A's handshaker module used to set up the + // session. + TlsVersion common_go_proto.TLSVersion `protobuf:"varint,2,opt,name=tls_version,json=tlsVersion,proto3,enum=s2a.proto.TLSVersion" json:"tls_version,omitempty"` + // The TLS ciphersuite negotiated by the S2A's handshaker module. + Ciphersuite common_go_proto.Ciphersuite `protobuf:"varint,3,opt,name=ciphersuite,proto3,enum=s2a.proto.Ciphersuite" json:"ciphersuite,omitempty"` + // The authenticated identity of the peer. + PeerIdentity *common_go_proto.Identity `protobuf:"bytes,4,opt,name=peer_identity,json=peerIdentity,proto3" json:"peer_identity,omitempty"` + // The local identity used during session setup. This could be: + // - The local identity that the client specifies in ClientSessionStartReq. + // - One of the local identities that the server specifies in + // ServerSessionStartReq. + // - If neither client or server specifies local identities, the S2A picks the + // default one. In this case, this field will contain that identity. + LocalIdentity *common_go_proto.Identity `protobuf:"bytes,5,opt,name=local_identity,json=localIdentity,proto3" json:"local_identity,omitempty"` + // The SHA256 hash of the peer certificate used in the handshake. + PeerCertFingerprint []byte `protobuf:"bytes,6,opt,name=peer_cert_fingerprint,json=peerCertFingerprint,proto3" json:"peer_cert_fingerprint,omitempty"` + // The SHA256 hash of the local certificate used in the handshake. + LocalCertFingerprint []byte `protobuf:"bytes,7,opt,name=local_cert_fingerprint,json=localCertFingerprint,proto3" json:"local_cert_fingerprint,omitempty"` + // Set to true if a cached session was reused to resume the handshake. + IsHandshakeResumed bool `protobuf:"varint,8,opt,name=is_handshake_resumed,json=isHandshakeResumed,proto3" json:"is_handshake_resumed,omitempty"` +} + +func (x *S2AContext) Reset() { + *x = S2AContext{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_proto_s2a_context_s2a_context_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *S2AContext) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*S2AContext) ProtoMessage() {} + +func (x *S2AContext) ProtoReflect() protoreflect.Message { + mi := &file_internal_proto_s2a_context_s2a_context_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) +} + +// Deprecated: Use S2AContext.ProtoReflect.Descriptor instead. +func (*S2AContext) Descriptor() ([]byte, []int) { + return file_internal_proto_s2a_context_s2a_context_proto_rawDescGZIP(), []int{0} +} + +func (x *S2AContext) GetApplicationProtocol() string { + if x != nil { + return x.ApplicationProtocol + } + return "" +} + +func (x *S2AContext) GetTlsVersion() common_go_proto.TLSVersion { + if x != nil { + return x.TlsVersion + } + return common_go_proto.TLSVersion(0) +} + +func (x *S2AContext) GetCiphersuite() common_go_proto.Ciphersuite { + if x != nil { + return x.Ciphersuite + } + return common_go_proto.Ciphersuite(0) +} + +func (x *S2AContext) GetPeerIdentity() *common_go_proto.Identity { + if x != nil { + return x.PeerIdentity + } + return nil +} + +func (x *S2AContext) GetLocalIdentity() *common_go_proto.Identity { + if x != nil { + return x.LocalIdentity + } + return nil +} + +func (x *S2AContext) GetPeerCertFingerprint() []byte { + if x != nil { + return x.PeerCertFingerprint + } + return nil +} + +func (x *S2AContext) GetLocalCertFingerprint() []byte { + if x != nil { + return x.LocalCertFingerprint + } + return nil +} + +func (x *S2AContext) GetIsHandshakeResumed() bool { + if x != nil { + return x.IsHandshakeResumed + } + return false +} + +var File_internal_proto_s2a_context_s2a_context_proto protoreflect.FileDescriptor + +var file_internal_proto_s2a_context_s2a_context_proto_rawDesc = []byte{ + 0x0a, 0x2c, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x73, 0x32, 0x61, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x73, 0x32, 0x61, + 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, + 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc3, 0x03, + 0x0a, 0x0a, 0x53, 0x32, 0x41, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x31, 0x0a, 0x14, + 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x61, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, + 0x36, 0x0a, 0x0b, 0x74, 0x6c, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x54, 0x4c, 0x53, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x74, 0x6c, 0x73, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x0b, 0x63, 0x69, 0x70, 0x68, 0x65, + 0x72, 0x73, 0x75, 0x69, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x73, + 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x73, + 0x75, 0x69, 0x74, 0x65, 0x52, 0x0b, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x73, 0x75, 0x69, 0x74, + 0x65, 0x12, 0x38, 0x0a, 0x0d, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x0c, 0x70, + 0x65, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3a, 0x0a, 0x0e, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x49, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x65, 0x65, 0x72, 0x5f, + 0x63, 0x65, 0x72, 0x74, 0x5f, 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x13, 0x70, 0x65, 0x65, 0x72, 0x43, 0x65, 0x72, 0x74, + 0x46, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x16, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x5f, 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72, + 0x70, 0x72, 0x69, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x14, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x43, 0x65, 0x72, 0x74, 0x46, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, + 0x74, 0x12, 0x30, 0x0a, 0x14, 0x69, 0x73, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, + 0x65, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x12, 0x69, 0x73, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x75, + 0x6d, 0x65, 0x64, 0x42, 0x3b, 0x5a, 0x39, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x73, 0x32, 0x61, 0x2f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x32, 0x61, 0x5f, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x67, 0x6f, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_internal_proto_s2a_context_s2a_context_proto_rawDescOnce sync.Once + file_internal_proto_s2a_context_s2a_context_proto_rawDescData = file_internal_proto_s2a_context_s2a_context_proto_rawDesc +) + +func file_internal_proto_s2a_context_s2a_context_proto_rawDescGZIP() []byte { + file_internal_proto_s2a_context_s2a_context_proto_rawDescOnce.Do(func() { + file_internal_proto_s2a_context_s2a_context_proto_rawDescData = protoimpl.X.CompressGZIP(file_internal_proto_s2a_context_s2a_context_proto_rawDescData) + }) + return file_internal_proto_s2a_context_s2a_context_proto_rawDescData +} + +var file_internal_proto_s2a_context_s2a_context_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_internal_proto_s2a_context_s2a_context_proto_goTypes = []interface{}{ + (*S2AContext)(nil), // 0: s2a.proto.S2AContext + (common_go_proto.TLSVersion)(0), // 1: s2a.proto.TLSVersion + (common_go_proto.Ciphersuite)(0), // 2: s2a.proto.Ciphersuite + (*common_go_proto.Identity)(nil), // 3: s2a.proto.Identity +} +var file_internal_proto_s2a_context_s2a_context_proto_depIdxs = []int32{ + 1, // 0: s2a.proto.S2AContext.tls_version:type_name -> s2a.proto.TLSVersion + 2, // 1: s2a.proto.S2AContext.ciphersuite:type_name -> s2a.proto.Ciphersuite + 3, // 2: s2a.proto.S2AContext.peer_identity:type_name -> s2a.proto.Identity + 3, // 3: s2a.proto.S2AContext.local_identity:type_name -> s2a.proto.Identity + 4, // [4:4] is the sub-list for method output_type + 4, // [4:4] is the sub-list for method input_type + 4, // [4:4] is the sub-list for extension type_name + 4, // [4:4] is the sub-list for extension extendee + 0, // [0:4] is the sub-list for field type_name +} + +func init() { file_internal_proto_s2a_context_s2a_context_proto_init() } +func file_internal_proto_s2a_context_s2a_context_proto_init() { + if File_internal_proto_s2a_context_s2a_context_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_internal_proto_s2a_context_s2a_context_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*S2AContext); 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_internal_proto_s2a_context_s2a_context_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_internal_proto_s2a_context_s2a_context_proto_goTypes, + DependencyIndexes: file_internal_proto_s2a_context_s2a_context_proto_depIdxs, + MessageInfos: file_internal_proto_s2a_context_s2a_context_proto_msgTypes, + }.Build() + File_internal_proto_s2a_context_s2a_context_proto = out.File + file_internal_proto_s2a_context_s2a_context_proto_rawDesc = nil + file_internal_proto_s2a_context_s2a_context_proto_goTypes = nil + file_internal_proto_s2a_context_s2a_context_proto_depIdxs = nil +} diff --git a/vendor/github.com/google/s2a-go/internal/proto/s2a_go_proto/s2a.pb.go b/vendor/github.com/google/s2a-go/internal/proto/s2a_go_proto/s2a.pb.go new file mode 100644 index 0000000000..0a86ebee59 --- /dev/null +++ b/vendor/github.com/google/s2a-go/internal/proto/s2a_go_proto/s2a.pb.go @@ -0,0 +1,1377 @@ +// Copyright 2021 Google LLC +// +// 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 +// +// https://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.30.0 +// protoc v3.21.12 +// source: internal/proto/s2a/s2a.proto + +package s2a_go_proto + +import ( + common_go_proto "github.com/google/s2a-go/internal/proto/common_go_proto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +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) +) + +type AuthenticationMechanism struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // (Optional) Application may specify an identity associated to an + // authentication mechanism. Otherwise, S2A assumes that the authentication + // mechanism is associated with the default identity. If the default identity + // cannot be determined, session setup fails. + Identity *common_go_proto.Identity `protobuf:"bytes,1,opt,name=identity,proto3" json:"identity,omitempty"` + // Types that are assignable to MechanismOneof: + // + // *AuthenticationMechanism_Token + MechanismOneof isAuthenticationMechanism_MechanismOneof `protobuf_oneof:"mechanism_oneof"` +} + +func (x *AuthenticationMechanism) Reset() { + *x = AuthenticationMechanism{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_proto_s2a_s2a_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuthenticationMechanism) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuthenticationMechanism) ProtoMessage() {} + +func (x *AuthenticationMechanism) ProtoReflect() protoreflect.Message { + mi := &file_internal_proto_s2a_s2a_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) +} + +// Deprecated: Use AuthenticationMechanism.ProtoReflect.Descriptor instead. +func (*AuthenticationMechanism) Descriptor() ([]byte, []int) { + return file_internal_proto_s2a_s2a_proto_rawDescGZIP(), []int{0} +} + +func (x *AuthenticationMechanism) GetIdentity() *common_go_proto.Identity { + if x != nil { + return x.Identity + } + return nil +} + +func (m *AuthenticationMechanism) GetMechanismOneof() isAuthenticationMechanism_MechanismOneof { + if m != nil { + return m.MechanismOneof + } + return nil +} + +func (x *AuthenticationMechanism) GetToken() string { + if x, ok := x.GetMechanismOneof().(*AuthenticationMechanism_Token); ok { + return x.Token + } + return "" +} + +type isAuthenticationMechanism_MechanismOneof interface { + isAuthenticationMechanism_MechanismOneof() +} + +type AuthenticationMechanism_Token struct { + // A token that the application uses to authenticate itself to the S2A. + Token string `protobuf:"bytes,2,opt,name=token,proto3,oneof"` +} + +func (*AuthenticationMechanism_Token) isAuthenticationMechanism_MechanismOneof() {} + +type ClientSessionStartReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The application protocols supported by the client, e.g., "grpc". + ApplicationProtocols []string `protobuf:"bytes,1,rep,name=application_protocols,json=applicationProtocols,proto3" json:"application_protocols,omitempty"` + // (Optional) The minimum TLS version number that the S2A's handshaker module + // will use to set up the session. If this field is not provided, S2A will use + // the minimum version it supports. + MinTlsVersion common_go_proto.TLSVersion `protobuf:"varint,2,opt,name=min_tls_version,json=minTlsVersion,proto3,enum=s2a.proto.TLSVersion" json:"min_tls_version,omitempty"` + // (Optional) The maximum TLS version number that the S2A's handshaker module + // will use to set up the session. If this field is not provided, S2A will use + // the maximum version it supports. + MaxTlsVersion common_go_proto.TLSVersion `protobuf:"varint,3,opt,name=max_tls_version,json=maxTlsVersion,proto3,enum=s2a.proto.TLSVersion" json:"max_tls_version,omitempty"` + // The TLS ciphersuites that the client is willing to support. + TlsCiphersuites []common_go_proto.Ciphersuite `protobuf:"varint,4,rep,packed,name=tls_ciphersuites,json=tlsCiphersuites,proto3,enum=s2a.proto.Ciphersuite" json:"tls_ciphersuites,omitempty"` + // (Optional) Describes which server identities are acceptable by the client. + // If target identities are provided and none of them matches the peer + // identity of the server, session setup fails. + TargetIdentities []*common_go_proto.Identity `protobuf:"bytes,5,rep,name=target_identities,json=targetIdentities,proto3" json:"target_identities,omitempty"` + // (Optional) Application may specify a local identity. Otherwise, S2A chooses + // the default local identity. If the default identity cannot be determined, + // session setup fails. + LocalIdentity *common_go_proto.Identity `protobuf:"bytes,6,opt,name=local_identity,json=localIdentity,proto3" json:"local_identity,omitempty"` + // The target name that is used by S2A to configure SNI in the TLS handshake. + // It is also used to perform server authorization check if avaiable. This + // check is intended to verify that the peer authenticated identity is + // authorized to run a service with the target name. + // This field MUST only contain the host portion of the server address. It + // MUST not contain the scheme or the port number. For example, if the server + // address is dns://www.example.com:443, the value of this field should be + // set to www.example.com. + TargetName string `protobuf:"bytes,7,opt,name=target_name,json=targetName,proto3" json:"target_name,omitempty"` +} + +func (x *ClientSessionStartReq) Reset() { + *x = ClientSessionStartReq{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_proto_s2a_s2a_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientSessionStartReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientSessionStartReq) ProtoMessage() {} + +func (x *ClientSessionStartReq) ProtoReflect() protoreflect.Message { + mi := &file_internal_proto_s2a_s2a_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) +} + +// Deprecated: Use ClientSessionStartReq.ProtoReflect.Descriptor instead. +func (*ClientSessionStartReq) Descriptor() ([]byte, []int) { + return file_internal_proto_s2a_s2a_proto_rawDescGZIP(), []int{1} +} + +func (x *ClientSessionStartReq) GetApplicationProtocols() []string { + if x != nil { + return x.ApplicationProtocols + } + return nil +} + +func (x *ClientSessionStartReq) GetMinTlsVersion() common_go_proto.TLSVersion { + if x != nil { + return x.MinTlsVersion + } + return common_go_proto.TLSVersion(0) +} + +func (x *ClientSessionStartReq) GetMaxTlsVersion() common_go_proto.TLSVersion { + if x != nil { + return x.MaxTlsVersion + } + return common_go_proto.TLSVersion(0) +} + +func (x *ClientSessionStartReq) GetTlsCiphersuites() []common_go_proto.Ciphersuite { + if x != nil { + return x.TlsCiphersuites + } + return nil +} + +func (x *ClientSessionStartReq) GetTargetIdentities() []*common_go_proto.Identity { + if x != nil { + return x.TargetIdentities + } + return nil +} + +func (x *ClientSessionStartReq) GetLocalIdentity() *common_go_proto.Identity { + if x != nil { + return x.LocalIdentity + } + return nil +} + +func (x *ClientSessionStartReq) GetTargetName() string { + if x != nil { + return x.TargetName + } + return "" +} + +type ServerSessionStartReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The application protocols supported by the server, e.g., "grpc". + ApplicationProtocols []string `protobuf:"bytes,1,rep,name=application_protocols,json=applicationProtocols,proto3" json:"application_protocols,omitempty"` + // (Optional) The minimum TLS version number that the S2A's handshaker module + // will use to set up the session. If this field is not provided, S2A will use + // the minimum version it supports. + MinTlsVersion common_go_proto.TLSVersion `protobuf:"varint,2,opt,name=min_tls_version,json=minTlsVersion,proto3,enum=s2a.proto.TLSVersion" json:"min_tls_version,omitempty"` + // (Optional) The maximum TLS version number that the S2A's handshaker module + // will use to set up the session. If this field is not provided, S2A will use + // the maximum version it supports. + MaxTlsVersion common_go_proto.TLSVersion `protobuf:"varint,3,opt,name=max_tls_version,json=maxTlsVersion,proto3,enum=s2a.proto.TLSVersion" json:"max_tls_version,omitempty"` + // The TLS ciphersuites that the server is willing to support. + TlsCiphersuites []common_go_proto.Ciphersuite `protobuf:"varint,4,rep,packed,name=tls_ciphersuites,json=tlsCiphersuites,proto3,enum=s2a.proto.Ciphersuite" json:"tls_ciphersuites,omitempty"` + // (Optional) A list of local identities supported by the server, if + // specified. Otherwise, S2A chooses the default local identity. If the + // default identity cannot be determined, session setup fails. + LocalIdentities []*common_go_proto.Identity `protobuf:"bytes,5,rep,name=local_identities,json=localIdentities,proto3" json:"local_identities,omitempty"` + // The byte representation of the first handshake message received from the + // client peer. It is possible that this first message is split into multiple + // chunks. In this case, the first chunk is sent using this field and the + // following chunks are sent using the in_bytes field of SessionNextReq + // Specifically, if the client peer is using S2A, this field contains the + // bytes in the out_frames field of SessionResp message that the client peer + // received from its S2A after initiating the handshake. + InBytes []byte `protobuf:"bytes,6,opt,name=in_bytes,json=inBytes,proto3" json:"in_bytes,omitempty"` +} + +func (x *ServerSessionStartReq) Reset() { + *x = ServerSessionStartReq{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_proto_s2a_s2a_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ServerSessionStartReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServerSessionStartReq) ProtoMessage() {} + +func (x *ServerSessionStartReq) ProtoReflect() protoreflect.Message { + mi := &file_internal_proto_s2a_s2a_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) +} + +// Deprecated: Use ServerSessionStartReq.ProtoReflect.Descriptor instead. +func (*ServerSessionStartReq) Descriptor() ([]byte, []int) { + return file_internal_proto_s2a_s2a_proto_rawDescGZIP(), []int{2} +} + +func (x *ServerSessionStartReq) GetApplicationProtocols() []string { + if x != nil { + return x.ApplicationProtocols + } + return nil +} + +func (x *ServerSessionStartReq) GetMinTlsVersion() common_go_proto.TLSVersion { + if x != nil { + return x.MinTlsVersion + } + return common_go_proto.TLSVersion(0) +} + +func (x *ServerSessionStartReq) GetMaxTlsVersion() common_go_proto.TLSVersion { + if x != nil { + return x.MaxTlsVersion + } + return common_go_proto.TLSVersion(0) +} + +func (x *ServerSessionStartReq) GetTlsCiphersuites() []common_go_proto.Ciphersuite { + if x != nil { + return x.TlsCiphersuites + } + return nil +} + +func (x *ServerSessionStartReq) GetLocalIdentities() []*common_go_proto.Identity { + if x != nil { + return x.LocalIdentities + } + return nil +} + +func (x *ServerSessionStartReq) GetInBytes() []byte { + if x != nil { + return x.InBytes + } + return nil +} + +type SessionNextReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The byte representation of session setup, i.e., handshake messages. + // Specifically: + // - All handshake messages sent from the server to the client. + // - All, except for the first, handshake messages sent from the client to + // the server. Note that the first message is communicated to S2A using the + // in_bytes field of ServerSessionStartReq. + // + // If the peer is using S2A, this field contains the bytes in the out_frames + // field of SessionResp message that the peer received from its S2A. + InBytes []byte `protobuf:"bytes,1,opt,name=in_bytes,json=inBytes,proto3" json:"in_bytes,omitempty"` +} + +func (x *SessionNextReq) Reset() { + *x = SessionNextReq{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_proto_s2a_s2a_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SessionNextReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SessionNextReq) ProtoMessage() {} + +func (x *SessionNextReq) ProtoReflect() protoreflect.Message { + mi := &file_internal_proto_s2a_s2a_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) +} + +// Deprecated: Use SessionNextReq.ProtoReflect.Descriptor instead. +func (*SessionNextReq) Descriptor() ([]byte, []int) { + return file_internal_proto_s2a_s2a_proto_rawDescGZIP(), []int{3} +} + +func (x *SessionNextReq) GetInBytes() []byte { + if x != nil { + return x.InBytes + } + return nil +} + +type ResumptionTicketReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The byte representation of a NewSessionTicket message received from the + // server. + InBytes [][]byte `protobuf:"bytes,1,rep,name=in_bytes,json=inBytes,proto3" json:"in_bytes,omitempty"` + // A connection identifier that was created and sent by S2A at the end of a + // handshake. + ConnectionId uint64 `protobuf:"varint,2,opt,name=connection_id,json=connectionId,proto3" json:"connection_id,omitempty"` + // The local identity that was used by S2A during session setup and included + // in |SessionResult|. + LocalIdentity *common_go_proto.Identity `protobuf:"bytes,3,opt,name=local_identity,json=localIdentity,proto3" json:"local_identity,omitempty"` +} + +func (x *ResumptionTicketReq) Reset() { + *x = ResumptionTicketReq{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_proto_s2a_s2a_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ResumptionTicketReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResumptionTicketReq) ProtoMessage() {} + +func (x *ResumptionTicketReq) ProtoReflect() protoreflect.Message { + mi := &file_internal_proto_s2a_s2a_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) +} + +// Deprecated: Use ResumptionTicketReq.ProtoReflect.Descriptor instead. +func (*ResumptionTicketReq) Descriptor() ([]byte, []int) { + return file_internal_proto_s2a_s2a_proto_rawDescGZIP(), []int{4} +} + +func (x *ResumptionTicketReq) GetInBytes() [][]byte { + if x != nil { + return x.InBytes + } + return nil +} + +func (x *ResumptionTicketReq) GetConnectionId() uint64 { + if x != nil { + return x.ConnectionId + } + return 0 +} + +func (x *ResumptionTicketReq) GetLocalIdentity() *common_go_proto.Identity { + if x != nil { + return x.LocalIdentity + } + return nil +} + +type SessionReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to ReqOneof: + // + // *SessionReq_ClientStart + // *SessionReq_ServerStart + // *SessionReq_Next + // *SessionReq_ResumptionTicket + ReqOneof isSessionReq_ReqOneof `protobuf_oneof:"req_oneof"` + // (Optional) The authentication mechanisms that the client wishes to use to + // authenticate to the S2A, ordered by preference. The S2A will always use the + // first authentication mechanism that appears in the list and is supported by + // the S2A. + AuthMechanisms []*AuthenticationMechanism `protobuf:"bytes,5,rep,name=auth_mechanisms,json=authMechanisms,proto3" json:"auth_mechanisms,omitempty"` +} + +func (x *SessionReq) Reset() { + *x = SessionReq{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_proto_s2a_s2a_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SessionReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SessionReq) ProtoMessage() {} + +func (x *SessionReq) ProtoReflect() protoreflect.Message { + mi := &file_internal_proto_s2a_s2a_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) +} + +// Deprecated: Use SessionReq.ProtoReflect.Descriptor instead. +func (*SessionReq) Descriptor() ([]byte, []int) { + return file_internal_proto_s2a_s2a_proto_rawDescGZIP(), []int{5} +} + +func (m *SessionReq) GetReqOneof() isSessionReq_ReqOneof { + if m != nil { + return m.ReqOneof + } + return nil +} + +func (x *SessionReq) GetClientStart() *ClientSessionStartReq { + if x, ok := x.GetReqOneof().(*SessionReq_ClientStart); ok { + return x.ClientStart + } + return nil +} + +func (x *SessionReq) GetServerStart() *ServerSessionStartReq { + if x, ok := x.GetReqOneof().(*SessionReq_ServerStart); ok { + return x.ServerStart + } + return nil +} + +func (x *SessionReq) GetNext() *SessionNextReq { + if x, ok := x.GetReqOneof().(*SessionReq_Next); ok { + return x.Next + } + return nil +} + +func (x *SessionReq) GetResumptionTicket() *ResumptionTicketReq { + if x, ok := x.GetReqOneof().(*SessionReq_ResumptionTicket); ok { + return x.ResumptionTicket + } + return nil +} + +func (x *SessionReq) GetAuthMechanisms() []*AuthenticationMechanism { + if x != nil { + return x.AuthMechanisms + } + return nil +} + +type isSessionReq_ReqOneof interface { + isSessionReq_ReqOneof() +} + +type SessionReq_ClientStart struct { + // The client session setup request message. + ClientStart *ClientSessionStartReq `protobuf:"bytes,1,opt,name=client_start,json=clientStart,proto3,oneof"` +} + +type SessionReq_ServerStart struct { + // The server session setup request message. + ServerStart *ServerSessionStartReq `protobuf:"bytes,2,opt,name=server_start,json=serverStart,proto3,oneof"` +} + +type SessionReq_Next struct { + // The next session setup message request message. + Next *SessionNextReq `protobuf:"bytes,3,opt,name=next,proto3,oneof"` +} + +type SessionReq_ResumptionTicket struct { + // The resumption ticket that is received from the server. This message is + // only accepted by S2A if it is running as a client and if it is received + // after session setup is complete. If S2A is running as a server and it + // receives this message, the session is terminated. + ResumptionTicket *ResumptionTicketReq `protobuf:"bytes,4,opt,name=resumption_ticket,json=resumptionTicket,proto3,oneof"` +} + +func (*SessionReq_ClientStart) isSessionReq_ReqOneof() {} + +func (*SessionReq_ServerStart) isSessionReq_ReqOneof() {} + +func (*SessionReq_Next) isSessionReq_ReqOneof() {} + +func (*SessionReq_ResumptionTicket) isSessionReq_ReqOneof() {} + +type SessionState struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The TLS version number that the S2A's handshaker module used to set up the + // session. + TlsVersion common_go_proto.TLSVersion `protobuf:"varint,1,opt,name=tls_version,json=tlsVersion,proto3,enum=s2a.proto.TLSVersion" json:"tls_version,omitempty"` + // The TLS ciphersuite negotiated by the S2A's handshaker module. + TlsCiphersuite common_go_proto.Ciphersuite `protobuf:"varint,2,opt,name=tls_ciphersuite,json=tlsCiphersuite,proto3,enum=s2a.proto.Ciphersuite" json:"tls_ciphersuite,omitempty"` + // The sequence number of the next, incoming, TLS record. + InSequence uint64 `protobuf:"varint,3,opt,name=in_sequence,json=inSequence,proto3" json:"in_sequence,omitempty"` + // The sequence number of the next, outgoing, TLS record. + OutSequence uint64 `protobuf:"varint,4,opt,name=out_sequence,json=outSequence,proto3" json:"out_sequence,omitempty"` + // The key for the inbound direction. + InKey []byte `protobuf:"bytes,5,opt,name=in_key,json=inKey,proto3" json:"in_key,omitempty"` + // The key for the outbound direction. + OutKey []byte `protobuf:"bytes,6,opt,name=out_key,json=outKey,proto3" json:"out_key,omitempty"` + // The constant part of the record nonce for the outbound direction. + InFixedNonce []byte `protobuf:"bytes,7,opt,name=in_fixed_nonce,json=inFixedNonce,proto3" json:"in_fixed_nonce,omitempty"` + // The constant part of the record nonce for the inbound direction. + OutFixedNonce []byte `protobuf:"bytes,8,opt,name=out_fixed_nonce,json=outFixedNonce,proto3" json:"out_fixed_nonce,omitempty"` + // A connection identifier that can be provided to S2A to perform operations + // related to this connection. This identifier will be stored by the record + // protocol, and included in the |ResumptionTicketReq| message that is later + // sent back to S2A. This field is set only for client-side connections. + ConnectionId uint64 `protobuf:"varint,9,opt,name=connection_id,json=connectionId,proto3" json:"connection_id,omitempty"` + // Set to true if a cached session was reused to do an abbreviated handshake. + IsHandshakeResumed bool `protobuf:"varint,10,opt,name=is_handshake_resumed,json=isHandshakeResumed,proto3" json:"is_handshake_resumed,omitempty"` +} + +func (x *SessionState) Reset() { + *x = SessionState{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_proto_s2a_s2a_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SessionState) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SessionState) ProtoMessage() {} + +func (x *SessionState) ProtoReflect() protoreflect.Message { + mi := &file_internal_proto_s2a_s2a_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) +} + +// Deprecated: Use SessionState.ProtoReflect.Descriptor instead. +func (*SessionState) Descriptor() ([]byte, []int) { + return file_internal_proto_s2a_s2a_proto_rawDescGZIP(), []int{6} +} + +func (x *SessionState) GetTlsVersion() common_go_proto.TLSVersion { + if x != nil { + return x.TlsVersion + } + return common_go_proto.TLSVersion(0) +} + +func (x *SessionState) GetTlsCiphersuite() common_go_proto.Ciphersuite { + if x != nil { + return x.TlsCiphersuite + } + return common_go_proto.Ciphersuite(0) +} + +func (x *SessionState) GetInSequence() uint64 { + if x != nil { + return x.InSequence + } + return 0 +} + +func (x *SessionState) GetOutSequence() uint64 { + if x != nil { + return x.OutSequence + } + return 0 +} + +func (x *SessionState) GetInKey() []byte { + if x != nil { + return x.InKey + } + return nil +} + +func (x *SessionState) GetOutKey() []byte { + if x != nil { + return x.OutKey + } + return nil +} + +func (x *SessionState) GetInFixedNonce() []byte { + if x != nil { + return x.InFixedNonce + } + return nil +} + +func (x *SessionState) GetOutFixedNonce() []byte { + if x != nil { + return x.OutFixedNonce + } + return nil +} + +func (x *SessionState) GetConnectionId() uint64 { + if x != nil { + return x.ConnectionId + } + return 0 +} + +func (x *SessionState) GetIsHandshakeResumed() bool { + if x != nil { + return x.IsHandshakeResumed + } + return false +} + +type SessionResult struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The application protocol negotiated for this session. + ApplicationProtocol string `protobuf:"bytes,1,opt,name=application_protocol,json=applicationProtocol,proto3" json:"application_protocol,omitempty"` + // The session state at the end. This state contains all cryptographic + // material required to initialize the record protocol object. + State *SessionState `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"` + // The authenticated identity of the peer. + PeerIdentity *common_go_proto.Identity `protobuf:"bytes,4,opt,name=peer_identity,json=peerIdentity,proto3" json:"peer_identity,omitempty"` + // The local identity used during session setup. This could be: + // - The local identity that the client specifies in ClientSessionStartReq. + // - One of the local identities that the server specifies in + // ServerSessionStartReq. + // - If neither client or server specifies local identities, the S2A picks the + // default one. In this case, this field will contain that identity. + LocalIdentity *common_go_proto.Identity `protobuf:"bytes,5,opt,name=local_identity,json=localIdentity,proto3" json:"local_identity,omitempty"` + // The SHA256 hash of the local certificate used in the handshake. + LocalCertFingerprint []byte `protobuf:"bytes,6,opt,name=local_cert_fingerprint,json=localCertFingerprint,proto3" json:"local_cert_fingerprint,omitempty"` + // The SHA256 hash of the peer certificate used in the handshake. + PeerCertFingerprint []byte `protobuf:"bytes,7,opt,name=peer_cert_fingerprint,json=peerCertFingerprint,proto3" json:"peer_cert_fingerprint,omitempty"` +} + +func (x *SessionResult) Reset() { + *x = SessionResult{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_proto_s2a_s2a_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SessionResult) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SessionResult) ProtoMessage() {} + +func (x *SessionResult) ProtoReflect() protoreflect.Message { + mi := &file_internal_proto_s2a_s2a_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) +} + +// Deprecated: Use SessionResult.ProtoReflect.Descriptor instead. +func (*SessionResult) Descriptor() ([]byte, []int) { + return file_internal_proto_s2a_s2a_proto_rawDescGZIP(), []int{7} +} + +func (x *SessionResult) GetApplicationProtocol() string { + if x != nil { + return x.ApplicationProtocol + } + return "" +} + +func (x *SessionResult) GetState() *SessionState { + if x != nil { + return x.State + } + return nil +} + +func (x *SessionResult) GetPeerIdentity() *common_go_proto.Identity { + if x != nil { + return x.PeerIdentity + } + return nil +} + +func (x *SessionResult) GetLocalIdentity() *common_go_proto.Identity { + if x != nil { + return x.LocalIdentity + } + return nil +} + +func (x *SessionResult) GetLocalCertFingerprint() []byte { + if x != nil { + return x.LocalCertFingerprint + } + return nil +} + +func (x *SessionResult) GetPeerCertFingerprint() []byte { + if x != nil { + return x.PeerCertFingerprint + } + return nil +} + +type SessionStatus struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The status code that is specific to the application and the implementation + // of S2A, e.g., gRPC status code. + Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + // The status details. + Details string `protobuf:"bytes,2,opt,name=details,proto3" json:"details,omitempty"` +} + +func (x *SessionStatus) Reset() { + *x = SessionStatus{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_proto_s2a_s2a_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SessionStatus) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SessionStatus) ProtoMessage() {} + +func (x *SessionStatus) ProtoReflect() protoreflect.Message { + mi := &file_internal_proto_s2a_s2a_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 mi.MessageOf(x) +} + +// Deprecated: Use SessionStatus.ProtoReflect.Descriptor instead. +func (*SessionStatus) Descriptor() ([]byte, []int) { + return file_internal_proto_s2a_s2a_proto_rawDescGZIP(), []int{8} +} + +func (x *SessionStatus) GetCode() uint32 { + if x != nil { + return x.Code + } + return 0 +} + +func (x *SessionStatus) GetDetails() string { + if x != nil { + return x.Details + } + return "" +} + +type SessionResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The local identity used during session setup. This could be: + // - The local identity that the client specifies in ClientSessionStartReq. + // - One of the local identities that the server specifies in + // ServerSessionStartReq. + // - If neither client or server specifies local identities, the S2A picks the + // default one. In this case, this field will contain that identity. + // + // If the SessionResult is populated, then this must coincide with the local + // identity specified in the SessionResult; otherwise, the handshake must + // fail. + LocalIdentity *common_go_proto.Identity `protobuf:"bytes,1,opt,name=local_identity,json=localIdentity,proto3" json:"local_identity,omitempty"` + // The byte representation of the frames that should be sent to the peer. May + // be empty if nothing needs to be sent to the peer or if in_bytes in the + // SessionReq is incomplete. All bytes in a non-empty out_frames must be sent + // to the peer even if the session setup status is not OK as these frames may + // contain appropriate alerts. + OutFrames []byte `protobuf:"bytes,2,opt,name=out_frames,json=outFrames,proto3" json:"out_frames,omitempty"` + // Number of bytes in the in_bytes field that are consumed by S2A. It is + // possible that part of in_bytes is unrelated to the session setup process. + BytesConsumed uint32 `protobuf:"varint,3,opt,name=bytes_consumed,json=bytesConsumed,proto3" json:"bytes_consumed,omitempty"` + // This is set if the session is successfully set up. out_frames may + // still be set to frames that needs to be forwarded to the peer. + Result *SessionResult `protobuf:"bytes,4,opt,name=result,proto3" json:"result,omitempty"` + // Status of session setup at the current stage. + Status *SessionStatus `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` +} + +func (x *SessionResp) Reset() { + *x = SessionResp{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_proto_s2a_s2a_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SessionResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SessionResp) ProtoMessage() {} + +func (x *SessionResp) ProtoReflect() protoreflect.Message { + mi := &file_internal_proto_s2a_s2a_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SessionResp.ProtoReflect.Descriptor instead. +func (*SessionResp) Descriptor() ([]byte, []int) { + return file_internal_proto_s2a_s2a_proto_rawDescGZIP(), []int{9} +} + +func (x *SessionResp) GetLocalIdentity() *common_go_proto.Identity { + if x != nil { + return x.LocalIdentity + } + return nil +} + +func (x *SessionResp) GetOutFrames() []byte { + if x != nil { + return x.OutFrames + } + return nil +} + +func (x *SessionResp) GetBytesConsumed() uint32 { + if x != nil { + return x.BytesConsumed + } + return 0 +} + +func (x *SessionResp) GetResult() *SessionResult { + if x != nil { + return x.Result + } + return nil +} + +func (x *SessionResp) GetStatus() *SessionStatus { + if x != nil { + return x.Status + } + return nil +} + +var File_internal_proto_s2a_s2a_proto protoreflect.FileDescriptor + +var file_internal_proto_s2a_s2a_proto_rawDesc = []byte{ + 0x0a, 0x1c, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x73, 0x32, 0x61, 0x2f, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, + 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x75, 0x0a, + 0x17, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, + 0x65, 0x63, 0x68, 0x61, 0x6e, 0x69, 0x73, 0x6d, 0x12, 0x2f, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x32, 0x61, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, + 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x16, 0x0a, 0x05, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x42, 0x11, 0x0a, 0x0f, 0x6d, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x69, 0x73, 0x6d, 0x5f, 0x6f, + 0x6e, 0x65, 0x6f, 0x66, 0x22, 0xac, 0x03, 0x0a, 0x15, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, + 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x12, 0x33, + 0x0a, 0x15, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x14, 0x61, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6c, 0x73, 0x12, 0x3d, 0x0a, 0x0f, 0x6d, 0x69, 0x6e, 0x5f, 0x74, 0x6c, 0x73, 0x5f, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x73, + 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x4c, 0x53, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x6d, 0x69, 0x6e, 0x54, 0x6c, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x0f, 0x6d, 0x61, 0x78, 0x5f, 0x74, 0x6c, 0x73, 0x5f, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x73, 0x32, + 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x4c, 0x53, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x54, 0x6c, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x41, 0x0a, 0x10, 0x74, 0x6c, 0x73, 0x5f, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x73, + 0x75, 0x69, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x73, 0x32, + 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x73, 0x75, + 0x69, 0x74, 0x65, 0x52, 0x0f, 0x74, 0x6c, 0x73, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x73, 0x75, + 0x69, 0x74, 0x65, 0x73, 0x12, 0x40, 0x0a, 0x11, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x69, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x52, 0x10, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x0e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, + 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x52, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4e, + 0x61, 0x6d, 0x65, 0x22, 0xe8, 0x02, 0x0a, 0x15, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x12, 0x33, 0x0a, + 0x15, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x14, 0x61, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6c, 0x73, 0x12, 0x3d, 0x0a, 0x0f, 0x6d, 0x69, 0x6e, 0x5f, 0x74, 0x6c, 0x73, 0x5f, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x73, 0x32, + 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x4c, 0x53, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x0d, 0x6d, 0x69, 0x6e, 0x54, 0x6c, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x3d, 0x0a, 0x0f, 0x6d, 0x61, 0x78, 0x5f, 0x74, 0x6c, 0x73, 0x5f, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x73, 0x32, 0x61, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x4c, 0x53, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x54, 0x6c, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x12, 0x41, 0x0a, 0x10, 0x74, 0x6c, 0x73, 0x5f, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x73, 0x75, + 0x69, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x73, 0x32, 0x61, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x73, 0x75, 0x69, + 0x74, 0x65, 0x52, 0x0f, 0x74, 0x6c, 0x73, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x73, 0x75, 0x69, + 0x74, 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x10, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x52, 0x0f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x69, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x6e, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x69, 0x6e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0x2b, + 0x0a, 0x0e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x65, 0x78, 0x74, 0x52, 0x65, 0x71, + 0x12, 0x19, 0x0a, 0x08, 0x69, 0x6e, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x07, 0x69, 0x6e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0x91, 0x01, 0x0a, 0x13, + 0x52, 0x65, 0x73, 0x75, 0x6d, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, + 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x6e, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x07, 0x69, 0x6e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x23, + 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x64, 0x12, 0x3a, 0x0a, 0x0e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x32, + 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x52, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, + 0xf4, 0x02, 0x0a, 0x0a, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x45, + 0x0a, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x45, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x32, + 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, + 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x2f, 0x0a, 0x04, + 0x6e, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x32, 0x61, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x65, + 0x78, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x04, 0x6e, 0x65, 0x78, 0x74, 0x12, 0x4d, 0x0a, + 0x11, 0x72, 0x65, 0x73, 0x75, 0x6d, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x63, 0x6b, + 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x54, + 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x10, 0x72, 0x65, 0x73, 0x75, + 0x6d, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x4b, 0x0a, 0x0f, + 0x61, 0x75, 0x74, 0x68, 0x5f, 0x6d, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x69, 0x73, 0x6d, 0x73, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x4d, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x69, 0x73, 0x6d, 0x52, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x4d, + 0x65, 0x63, 0x68, 0x61, 0x6e, 0x69, 0x73, 0x6d, 0x73, 0x42, 0x0b, 0x0a, 0x09, 0x72, 0x65, 0x71, + 0x5f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x22, 0xa0, 0x03, 0x0a, 0x0c, 0x53, 0x65, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x36, 0x0a, 0x0b, 0x74, 0x6c, 0x73, 0x5f, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x73, + 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x4c, 0x53, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x74, 0x6c, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x3f, 0x0a, 0x0f, 0x74, 0x6c, 0x73, 0x5f, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x73, 0x75, 0x69, + 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x73, 0x75, 0x69, 0x74, 0x65, + 0x52, 0x0e, 0x74, 0x6c, 0x73, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x73, 0x75, 0x69, 0x74, 0x65, + 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x69, 0x6e, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, + 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6f, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x71, 0x75, + 0x65, 0x6e, 0x63, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x69, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x4b, 0x65, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x6f, + 0x75, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6f, 0x75, + 0x74, 0x4b, 0x65, 0x79, 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x6e, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, + 0x5f, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x69, 0x6e, + 0x46, 0x69, 0x78, 0x65, 0x64, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x6f, 0x75, + 0x74, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x5f, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x6f, 0x75, 0x74, 0x46, 0x69, 0x78, 0x65, 0x64, 0x4e, 0x6f, 0x6e, + 0x63, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x69, 0x73, 0x5f, 0x68, 0x61, + 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x69, 0x73, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, + 0x6b, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x22, 0xd1, 0x02, 0x0a, 0x0d, 0x53, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x31, 0x0a, 0x14, 0x61, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x2d, + 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x38, 0x0a, + 0x0d, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x0c, 0x70, 0x65, 0x65, 0x72, 0x49, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3a, 0x0a, 0x0e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x52, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x12, 0x34, 0x0a, 0x16, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x63, 0x65, 0x72, + 0x74, 0x5f, 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x14, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x65, 0x72, 0x74, 0x46, 0x69, + 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x65, 0x65, + 0x72, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x5f, 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, + 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x13, 0x70, 0x65, 0x65, 0x72, 0x43, 0x65, + 0x72, 0x74, 0x46, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x22, 0x3d, 0x0a, + 0x0d, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, + 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xf3, 0x01, 0x0a, + 0x0b, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3a, 0x0a, 0x0e, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x75, 0x74, 0x5f, + 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x6f, 0x75, + 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x62, 0x79, 0x74, 0x65, 0x73, + 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0d, 0x62, 0x79, 0x74, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x12, 0x30, + 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, + 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x12, 0x30, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x18, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x32, 0x51, 0x0a, 0x0a, 0x53, 0x32, 0x41, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0x43, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x55, 0x70, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x12, 0x15, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x00, 0x28, 0x01, 0x30, 0x01, 0x42, 0x33, 0x5a, 0x31, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x73, 0x32, 0x61, 0x2f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x32, + 0x61, 0x5f, 0x67, 0x6f, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, +} + +var ( + file_internal_proto_s2a_s2a_proto_rawDescOnce sync.Once + file_internal_proto_s2a_s2a_proto_rawDescData = file_internal_proto_s2a_s2a_proto_rawDesc +) + +func file_internal_proto_s2a_s2a_proto_rawDescGZIP() []byte { + file_internal_proto_s2a_s2a_proto_rawDescOnce.Do(func() { + file_internal_proto_s2a_s2a_proto_rawDescData = protoimpl.X.CompressGZIP(file_internal_proto_s2a_s2a_proto_rawDescData) + }) + return file_internal_proto_s2a_s2a_proto_rawDescData +} + +var file_internal_proto_s2a_s2a_proto_msgTypes = make([]protoimpl.MessageInfo, 10) +var file_internal_proto_s2a_s2a_proto_goTypes = []interface{}{ + (*AuthenticationMechanism)(nil), // 0: s2a.proto.AuthenticationMechanism + (*ClientSessionStartReq)(nil), // 1: s2a.proto.ClientSessionStartReq + (*ServerSessionStartReq)(nil), // 2: s2a.proto.ServerSessionStartReq + (*SessionNextReq)(nil), // 3: s2a.proto.SessionNextReq + (*ResumptionTicketReq)(nil), // 4: s2a.proto.ResumptionTicketReq + (*SessionReq)(nil), // 5: s2a.proto.SessionReq + (*SessionState)(nil), // 6: s2a.proto.SessionState + (*SessionResult)(nil), // 7: s2a.proto.SessionResult + (*SessionStatus)(nil), // 8: s2a.proto.SessionStatus + (*SessionResp)(nil), // 9: s2a.proto.SessionResp + (*common_go_proto.Identity)(nil), // 10: s2a.proto.Identity + (common_go_proto.TLSVersion)(0), // 11: s2a.proto.TLSVersion + (common_go_proto.Ciphersuite)(0), // 12: s2a.proto.Ciphersuite +} +var file_internal_proto_s2a_s2a_proto_depIdxs = []int32{ + 10, // 0: s2a.proto.AuthenticationMechanism.identity:type_name -> s2a.proto.Identity + 11, // 1: s2a.proto.ClientSessionStartReq.min_tls_version:type_name -> s2a.proto.TLSVersion + 11, // 2: s2a.proto.ClientSessionStartReq.max_tls_version:type_name -> s2a.proto.TLSVersion + 12, // 3: s2a.proto.ClientSessionStartReq.tls_ciphersuites:type_name -> s2a.proto.Ciphersuite + 10, // 4: s2a.proto.ClientSessionStartReq.target_identities:type_name -> s2a.proto.Identity + 10, // 5: s2a.proto.ClientSessionStartReq.local_identity:type_name -> s2a.proto.Identity + 11, // 6: s2a.proto.ServerSessionStartReq.min_tls_version:type_name -> s2a.proto.TLSVersion + 11, // 7: s2a.proto.ServerSessionStartReq.max_tls_version:type_name -> s2a.proto.TLSVersion + 12, // 8: s2a.proto.ServerSessionStartReq.tls_ciphersuites:type_name -> s2a.proto.Ciphersuite + 10, // 9: s2a.proto.ServerSessionStartReq.local_identities:type_name -> s2a.proto.Identity + 10, // 10: s2a.proto.ResumptionTicketReq.local_identity:type_name -> s2a.proto.Identity + 1, // 11: s2a.proto.SessionReq.client_start:type_name -> s2a.proto.ClientSessionStartReq + 2, // 12: s2a.proto.SessionReq.server_start:type_name -> s2a.proto.ServerSessionStartReq + 3, // 13: s2a.proto.SessionReq.next:type_name -> s2a.proto.SessionNextReq + 4, // 14: s2a.proto.SessionReq.resumption_ticket:type_name -> s2a.proto.ResumptionTicketReq + 0, // 15: s2a.proto.SessionReq.auth_mechanisms:type_name -> s2a.proto.AuthenticationMechanism + 11, // 16: s2a.proto.SessionState.tls_version:type_name -> s2a.proto.TLSVersion + 12, // 17: s2a.proto.SessionState.tls_ciphersuite:type_name -> s2a.proto.Ciphersuite + 6, // 18: s2a.proto.SessionResult.state:type_name -> s2a.proto.SessionState + 10, // 19: s2a.proto.SessionResult.peer_identity:type_name -> s2a.proto.Identity + 10, // 20: s2a.proto.SessionResult.local_identity:type_name -> s2a.proto.Identity + 10, // 21: s2a.proto.SessionResp.local_identity:type_name -> s2a.proto.Identity + 7, // 22: s2a.proto.SessionResp.result:type_name -> s2a.proto.SessionResult + 8, // 23: s2a.proto.SessionResp.status:type_name -> s2a.proto.SessionStatus + 5, // 24: s2a.proto.S2AService.SetUpSession:input_type -> s2a.proto.SessionReq + 9, // 25: s2a.proto.S2AService.SetUpSession:output_type -> s2a.proto.SessionResp + 25, // [25:26] is the sub-list for method output_type + 24, // [24:25] is the sub-list for method input_type + 24, // [24:24] is the sub-list for extension type_name + 24, // [24:24] is the sub-list for extension extendee + 0, // [0:24] is the sub-list for field type_name +} + +func init() { file_internal_proto_s2a_s2a_proto_init() } +func file_internal_proto_s2a_s2a_proto_init() { + if File_internal_proto_s2a_s2a_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_internal_proto_s2a_s2a_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AuthenticationMechanism); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_internal_proto_s2a_s2a_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientSessionStartReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_internal_proto_s2a_s2a_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ServerSessionStartReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_internal_proto_s2a_s2a_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SessionNextReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_internal_proto_s2a_s2a_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResumptionTicketReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_internal_proto_s2a_s2a_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SessionReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_internal_proto_s2a_s2a_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SessionState); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_internal_proto_s2a_s2a_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SessionResult); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_internal_proto_s2a_s2a_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SessionStatus); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_internal_proto_s2a_s2a_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SessionResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_internal_proto_s2a_s2a_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*AuthenticationMechanism_Token)(nil), + } + file_internal_proto_s2a_s2a_proto_msgTypes[5].OneofWrappers = []interface{}{ + (*SessionReq_ClientStart)(nil), + (*SessionReq_ServerStart)(nil), + (*SessionReq_Next)(nil), + (*SessionReq_ResumptionTicket)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_internal_proto_s2a_s2a_proto_rawDesc, + NumEnums: 0, + NumMessages: 10, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_internal_proto_s2a_s2a_proto_goTypes, + DependencyIndexes: file_internal_proto_s2a_s2a_proto_depIdxs, + MessageInfos: file_internal_proto_s2a_s2a_proto_msgTypes, + }.Build() + File_internal_proto_s2a_s2a_proto = out.File + file_internal_proto_s2a_s2a_proto_rawDesc = nil + file_internal_proto_s2a_s2a_proto_goTypes = nil + file_internal_proto_s2a_s2a_proto_depIdxs = nil +} diff --git a/vendor/github.com/google/s2a-go/internal/proto/s2a_go_proto/s2a_grpc.pb.go b/vendor/github.com/google/s2a-go/internal/proto/s2a_go_proto/s2a_grpc.pb.go new file mode 100644 index 0000000000..0fa582fc87 --- /dev/null +++ b/vendor/github.com/google/s2a-go/internal/proto/s2a_go_proto/s2a_grpc.pb.go @@ -0,0 +1,173 @@ +// Copyright 2021 Google LLC +// +// 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 +// +// https://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 v3.21.12 +// source: internal/proto/s2a/s2a.proto + +package s2a_go_proto + +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 ( + S2AService_SetUpSession_FullMethodName = "/s2a.proto.S2AService/SetUpSession" +) + +// S2AServiceClient is the client API for S2AService 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 S2AServiceClient interface { + // S2A service accepts a stream of session setup requests and returns a stream + // of session setup responses. The client of this service is expected to send + // exactly one client_start or server_start message followed by at least one + // next message. Applications running TLS clients can send requests with + // resumption_ticket messages only after the session is successfully set up. + // + // Every time S2A client sends a request, this service sends a response. + // However, clients do not have to wait for service response before sending + // the next request. + SetUpSession(ctx context.Context, opts ...grpc.CallOption) (S2AService_SetUpSessionClient, error) +} + +type s2AServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewS2AServiceClient(cc grpc.ClientConnInterface) S2AServiceClient { + return &s2AServiceClient{cc} +} + +func (c *s2AServiceClient) SetUpSession(ctx context.Context, opts ...grpc.CallOption) (S2AService_SetUpSessionClient, error) { + stream, err := c.cc.NewStream(ctx, &S2AService_ServiceDesc.Streams[0], S2AService_SetUpSession_FullMethodName, opts...) + if err != nil { + return nil, err + } + x := &s2AServiceSetUpSessionClient{stream} + return x, nil +} + +type S2AService_SetUpSessionClient interface { + Send(*SessionReq) error + Recv() (*SessionResp, error) + grpc.ClientStream +} + +type s2AServiceSetUpSessionClient struct { + grpc.ClientStream +} + +func (x *s2AServiceSetUpSessionClient) Send(m *SessionReq) error { + return x.ClientStream.SendMsg(m) +} + +func (x *s2AServiceSetUpSessionClient) Recv() (*SessionResp, error) { + m := new(SessionResp) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// S2AServiceServer is the server API for S2AService service. +// All implementations must embed UnimplementedS2AServiceServer +// for forward compatibility +type S2AServiceServer interface { + // S2A service accepts a stream of session setup requests and returns a stream + // of session setup responses. The client of this service is expected to send + // exactly one client_start or server_start message followed by at least one + // next message. Applications running TLS clients can send requests with + // resumption_ticket messages only after the session is successfully set up. + // + // Every time S2A client sends a request, this service sends a response. + // However, clients do not have to wait for service response before sending + // the next request. + SetUpSession(S2AService_SetUpSessionServer) error + mustEmbedUnimplementedS2AServiceServer() +} + +// UnimplementedS2AServiceServer must be embedded to have forward compatible implementations. +type UnimplementedS2AServiceServer struct { +} + +func (UnimplementedS2AServiceServer) SetUpSession(S2AService_SetUpSessionServer) error { + return status.Errorf(codes.Unimplemented, "method SetUpSession not implemented") +} +func (UnimplementedS2AServiceServer) mustEmbedUnimplementedS2AServiceServer() {} + +// UnsafeS2AServiceServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to S2AServiceServer will +// result in compilation errors. +type UnsafeS2AServiceServer interface { + mustEmbedUnimplementedS2AServiceServer() +} + +func RegisterS2AServiceServer(s grpc.ServiceRegistrar, srv S2AServiceServer) { + s.RegisterService(&S2AService_ServiceDesc, srv) +} + +func _S2AService_SetUpSession_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(S2AServiceServer).SetUpSession(&s2AServiceSetUpSessionServer{stream}) +} + +type S2AService_SetUpSessionServer interface { + Send(*SessionResp) error + Recv() (*SessionReq, error) + grpc.ServerStream +} + +type s2AServiceSetUpSessionServer struct { + grpc.ServerStream +} + +func (x *s2AServiceSetUpSessionServer) Send(m *SessionResp) error { + return x.ServerStream.SendMsg(m) +} + +func (x *s2AServiceSetUpSessionServer) Recv() (*SessionReq, error) { + m := new(SessionReq) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// S2AService_ServiceDesc is the grpc.ServiceDesc for S2AService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var S2AService_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "s2a.proto.S2AService", + HandlerType: (*S2AServiceServer)(nil), + Methods: []grpc.MethodDesc{}, + Streams: []grpc.StreamDesc{ + { + StreamName: "SetUpSession", + Handler: _S2AService_SetUpSession_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, + Metadata: "internal/proto/s2a/s2a.proto", +} diff --git a/vendor/github.com/google/s2a-go/internal/proto/v2/common_go_proto/common.pb.go b/vendor/github.com/google/s2a-go/internal/proto/v2/common_go_proto/common.pb.go new file mode 100644 index 0000000000..c84bed9774 --- /dev/null +++ b/vendor/github.com/google/s2a-go/internal/proto/v2/common_go_proto/common.pb.go @@ -0,0 +1,367 @@ +// Copyright 2022 Google LLC +// +// 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 +// +// https://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.30.0 +// protoc v3.21.12 +// source: internal/proto/v2/common/common.proto + +package common_go_proto + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +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 TLS 1.0-1.2 ciphersuites that the application can negotiate when using +// S2A. +type Ciphersuite int32 + +const ( + Ciphersuite_CIPHERSUITE_UNSPECIFIED Ciphersuite = 0 + Ciphersuite_CIPHERSUITE_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 Ciphersuite = 1 + Ciphersuite_CIPHERSUITE_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 Ciphersuite = 2 + Ciphersuite_CIPHERSUITE_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 Ciphersuite = 3 + Ciphersuite_CIPHERSUITE_ECDHE_RSA_WITH_AES_128_GCM_SHA256 Ciphersuite = 4 + Ciphersuite_CIPHERSUITE_ECDHE_RSA_WITH_AES_256_GCM_SHA384 Ciphersuite = 5 + Ciphersuite_CIPHERSUITE_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 Ciphersuite = 6 +) + +// Enum value maps for Ciphersuite. +var ( + Ciphersuite_name = map[int32]string{ + 0: "CIPHERSUITE_UNSPECIFIED", + 1: "CIPHERSUITE_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", + 2: "CIPHERSUITE_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", + 3: "CIPHERSUITE_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", + 4: "CIPHERSUITE_ECDHE_RSA_WITH_AES_128_GCM_SHA256", + 5: "CIPHERSUITE_ECDHE_RSA_WITH_AES_256_GCM_SHA384", + 6: "CIPHERSUITE_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", + } + Ciphersuite_value = map[string]int32{ + "CIPHERSUITE_UNSPECIFIED": 0, + "CIPHERSUITE_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256": 1, + "CIPHERSUITE_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384": 2, + "CIPHERSUITE_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256": 3, + "CIPHERSUITE_ECDHE_RSA_WITH_AES_128_GCM_SHA256": 4, + "CIPHERSUITE_ECDHE_RSA_WITH_AES_256_GCM_SHA384": 5, + "CIPHERSUITE_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256": 6, + } +) + +func (x Ciphersuite) Enum() *Ciphersuite { + p := new(Ciphersuite) + *p = x + return p +} + +func (x Ciphersuite) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Ciphersuite) Descriptor() protoreflect.EnumDescriptor { + return file_internal_proto_v2_common_common_proto_enumTypes[0].Descriptor() +} + +func (Ciphersuite) Type() protoreflect.EnumType { + return &file_internal_proto_v2_common_common_proto_enumTypes[0] +} + +func (x Ciphersuite) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Ciphersuite.Descriptor instead. +func (Ciphersuite) EnumDescriptor() ([]byte, []int) { + return file_internal_proto_v2_common_common_proto_rawDescGZIP(), []int{0} +} + +// The TLS versions supported by S2A's handshaker module. +type TLSVersion int32 + +const ( + TLSVersion_TLS_VERSION_UNSPECIFIED TLSVersion = 0 + TLSVersion_TLS_VERSION_1_0 TLSVersion = 1 + TLSVersion_TLS_VERSION_1_1 TLSVersion = 2 + TLSVersion_TLS_VERSION_1_2 TLSVersion = 3 + TLSVersion_TLS_VERSION_1_3 TLSVersion = 4 +) + +// Enum value maps for TLSVersion. +var ( + TLSVersion_name = map[int32]string{ + 0: "TLS_VERSION_UNSPECIFIED", + 1: "TLS_VERSION_1_0", + 2: "TLS_VERSION_1_1", + 3: "TLS_VERSION_1_2", + 4: "TLS_VERSION_1_3", + } + TLSVersion_value = map[string]int32{ + "TLS_VERSION_UNSPECIFIED": 0, + "TLS_VERSION_1_0": 1, + "TLS_VERSION_1_1": 2, + "TLS_VERSION_1_2": 3, + "TLS_VERSION_1_3": 4, + } +) + +func (x TLSVersion) Enum() *TLSVersion { + p := new(TLSVersion) + *p = x + return p +} + +func (x TLSVersion) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (TLSVersion) Descriptor() protoreflect.EnumDescriptor { + return file_internal_proto_v2_common_common_proto_enumTypes[1].Descriptor() +} + +func (TLSVersion) Type() protoreflect.EnumType { + return &file_internal_proto_v2_common_common_proto_enumTypes[1] +} + +func (x TLSVersion) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use TLSVersion.Descriptor instead. +func (TLSVersion) EnumDescriptor() ([]byte, []int) { + return file_internal_proto_v2_common_common_proto_rawDescGZIP(), []int{1} +} + +// The side in the TLS connection. +type ConnectionSide int32 + +const ( + ConnectionSide_CONNECTION_SIDE_UNSPECIFIED ConnectionSide = 0 + ConnectionSide_CONNECTION_SIDE_CLIENT ConnectionSide = 1 + ConnectionSide_CONNECTION_SIDE_SERVER ConnectionSide = 2 +) + +// Enum value maps for ConnectionSide. +var ( + ConnectionSide_name = map[int32]string{ + 0: "CONNECTION_SIDE_UNSPECIFIED", + 1: "CONNECTION_SIDE_CLIENT", + 2: "CONNECTION_SIDE_SERVER", + } + ConnectionSide_value = map[string]int32{ + "CONNECTION_SIDE_UNSPECIFIED": 0, + "CONNECTION_SIDE_CLIENT": 1, + "CONNECTION_SIDE_SERVER": 2, + } +) + +func (x ConnectionSide) Enum() *ConnectionSide { + p := new(ConnectionSide) + *p = x + return p +} + +func (x ConnectionSide) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ConnectionSide) Descriptor() protoreflect.EnumDescriptor { + return file_internal_proto_v2_common_common_proto_enumTypes[2].Descriptor() +} + +func (ConnectionSide) Type() protoreflect.EnumType { + return &file_internal_proto_v2_common_common_proto_enumTypes[2] +} + +func (x ConnectionSide) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ConnectionSide.Descriptor instead. +func (ConnectionSide) EnumDescriptor() ([]byte, []int) { + return file_internal_proto_v2_common_common_proto_rawDescGZIP(), []int{2} +} + +// The ALPN protocols that the application can negotiate during a TLS handshake. +type AlpnProtocol int32 + +const ( + AlpnProtocol_ALPN_PROTOCOL_UNSPECIFIED AlpnProtocol = 0 + AlpnProtocol_ALPN_PROTOCOL_GRPC AlpnProtocol = 1 + AlpnProtocol_ALPN_PROTOCOL_HTTP2 AlpnProtocol = 2 + AlpnProtocol_ALPN_PROTOCOL_HTTP1_1 AlpnProtocol = 3 +) + +// Enum value maps for AlpnProtocol. +var ( + AlpnProtocol_name = map[int32]string{ + 0: "ALPN_PROTOCOL_UNSPECIFIED", + 1: "ALPN_PROTOCOL_GRPC", + 2: "ALPN_PROTOCOL_HTTP2", + 3: "ALPN_PROTOCOL_HTTP1_1", + } + AlpnProtocol_value = map[string]int32{ + "ALPN_PROTOCOL_UNSPECIFIED": 0, + "ALPN_PROTOCOL_GRPC": 1, + "ALPN_PROTOCOL_HTTP2": 2, + "ALPN_PROTOCOL_HTTP1_1": 3, + } +) + +func (x AlpnProtocol) Enum() *AlpnProtocol { + p := new(AlpnProtocol) + *p = x + return p +} + +func (x AlpnProtocol) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (AlpnProtocol) Descriptor() protoreflect.EnumDescriptor { + return file_internal_proto_v2_common_common_proto_enumTypes[3].Descriptor() +} + +func (AlpnProtocol) Type() protoreflect.EnumType { + return &file_internal_proto_v2_common_common_proto_enumTypes[3] +} + +func (x AlpnProtocol) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use AlpnProtocol.Descriptor instead. +func (AlpnProtocol) EnumDescriptor() ([]byte, []int) { + return file_internal_proto_v2_common_common_proto_rawDescGZIP(), []int{3} +} + +var File_internal_proto_v2_common_common_proto protoreflect.FileDescriptor + +var file_internal_proto_v2_common_common_proto_rawDesc = []byte{ + 0x0a, 0x25, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x76, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0c, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2a, 0xee, 0x02, 0x0a, 0x0b, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, + 0x73, 0x75, 0x69, 0x74, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x43, 0x49, 0x50, 0x48, 0x45, 0x52, 0x53, + 0x55, 0x49, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x33, 0x0a, 0x2f, 0x43, 0x49, 0x50, 0x48, 0x45, 0x52, 0x53, 0x55, 0x49, 0x54, + 0x45, 0x5f, 0x45, 0x43, 0x44, 0x48, 0x45, 0x5f, 0x45, 0x43, 0x44, 0x53, 0x41, 0x5f, 0x57, 0x49, + 0x54, 0x48, 0x5f, 0x41, 0x45, 0x53, 0x5f, 0x31, 0x32, 0x38, 0x5f, 0x47, 0x43, 0x4d, 0x5f, 0x53, + 0x48, 0x41, 0x32, 0x35, 0x36, 0x10, 0x01, 0x12, 0x33, 0x0a, 0x2f, 0x43, 0x49, 0x50, 0x48, 0x45, + 0x52, 0x53, 0x55, 0x49, 0x54, 0x45, 0x5f, 0x45, 0x43, 0x44, 0x48, 0x45, 0x5f, 0x45, 0x43, 0x44, + 0x53, 0x41, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x41, 0x45, 0x53, 0x5f, 0x32, 0x35, 0x36, 0x5f, + 0x47, 0x43, 0x4d, 0x5f, 0x53, 0x48, 0x41, 0x33, 0x38, 0x34, 0x10, 0x02, 0x12, 0x39, 0x0a, 0x35, + 0x43, 0x49, 0x50, 0x48, 0x45, 0x52, 0x53, 0x55, 0x49, 0x54, 0x45, 0x5f, 0x45, 0x43, 0x44, 0x48, + 0x45, 0x5f, 0x45, 0x43, 0x44, 0x53, 0x41, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x43, 0x48, 0x41, + 0x43, 0x48, 0x41, 0x32, 0x30, 0x5f, 0x50, 0x4f, 0x4c, 0x59, 0x31, 0x33, 0x30, 0x35, 0x5f, 0x53, + 0x48, 0x41, 0x32, 0x35, 0x36, 0x10, 0x03, 0x12, 0x31, 0x0a, 0x2d, 0x43, 0x49, 0x50, 0x48, 0x45, + 0x52, 0x53, 0x55, 0x49, 0x54, 0x45, 0x5f, 0x45, 0x43, 0x44, 0x48, 0x45, 0x5f, 0x52, 0x53, 0x41, + 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x41, 0x45, 0x53, 0x5f, 0x31, 0x32, 0x38, 0x5f, 0x47, 0x43, + 0x4d, 0x5f, 0x53, 0x48, 0x41, 0x32, 0x35, 0x36, 0x10, 0x04, 0x12, 0x31, 0x0a, 0x2d, 0x43, 0x49, + 0x50, 0x48, 0x45, 0x52, 0x53, 0x55, 0x49, 0x54, 0x45, 0x5f, 0x45, 0x43, 0x44, 0x48, 0x45, 0x5f, + 0x52, 0x53, 0x41, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x41, 0x45, 0x53, 0x5f, 0x32, 0x35, 0x36, + 0x5f, 0x47, 0x43, 0x4d, 0x5f, 0x53, 0x48, 0x41, 0x33, 0x38, 0x34, 0x10, 0x05, 0x12, 0x37, 0x0a, + 0x33, 0x43, 0x49, 0x50, 0x48, 0x45, 0x52, 0x53, 0x55, 0x49, 0x54, 0x45, 0x5f, 0x45, 0x43, 0x44, + 0x48, 0x45, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x43, 0x48, 0x41, 0x43, + 0x48, 0x41, 0x32, 0x30, 0x5f, 0x50, 0x4f, 0x4c, 0x59, 0x31, 0x33, 0x30, 0x35, 0x5f, 0x53, 0x48, + 0x41, 0x32, 0x35, 0x36, 0x10, 0x06, 0x2a, 0x7d, 0x0a, 0x0a, 0x54, 0x4c, 0x53, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x17, 0x54, 0x4c, 0x53, 0x5f, 0x56, 0x45, 0x52, 0x53, + 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x54, 0x4c, 0x53, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, + 0x5f, 0x31, 0x5f, 0x30, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x54, 0x4c, 0x53, 0x5f, 0x56, 0x45, + 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x31, 0x5f, 0x31, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x54, + 0x4c, 0x53, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x31, 0x5f, 0x32, 0x10, 0x03, + 0x12, 0x13, 0x0a, 0x0f, 0x54, 0x4c, 0x53, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, + 0x31, 0x5f, 0x33, 0x10, 0x04, 0x2a, 0x69, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x69, 0x64, 0x65, 0x12, 0x1f, 0x0a, 0x1b, 0x43, 0x4f, 0x4e, 0x4e, 0x45, + 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x49, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x4f, 0x4e, 0x4e, + 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x49, 0x44, 0x45, 0x5f, 0x43, 0x4c, 0x49, 0x45, + 0x4e, 0x54, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x53, 0x49, 0x44, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x02, + 0x2a, 0x79, 0x0a, 0x0c, 0x41, 0x6c, 0x70, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, + 0x12, 0x1d, 0x0a, 0x19, 0x41, 0x4c, 0x50, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, + 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, + 0x16, 0x0a, 0x12, 0x41, 0x4c, 0x50, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, + 0x5f, 0x47, 0x52, 0x50, 0x43, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x41, 0x4c, 0x50, 0x4e, 0x5f, + 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x32, 0x10, 0x02, + 0x12, 0x19, 0x0a, 0x15, 0x41, 0x4c, 0x50, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, + 0x4c, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x31, 0x5f, 0x31, 0x10, 0x03, 0x42, 0x39, 0x5a, 0x37, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2f, 0x73, 0x32, 0x61, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x67, 0x6f, + 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_internal_proto_v2_common_common_proto_rawDescOnce sync.Once + file_internal_proto_v2_common_common_proto_rawDescData = file_internal_proto_v2_common_common_proto_rawDesc +) + +func file_internal_proto_v2_common_common_proto_rawDescGZIP() []byte { + file_internal_proto_v2_common_common_proto_rawDescOnce.Do(func() { + file_internal_proto_v2_common_common_proto_rawDescData = protoimpl.X.CompressGZIP(file_internal_proto_v2_common_common_proto_rawDescData) + }) + return file_internal_proto_v2_common_common_proto_rawDescData +} + +var file_internal_proto_v2_common_common_proto_enumTypes = make([]protoimpl.EnumInfo, 4) +var file_internal_proto_v2_common_common_proto_goTypes = []interface{}{ + (Ciphersuite)(0), // 0: s2a.proto.v2.Ciphersuite + (TLSVersion)(0), // 1: s2a.proto.v2.TLSVersion + (ConnectionSide)(0), // 2: s2a.proto.v2.ConnectionSide + (AlpnProtocol)(0), // 3: s2a.proto.v2.AlpnProtocol +} +var file_internal_proto_v2_common_common_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() { file_internal_proto_v2_common_common_proto_init() } +func file_internal_proto_v2_common_common_proto_init() { + if File_internal_proto_v2_common_common_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_internal_proto_v2_common_common_proto_rawDesc, + NumEnums: 4, + NumMessages: 0, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_internal_proto_v2_common_common_proto_goTypes, + DependencyIndexes: file_internal_proto_v2_common_common_proto_depIdxs, + EnumInfos: file_internal_proto_v2_common_common_proto_enumTypes, + }.Build() + File_internal_proto_v2_common_common_proto = out.File + file_internal_proto_v2_common_common_proto_rawDesc = nil + file_internal_proto_v2_common_common_proto_goTypes = nil + file_internal_proto_v2_common_common_proto_depIdxs = nil +} diff --git a/vendor/github.com/google/s2a-go/internal/proto/v2/s2a_context_go_proto/s2a_context.pb.go b/vendor/github.com/google/s2a-go/internal/proto/v2/s2a_context_go_proto/s2a_context.pb.go new file mode 100644 index 0000000000..b7fd871c7a --- /dev/null +++ b/vendor/github.com/google/s2a-go/internal/proto/v2/s2a_context_go_proto/s2a_context.pb.go @@ -0,0 +1,248 @@ +// Copyright 2022 Google LLC +// +// 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 +// +// https://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.30.0 +// protoc v3.21.12 +// source: internal/proto/v2/s2a_context/s2a_context.proto + +package s2a_context_go_proto + +import ( + common_go_proto "github.com/google/s2a-go/internal/proto/common_go_proto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +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) +) + +type S2AContext struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The SPIFFE ID from the peer leaf certificate, if present. + // + // This field is only populated if the leaf certificate is a valid SPIFFE + // SVID; in particular, there is a unique URI SAN and this URI SAN is a valid + // SPIFFE ID. + LeafCertSpiffeId string `protobuf:"bytes,1,opt,name=leaf_cert_spiffe_id,json=leafCertSpiffeId,proto3" json:"leaf_cert_spiffe_id,omitempty"` + // The URIs that are present in the SubjectAltName extension of the peer leaf + // certificate. + // + // Note that the extracted URIs are not validated and may not be properly + // formatted. + LeafCertUris []string `protobuf:"bytes,2,rep,name=leaf_cert_uris,json=leafCertUris,proto3" json:"leaf_cert_uris,omitempty"` + // The DNSNames that are present in the SubjectAltName extension of the peer + // leaf certificate. + LeafCertDnsnames []string `protobuf:"bytes,3,rep,name=leaf_cert_dnsnames,json=leafCertDnsnames,proto3" json:"leaf_cert_dnsnames,omitempty"` + // The (ordered) list of fingerprints in the certificate chain used to verify + // the given leaf certificate. The order MUST be from leaf certificate + // fingerprint to root certificate fingerprint. + // + // A fingerprint is the base-64 encoding of the SHA256 hash of the + // DER-encoding of a certificate. The list MAY be populated even if the peer + // certificate chain was NOT validated successfully. + PeerCertificateChainFingerprints []string `protobuf:"bytes,4,rep,name=peer_certificate_chain_fingerprints,json=peerCertificateChainFingerprints,proto3" json:"peer_certificate_chain_fingerprints,omitempty"` + // The local identity used during session setup. + LocalIdentity *common_go_proto.Identity `protobuf:"bytes,5,opt,name=local_identity,json=localIdentity,proto3" json:"local_identity,omitempty"` + // The SHA256 hash of the DER-encoding of the local leaf certificate used in + // the handshake. + LocalLeafCertFingerprint []byte `protobuf:"bytes,6,opt,name=local_leaf_cert_fingerprint,json=localLeafCertFingerprint,proto3" json:"local_leaf_cert_fingerprint,omitempty"` +} + +func (x *S2AContext) Reset() { + *x = S2AContext{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_proto_v2_s2a_context_s2a_context_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *S2AContext) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*S2AContext) ProtoMessage() {} + +func (x *S2AContext) ProtoReflect() protoreflect.Message { + mi := &file_internal_proto_v2_s2a_context_s2a_context_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) +} + +// Deprecated: Use S2AContext.ProtoReflect.Descriptor instead. +func (*S2AContext) Descriptor() ([]byte, []int) { + return file_internal_proto_v2_s2a_context_s2a_context_proto_rawDescGZIP(), []int{0} +} + +func (x *S2AContext) GetLeafCertSpiffeId() string { + if x != nil { + return x.LeafCertSpiffeId + } + return "" +} + +func (x *S2AContext) GetLeafCertUris() []string { + if x != nil { + return x.LeafCertUris + } + return nil +} + +func (x *S2AContext) GetLeafCertDnsnames() []string { + if x != nil { + return x.LeafCertDnsnames + } + return nil +} + +func (x *S2AContext) GetPeerCertificateChainFingerprints() []string { + if x != nil { + return x.PeerCertificateChainFingerprints + } + return nil +} + +func (x *S2AContext) GetLocalIdentity() *common_go_proto.Identity { + if x != nil { + return x.LocalIdentity + } + return nil +} + +func (x *S2AContext) GetLocalLeafCertFingerprint() []byte { + if x != nil { + return x.LocalLeafCertFingerprint + } + return nil +} + +var File_internal_proto_v2_s2a_context_s2a_context_proto protoreflect.FileDescriptor + +var file_internal_proto_v2_s2a_context_s2a_context_proto_rawDesc = []byte{ + 0x0a, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x32, 0x61, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2f, + 0x73, 0x32, 0x61, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x0c, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x1a, + 0x22, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0xd9, 0x02, 0x0a, 0x0a, 0x53, 0x32, 0x41, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x78, 0x74, 0x12, 0x2d, 0x0a, 0x13, 0x6c, 0x65, 0x61, 0x66, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x5f, + 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x10, 0x6c, 0x65, 0x61, 0x66, 0x43, 0x65, 0x72, 0x74, 0x53, 0x70, 0x69, 0x66, 0x66, 0x65, 0x49, + 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x6c, 0x65, 0x61, 0x66, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x5f, 0x75, + 0x72, 0x69, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x6c, 0x65, 0x61, 0x66, 0x43, + 0x65, 0x72, 0x74, 0x55, 0x72, 0x69, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x6c, 0x65, 0x61, 0x66, 0x5f, + 0x63, 0x65, 0x72, 0x74, 0x5f, 0x64, 0x6e, 0x73, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x10, 0x6c, 0x65, 0x61, 0x66, 0x43, 0x65, 0x72, 0x74, 0x44, 0x6e, 0x73, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x4d, 0x0a, 0x23, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x63, 0x65, + 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, + 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x20, 0x70, 0x65, 0x65, 0x72, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, + 0x69, 0x6e, 0x74, 0x73, 0x12, 0x3a, 0x0a, 0x0e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x69, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, + 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x52, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x12, 0x3d, 0x0a, 0x1b, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x6c, 0x65, 0x61, 0x66, 0x5f, 0x63, + 0x65, 0x72, 0x74, 0x5f, 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x18, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x4c, 0x65, 0x61, 0x66, + 0x43, 0x65, 0x72, 0x74, 0x46, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x42, + 0x3e, 0x5a, 0x3c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x73, 0x32, 0x61, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x32, 0x61, 0x5f, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x67, 0x6f, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_internal_proto_v2_s2a_context_s2a_context_proto_rawDescOnce sync.Once + file_internal_proto_v2_s2a_context_s2a_context_proto_rawDescData = file_internal_proto_v2_s2a_context_s2a_context_proto_rawDesc +) + +func file_internal_proto_v2_s2a_context_s2a_context_proto_rawDescGZIP() []byte { + file_internal_proto_v2_s2a_context_s2a_context_proto_rawDescOnce.Do(func() { + file_internal_proto_v2_s2a_context_s2a_context_proto_rawDescData = protoimpl.X.CompressGZIP(file_internal_proto_v2_s2a_context_s2a_context_proto_rawDescData) + }) + return file_internal_proto_v2_s2a_context_s2a_context_proto_rawDescData +} + +var file_internal_proto_v2_s2a_context_s2a_context_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_internal_proto_v2_s2a_context_s2a_context_proto_goTypes = []interface{}{ + (*S2AContext)(nil), // 0: s2a.proto.v2.S2AContext + (*common_go_proto.Identity)(nil), // 1: s2a.proto.Identity +} +var file_internal_proto_v2_s2a_context_s2a_context_proto_depIdxs = []int32{ + 1, // 0: s2a.proto.v2.S2AContext.local_identity:type_name -> s2a.proto.Identity + 1, // [1:1] is the sub-list for method output_type + 1, // [1:1] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +func init() { file_internal_proto_v2_s2a_context_s2a_context_proto_init() } +func file_internal_proto_v2_s2a_context_s2a_context_proto_init() { + if File_internal_proto_v2_s2a_context_s2a_context_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_internal_proto_v2_s2a_context_s2a_context_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*S2AContext); 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_internal_proto_v2_s2a_context_s2a_context_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_internal_proto_v2_s2a_context_s2a_context_proto_goTypes, + DependencyIndexes: file_internal_proto_v2_s2a_context_s2a_context_proto_depIdxs, + MessageInfos: file_internal_proto_v2_s2a_context_s2a_context_proto_msgTypes, + }.Build() + File_internal_proto_v2_s2a_context_s2a_context_proto = out.File + file_internal_proto_v2_s2a_context_s2a_context_proto_rawDesc = nil + file_internal_proto_v2_s2a_context_s2a_context_proto_goTypes = nil + file_internal_proto_v2_s2a_context_s2a_context_proto_depIdxs = nil +} diff --git a/vendor/github.com/google/s2a-go/internal/proto/v2/s2a_go_proto/s2a.pb.go b/vendor/github.com/google/s2a-go/internal/proto/v2/s2a_go_proto/s2a.pb.go new file mode 100644 index 0000000000..e843450c7e --- /dev/null +++ b/vendor/github.com/google/s2a-go/internal/proto/v2/s2a_go_proto/s2a.pb.go @@ -0,0 +1,2494 @@ +// Copyright 2022 Google LLC +// +// 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 +// +// https://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.30.0 +// protoc v3.21.12 +// source: internal/proto/v2/s2a/s2a.proto + +package s2a_go_proto + +import ( + common_go_proto1 "github.com/google/s2a-go/internal/proto/common_go_proto" + common_go_proto "github.com/google/s2a-go/internal/proto/v2/common_go_proto" + s2a_context_go_proto "github.com/google/s2a-go/internal/proto/v2/s2a_context_go_proto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +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) +) + +type SignatureAlgorithm int32 + +const ( + SignatureAlgorithm_S2A_SSL_SIGN_UNSPECIFIED SignatureAlgorithm = 0 + // RSA Public-Key Cryptography Standards #1. + SignatureAlgorithm_S2A_SSL_SIGN_RSA_PKCS1_SHA256 SignatureAlgorithm = 1 + SignatureAlgorithm_S2A_SSL_SIGN_RSA_PKCS1_SHA384 SignatureAlgorithm = 2 + SignatureAlgorithm_S2A_SSL_SIGN_RSA_PKCS1_SHA512 SignatureAlgorithm = 3 + // ECDSA. + SignatureAlgorithm_S2A_SSL_SIGN_ECDSA_SECP256R1_SHA256 SignatureAlgorithm = 4 + SignatureAlgorithm_S2A_SSL_SIGN_ECDSA_SECP384R1_SHA384 SignatureAlgorithm = 5 + SignatureAlgorithm_S2A_SSL_SIGN_ECDSA_SECP521R1_SHA512 SignatureAlgorithm = 6 + // RSA Probabilistic Signature Scheme. + SignatureAlgorithm_S2A_SSL_SIGN_RSA_PSS_RSAE_SHA256 SignatureAlgorithm = 7 + SignatureAlgorithm_S2A_SSL_SIGN_RSA_PSS_RSAE_SHA384 SignatureAlgorithm = 8 + SignatureAlgorithm_S2A_SSL_SIGN_RSA_PSS_RSAE_SHA512 SignatureAlgorithm = 9 + // ED25519. + SignatureAlgorithm_S2A_SSL_SIGN_ED25519 SignatureAlgorithm = 10 +) + +// Enum value maps for SignatureAlgorithm. +var ( + SignatureAlgorithm_name = map[int32]string{ + 0: "S2A_SSL_SIGN_UNSPECIFIED", + 1: "S2A_SSL_SIGN_RSA_PKCS1_SHA256", + 2: "S2A_SSL_SIGN_RSA_PKCS1_SHA384", + 3: "S2A_SSL_SIGN_RSA_PKCS1_SHA512", + 4: "S2A_SSL_SIGN_ECDSA_SECP256R1_SHA256", + 5: "S2A_SSL_SIGN_ECDSA_SECP384R1_SHA384", + 6: "S2A_SSL_SIGN_ECDSA_SECP521R1_SHA512", + 7: "S2A_SSL_SIGN_RSA_PSS_RSAE_SHA256", + 8: "S2A_SSL_SIGN_RSA_PSS_RSAE_SHA384", + 9: "S2A_SSL_SIGN_RSA_PSS_RSAE_SHA512", + 10: "S2A_SSL_SIGN_ED25519", + } + SignatureAlgorithm_value = map[string]int32{ + "S2A_SSL_SIGN_UNSPECIFIED": 0, + "S2A_SSL_SIGN_RSA_PKCS1_SHA256": 1, + "S2A_SSL_SIGN_RSA_PKCS1_SHA384": 2, + "S2A_SSL_SIGN_RSA_PKCS1_SHA512": 3, + "S2A_SSL_SIGN_ECDSA_SECP256R1_SHA256": 4, + "S2A_SSL_SIGN_ECDSA_SECP384R1_SHA384": 5, + "S2A_SSL_SIGN_ECDSA_SECP521R1_SHA512": 6, + "S2A_SSL_SIGN_RSA_PSS_RSAE_SHA256": 7, + "S2A_SSL_SIGN_RSA_PSS_RSAE_SHA384": 8, + "S2A_SSL_SIGN_RSA_PSS_RSAE_SHA512": 9, + "S2A_SSL_SIGN_ED25519": 10, + } +) + +func (x SignatureAlgorithm) Enum() *SignatureAlgorithm { + p := new(SignatureAlgorithm) + *p = x + return p +} + +func (x SignatureAlgorithm) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SignatureAlgorithm) Descriptor() protoreflect.EnumDescriptor { + return file_internal_proto_v2_s2a_s2a_proto_enumTypes[0].Descriptor() +} + +func (SignatureAlgorithm) Type() protoreflect.EnumType { + return &file_internal_proto_v2_s2a_s2a_proto_enumTypes[0] +} + +func (x SignatureAlgorithm) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use SignatureAlgorithm.Descriptor instead. +func (SignatureAlgorithm) EnumDescriptor() ([]byte, []int) { + return file_internal_proto_v2_s2a_s2a_proto_rawDescGZIP(), []int{0} +} + +type GetTlsConfigurationResp_ServerTlsConfiguration_RequestClientCertificate int32 + +const ( + GetTlsConfigurationResp_ServerTlsConfiguration_UNSPECIFIED GetTlsConfigurationResp_ServerTlsConfiguration_RequestClientCertificate = 0 + GetTlsConfigurationResp_ServerTlsConfiguration_DONT_REQUEST_CLIENT_CERTIFICATE GetTlsConfigurationResp_ServerTlsConfiguration_RequestClientCertificate = 1 + GetTlsConfigurationResp_ServerTlsConfiguration_REQUEST_CLIENT_CERTIFICATE_BUT_DONT_VERIFY GetTlsConfigurationResp_ServerTlsConfiguration_RequestClientCertificate = 2 + GetTlsConfigurationResp_ServerTlsConfiguration_REQUEST_CLIENT_CERTIFICATE_AND_VERIFY GetTlsConfigurationResp_ServerTlsConfiguration_RequestClientCertificate = 3 + GetTlsConfigurationResp_ServerTlsConfiguration_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_BUT_DONT_VERIFY GetTlsConfigurationResp_ServerTlsConfiguration_RequestClientCertificate = 4 + GetTlsConfigurationResp_ServerTlsConfiguration_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY GetTlsConfigurationResp_ServerTlsConfiguration_RequestClientCertificate = 5 +) + +// Enum value maps for GetTlsConfigurationResp_ServerTlsConfiguration_RequestClientCertificate. +var ( + GetTlsConfigurationResp_ServerTlsConfiguration_RequestClientCertificate_name = map[int32]string{ + 0: "UNSPECIFIED", + 1: "DONT_REQUEST_CLIENT_CERTIFICATE", + 2: "REQUEST_CLIENT_CERTIFICATE_BUT_DONT_VERIFY", + 3: "REQUEST_CLIENT_CERTIFICATE_AND_VERIFY", + 4: "REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_BUT_DONT_VERIFY", + 5: "REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY", + } + GetTlsConfigurationResp_ServerTlsConfiguration_RequestClientCertificate_value = map[string]int32{ + "UNSPECIFIED": 0, + "DONT_REQUEST_CLIENT_CERTIFICATE": 1, + "REQUEST_CLIENT_CERTIFICATE_BUT_DONT_VERIFY": 2, + "REQUEST_CLIENT_CERTIFICATE_AND_VERIFY": 3, + "REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_BUT_DONT_VERIFY": 4, + "REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY": 5, + } +) + +func (x GetTlsConfigurationResp_ServerTlsConfiguration_RequestClientCertificate) Enum() *GetTlsConfigurationResp_ServerTlsConfiguration_RequestClientCertificate { + p := new(GetTlsConfigurationResp_ServerTlsConfiguration_RequestClientCertificate) + *p = x + return p +} + +func (x GetTlsConfigurationResp_ServerTlsConfiguration_RequestClientCertificate) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (GetTlsConfigurationResp_ServerTlsConfiguration_RequestClientCertificate) Descriptor() protoreflect.EnumDescriptor { + return file_internal_proto_v2_s2a_s2a_proto_enumTypes[1].Descriptor() +} + +func (GetTlsConfigurationResp_ServerTlsConfiguration_RequestClientCertificate) Type() protoreflect.EnumType { + return &file_internal_proto_v2_s2a_s2a_proto_enumTypes[1] +} + +func (x GetTlsConfigurationResp_ServerTlsConfiguration_RequestClientCertificate) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use GetTlsConfigurationResp_ServerTlsConfiguration_RequestClientCertificate.Descriptor instead. +func (GetTlsConfigurationResp_ServerTlsConfiguration_RequestClientCertificate) EnumDescriptor() ([]byte, []int) { + return file_internal_proto_v2_s2a_s2a_proto_rawDescGZIP(), []int{4, 1, 0} +} + +type OffloadPrivateKeyOperationReq_PrivateKeyOperation int32 + +const ( + OffloadPrivateKeyOperationReq_UNSPECIFIED OffloadPrivateKeyOperationReq_PrivateKeyOperation = 0 + // When performing a TLS 1.2 or 1.3 handshake, the (partial) transcript of + // the TLS handshake must be signed to prove possession of the private key. + // + // See https://www.rfc-editor.org/rfc/rfc8446.html#section-4.4.3. + OffloadPrivateKeyOperationReq_SIGN OffloadPrivateKeyOperationReq_PrivateKeyOperation = 1 + // When performing a TLS 1.2 handshake using an RSA algorithm, the key + // exchange algorithm involves the client generating a premaster secret, + // encrypting it using the server's public key, and sending this encrypted + // blob to the server in a ClientKeyExchange message. + // + // See https://www.rfc-editor.org/rfc/rfc4346#section-7.4.7.1. + OffloadPrivateKeyOperationReq_DECRYPT OffloadPrivateKeyOperationReq_PrivateKeyOperation = 2 +) + +// Enum value maps for OffloadPrivateKeyOperationReq_PrivateKeyOperation. +var ( + OffloadPrivateKeyOperationReq_PrivateKeyOperation_name = map[int32]string{ + 0: "UNSPECIFIED", + 1: "SIGN", + 2: "DECRYPT", + } + OffloadPrivateKeyOperationReq_PrivateKeyOperation_value = map[string]int32{ + "UNSPECIFIED": 0, + "SIGN": 1, + "DECRYPT": 2, + } +) + +func (x OffloadPrivateKeyOperationReq_PrivateKeyOperation) Enum() *OffloadPrivateKeyOperationReq_PrivateKeyOperation { + p := new(OffloadPrivateKeyOperationReq_PrivateKeyOperation) + *p = x + return p +} + +func (x OffloadPrivateKeyOperationReq_PrivateKeyOperation) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (OffloadPrivateKeyOperationReq_PrivateKeyOperation) Descriptor() protoreflect.EnumDescriptor { + return file_internal_proto_v2_s2a_s2a_proto_enumTypes[2].Descriptor() +} + +func (OffloadPrivateKeyOperationReq_PrivateKeyOperation) Type() protoreflect.EnumType { + return &file_internal_proto_v2_s2a_s2a_proto_enumTypes[2] +} + +func (x OffloadPrivateKeyOperationReq_PrivateKeyOperation) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use OffloadPrivateKeyOperationReq_PrivateKeyOperation.Descriptor instead. +func (OffloadPrivateKeyOperationReq_PrivateKeyOperation) EnumDescriptor() ([]byte, []int) { + return file_internal_proto_v2_s2a_s2a_proto_rawDescGZIP(), []int{5, 0} +} + +type OffloadResumptionKeyOperationReq_ResumptionKeyOperation int32 + +const ( + OffloadResumptionKeyOperationReq_UNSPECIFIED OffloadResumptionKeyOperationReq_ResumptionKeyOperation = 0 + OffloadResumptionKeyOperationReq_ENCRYPT OffloadResumptionKeyOperationReq_ResumptionKeyOperation = 1 + OffloadResumptionKeyOperationReq_DECRYPT OffloadResumptionKeyOperationReq_ResumptionKeyOperation = 2 +) + +// Enum value maps for OffloadResumptionKeyOperationReq_ResumptionKeyOperation. +var ( + OffloadResumptionKeyOperationReq_ResumptionKeyOperation_name = map[int32]string{ + 0: "UNSPECIFIED", + 1: "ENCRYPT", + 2: "DECRYPT", + } + OffloadResumptionKeyOperationReq_ResumptionKeyOperation_value = map[string]int32{ + "UNSPECIFIED": 0, + "ENCRYPT": 1, + "DECRYPT": 2, + } +) + +func (x OffloadResumptionKeyOperationReq_ResumptionKeyOperation) Enum() *OffloadResumptionKeyOperationReq_ResumptionKeyOperation { + p := new(OffloadResumptionKeyOperationReq_ResumptionKeyOperation) + *p = x + return p +} + +func (x OffloadResumptionKeyOperationReq_ResumptionKeyOperation) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (OffloadResumptionKeyOperationReq_ResumptionKeyOperation) Descriptor() protoreflect.EnumDescriptor { + return file_internal_proto_v2_s2a_s2a_proto_enumTypes[3].Descriptor() +} + +func (OffloadResumptionKeyOperationReq_ResumptionKeyOperation) Type() protoreflect.EnumType { + return &file_internal_proto_v2_s2a_s2a_proto_enumTypes[3] +} + +func (x OffloadResumptionKeyOperationReq_ResumptionKeyOperation) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use OffloadResumptionKeyOperationReq_ResumptionKeyOperation.Descriptor instead. +func (OffloadResumptionKeyOperationReq_ResumptionKeyOperation) EnumDescriptor() ([]byte, []int) { + return file_internal_proto_v2_s2a_s2a_proto_rawDescGZIP(), []int{7, 0} +} + +type ValidatePeerCertificateChainReq_VerificationMode int32 + +const ( + // The default verification mode supported by S2A. + ValidatePeerCertificateChainReq_UNSPECIFIED ValidatePeerCertificateChainReq_VerificationMode = 0 + // The SPIFFE verification mode selects the set of trusted certificates to + // use for path building based on the SPIFFE trust domain in the peer's leaf + // certificate. + ValidatePeerCertificateChainReq_SPIFFE ValidatePeerCertificateChainReq_VerificationMode = 1 + // The connect-to-Google verification mode uses the trust bundle for + // connecting to Google, e.g. *.mtls.googleapis.com endpoints. + ValidatePeerCertificateChainReq_CONNECT_TO_GOOGLE ValidatePeerCertificateChainReq_VerificationMode = 2 +) + +// Enum value maps for ValidatePeerCertificateChainReq_VerificationMode. +var ( + ValidatePeerCertificateChainReq_VerificationMode_name = map[int32]string{ + 0: "UNSPECIFIED", + 1: "SPIFFE", + 2: "CONNECT_TO_GOOGLE", + } + ValidatePeerCertificateChainReq_VerificationMode_value = map[string]int32{ + "UNSPECIFIED": 0, + "SPIFFE": 1, + "CONNECT_TO_GOOGLE": 2, + } +) + +func (x ValidatePeerCertificateChainReq_VerificationMode) Enum() *ValidatePeerCertificateChainReq_VerificationMode { + p := new(ValidatePeerCertificateChainReq_VerificationMode) + *p = x + return p +} + +func (x ValidatePeerCertificateChainReq_VerificationMode) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ValidatePeerCertificateChainReq_VerificationMode) Descriptor() protoreflect.EnumDescriptor { + return file_internal_proto_v2_s2a_s2a_proto_enumTypes[4].Descriptor() +} + +func (ValidatePeerCertificateChainReq_VerificationMode) Type() protoreflect.EnumType { + return &file_internal_proto_v2_s2a_s2a_proto_enumTypes[4] +} + +func (x ValidatePeerCertificateChainReq_VerificationMode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ValidatePeerCertificateChainReq_VerificationMode.Descriptor instead. +func (ValidatePeerCertificateChainReq_VerificationMode) EnumDescriptor() ([]byte, []int) { + return file_internal_proto_v2_s2a_s2a_proto_rawDescGZIP(), []int{9, 0} +} + +type ValidatePeerCertificateChainResp_ValidationResult int32 + +const ( + ValidatePeerCertificateChainResp_UNSPECIFIED ValidatePeerCertificateChainResp_ValidationResult = 0 + ValidatePeerCertificateChainResp_SUCCESS ValidatePeerCertificateChainResp_ValidationResult = 1 + ValidatePeerCertificateChainResp_FAILURE ValidatePeerCertificateChainResp_ValidationResult = 2 +) + +// Enum value maps for ValidatePeerCertificateChainResp_ValidationResult. +var ( + ValidatePeerCertificateChainResp_ValidationResult_name = map[int32]string{ + 0: "UNSPECIFIED", + 1: "SUCCESS", + 2: "FAILURE", + } + ValidatePeerCertificateChainResp_ValidationResult_value = map[string]int32{ + "UNSPECIFIED": 0, + "SUCCESS": 1, + "FAILURE": 2, + } +) + +func (x ValidatePeerCertificateChainResp_ValidationResult) Enum() *ValidatePeerCertificateChainResp_ValidationResult { + p := new(ValidatePeerCertificateChainResp_ValidationResult) + *p = x + return p +} + +func (x ValidatePeerCertificateChainResp_ValidationResult) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ValidatePeerCertificateChainResp_ValidationResult) Descriptor() protoreflect.EnumDescriptor { + return file_internal_proto_v2_s2a_s2a_proto_enumTypes[5].Descriptor() +} + +func (ValidatePeerCertificateChainResp_ValidationResult) Type() protoreflect.EnumType { + return &file_internal_proto_v2_s2a_s2a_proto_enumTypes[5] +} + +func (x ValidatePeerCertificateChainResp_ValidationResult) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ValidatePeerCertificateChainResp_ValidationResult.Descriptor instead. +func (ValidatePeerCertificateChainResp_ValidationResult) EnumDescriptor() ([]byte, []int) { + return file_internal_proto_v2_s2a_s2a_proto_rawDescGZIP(), []int{10, 0} +} + +type AlpnPolicy struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // If true, the application MUST perform ALPN negotiation. + EnableAlpnNegotiation bool `protobuf:"varint,1,opt,name=enable_alpn_negotiation,json=enableAlpnNegotiation,proto3" json:"enable_alpn_negotiation,omitempty"` + // The ordered list of ALPN protocols that specify how the application SHOULD + // negotiate ALPN during the TLS handshake. + // + // The application MAY ignore any ALPN protocols in this list that are not + // supported by the application. + AlpnProtocols []common_go_proto.AlpnProtocol `protobuf:"varint,2,rep,packed,name=alpn_protocols,json=alpnProtocols,proto3,enum=s2a.proto.v2.AlpnProtocol" json:"alpn_protocols,omitempty"` +} + +func (x *AlpnPolicy) Reset() { + *x = AlpnPolicy{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_proto_v2_s2a_s2a_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AlpnPolicy) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AlpnPolicy) ProtoMessage() {} + +func (x *AlpnPolicy) ProtoReflect() protoreflect.Message { + mi := &file_internal_proto_v2_s2a_s2a_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) +} + +// Deprecated: Use AlpnPolicy.ProtoReflect.Descriptor instead. +func (*AlpnPolicy) Descriptor() ([]byte, []int) { + return file_internal_proto_v2_s2a_s2a_proto_rawDescGZIP(), []int{0} +} + +func (x *AlpnPolicy) GetEnableAlpnNegotiation() bool { + if x != nil { + return x.EnableAlpnNegotiation + } + return false +} + +func (x *AlpnPolicy) GetAlpnProtocols() []common_go_proto.AlpnProtocol { + if x != nil { + return x.AlpnProtocols + } + return nil +} + +type AuthenticationMechanism struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Applications may specify an identity associated to an authentication + // mechanism. Otherwise, S2A assumes that the authentication mechanism is + // associated with the default identity. If the default identity cannot be + // determined, the request is rejected. + Identity *common_go_proto1.Identity `protobuf:"bytes,1,opt,name=identity,proto3" json:"identity,omitempty"` + // Types that are assignable to MechanismOneof: + // + // *AuthenticationMechanism_Token + MechanismOneof isAuthenticationMechanism_MechanismOneof `protobuf_oneof:"mechanism_oneof"` +} + +func (x *AuthenticationMechanism) Reset() { + *x = AuthenticationMechanism{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_proto_v2_s2a_s2a_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuthenticationMechanism) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuthenticationMechanism) ProtoMessage() {} + +func (x *AuthenticationMechanism) ProtoReflect() protoreflect.Message { + mi := &file_internal_proto_v2_s2a_s2a_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) +} + +// Deprecated: Use AuthenticationMechanism.ProtoReflect.Descriptor instead. +func (*AuthenticationMechanism) Descriptor() ([]byte, []int) { + return file_internal_proto_v2_s2a_s2a_proto_rawDescGZIP(), []int{1} +} + +func (x *AuthenticationMechanism) GetIdentity() *common_go_proto1.Identity { + if x != nil { + return x.Identity + } + return nil +} + +func (m *AuthenticationMechanism) GetMechanismOneof() isAuthenticationMechanism_MechanismOneof { + if m != nil { + return m.MechanismOneof + } + return nil +} + +func (x *AuthenticationMechanism) GetToken() string { + if x, ok := x.GetMechanismOneof().(*AuthenticationMechanism_Token); ok { + return x.Token + } + return "" +} + +type isAuthenticationMechanism_MechanismOneof interface { + isAuthenticationMechanism_MechanismOneof() +} + +type AuthenticationMechanism_Token struct { + // A token that the application uses to authenticate itself to S2A. + Token string `protobuf:"bytes,2,opt,name=token,proto3,oneof"` +} + +func (*AuthenticationMechanism_Token) isAuthenticationMechanism_MechanismOneof() {} + +type Status struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The status code that is specific to the application and the implementation + // of S2A, e.g., gRPC status code. + Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + // The status details. + Details string `protobuf:"bytes,2,opt,name=details,proto3" json:"details,omitempty"` +} + +func (x *Status) Reset() { + *x = Status{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_proto_v2_s2a_s2a_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Status) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Status) ProtoMessage() {} + +func (x *Status) ProtoReflect() protoreflect.Message { + mi := &file_internal_proto_v2_s2a_s2a_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) +} + +// Deprecated: Use Status.ProtoReflect.Descriptor instead. +func (*Status) Descriptor() ([]byte, []int) { + return file_internal_proto_v2_s2a_s2a_proto_rawDescGZIP(), []int{2} +} + +func (x *Status) GetCode() uint32 { + if x != nil { + return x.Code + } + return 0 +} + +func (x *Status) GetDetails() string { + if x != nil { + return x.Details + } + return "" +} + +type GetTlsConfigurationReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The role of the application in the TLS connection. + ConnectionSide common_go_proto.ConnectionSide `protobuf:"varint,1,opt,name=connection_side,json=connectionSide,proto3,enum=s2a.proto.v2.ConnectionSide" json:"connection_side,omitempty"` + // The server name indication (SNI) extension, which MAY be populated when a + // server is offloading to S2A. The SNI is used to determine the server + // identity if the local identity in the request is empty. + Sni string `protobuf:"bytes,2,opt,name=sni,proto3" json:"sni,omitempty"` +} + +func (x *GetTlsConfigurationReq) Reset() { + *x = GetTlsConfigurationReq{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_proto_v2_s2a_s2a_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetTlsConfigurationReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTlsConfigurationReq) ProtoMessage() {} + +func (x *GetTlsConfigurationReq) ProtoReflect() protoreflect.Message { + mi := &file_internal_proto_v2_s2a_s2a_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) +} + +// Deprecated: Use GetTlsConfigurationReq.ProtoReflect.Descriptor instead. +func (*GetTlsConfigurationReq) Descriptor() ([]byte, []int) { + return file_internal_proto_v2_s2a_s2a_proto_rawDescGZIP(), []int{3} +} + +func (x *GetTlsConfigurationReq) GetConnectionSide() common_go_proto.ConnectionSide { + if x != nil { + return x.ConnectionSide + } + return common_go_proto.ConnectionSide(0) +} + +func (x *GetTlsConfigurationReq) GetSni() string { + if x != nil { + return x.Sni + } + return "" +} + +type GetTlsConfigurationResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to TlsConfiguration: + // + // *GetTlsConfigurationResp_ClientTlsConfiguration_ + // *GetTlsConfigurationResp_ServerTlsConfiguration_ + TlsConfiguration isGetTlsConfigurationResp_TlsConfiguration `protobuf_oneof:"tls_configuration"` +} + +func (x *GetTlsConfigurationResp) Reset() { + *x = GetTlsConfigurationResp{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_proto_v2_s2a_s2a_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetTlsConfigurationResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTlsConfigurationResp) ProtoMessage() {} + +func (x *GetTlsConfigurationResp) ProtoReflect() protoreflect.Message { + mi := &file_internal_proto_v2_s2a_s2a_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) +} + +// Deprecated: Use GetTlsConfigurationResp.ProtoReflect.Descriptor instead. +func (*GetTlsConfigurationResp) Descriptor() ([]byte, []int) { + return file_internal_proto_v2_s2a_s2a_proto_rawDescGZIP(), []int{4} +} + +func (m *GetTlsConfigurationResp) GetTlsConfiguration() isGetTlsConfigurationResp_TlsConfiguration { + if m != nil { + return m.TlsConfiguration + } + return nil +} + +func (x *GetTlsConfigurationResp) GetClientTlsConfiguration() *GetTlsConfigurationResp_ClientTlsConfiguration { + if x, ok := x.GetTlsConfiguration().(*GetTlsConfigurationResp_ClientTlsConfiguration_); ok { + return x.ClientTlsConfiguration + } + return nil +} + +func (x *GetTlsConfigurationResp) GetServerTlsConfiguration() *GetTlsConfigurationResp_ServerTlsConfiguration { + if x, ok := x.GetTlsConfiguration().(*GetTlsConfigurationResp_ServerTlsConfiguration_); ok { + return x.ServerTlsConfiguration + } + return nil +} + +type isGetTlsConfigurationResp_TlsConfiguration interface { + isGetTlsConfigurationResp_TlsConfiguration() +} + +type GetTlsConfigurationResp_ClientTlsConfiguration_ struct { + ClientTlsConfiguration *GetTlsConfigurationResp_ClientTlsConfiguration `protobuf:"bytes,1,opt,name=client_tls_configuration,json=clientTlsConfiguration,proto3,oneof"` +} + +type GetTlsConfigurationResp_ServerTlsConfiguration_ struct { + ServerTlsConfiguration *GetTlsConfigurationResp_ServerTlsConfiguration `protobuf:"bytes,2,opt,name=server_tls_configuration,json=serverTlsConfiguration,proto3,oneof"` +} + +func (*GetTlsConfigurationResp_ClientTlsConfiguration_) isGetTlsConfigurationResp_TlsConfiguration() { +} + +func (*GetTlsConfigurationResp_ServerTlsConfiguration_) isGetTlsConfigurationResp_TlsConfiguration() { +} + +type OffloadPrivateKeyOperationReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The operation the private key is used for. + Operation OffloadPrivateKeyOperationReq_PrivateKeyOperation `protobuf:"varint,1,opt,name=operation,proto3,enum=s2a.proto.v2.OffloadPrivateKeyOperationReq_PrivateKeyOperation" json:"operation,omitempty"` + // The signature algorithm to be used for signing operations. + SignatureAlgorithm SignatureAlgorithm `protobuf:"varint,2,opt,name=signature_algorithm,json=signatureAlgorithm,proto3,enum=s2a.proto.v2.SignatureAlgorithm" json:"signature_algorithm,omitempty"` + // The input bytes to be signed or decrypted. + // + // Types that are assignable to InBytes: + // + // *OffloadPrivateKeyOperationReq_RawBytes + // *OffloadPrivateKeyOperationReq_Sha256Digest + // *OffloadPrivateKeyOperationReq_Sha384Digest + // *OffloadPrivateKeyOperationReq_Sha512Digest + InBytes isOffloadPrivateKeyOperationReq_InBytes `protobuf_oneof:"in_bytes"` +} + +func (x *OffloadPrivateKeyOperationReq) Reset() { + *x = OffloadPrivateKeyOperationReq{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_proto_v2_s2a_s2a_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OffloadPrivateKeyOperationReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OffloadPrivateKeyOperationReq) ProtoMessage() {} + +func (x *OffloadPrivateKeyOperationReq) ProtoReflect() protoreflect.Message { + mi := &file_internal_proto_v2_s2a_s2a_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) +} + +// Deprecated: Use OffloadPrivateKeyOperationReq.ProtoReflect.Descriptor instead. +func (*OffloadPrivateKeyOperationReq) Descriptor() ([]byte, []int) { + return file_internal_proto_v2_s2a_s2a_proto_rawDescGZIP(), []int{5} +} + +func (x *OffloadPrivateKeyOperationReq) GetOperation() OffloadPrivateKeyOperationReq_PrivateKeyOperation { + if x != nil { + return x.Operation + } + return OffloadPrivateKeyOperationReq_UNSPECIFIED +} + +func (x *OffloadPrivateKeyOperationReq) GetSignatureAlgorithm() SignatureAlgorithm { + if x != nil { + return x.SignatureAlgorithm + } + return SignatureAlgorithm_S2A_SSL_SIGN_UNSPECIFIED +} + +func (m *OffloadPrivateKeyOperationReq) GetInBytes() isOffloadPrivateKeyOperationReq_InBytes { + if m != nil { + return m.InBytes + } + return nil +} + +func (x *OffloadPrivateKeyOperationReq) GetRawBytes() []byte { + if x, ok := x.GetInBytes().(*OffloadPrivateKeyOperationReq_RawBytes); ok { + return x.RawBytes + } + return nil +} + +func (x *OffloadPrivateKeyOperationReq) GetSha256Digest() []byte { + if x, ok := x.GetInBytes().(*OffloadPrivateKeyOperationReq_Sha256Digest); ok { + return x.Sha256Digest + } + return nil +} + +func (x *OffloadPrivateKeyOperationReq) GetSha384Digest() []byte { + if x, ok := x.GetInBytes().(*OffloadPrivateKeyOperationReq_Sha384Digest); ok { + return x.Sha384Digest + } + return nil +} + +func (x *OffloadPrivateKeyOperationReq) GetSha512Digest() []byte { + if x, ok := x.GetInBytes().(*OffloadPrivateKeyOperationReq_Sha512Digest); ok { + return x.Sha512Digest + } + return nil +} + +type isOffloadPrivateKeyOperationReq_InBytes interface { + isOffloadPrivateKeyOperationReq_InBytes() +} + +type OffloadPrivateKeyOperationReq_RawBytes struct { + // Raw bytes to be hashed and signed, or decrypted. + RawBytes []byte `protobuf:"bytes,4,opt,name=raw_bytes,json=rawBytes,proto3,oneof"` +} + +type OffloadPrivateKeyOperationReq_Sha256Digest struct { + // A SHA256 hash to be signed. Must be 32 bytes. + Sha256Digest []byte `protobuf:"bytes,5,opt,name=sha256_digest,json=sha256Digest,proto3,oneof"` +} + +type OffloadPrivateKeyOperationReq_Sha384Digest struct { + // A SHA384 hash to be signed. Must be 48 bytes. + Sha384Digest []byte `protobuf:"bytes,6,opt,name=sha384_digest,json=sha384Digest,proto3,oneof"` +} + +type OffloadPrivateKeyOperationReq_Sha512Digest struct { + // A SHA512 hash to be signed. Must be 64 bytes. + Sha512Digest []byte `protobuf:"bytes,7,opt,name=sha512_digest,json=sha512Digest,proto3,oneof"` +} + +func (*OffloadPrivateKeyOperationReq_RawBytes) isOffloadPrivateKeyOperationReq_InBytes() {} + +func (*OffloadPrivateKeyOperationReq_Sha256Digest) isOffloadPrivateKeyOperationReq_InBytes() {} + +func (*OffloadPrivateKeyOperationReq_Sha384Digest) isOffloadPrivateKeyOperationReq_InBytes() {} + +func (*OffloadPrivateKeyOperationReq_Sha512Digest) isOffloadPrivateKeyOperationReq_InBytes() {} + +type OffloadPrivateKeyOperationResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The signed or decrypted output bytes. + OutBytes []byte `protobuf:"bytes,1,opt,name=out_bytes,json=outBytes,proto3" json:"out_bytes,omitempty"` +} + +func (x *OffloadPrivateKeyOperationResp) Reset() { + *x = OffloadPrivateKeyOperationResp{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_proto_v2_s2a_s2a_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OffloadPrivateKeyOperationResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OffloadPrivateKeyOperationResp) ProtoMessage() {} + +func (x *OffloadPrivateKeyOperationResp) ProtoReflect() protoreflect.Message { + mi := &file_internal_proto_v2_s2a_s2a_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) +} + +// Deprecated: Use OffloadPrivateKeyOperationResp.ProtoReflect.Descriptor instead. +func (*OffloadPrivateKeyOperationResp) Descriptor() ([]byte, []int) { + return file_internal_proto_v2_s2a_s2a_proto_rawDescGZIP(), []int{6} +} + +func (x *OffloadPrivateKeyOperationResp) GetOutBytes() []byte { + if x != nil { + return x.OutBytes + } + return nil +} + +type OffloadResumptionKeyOperationReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The operation the resumption key is used for. + Operation OffloadResumptionKeyOperationReq_ResumptionKeyOperation `protobuf:"varint,1,opt,name=operation,proto3,enum=s2a.proto.v2.OffloadResumptionKeyOperationReq_ResumptionKeyOperation" json:"operation,omitempty"` + // The bytes to be encrypted or decrypted. + InBytes []byte `protobuf:"bytes,2,opt,name=in_bytes,json=inBytes,proto3" json:"in_bytes,omitempty"` +} + +func (x *OffloadResumptionKeyOperationReq) Reset() { + *x = OffloadResumptionKeyOperationReq{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_proto_v2_s2a_s2a_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OffloadResumptionKeyOperationReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OffloadResumptionKeyOperationReq) ProtoMessage() {} + +func (x *OffloadResumptionKeyOperationReq) ProtoReflect() protoreflect.Message { + mi := &file_internal_proto_v2_s2a_s2a_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) +} + +// Deprecated: Use OffloadResumptionKeyOperationReq.ProtoReflect.Descriptor instead. +func (*OffloadResumptionKeyOperationReq) Descriptor() ([]byte, []int) { + return file_internal_proto_v2_s2a_s2a_proto_rawDescGZIP(), []int{7} +} + +func (x *OffloadResumptionKeyOperationReq) GetOperation() OffloadResumptionKeyOperationReq_ResumptionKeyOperation { + if x != nil { + return x.Operation + } + return OffloadResumptionKeyOperationReq_UNSPECIFIED +} + +func (x *OffloadResumptionKeyOperationReq) GetInBytes() []byte { + if x != nil { + return x.InBytes + } + return nil +} + +type OffloadResumptionKeyOperationResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The encrypted or decrypted bytes. + OutBytes []byte `protobuf:"bytes,1,opt,name=out_bytes,json=outBytes,proto3" json:"out_bytes,omitempty"` +} + +func (x *OffloadResumptionKeyOperationResp) Reset() { + *x = OffloadResumptionKeyOperationResp{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_proto_v2_s2a_s2a_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OffloadResumptionKeyOperationResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OffloadResumptionKeyOperationResp) ProtoMessage() {} + +func (x *OffloadResumptionKeyOperationResp) ProtoReflect() protoreflect.Message { + mi := &file_internal_proto_v2_s2a_s2a_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 mi.MessageOf(x) +} + +// Deprecated: Use OffloadResumptionKeyOperationResp.ProtoReflect.Descriptor instead. +func (*OffloadResumptionKeyOperationResp) Descriptor() ([]byte, []int) { + return file_internal_proto_v2_s2a_s2a_proto_rawDescGZIP(), []int{8} +} + +func (x *OffloadResumptionKeyOperationResp) GetOutBytes() []byte { + if x != nil { + return x.OutBytes + } + return nil +} + +type ValidatePeerCertificateChainReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The verification mode that S2A MUST use to validate the peer certificate + // chain. + Mode ValidatePeerCertificateChainReq_VerificationMode `protobuf:"varint,1,opt,name=mode,proto3,enum=s2a.proto.v2.ValidatePeerCertificateChainReq_VerificationMode" json:"mode,omitempty"` + // Types that are assignable to PeerOneof: + // + // *ValidatePeerCertificateChainReq_ClientPeer_ + // *ValidatePeerCertificateChainReq_ServerPeer_ + PeerOneof isValidatePeerCertificateChainReq_PeerOneof `protobuf_oneof:"peer_oneof"` +} + +func (x *ValidatePeerCertificateChainReq) Reset() { + *x = ValidatePeerCertificateChainReq{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_proto_v2_s2a_s2a_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValidatePeerCertificateChainReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValidatePeerCertificateChainReq) ProtoMessage() {} + +func (x *ValidatePeerCertificateChainReq) ProtoReflect() protoreflect.Message { + mi := &file_internal_proto_v2_s2a_s2a_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValidatePeerCertificateChainReq.ProtoReflect.Descriptor instead. +func (*ValidatePeerCertificateChainReq) Descriptor() ([]byte, []int) { + return file_internal_proto_v2_s2a_s2a_proto_rawDescGZIP(), []int{9} +} + +func (x *ValidatePeerCertificateChainReq) GetMode() ValidatePeerCertificateChainReq_VerificationMode { + if x != nil { + return x.Mode + } + return ValidatePeerCertificateChainReq_UNSPECIFIED +} + +func (m *ValidatePeerCertificateChainReq) GetPeerOneof() isValidatePeerCertificateChainReq_PeerOneof { + if m != nil { + return m.PeerOneof + } + return nil +} + +func (x *ValidatePeerCertificateChainReq) GetClientPeer() *ValidatePeerCertificateChainReq_ClientPeer { + if x, ok := x.GetPeerOneof().(*ValidatePeerCertificateChainReq_ClientPeer_); ok { + return x.ClientPeer + } + return nil +} + +func (x *ValidatePeerCertificateChainReq) GetServerPeer() *ValidatePeerCertificateChainReq_ServerPeer { + if x, ok := x.GetPeerOneof().(*ValidatePeerCertificateChainReq_ServerPeer_); ok { + return x.ServerPeer + } + return nil +} + +type isValidatePeerCertificateChainReq_PeerOneof interface { + isValidatePeerCertificateChainReq_PeerOneof() +} + +type ValidatePeerCertificateChainReq_ClientPeer_ struct { + ClientPeer *ValidatePeerCertificateChainReq_ClientPeer `protobuf:"bytes,2,opt,name=client_peer,json=clientPeer,proto3,oneof"` +} + +type ValidatePeerCertificateChainReq_ServerPeer_ struct { + ServerPeer *ValidatePeerCertificateChainReq_ServerPeer `protobuf:"bytes,3,opt,name=server_peer,json=serverPeer,proto3,oneof"` +} + +func (*ValidatePeerCertificateChainReq_ClientPeer_) isValidatePeerCertificateChainReq_PeerOneof() {} + +func (*ValidatePeerCertificateChainReq_ServerPeer_) isValidatePeerCertificateChainReq_PeerOneof() {} + +type ValidatePeerCertificateChainResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The result of validating the peer certificate chain. + ValidationResult ValidatePeerCertificateChainResp_ValidationResult `protobuf:"varint,1,opt,name=validation_result,json=validationResult,proto3,enum=s2a.proto.v2.ValidatePeerCertificateChainResp_ValidationResult" json:"validation_result,omitempty"` + // The validation details. This field is only populated when the validation + // result is NOT SUCCESS. + ValidationDetails string `protobuf:"bytes,2,opt,name=validation_details,json=validationDetails,proto3" json:"validation_details,omitempty"` + // The S2A context contains information from the peer certificate chain. + // + // The S2A context MAY be populated even if validation of the peer certificate + // chain fails. + Context *s2a_context_go_proto.S2AContext `protobuf:"bytes,3,opt,name=context,proto3" json:"context,omitempty"` +} + +func (x *ValidatePeerCertificateChainResp) Reset() { + *x = ValidatePeerCertificateChainResp{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_proto_v2_s2a_s2a_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValidatePeerCertificateChainResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValidatePeerCertificateChainResp) ProtoMessage() {} + +func (x *ValidatePeerCertificateChainResp) ProtoReflect() protoreflect.Message { + mi := &file_internal_proto_v2_s2a_s2a_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValidatePeerCertificateChainResp.ProtoReflect.Descriptor instead. +func (*ValidatePeerCertificateChainResp) Descriptor() ([]byte, []int) { + return file_internal_proto_v2_s2a_s2a_proto_rawDescGZIP(), []int{10} +} + +func (x *ValidatePeerCertificateChainResp) GetValidationResult() ValidatePeerCertificateChainResp_ValidationResult { + if x != nil { + return x.ValidationResult + } + return ValidatePeerCertificateChainResp_UNSPECIFIED +} + +func (x *ValidatePeerCertificateChainResp) GetValidationDetails() string { + if x != nil { + return x.ValidationDetails + } + return "" +} + +func (x *ValidatePeerCertificateChainResp) GetContext() *s2a_context_go_proto.S2AContext { + if x != nil { + return x.Context + } + return nil +} + +type SessionReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The identity corresponding to the TLS configurations that MUST be used for + // the TLS handshake. + // + // If a managed identity already exists, the local identity and authentication + // mechanisms are ignored. If a managed identity doesn't exist and the local + // identity is not populated, S2A will try to deduce the managed identity to + // use from the SNI extension. If that also fails, S2A uses the default + // identity (if one exists). + LocalIdentity *common_go_proto1.Identity `protobuf:"bytes,1,opt,name=local_identity,json=localIdentity,proto3" json:"local_identity,omitempty"` + // The authentication mechanisms that the application wishes to use to + // authenticate to S2A, ordered by preference. S2A will always use the first + // authentication mechanism that matches the managed identity. + AuthenticationMechanisms []*AuthenticationMechanism `protobuf:"bytes,2,rep,name=authentication_mechanisms,json=authenticationMechanisms,proto3" json:"authentication_mechanisms,omitempty"` + // Types that are assignable to ReqOneof: + // + // *SessionReq_GetTlsConfigurationReq + // *SessionReq_OffloadPrivateKeyOperationReq + // *SessionReq_OffloadResumptionKeyOperationReq + // *SessionReq_ValidatePeerCertificateChainReq + ReqOneof isSessionReq_ReqOneof `protobuf_oneof:"req_oneof"` +} + +func (x *SessionReq) Reset() { + *x = SessionReq{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_proto_v2_s2a_s2a_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SessionReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SessionReq) ProtoMessage() {} + +func (x *SessionReq) ProtoReflect() protoreflect.Message { + mi := &file_internal_proto_v2_s2a_s2a_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SessionReq.ProtoReflect.Descriptor instead. +func (*SessionReq) Descriptor() ([]byte, []int) { + return file_internal_proto_v2_s2a_s2a_proto_rawDescGZIP(), []int{11} +} + +func (x *SessionReq) GetLocalIdentity() *common_go_proto1.Identity { + if x != nil { + return x.LocalIdentity + } + return nil +} + +func (x *SessionReq) GetAuthenticationMechanisms() []*AuthenticationMechanism { + if x != nil { + return x.AuthenticationMechanisms + } + return nil +} + +func (m *SessionReq) GetReqOneof() isSessionReq_ReqOneof { + if m != nil { + return m.ReqOneof + } + return nil +} + +func (x *SessionReq) GetGetTlsConfigurationReq() *GetTlsConfigurationReq { + if x, ok := x.GetReqOneof().(*SessionReq_GetTlsConfigurationReq); ok { + return x.GetTlsConfigurationReq + } + return nil +} + +func (x *SessionReq) GetOffloadPrivateKeyOperationReq() *OffloadPrivateKeyOperationReq { + if x, ok := x.GetReqOneof().(*SessionReq_OffloadPrivateKeyOperationReq); ok { + return x.OffloadPrivateKeyOperationReq + } + return nil +} + +func (x *SessionReq) GetOffloadResumptionKeyOperationReq() *OffloadResumptionKeyOperationReq { + if x, ok := x.GetReqOneof().(*SessionReq_OffloadResumptionKeyOperationReq); ok { + return x.OffloadResumptionKeyOperationReq + } + return nil +} + +func (x *SessionReq) GetValidatePeerCertificateChainReq() *ValidatePeerCertificateChainReq { + if x, ok := x.GetReqOneof().(*SessionReq_ValidatePeerCertificateChainReq); ok { + return x.ValidatePeerCertificateChainReq + } + return nil +} + +type isSessionReq_ReqOneof interface { + isSessionReq_ReqOneof() +} + +type SessionReq_GetTlsConfigurationReq struct { + // Requests the certificate chain and TLS configuration corresponding to the + // local identity, which the application MUST use to negotiate the TLS + // handshake. + GetTlsConfigurationReq *GetTlsConfigurationReq `protobuf:"bytes,3,opt,name=get_tls_configuration_req,json=getTlsConfigurationReq,proto3,oneof"` +} + +type SessionReq_OffloadPrivateKeyOperationReq struct { + // Signs or decrypts the input bytes using a private key corresponding to + // the local identity in the request. + // + // WARNING: More than one OffloadPrivateKeyOperationReq may be sent to the + // S2Av2 by a server during a TLS 1.2 handshake. + OffloadPrivateKeyOperationReq *OffloadPrivateKeyOperationReq `protobuf:"bytes,4,opt,name=offload_private_key_operation_req,json=offloadPrivateKeyOperationReq,proto3,oneof"` +} + +type SessionReq_OffloadResumptionKeyOperationReq struct { + // Encrypts or decrypts the input bytes using a resumption key corresponding + // to the local identity in the request. + OffloadResumptionKeyOperationReq *OffloadResumptionKeyOperationReq `protobuf:"bytes,5,opt,name=offload_resumption_key_operation_req,json=offloadResumptionKeyOperationReq,proto3,oneof"` +} + +type SessionReq_ValidatePeerCertificateChainReq struct { + // Verifies the peer's certificate chain using + // (a) trust bundles corresponding to the local identity in the request, and + // (b) the verification mode in the request. + ValidatePeerCertificateChainReq *ValidatePeerCertificateChainReq `protobuf:"bytes,6,opt,name=validate_peer_certificate_chain_req,json=validatePeerCertificateChainReq,proto3,oneof"` +} + +func (*SessionReq_GetTlsConfigurationReq) isSessionReq_ReqOneof() {} + +func (*SessionReq_OffloadPrivateKeyOperationReq) isSessionReq_ReqOneof() {} + +func (*SessionReq_OffloadResumptionKeyOperationReq) isSessionReq_ReqOneof() {} + +func (*SessionReq_ValidatePeerCertificateChainReq) isSessionReq_ReqOneof() {} + +type SessionResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Status of the session response. + // + // The status field is populated so that if an error occurs when making an + // individual request, then communication with the S2A may continue. If an + // error is returned directly (e.g. at the gRPC layer), then it may result + // that the bidirectional stream being closed. + Status *Status `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` + // Types that are assignable to RespOneof: + // + // *SessionResp_GetTlsConfigurationResp + // *SessionResp_OffloadPrivateKeyOperationResp + // *SessionResp_OffloadResumptionKeyOperationResp + // *SessionResp_ValidatePeerCertificateChainResp + RespOneof isSessionResp_RespOneof `protobuf_oneof:"resp_oneof"` +} + +func (x *SessionResp) Reset() { + *x = SessionResp{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_proto_v2_s2a_s2a_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SessionResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SessionResp) ProtoMessage() {} + +func (x *SessionResp) ProtoReflect() protoreflect.Message { + mi := &file_internal_proto_v2_s2a_s2a_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SessionResp.ProtoReflect.Descriptor instead. +func (*SessionResp) Descriptor() ([]byte, []int) { + return file_internal_proto_v2_s2a_s2a_proto_rawDescGZIP(), []int{12} +} + +func (x *SessionResp) GetStatus() *Status { + if x != nil { + return x.Status + } + return nil +} + +func (m *SessionResp) GetRespOneof() isSessionResp_RespOneof { + if m != nil { + return m.RespOneof + } + return nil +} + +func (x *SessionResp) GetGetTlsConfigurationResp() *GetTlsConfigurationResp { + if x, ok := x.GetRespOneof().(*SessionResp_GetTlsConfigurationResp); ok { + return x.GetTlsConfigurationResp + } + return nil +} + +func (x *SessionResp) GetOffloadPrivateKeyOperationResp() *OffloadPrivateKeyOperationResp { + if x, ok := x.GetRespOneof().(*SessionResp_OffloadPrivateKeyOperationResp); ok { + return x.OffloadPrivateKeyOperationResp + } + return nil +} + +func (x *SessionResp) GetOffloadResumptionKeyOperationResp() *OffloadResumptionKeyOperationResp { + if x, ok := x.GetRespOneof().(*SessionResp_OffloadResumptionKeyOperationResp); ok { + return x.OffloadResumptionKeyOperationResp + } + return nil +} + +func (x *SessionResp) GetValidatePeerCertificateChainResp() *ValidatePeerCertificateChainResp { + if x, ok := x.GetRespOneof().(*SessionResp_ValidatePeerCertificateChainResp); ok { + return x.ValidatePeerCertificateChainResp + } + return nil +} + +type isSessionResp_RespOneof interface { + isSessionResp_RespOneof() +} + +type SessionResp_GetTlsConfigurationResp struct { + // Contains the certificate chain and TLS configurations corresponding to + // the local identity. + GetTlsConfigurationResp *GetTlsConfigurationResp `protobuf:"bytes,2,opt,name=get_tls_configuration_resp,json=getTlsConfigurationResp,proto3,oneof"` +} + +type SessionResp_OffloadPrivateKeyOperationResp struct { + // Contains the signed or encrypted output bytes using the private key + // corresponding to the local identity. + OffloadPrivateKeyOperationResp *OffloadPrivateKeyOperationResp `protobuf:"bytes,3,opt,name=offload_private_key_operation_resp,json=offloadPrivateKeyOperationResp,proto3,oneof"` +} + +type SessionResp_OffloadResumptionKeyOperationResp struct { + // Contains the encrypted or decrypted output bytes using the resumption key + // corresponding to the local identity. + OffloadResumptionKeyOperationResp *OffloadResumptionKeyOperationResp `protobuf:"bytes,4,opt,name=offload_resumption_key_operation_resp,json=offloadResumptionKeyOperationResp,proto3,oneof"` +} + +type SessionResp_ValidatePeerCertificateChainResp struct { + // Contains the validation result, peer identity and fingerprints of peer + // certificates. + ValidatePeerCertificateChainResp *ValidatePeerCertificateChainResp `protobuf:"bytes,5,opt,name=validate_peer_certificate_chain_resp,json=validatePeerCertificateChainResp,proto3,oneof"` +} + +func (*SessionResp_GetTlsConfigurationResp) isSessionResp_RespOneof() {} + +func (*SessionResp_OffloadPrivateKeyOperationResp) isSessionResp_RespOneof() {} + +func (*SessionResp_OffloadResumptionKeyOperationResp) isSessionResp_RespOneof() {} + +func (*SessionResp_ValidatePeerCertificateChainResp) isSessionResp_RespOneof() {} + +// Next ID: 8 +type GetTlsConfigurationResp_ClientTlsConfiguration struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The certificate chain that the client MUST use for the TLS handshake. + // It's a list of PEM-encoded certificates, ordered from leaf to root, + // excluding the root. + CertificateChain []string `protobuf:"bytes,1,rep,name=certificate_chain,json=certificateChain,proto3" json:"certificate_chain,omitempty"` + // The minimum TLS version number that the client MUST use for the TLS + // handshake. If this field is not provided, the client MUST use the default + // minimum version of the client's TLS library. + MinTlsVersion common_go_proto.TLSVersion `protobuf:"varint,2,opt,name=min_tls_version,json=minTlsVersion,proto3,enum=s2a.proto.v2.TLSVersion" json:"min_tls_version,omitempty"` + // The maximum TLS version number that the client MUST use for the TLS + // handshake. If this field is not provided, the client MUST use the default + // maximum version of the client's TLS library. + MaxTlsVersion common_go_proto.TLSVersion `protobuf:"varint,3,opt,name=max_tls_version,json=maxTlsVersion,proto3,enum=s2a.proto.v2.TLSVersion" json:"max_tls_version,omitempty"` + // The ordered list of TLS 1.0-1.2 ciphersuites that the client MAY offer to + // negotiate in the TLS handshake. + Ciphersuites []common_go_proto.Ciphersuite `protobuf:"varint,6,rep,packed,name=ciphersuites,proto3,enum=s2a.proto.v2.Ciphersuite" json:"ciphersuites,omitempty"` + // The policy that dictates how the client negotiates ALPN during the TLS + // handshake. + AlpnPolicy *AlpnPolicy `protobuf:"bytes,7,opt,name=alpn_policy,json=alpnPolicy,proto3" json:"alpn_policy,omitempty"` +} + +func (x *GetTlsConfigurationResp_ClientTlsConfiguration) Reset() { + *x = GetTlsConfigurationResp_ClientTlsConfiguration{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_proto_v2_s2a_s2a_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetTlsConfigurationResp_ClientTlsConfiguration) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTlsConfigurationResp_ClientTlsConfiguration) ProtoMessage() {} + +func (x *GetTlsConfigurationResp_ClientTlsConfiguration) ProtoReflect() protoreflect.Message { + mi := &file_internal_proto_v2_s2a_s2a_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetTlsConfigurationResp_ClientTlsConfiguration.ProtoReflect.Descriptor instead. +func (*GetTlsConfigurationResp_ClientTlsConfiguration) Descriptor() ([]byte, []int) { + return file_internal_proto_v2_s2a_s2a_proto_rawDescGZIP(), []int{4, 0} +} + +func (x *GetTlsConfigurationResp_ClientTlsConfiguration) GetCertificateChain() []string { + if x != nil { + return x.CertificateChain + } + return nil +} + +func (x *GetTlsConfigurationResp_ClientTlsConfiguration) GetMinTlsVersion() common_go_proto.TLSVersion { + if x != nil { + return x.MinTlsVersion + } + return common_go_proto.TLSVersion(0) +} + +func (x *GetTlsConfigurationResp_ClientTlsConfiguration) GetMaxTlsVersion() common_go_proto.TLSVersion { + if x != nil { + return x.MaxTlsVersion + } + return common_go_proto.TLSVersion(0) +} + +func (x *GetTlsConfigurationResp_ClientTlsConfiguration) GetCiphersuites() []common_go_proto.Ciphersuite { + if x != nil { + return x.Ciphersuites + } + return nil +} + +func (x *GetTlsConfigurationResp_ClientTlsConfiguration) GetAlpnPolicy() *AlpnPolicy { + if x != nil { + return x.AlpnPolicy + } + return nil +} + +// Next ID: 12 +type GetTlsConfigurationResp_ServerTlsConfiguration struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The certificate chain that the server MUST use for the TLS handshake. + // It's a list of PEM-encoded certificates, ordered from leaf to root, + // excluding the root. + CertificateChain []string `protobuf:"bytes,1,rep,name=certificate_chain,json=certificateChain,proto3" json:"certificate_chain,omitempty"` + // The minimum TLS version number that the server MUST use for the TLS + // handshake. If this field is not provided, the server MUST use the default + // minimum version of the server's TLS library. + MinTlsVersion common_go_proto.TLSVersion `protobuf:"varint,2,opt,name=min_tls_version,json=minTlsVersion,proto3,enum=s2a.proto.v2.TLSVersion" json:"min_tls_version,omitempty"` + // The maximum TLS version number that the server MUST use for the TLS + // handshake. If this field is not provided, the server MUST use the default + // maximum version of the server's TLS library. + MaxTlsVersion common_go_proto.TLSVersion `protobuf:"varint,3,opt,name=max_tls_version,json=maxTlsVersion,proto3,enum=s2a.proto.v2.TLSVersion" json:"max_tls_version,omitempty"` + // The ordered list of TLS 1.0-1.2 ciphersuites that the server MAY offer to + // negotiate in the TLS handshake. + Ciphersuites []common_go_proto.Ciphersuite `protobuf:"varint,10,rep,packed,name=ciphersuites,proto3,enum=s2a.proto.v2.Ciphersuite" json:"ciphersuites,omitempty"` + // Whether to enable TLS resumption. + TlsResumptionEnabled bool `protobuf:"varint,6,opt,name=tls_resumption_enabled,json=tlsResumptionEnabled,proto3" json:"tls_resumption_enabled,omitempty"` + // Whether the server MUST request a client certificate (i.e. to negotiate + // TLS vs. mTLS). + RequestClientCertificate GetTlsConfigurationResp_ServerTlsConfiguration_RequestClientCertificate `protobuf:"varint,7,opt,name=request_client_certificate,json=requestClientCertificate,proto3,enum=s2a.proto.v2.GetTlsConfigurationResp_ServerTlsConfiguration_RequestClientCertificate" json:"request_client_certificate,omitempty"` + // Returns the maximum number of extra bytes that + // |OffloadResumptionKeyOperation| can add to the number of unencrypted + // bytes to form the encrypted bytes. + MaxOverheadOfTicketAead uint32 `protobuf:"varint,9,opt,name=max_overhead_of_ticket_aead,json=maxOverheadOfTicketAead,proto3" json:"max_overhead_of_ticket_aead,omitempty"` + // The policy that dictates how the server negotiates ALPN during the TLS + // handshake. + AlpnPolicy *AlpnPolicy `protobuf:"bytes,11,opt,name=alpn_policy,json=alpnPolicy,proto3" json:"alpn_policy,omitempty"` +} + +func (x *GetTlsConfigurationResp_ServerTlsConfiguration) Reset() { + *x = GetTlsConfigurationResp_ServerTlsConfiguration{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_proto_v2_s2a_s2a_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetTlsConfigurationResp_ServerTlsConfiguration) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTlsConfigurationResp_ServerTlsConfiguration) ProtoMessage() {} + +func (x *GetTlsConfigurationResp_ServerTlsConfiguration) ProtoReflect() protoreflect.Message { + mi := &file_internal_proto_v2_s2a_s2a_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetTlsConfigurationResp_ServerTlsConfiguration.ProtoReflect.Descriptor instead. +func (*GetTlsConfigurationResp_ServerTlsConfiguration) Descriptor() ([]byte, []int) { + return file_internal_proto_v2_s2a_s2a_proto_rawDescGZIP(), []int{4, 1} +} + +func (x *GetTlsConfigurationResp_ServerTlsConfiguration) GetCertificateChain() []string { + if x != nil { + return x.CertificateChain + } + return nil +} + +func (x *GetTlsConfigurationResp_ServerTlsConfiguration) GetMinTlsVersion() common_go_proto.TLSVersion { + if x != nil { + return x.MinTlsVersion + } + return common_go_proto.TLSVersion(0) +} + +func (x *GetTlsConfigurationResp_ServerTlsConfiguration) GetMaxTlsVersion() common_go_proto.TLSVersion { + if x != nil { + return x.MaxTlsVersion + } + return common_go_proto.TLSVersion(0) +} + +func (x *GetTlsConfigurationResp_ServerTlsConfiguration) GetCiphersuites() []common_go_proto.Ciphersuite { + if x != nil { + return x.Ciphersuites + } + return nil +} + +func (x *GetTlsConfigurationResp_ServerTlsConfiguration) GetTlsResumptionEnabled() bool { + if x != nil { + return x.TlsResumptionEnabled + } + return false +} + +func (x *GetTlsConfigurationResp_ServerTlsConfiguration) GetRequestClientCertificate() GetTlsConfigurationResp_ServerTlsConfiguration_RequestClientCertificate { + if x != nil { + return x.RequestClientCertificate + } + return GetTlsConfigurationResp_ServerTlsConfiguration_UNSPECIFIED +} + +func (x *GetTlsConfigurationResp_ServerTlsConfiguration) GetMaxOverheadOfTicketAead() uint32 { + if x != nil { + return x.MaxOverheadOfTicketAead + } + return 0 +} + +func (x *GetTlsConfigurationResp_ServerTlsConfiguration) GetAlpnPolicy() *AlpnPolicy { + if x != nil { + return x.AlpnPolicy + } + return nil +} + +type ValidatePeerCertificateChainReq_ClientPeer struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The certificate chain to be verified. The chain MUST be a list of + // DER-encoded certificates, ordered from leaf to root, excluding the root. + CertificateChain [][]byte `protobuf:"bytes,1,rep,name=certificate_chain,json=certificateChain,proto3" json:"certificate_chain,omitempty"` +} + +func (x *ValidatePeerCertificateChainReq_ClientPeer) Reset() { + *x = ValidatePeerCertificateChainReq_ClientPeer{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_proto_v2_s2a_s2a_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValidatePeerCertificateChainReq_ClientPeer) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValidatePeerCertificateChainReq_ClientPeer) ProtoMessage() {} + +func (x *ValidatePeerCertificateChainReq_ClientPeer) ProtoReflect() protoreflect.Message { + mi := &file_internal_proto_v2_s2a_s2a_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValidatePeerCertificateChainReq_ClientPeer.ProtoReflect.Descriptor instead. +func (*ValidatePeerCertificateChainReq_ClientPeer) Descriptor() ([]byte, []int) { + return file_internal_proto_v2_s2a_s2a_proto_rawDescGZIP(), []int{9, 0} +} + +func (x *ValidatePeerCertificateChainReq_ClientPeer) GetCertificateChain() [][]byte { + if x != nil { + return x.CertificateChain + } + return nil +} + +type ValidatePeerCertificateChainReq_ServerPeer struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The certificate chain to be verified. The chain MUST be a list of + // DER-encoded certificates, ordered from leaf to root, excluding the root. + CertificateChain [][]byte `protobuf:"bytes,1,rep,name=certificate_chain,json=certificateChain,proto3" json:"certificate_chain,omitempty"` + // The expected hostname of the server. + ServerHostname string `protobuf:"bytes,2,opt,name=server_hostname,json=serverHostname,proto3" json:"server_hostname,omitempty"` + // The UnrestrictedClientPolicy specified by the user. + SerializedUnrestrictedClientPolicy []byte `protobuf:"bytes,3,opt,name=serialized_unrestricted_client_policy,json=serializedUnrestrictedClientPolicy,proto3" json:"serialized_unrestricted_client_policy,omitempty"` +} + +func (x *ValidatePeerCertificateChainReq_ServerPeer) Reset() { + *x = ValidatePeerCertificateChainReq_ServerPeer{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_proto_v2_s2a_s2a_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValidatePeerCertificateChainReq_ServerPeer) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValidatePeerCertificateChainReq_ServerPeer) ProtoMessage() {} + +func (x *ValidatePeerCertificateChainReq_ServerPeer) ProtoReflect() protoreflect.Message { + mi := &file_internal_proto_v2_s2a_s2a_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValidatePeerCertificateChainReq_ServerPeer.ProtoReflect.Descriptor instead. +func (*ValidatePeerCertificateChainReq_ServerPeer) Descriptor() ([]byte, []int) { + return file_internal_proto_v2_s2a_s2a_proto_rawDescGZIP(), []int{9, 1} +} + +func (x *ValidatePeerCertificateChainReq_ServerPeer) GetCertificateChain() [][]byte { + if x != nil { + return x.CertificateChain + } + return nil +} + +func (x *ValidatePeerCertificateChainReq_ServerPeer) GetServerHostname() string { + if x != nil { + return x.ServerHostname + } + return "" +} + +func (x *ValidatePeerCertificateChainReq_ServerPeer) GetSerializedUnrestrictedClientPolicy() []byte { + if x != nil { + return x.SerializedUnrestrictedClientPolicy + } + return nil +} + +var File_internal_proto_v2_s2a_s2a_proto protoreflect.FileDescriptor + +var file_internal_proto_v2_s2a_s2a_proto_rawDesc = []byte{ + 0x0a, 0x1f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x32, 0x61, 0x2f, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x0c, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x1a, + 0x22, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x25, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x32, + 0x61, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x73, 0x32, 0x61, 0x5f, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x87, 0x01, 0x0a, 0x0a, + 0x41, 0x6c, 0x70, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x36, 0x0a, 0x17, 0x65, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x6c, 0x70, 0x6e, 0x5f, 0x6e, 0x65, 0x67, 0x6f, 0x74, 0x69, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x65, 0x6e, 0x61, + 0x62, 0x6c, 0x65, 0x41, 0x6c, 0x70, 0x6e, 0x4e, 0x65, 0x67, 0x6f, 0x74, 0x69, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x0e, 0x61, 0x6c, 0x70, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x73, 0x32, 0x61, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x6c, 0x70, 0x6e, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x52, 0x0d, 0x61, 0x6c, 0x70, 0x6e, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x73, 0x22, 0x75, 0x0a, 0x17, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x69, 0x73, 0x6d, + 0x12, 0x2f, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x12, 0x16, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x48, 0x00, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x11, 0x0a, 0x0f, 0x6d, 0x65, 0x63, + 0x68, 0x61, 0x6e, 0x69, 0x73, 0x6d, 0x5f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x22, 0x36, 0x0a, 0x06, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x22, 0x71, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x54, 0x6c, 0x73, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x45, + 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x69, 0x64, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x53, 0x69, 0x64, 0x65, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x53, 0x69, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x6e, 0x69, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x73, 0x6e, 0x69, 0x22, 0xf1, 0x0b, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x54, + 0x6c, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x78, 0x0a, 0x18, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x6c, + 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6c, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x54, 0x6c, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x16, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x6c, 0x73, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x78, 0x0a, + 0x18, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x6c, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x3c, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x47, + 0x65, 0x74, 0x54, 0x6c, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x6c, 0x73, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, + 0x16, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x6c, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xcf, 0x02, 0x0a, 0x16, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x54, 0x6c, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x11, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x65, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x63, + 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, + 0x40, 0x0a, 0x0f, 0x6d, 0x69, 0x6e, 0x5f, 0x74, 0x6c, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x4c, 0x53, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x0d, 0x6d, 0x69, 0x6e, 0x54, 0x6c, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x40, 0x0a, 0x0f, 0x6d, 0x61, 0x78, 0x5f, 0x74, 0x6c, 0x73, 0x5f, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x73, 0x32, 0x61, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x4c, 0x53, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x54, 0x6c, 0x73, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x0c, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x73, 0x75, 0x69, + 0x74, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x73, 0x32, 0x61, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x73, + 0x75, 0x69, 0x74, 0x65, 0x52, 0x0c, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x73, 0x75, 0x69, 0x74, + 0x65, 0x73, 0x12, 0x39, 0x0a, 0x0b, 0x61, 0x6c, 0x70, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x6c, 0x70, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x52, 0x0a, 0x61, 0x6c, 0x70, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4a, 0x04, 0x08, + 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x1a, 0xfa, 0x06, 0x0a, 0x16, 0x53, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x54, 0x6c, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x11, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x10, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x69, + 0x6e, 0x12, 0x40, 0x0a, 0x0f, 0x6d, 0x69, 0x6e, 0x5f, 0x74, 0x6c, 0x73, 0x5f, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x73, 0x32, 0x61, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x4c, 0x53, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x6d, 0x69, 0x6e, 0x54, 0x6c, 0x73, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x0f, 0x6d, 0x61, 0x78, 0x5f, 0x74, 0x6c, 0x73, 0x5f, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x73, + 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x4c, 0x53, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x54, 0x6c, 0x73, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x0c, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x73, + 0x75, 0x69, 0x74, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x73, 0x32, + 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x69, 0x70, 0x68, 0x65, + 0x72, 0x73, 0x75, 0x69, 0x74, 0x65, 0x52, 0x0c, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x73, 0x75, + 0x69, 0x74, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x74, 0x6c, 0x73, 0x5f, 0x72, 0x65, 0x73, 0x75, + 0x6d, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x74, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x93, 0x01, 0x0a, 0x1a, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x65, + 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x55, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x47, + 0x65, 0x74, 0x54, 0x6c, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x6c, 0x73, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x18, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, + 0x12, 0x3c, 0x0a, 0x1b, 0x6d, 0x61, 0x78, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x68, 0x65, 0x61, 0x64, + 0x5f, 0x6f, 0x66, 0x5f, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x61, 0x65, 0x61, 0x64, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x17, 0x6d, 0x61, 0x78, 0x4f, 0x76, 0x65, 0x72, 0x68, 0x65, + 0x61, 0x64, 0x4f, 0x66, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x41, 0x65, 0x61, 0x64, 0x12, 0x39, + 0x0a, 0x0b, 0x61, 0x6c, 0x70, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x76, 0x32, 0x2e, 0x41, 0x6c, 0x70, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0a, 0x61, + 0x6c, 0x70, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x9e, 0x02, 0x0a, 0x18, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x23, 0x0a, 0x1f, 0x44, 0x4f, 0x4e, 0x54, 0x5f, + 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x5f, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x43, + 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x10, 0x01, 0x12, 0x2e, 0x0a, 0x2a, + 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x5f, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x43, + 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x42, 0x55, 0x54, 0x5f, 0x44, + 0x4f, 0x4e, 0x54, 0x5f, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x10, 0x02, 0x12, 0x29, 0x0a, 0x25, + 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x5f, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x43, + 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x56, + 0x45, 0x52, 0x49, 0x46, 0x59, 0x10, 0x03, 0x12, 0x3a, 0x0a, 0x36, 0x52, 0x45, 0x51, 0x55, 0x45, + 0x53, 0x54, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x5f, 0x43, + 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, + 0x45, 0x5f, 0x42, 0x55, 0x54, 0x5f, 0x44, 0x4f, 0x4e, 0x54, 0x5f, 0x56, 0x45, 0x52, 0x49, 0x46, + 0x59, 0x10, 0x04, 0x12, 0x35, 0x0a, 0x31, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x5f, 0x41, + 0x4e, 0x44, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x5f, 0x43, 0x4c, 0x49, 0x45, 0x4e, + 0x54, 0x5f, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x4e, + 0x44, 0x5f, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, + 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x42, 0x13, 0x0a, 0x11, 0x74, 0x6c, 0x73, 0x5f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xb0, 0x03, 0x0a, 0x1d, + 0x4f, 0x66, 0x66, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, + 0x79, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x5d, 0x0a, + 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x3f, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, + 0x4f, 0x66, 0x66, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, + 0x79, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x2e, 0x50, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x51, 0x0a, 0x13, + 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, + 0x74, 0x68, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x73, 0x32, 0x61, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x52, 0x12, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, + 0x1d, 0x0a, 0x09, 0x72, 0x61, 0x77, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0c, 0x48, 0x00, 0x52, 0x08, 0x72, 0x61, 0x77, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x25, + 0x0a, 0x0d, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x44, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0d, 0x73, 0x68, 0x61, 0x33, 0x38, 0x34, 0x5f, + 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x0c, + 0x73, 0x68, 0x61, 0x33, 0x38, 0x34, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0d, + 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x44, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x22, 0x3d, 0x0a, 0x13, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, + 0x79, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, + 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, + 0x49, 0x47, 0x4e, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x43, 0x52, 0x59, 0x50, 0x54, + 0x10, 0x02, 0x42, 0x0a, 0x0a, 0x08, 0x69, 0x6e, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x22, 0x3d, + 0x0a, 0x1e, 0x4f, 0x66, 0x66, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x4b, 0x65, 0x79, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x1b, 0x0a, 0x09, 0x6f, 0x75, 0x74, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x08, 0x6f, 0x75, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0xe7, 0x01, + 0x0a, 0x20, 0x4f, 0x66, 0x66, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x12, 0x63, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x45, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x66, 0x66, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x75, + 0x6d, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x4b, 0x65, 0x79, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x6f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x6e, 0x5f, 0x62, 0x79, + 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x69, 0x6e, 0x42, 0x79, 0x74, + 0x65, 0x73, 0x22, 0x43, 0x0a, 0x16, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x4b, 0x65, 0x79, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0f, 0x0a, 0x0b, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, + 0x07, 0x45, 0x4e, 0x43, 0x52, 0x59, 0x50, 0x54, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, + 0x43, 0x52, 0x59, 0x50, 0x54, 0x10, 0x02, 0x22, 0x40, 0x0a, 0x21, 0x4f, 0x66, 0x66, 0x6c, 0x6f, + 0x61, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x4f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1b, 0x0a, 0x09, + 0x6f, 0x75, 0x74, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x08, 0x6f, 0x75, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0xf8, 0x04, 0x0a, 0x1f, 0x56, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x65, 0x72, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x52, 0x0a, + 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x73, 0x32, + 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x65, 0x50, 0x65, 0x65, 0x72, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, + 0x65, 0x12, 0x5b, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x65, 0x65, 0x72, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, + 0x65, 0x72, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, + 0x69, 0x6e, 0x52, 0x65, 0x71, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x65, 0x65, 0x72, + 0x48, 0x00, 0x52, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x65, 0x65, 0x72, 0x12, 0x5b, + 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x76, 0x32, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x65, 0x72, 0x43, + 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, + 0x65, 0x71, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x65, 0x65, 0x72, 0x48, 0x00, 0x52, + 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x65, 0x65, 0x72, 0x1a, 0x39, 0x0a, 0x0a, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x65, 0x65, 0x72, 0x12, 0x2b, 0x0a, 0x11, 0x63, 0x65, 0x72, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0c, 0x52, 0x10, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x1a, 0xb5, 0x01, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x50, 0x65, 0x65, 0x72, 0x12, 0x2b, 0x0a, 0x11, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, + 0x52, 0x10, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, + 0x69, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x68, 0x6f, 0x73, + 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x51, 0x0a, 0x25, 0x73, + 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x73, 0x74, + 0x72, 0x69, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x22, 0x73, 0x65, 0x72, 0x69, + 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, + 0x65, 0x64, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x46, + 0x0a, 0x10, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, + 0x64, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x50, 0x49, 0x46, 0x46, 0x45, 0x10, 0x01, 0x12, + 0x15, 0x0a, 0x11, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x4f, 0x5f, 0x47, 0x4f, + 0x4f, 0x47, 0x4c, 0x45, 0x10, 0x02, 0x42, 0x0c, 0x0a, 0x0a, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x6f, + 0x6e, 0x65, 0x6f, 0x66, 0x22, 0xb2, 0x02, 0x0a, 0x20, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x65, 0x50, 0x65, 0x65, 0x72, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, + 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x6c, 0x0a, 0x11, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3f, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x76, 0x32, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x65, 0x72, + 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x32, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x32, 0x41, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, + 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x3d, 0x0a, 0x10, 0x56, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x0f, + 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, + 0x0b, 0x0a, 0x07, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, + 0x46, 0x41, 0x49, 0x4c, 0x55, 0x52, 0x45, 0x10, 0x02, 0x22, 0x97, 0x05, 0x0a, 0x0a, 0x53, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x3a, 0x0a, 0x0e, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x12, 0x62, 0x0a, 0x19, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x69, 0x73, 0x6d, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x69, 0x73, 0x6d, 0x52, 0x18, + 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, + 0x63, 0x68, 0x61, 0x6e, 0x69, 0x73, 0x6d, 0x73, 0x12, 0x61, 0x0a, 0x19, 0x67, 0x65, 0x74, 0x5f, + 0x74, 0x6c, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x32, + 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6c, + 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x48, 0x00, 0x52, 0x16, 0x67, 0x65, 0x74, 0x54, 0x6c, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x77, 0x0a, 0x21, 0x6f, + 0x66, 0x66, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, + 0x65, 0x79, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x66, 0x66, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x69, + 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x1d, 0x6f, 0x66, 0x66, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x12, 0x80, 0x01, 0x0a, 0x24, 0x6f, 0x66, 0x66, 0x6c, 0x6f, 0x61, 0x64, + 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6d, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x5f, + 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x76, 0x32, 0x2e, 0x4f, 0x66, 0x66, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x20, 0x6f, 0x66, 0x66, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, + 0x73, 0x75, 0x6d, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x4f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x7d, 0x0a, 0x23, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x65, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x76, 0x32, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x65, 0x72, + 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, + 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x1f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x50, + 0x65, 0x65, 0x72, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x43, 0x68, + 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x42, 0x0b, 0x0a, 0x09, 0x72, 0x65, 0x71, 0x5f, 0x6f, 0x6e, + 0x65, 0x6f, 0x66, 0x22, 0xb4, 0x04, 0x0a, 0x0b, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x64, 0x0a, 0x1a, 0x67, 0x65, 0x74, 0x5f, 0x74, 0x6c, 0x73, 0x5f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6c, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x17, + 0x67, 0x65, 0x74, 0x54, 0x6c, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x7a, 0x0a, 0x22, 0x6f, 0x66, 0x66, 0x6c, 0x6f, + 0x61, 0x64, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x6f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x76, 0x32, 0x2e, 0x4f, 0x66, 0x66, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x4b, 0x65, 0x79, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x48, 0x00, 0x52, 0x1e, 0x6f, 0x66, 0x66, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x69, 0x76, + 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x83, 0x01, 0x0a, 0x25, 0x6f, 0x66, 0x66, 0x6c, 0x6f, 0x61, 0x64, 0x5f, + 0x72, 0x65, 0x73, 0x75, 0x6d, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x6f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x76, 0x32, 0x2e, 0x4f, 0x66, 0x66, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x21, 0x6f, 0x66, 0x66, 0x6c, 0x6f, 0x61, 0x64, 0x52, + 0x65, 0x73, 0x75, 0x6d, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x4f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x80, 0x01, 0x0a, 0x24, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x63, 0x65, 0x72, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x72, 0x65, + 0x73, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, + 0x50, 0x65, 0x65, 0x72, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x20, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x65, 0x72, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x42, 0x0c, 0x0a, 0x0a, + 0x72, 0x65, 0x73, 0x70, 0x5f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x2a, 0xa2, 0x03, 0x0a, 0x12, 0x53, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, + 0x6d, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x32, 0x41, 0x5f, 0x53, 0x53, 0x4c, 0x5f, 0x53, 0x49, 0x47, + 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, + 0x21, 0x0a, 0x1d, 0x53, 0x32, 0x41, 0x5f, 0x53, 0x53, 0x4c, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x5f, + 0x52, 0x53, 0x41, 0x5f, 0x50, 0x4b, 0x43, 0x53, 0x31, 0x5f, 0x53, 0x48, 0x41, 0x32, 0x35, 0x36, + 0x10, 0x01, 0x12, 0x21, 0x0a, 0x1d, 0x53, 0x32, 0x41, 0x5f, 0x53, 0x53, 0x4c, 0x5f, 0x53, 0x49, + 0x47, 0x4e, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x50, 0x4b, 0x43, 0x53, 0x31, 0x5f, 0x53, 0x48, 0x41, + 0x33, 0x38, 0x34, 0x10, 0x02, 0x12, 0x21, 0x0a, 0x1d, 0x53, 0x32, 0x41, 0x5f, 0x53, 0x53, 0x4c, + 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x50, 0x4b, 0x43, 0x53, 0x31, 0x5f, + 0x53, 0x48, 0x41, 0x35, 0x31, 0x32, 0x10, 0x03, 0x12, 0x27, 0x0a, 0x23, 0x53, 0x32, 0x41, 0x5f, + 0x53, 0x53, 0x4c, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x5f, 0x45, 0x43, 0x44, 0x53, 0x41, 0x5f, 0x53, + 0x45, 0x43, 0x50, 0x32, 0x35, 0x36, 0x52, 0x31, 0x5f, 0x53, 0x48, 0x41, 0x32, 0x35, 0x36, 0x10, + 0x04, 0x12, 0x27, 0x0a, 0x23, 0x53, 0x32, 0x41, 0x5f, 0x53, 0x53, 0x4c, 0x5f, 0x53, 0x49, 0x47, + 0x4e, 0x5f, 0x45, 0x43, 0x44, 0x53, 0x41, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x33, 0x38, 0x34, 0x52, + 0x31, 0x5f, 0x53, 0x48, 0x41, 0x33, 0x38, 0x34, 0x10, 0x05, 0x12, 0x27, 0x0a, 0x23, 0x53, 0x32, + 0x41, 0x5f, 0x53, 0x53, 0x4c, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x5f, 0x45, 0x43, 0x44, 0x53, 0x41, + 0x5f, 0x53, 0x45, 0x43, 0x50, 0x35, 0x32, 0x31, 0x52, 0x31, 0x5f, 0x53, 0x48, 0x41, 0x35, 0x31, + 0x32, 0x10, 0x06, 0x12, 0x24, 0x0a, 0x20, 0x53, 0x32, 0x41, 0x5f, 0x53, 0x53, 0x4c, 0x5f, 0x53, + 0x49, 0x47, 0x4e, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x50, 0x53, 0x53, 0x5f, 0x52, 0x53, 0x41, 0x45, + 0x5f, 0x53, 0x48, 0x41, 0x32, 0x35, 0x36, 0x10, 0x07, 0x12, 0x24, 0x0a, 0x20, 0x53, 0x32, 0x41, + 0x5f, 0x53, 0x53, 0x4c, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x50, 0x53, + 0x53, 0x5f, 0x52, 0x53, 0x41, 0x45, 0x5f, 0x53, 0x48, 0x41, 0x33, 0x38, 0x34, 0x10, 0x08, 0x12, + 0x24, 0x0a, 0x20, 0x53, 0x32, 0x41, 0x5f, 0x53, 0x53, 0x4c, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x5f, + 0x52, 0x53, 0x41, 0x5f, 0x50, 0x53, 0x53, 0x5f, 0x52, 0x53, 0x41, 0x45, 0x5f, 0x53, 0x48, 0x41, + 0x35, 0x31, 0x32, 0x10, 0x09, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x32, 0x41, 0x5f, 0x53, 0x53, 0x4c, + 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x5f, 0x45, 0x44, 0x32, 0x35, 0x35, 0x31, 0x39, 0x10, 0x0a, 0x32, + 0x57, 0x0a, 0x0a, 0x53, 0x32, 0x41, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x49, 0x0a, + 0x0c, 0x53, 0x65, 0x74, 0x55, 0x70, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x2e, + 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x19, 0x2e, 0x73, 0x32, 0x61, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x73, 0x32, + 0x61, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x32, 0x61, 0x5f, 0x67, 0x6f, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_internal_proto_v2_s2a_s2a_proto_rawDescOnce sync.Once + file_internal_proto_v2_s2a_s2a_proto_rawDescData = file_internal_proto_v2_s2a_s2a_proto_rawDesc +) + +func file_internal_proto_v2_s2a_s2a_proto_rawDescGZIP() []byte { + file_internal_proto_v2_s2a_s2a_proto_rawDescOnce.Do(func() { + file_internal_proto_v2_s2a_s2a_proto_rawDescData = protoimpl.X.CompressGZIP(file_internal_proto_v2_s2a_s2a_proto_rawDescData) + }) + return file_internal_proto_v2_s2a_s2a_proto_rawDescData +} + +var file_internal_proto_v2_s2a_s2a_proto_enumTypes = make([]protoimpl.EnumInfo, 6) +var file_internal_proto_v2_s2a_s2a_proto_msgTypes = make([]protoimpl.MessageInfo, 17) +var file_internal_proto_v2_s2a_s2a_proto_goTypes = []interface{}{ + (SignatureAlgorithm)(0), // 0: s2a.proto.v2.SignatureAlgorithm + (GetTlsConfigurationResp_ServerTlsConfiguration_RequestClientCertificate)(0), // 1: s2a.proto.v2.GetTlsConfigurationResp.ServerTlsConfiguration.RequestClientCertificate + (OffloadPrivateKeyOperationReq_PrivateKeyOperation)(0), // 2: s2a.proto.v2.OffloadPrivateKeyOperationReq.PrivateKeyOperation + (OffloadResumptionKeyOperationReq_ResumptionKeyOperation)(0), // 3: s2a.proto.v2.OffloadResumptionKeyOperationReq.ResumptionKeyOperation + (ValidatePeerCertificateChainReq_VerificationMode)(0), // 4: s2a.proto.v2.ValidatePeerCertificateChainReq.VerificationMode + (ValidatePeerCertificateChainResp_ValidationResult)(0), // 5: s2a.proto.v2.ValidatePeerCertificateChainResp.ValidationResult + (*AlpnPolicy)(nil), // 6: s2a.proto.v2.AlpnPolicy + (*AuthenticationMechanism)(nil), // 7: s2a.proto.v2.AuthenticationMechanism + (*Status)(nil), // 8: s2a.proto.v2.Status + (*GetTlsConfigurationReq)(nil), // 9: s2a.proto.v2.GetTlsConfigurationReq + (*GetTlsConfigurationResp)(nil), // 10: s2a.proto.v2.GetTlsConfigurationResp + (*OffloadPrivateKeyOperationReq)(nil), // 11: s2a.proto.v2.OffloadPrivateKeyOperationReq + (*OffloadPrivateKeyOperationResp)(nil), // 12: s2a.proto.v2.OffloadPrivateKeyOperationResp + (*OffloadResumptionKeyOperationReq)(nil), // 13: s2a.proto.v2.OffloadResumptionKeyOperationReq + (*OffloadResumptionKeyOperationResp)(nil), // 14: s2a.proto.v2.OffloadResumptionKeyOperationResp + (*ValidatePeerCertificateChainReq)(nil), // 15: s2a.proto.v2.ValidatePeerCertificateChainReq + (*ValidatePeerCertificateChainResp)(nil), // 16: s2a.proto.v2.ValidatePeerCertificateChainResp + (*SessionReq)(nil), // 17: s2a.proto.v2.SessionReq + (*SessionResp)(nil), // 18: s2a.proto.v2.SessionResp + (*GetTlsConfigurationResp_ClientTlsConfiguration)(nil), // 19: s2a.proto.v2.GetTlsConfigurationResp.ClientTlsConfiguration + (*GetTlsConfigurationResp_ServerTlsConfiguration)(nil), // 20: s2a.proto.v2.GetTlsConfigurationResp.ServerTlsConfiguration + (*ValidatePeerCertificateChainReq_ClientPeer)(nil), // 21: s2a.proto.v2.ValidatePeerCertificateChainReq.ClientPeer + (*ValidatePeerCertificateChainReq_ServerPeer)(nil), // 22: s2a.proto.v2.ValidatePeerCertificateChainReq.ServerPeer + (common_go_proto.AlpnProtocol)(0), // 23: s2a.proto.v2.AlpnProtocol + (*common_go_proto1.Identity)(nil), // 24: s2a.proto.Identity + (common_go_proto.ConnectionSide)(0), // 25: s2a.proto.v2.ConnectionSide + (*s2a_context_go_proto.S2AContext)(nil), // 26: s2a.proto.v2.S2AContext + (common_go_proto.TLSVersion)(0), // 27: s2a.proto.v2.TLSVersion + (common_go_proto.Ciphersuite)(0), // 28: s2a.proto.v2.Ciphersuite +} +var file_internal_proto_v2_s2a_s2a_proto_depIdxs = []int32{ + 23, // 0: s2a.proto.v2.AlpnPolicy.alpn_protocols:type_name -> s2a.proto.v2.AlpnProtocol + 24, // 1: s2a.proto.v2.AuthenticationMechanism.identity:type_name -> s2a.proto.Identity + 25, // 2: s2a.proto.v2.GetTlsConfigurationReq.connection_side:type_name -> s2a.proto.v2.ConnectionSide + 19, // 3: s2a.proto.v2.GetTlsConfigurationResp.client_tls_configuration:type_name -> s2a.proto.v2.GetTlsConfigurationResp.ClientTlsConfiguration + 20, // 4: s2a.proto.v2.GetTlsConfigurationResp.server_tls_configuration:type_name -> s2a.proto.v2.GetTlsConfigurationResp.ServerTlsConfiguration + 2, // 5: s2a.proto.v2.OffloadPrivateKeyOperationReq.operation:type_name -> s2a.proto.v2.OffloadPrivateKeyOperationReq.PrivateKeyOperation + 0, // 6: s2a.proto.v2.OffloadPrivateKeyOperationReq.signature_algorithm:type_name -> s2a.proto.v2.SignatureAlgorithm + 3, // 7: s2a.proto.v2.OffloadResumptionKeyOperationReq.operation:type_name -> s2a.proto.v2.OffloadResumptionKeyOperationReq.ResumptionKeyOperation + 4, // 8: s2a.proto.v2.ValidatePeerCertificateChainReq.mode:type_name -> s2a.proto.v2.ValidatePeerCertificateChainReq.VerificationMode + 21, // 9: s2a.proto.v2.ValidatePeerCertificateChainReq.client_peer:type_name -> s2a.proto.v2.ValidatePeerCertificateChainReq.ClientPeer + 22, // 10: s2a.proto.v2.ValidatePeerCertificateChainReq.server_peer:type_name -> s2a.proto.v2.ValidatePeerCertificateChainReq.ServerPeer + 5, // 11: s2a.proto.v2.ValidatePeerCertificateChainResp.validation_result:type_name -> s2a.proto.v2.ValidatePeerCertificateChainResp.ValidationResult + 26, // 12: s2a.proto.v2.ValidatePeerCertificateChainResp.context:type_name -> s2a.proto.v2.S2AContext + 24, // 13: s2a.proto.v2.SessionReq.local_identity:type_name -> s2a.proto.Identity + 7, // 14: s2a.proto.v2.SessionReq.authentication_mechanisms:type_name -> s2a.proto.v2.AuthenticationMechanism + 9, // 15: s2a.proto.v2.SessionReq.get_tls_configuration_req:type_name -> s2a.proto.v2.GetTlsConfigurationReq + 11, // 16: s2a.proto.v2.SessionReq.offload_private_key_operation_req:type_name -> s2a.proto.v2.OffloadPrivateKeyOperationReq + 13, // 17: s2a.proto.v2.SessionReq.offload_resumption_key_operation_req:type_name -> s2a.proto.v2.OffloadResumptionKeyOperationReq + 15, // 18: s2a.proto.v2.SessionReq.validate_peer_certificate_chain_req:type_name -> s2a.proto.v2.ValidatePeerCertificateChainReq + 8, // 19: s2a.proto.v2.SessionResp.status:type_name -> s2a.proto.v2.Status + 10, // 20: s2a.proto.v2.SessionResp.get_tls_configuration_resp:type_name -> s2a.proto.v2.GetTlsConfigurationResp + 12, // 21: s2a.proto.v2.SessionResp.offload_private_key_operation_resp:type_name -> s2a.proto.v2.OffloadPrivateKeyOperationResp + 14, // 22: s2a.proto.v2.SessionResp.offload_resumption_key_operation_resp:type_name -> s2a.proto.v2.OffloadResumptionKeyOperationResp + 16, // 23: s2a.proto.v2.SessionResp.validate_peer_certificate_chain_resp:type_name -> s2a.proto.v2.ValidatePeerCertificateChainResp + 27, // 24: s2a.proto.v2.GetTlsConfigurationResp.ClientTlsConfiguration.min_tls_version:type_name -> s2a.proto.v2.TLSVersion + 27, // 25: s2a.proto.v2.GetTlsConfigurationResp.ClientTlsConfiguration.max_tls_version:type_name -> s2a.proto.v2.TLSVersion + 28, // 26: s2a.proto.v2.GetTlsConfigurationResp.ClientTlsConfiguration.ciphersuites:type_name -> s2a.proto.v2.Ciphersuite + 6, // 27: s2a.proto.v2.GetTlsConfigurationResp.ClientTlsConfiguration.alpn_policy:type_name -> s2a.proto.v2.AlpnPolicy + 27, // 28: s2a.proto.v2.GetTlsConfigurationResp.ServerTlsConfiguration.min_tls_version:type_name -> s2a.proto.v2.TLSVersion + 27, // 29: s2a.proto.v2.GetTlsConfigurationResp.ServerTlsConfiguration.max_tls_version:type_name -> s2a.proto.v2.TLSVersion + 28, // 30: s2a.proto.v2.GetTlsConfigurationResp.ServerTlsConfiguration.ciphersuites:type_name -> s2a.proto.v2.Ciphersuite + 1, // 31: s2a.proto.v2.GetTlsConfigurationResp.ServerTlsConfiguration.request_client_certificate:type_name -> s2a.proto.v2.GetTlsConfigurationResp.ServerTlsConfiguration.RequestClientCertificate + 6, // 32: s2a.proto.v2.GetTlsConfigurationResp.ServerTlsConfiguration.alpn_policy:type_name -> s2a.proto.v2.AlpnPolicy + 17, // 33: s2a.proto.v2.S2AService.SetUpSession:input_type -> s2a.proto.v2.SessionReq + 18, // 34: s2a.proto.v2.S2AService.SetUpSession:output_type -> s2a.proto.v2.SessionResp + 34, // [34:35] is the sub-list for method output_type + 33, // [33:34] is the sub-list for method input_type + 33, // [33:33] is the sub-list for extension type_name + 33, // [33:33] is the sub-list for extension extendee + 0, // [0:33] is the sub-list for field type_name +} + +func init() { file_internal_proto_v2_s2a_s2a_proto_init() } +func file_internal_proto_v2_s2a_s2a_proto_init() { + if File_internal_proto_v2_s2a_s2a_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_internal_proto_v2_s2a_s2a_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AlpnPolicy); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_internal_proto_v2_s2a_s2a_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AuthenticationMechanism); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_internal_proto_v2_s2a_s2a_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Status); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_internal_proto_v2_s2a_s2a_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTlsConfigurationReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_internal_proto_v2_s2a_s2a_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTlsConfigurationResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_internal_proto_v2_s2a_s2a_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OffloadPrivateKeyOperationReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_internal_proto_v2_s2a_s2a_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OffloadPrivateKeyOperationResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_internal_proto_v2_s2a_s2a_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OffloadResumptionKeyOperationReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_internal_proto_v2_s2a_s2a_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OffloadResumptionKeyOperationResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_internal_proto_v2_s2a_s2a_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValidatePeerCertificateChainReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_internal_proto_v2_s2a_s2a_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValidatePeerCertificateChainResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_internal_proto_v2_s2a_s2a_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SessionReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_internal_proto_v2_s2a_s2a_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SessionResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_internal_proto_v2_s2a_s2a_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTlsConfigurationResp_ClientTlsConfiguration); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_internal_proto_v2_s2a_s2a_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTlsConfigurationResp_ServerTlsConfiguration); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_internal_proto_v2_s2a_s2a_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValidatePeerCertificateChainReq_ClientPeer); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_internal_proto_v2_s2a_s2a_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValidatePeerCertificateChainReq_ServerPeer); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_internal_proto_v2_s2a_s2a_proto_msgTypes[1].OneofWrappers = []interface{}{ + (*AuthenticationMechanism_Token)(nil), + } + file_internal_proto_v2_s2a_s2a_proto_msgTypes[4].OneofWrappers = []interface{}{ + (*GetTlsConfigurationResp_ClientTlsConfiguration_)(nil), + (*GetTlsConfigurationResp_ServerTlsConfiguration_)(nil), + } + file_internal_proto_v2_s2a_s2a_proto_msgTypes[5].OneofWrappers = []interface{}{ + (*OffloadPrivateKeyOperationReq_RawBytes)(nil), + (*OffloadPrivateKeyOperationReq_Sha256Digest)(nil), + (*OffloadPrivateKeyOperationReq_Sha384Digest)(nil), + (*OffloadPrivateKeyOperationReq_Sha512Digest)(nil), + } + file_internal_proto_v2_s2a_s2a_proto_msgTypes[9].OneofWrappers = []interface{}{ + (*ValidatePeerCertificateChainReq_ClientPeer_)(nil), + (*ValidatePeerCertificateChainReq_ServerPeer_)(nil), + } + file_internal_proto_v2_s2a_s2a_proto_msgTypes[11].OneofWrappers = []interface{}{ + (*SessionReq_GetTlsConfigurationReq)(nil), + (*SessionReq_OffloadPrivateKeyOperationReq)(nil), + (*SessionReq_OffloadResumptionKeyOperationReq)(nil), + (*SessionReq_ValidatePeerCertificateChainReq)(nil), + } + file_internal_proto_v2_s2a_s2a_proto_msgTypes[12].OneofWrappers = []interface{}{ + (*SessionResp_GetTlsConfigurationResp)(nil), + (*SessionResp_OffloadPrivateKeyOperationResp)(nil), + (*SessionResp_OffloadResumptionKeyOperationResp)(nil), + (*SessionResp_ValidatePeerCertificateChainResp)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_internal_proto_v2_s2a_s2a_proto_rawDesc, + NumEnums: 6, + NumMessages: 17, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_internal_proto_v2_s2a_s2a_proto_goTypes, + DependencyIndexes: file_internal_proto_v2_s2a_s2a_proto_depIdxs, + EnumInfos: file_internal_proto_v2_s2a_s2a_proto_enumTypes, + MessageInfos: file_internal_proto_v2_s2a_s2a_proto_msgTypes, + }.Build() + File_internal_proto_v2_s2a_s2a_proto = out.File + file_internal_proto_v2_s2a_s2a_proto_rawDesc = nil + file_internal_proto_v2_s2a_s2a_proto_goTypes = nil + file_internal_proto_v2_s2a_s2a_proto_depIdxs = nil +} diff --git a/vendor/github.com/google/s2a-go/internal/proto/v2/s2a_go_proto/s2a_grpc.pb.go b/vendor/github.com/google/s2a-go/internal/proto/v2/s2a_go_proto/s2a_grpc.pb.go new file mode 100644 index 0000000000..2566df6c30 --- /dev/null +++ b/vendor/github.com/google/s2a-go/internal/proto/v2/s2a_go_proto/s2a_grpc.pb.go @@ -0,0 +1,159 @@ +// Copyright 2022 Google LLC +// +// 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 +// +// https://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 v3.21.12 +// source: internal/proto/v2/s2a/s2a.proto + +package s2a_go_proto + +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 ( + S2AService_SetUpSession_FullMethodName = "/s2a.proto.v2.S2AService/SetUpSession" +) + +// S2AServiceClient is the client API for S2AService 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 S2AServiceClient interface { + // SetUpSession is a bidirectional stream used by applications to offload + // operations from the TLS handshake. + SetUpSession(ctx context.Context, opts ...grpc.CallOption) (S2AService_SetUpSessionClient, error) +} + +type s2AServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewS2AServiceClient(cc grpc.ClientConnInterface) S2AServiceClient { + return &s2AServiceClient{cc} +} + +func (c *s2AServiceClient) SetUpSession(ctx context.Context, opts ...grpc.CallOption) (S2AService_SetUpSessionClient, error) { + stream, err := c.cc.NewStream(ctx, &S2AService_ServiceDesc.Streams[0], S2AService_SetUpSession_FullMethodName, opts...) + if err != nil { + return nil, err + } + x := &s2AServiceSetUpSessionClient{stream} + return x, nil +} + +type S2AService_SetUpSessionClient interface { + Send(*SessionReq) error + Recv() (*SessionResp, error) + grpc.ClientStream +} + +type s2AServiceSetUpSessionClient struct { + grpc.ClientStream +} + +func (x *s2AServiceSetUpSessionClient) Send(m *SessionReq) error { + return x.ClientStream.SendMsg(m) +} + +func (x *s2AServiceSetUpSessionClient) Recv() (*SessionResp, error) { + m := new(SessionResp) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// S2AServiceServer is the server API for S2AService service. +// All implementations must embed UnimplementedS2AServiceServer +// for forward compatibility +type S2AServiceServer interface { + // SetUpSession is a bidirectional stream used by applications to offload + // operations from the TLS handshake. + SetUpSession(S2AService_SetUpSessionServer) error + mustEmbedUnimplementedS2AServiceServer() +} + +// UnimplementedS2AServiceServer must be embedded to have forward compatible implementations. +type UnimplementedS2AServiceServer struct { +} + +func (UnimplementedS2AServiceServer) SetUpSession(S2AService_SetUpSessionServer) error { + return status.Errorf(codes.Unimplemented, "method SetUpSession not implemented") +} +func (UnimplementedS2AServiceServer) mustEmbedUnimplementedS2AServiceServer() {} + +// UnsafeS2AServiceServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to S2AServiceServer will +// result in compilation errors. +type UnsafeS2AServiceServer interface { + mustEmbedUnimplementedS2AServiceServer() +} + +func RegisterS2AServiceServer(s grpc.ServiceRegistrar, srv S2AServiceServer) { + s.RegisterService(&S2AService_ServiceDesc, srv) +} + +func _S2AService_SetUpSession_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(S2AServiceServer).SetUpSession(&s2AServiceSetUpSessionServer{stream}) +} + +type S2AService_SetUpSessionServer interface { + Send(*SessionResp) error + Recv() (*SessionReq, error) + grpc.ServerStream +} + +type s2AServiceSetUpSessionServer struct { + grpc.ServerStream +} + +func (x *s2AServiceSetUpSessionServer) Send(m *SessionResp) error { + return x.ServerStream.SendMsg(m) +} + +func (x *s2AServiceSetUpSessionServer) Recv() (*SessionReq, error) { + m := new(SessionReq) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// S2AService_ServiceDesc is the grpc.ServiceDesc for S2AService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var S2AService_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "s2a.proto.v2.S2AService", + HandlerType: (*S2AServiceServer)(nil), + Methods: []grpc.MethodDesc{}, + Streams: []grpc.StreamDesc{ + { + StreamName: "SetUpSession", + Handler: _S2AService_SetUpSession_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, + Metadata: "internal/proto/v2/s2a/s2a.proto", +} diff --git a/vendor/github.com/google/s2a-go/internal/record/internal/aeadcrypter/aeadcrypter.go b/vendor/github.com/google/s2a-go/internal/record/internal/aeadcrypter/aeadcrypter.go new file mode 100644 index 0000000000..486f4ec4f2 --- /dev/null +++ b/vendor/github.com/google/s2a-go/internal/record/internal/aeadcrypter/aeadcrypter.go @@ -0,0 +1,34 @@ +/* + * + * Copyright 2021 Google LLC + * + * 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 + * + * https://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. + * + */ + +// Package aeadcrypter provides the interface for AEAD cipher implementations +// used by S2A's record protocol. +package aeadcrypter + +// S2AAEADCrypter is the interface for an AEAD cipher used by the S2A record +// protocol. +type S2AAEADCrypter interface { + // Encrypt encrypts the plaintext and computes the tag of dst and plaintext. + // dst and plaintext may fully overlap or not at all. + Encrypt(dst, plaintext, nonce, aad []byte) ([]byte, error) + // Decrypt decrypts ciphertext and verifies the tag. dst and ciphertext may + // fully overlap or not at all. + Decrypt(dst, ciphertext, nonce, aad []byte) ([]byte, error) + // TagSize returns the tag size in bytes. + TagSize() int +} diff --git a/vendor/github.com/google/s2a-go/internal/record/internal/aeadcrypter/aesgcm.go b/vendor/github.com/google/s2a-go/internal/record/internal/aeadcrypter/aesgcm.go new file mode 100644 index 0000000000..85c4e595d7 --- /dev/null +++ b/vendor/github.com/google/s2a-go/internal/record/internal/aeadcrypter/aesgcm.go @@ -0,0 +1,70 @@ +/* + * + * Copyright 2021 Google LLC + * + * 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 + * + * https://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. + * + */ + +package aeadcrypter + +import ( + "crypto/aes" + "crypto/cipher" + "fmt" +) + +// Supported key sizes in bytes. +const ( + AES128GCMKeySize = 16 + AES256GCMKeySize = 32 +) + +// aesgcm is the struct that holds an AES-GCM cipher for the S2A AEAD crypter. +type aesgcm struct { + aead cipher.AEAD +} + +// NewAESGCM creates an AES-GCM crypter instance. Note that the key must be +// either 128 bits or 256 bits. +func NewAESGCM(key []byte) (S2AAEADCrypter, error) { + if len(key) != AES128GCMKeySize && len(key) != AES256GCMKeySize { + return nil, fmt.Errorf("%d or %d bytes, given: %d", AES128GCMKeySize, AES256GCMKeySize, len(key)) + } + c, err := aes.NewCipher(key) + if err != nil { + return nil, err + } + a, err := cipher.NewGCM(c) + if err != nil { + return nil, err + } + return &aesgcm{aead: a}, nil +} + +// Encrypt is the encryption function. dst can contain bytes at the beginning of +// the ciphertext that will not be encrypted but will be authenticated. If dst +// has enough capacity to hold these bytes, the ciphertext and the tag, no +// allocation and copy operations will be performed. dst and plaintext may +// fully overlap or not at all. +func (s *aesgcm) Encrypt(dst, plaintext, nonce, aad []byte) ([]byte, error) { + return encrypt(s.aead, dst, plaintext, nonce, aad) +} + +func (s *aesgcm) Decrypt(dst, ciphertext, nonce, aad []byte) ([]byte, error) { + return decrypt(s.aead, dst, ciphertext, nonce, aad) +} + +func (s *aesgcm) TagSize() int { + return TagSize +} diff --git a/vendor/github.com/google/s2a-go/internal/record/internal/aeadcrypter/chachapoly.go b/vendor/github.com/google/s2a-go/internal/record/internal/aeadcrypter/chachapoly.go new file mode 100644 index 0000000000..214df4ca41 --- /dev/null +++ b/vendor/github.com/google/s2a-go/internal/record/internal/aeadcrypter/chachapoly.go @@ -0,0 +1,67 @@ +/* + * + * Copyright 2021 Google LLC + * + * 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 + * + * https://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. + * + */ + +package aeadcrypter + +import ( + "crypto/cipher" + "fmt" + + "golang.org/x/crypto/chacha20poly1305" +) + +// Supported key size in bytes. +const ( + Chacha20Poly1305KeySize = 32 +) + +// chachapoly is the struct that holds a CHACHA-POLY cipher for the S2A AEAD +// crypter. +type chachapoly struct { + aead cipher.AEAD +} + +// NewChachaPoly creates a Chacha-Poly crypter instance. Note that the key must +// be Chacha20Poly1305KeySize bytes in length. +func NewChachaPoly(key []byte) (S2AAEADCrypter, error) { + if len(key) != Chacha20Poly1305KeySize { + return nil, fmt.Errorf("%d bytes, given: %d", Chacha20Poly1305KeySize, len(key)) + } + c, err := chacha20poly1305.New(key) + if err != nil { + return nil, err + } + return &chachapoly{aead: c}, nil +} + +// Encrypt is the encryption function. dst can contain bytes at the beginning of +// the ciphertext that will not be encrypted but will be authenticated. If dst +// has enough capacity to hold these bytes, the ciphertext and the tag, no +// allocation and copy operations will be performed. dst and plaintext may +// fully overlap or not at all. +func (s *chachapoly) Encrypt(dst, plaintext, nonce, aad []byte) ([]byte, error) { + return encrypt(s.aead, dst, plaintext, nonce, aad) +} + +func (s *chachapoly) Decrypt(dst, ciphertext, nonce, aad []byte) ([]byte, error) { + return decrypt(s.aead, dst, ciphertext, nonce, aad) +} + +func (s *chachapoly) TagSize() int { + return TagSize +} diff --git a/vendor/github.com/google/s2a-go/internal/record/internal/aeadcrypter/common.go b/vendor/github.com/google/s2a-go/internal/record/internal/aeadcrypter/common.go new file mode 100644 index 0000000000..b3c36ad95d --- /dev/null +++ b/vendor/github.com/google/s2a-go/internal/record/internal/aeadcrypter/common.go @@ -0,0 +1,92 @@ +/* + * + * Copyright 2021 Google LLC + * + * 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 + * + * https://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. + * + */ + +package aeadcrypter + +import ( + "crypto/cipher" + "fmt" +) + +const ( + // TagSize is the tag size in bytes for AES-128-GCM-SHA256, + // AES-256-GCM-SHA384, and CHACHA20-POLY1305-SHA256. + TagSize = 16 + // NonceSize is the size of the nonce in number of bytes for + // AES-128-GCM-SHA256, AES-256-GCM-SHA384, and CHACHA20-POLY1305-SHA256. + NonceSize = 12 + // SHA256DigestSize is the digest size of sha256 in bytes. + SHA256DigestSize = 32 + // SHA384DigestSize is the digest size of sha384 in bytes. + SHA384DigestSize = 48 +) + +// sliceForAppend takes a slice and a requested number of bytes. It returns a +// slice with the contents of the given slice followed by that many bytes and a +// second slice that aliases into it and contains only the extra bytes. If the +// original slice has sufficient capacity then no allocation is performed. +func sliceForAppend(in []byte, n int) (head, tail []byte) { + if total := len(in) + n; cap(in) >= total { + head = in[:total] + } else { + head = make([]byte, total) + copy(head, in) + } + tail = head[len(in):] + return head, tail +} + +// encrypt is the encryption function for an AEAD crypter. aead determines +// the type of AEAD crypter. dst can contain bytes at the beginning of the +// ciphertext that will not be encrypted but will be authenticated. If dst has +// enough capacity to hold these bytes, the ciphertext and the tag, no +// allocation and copy operations will be performed. dst and plaintext may +// fully overlap or not at all. +func encrypt(aead cipher.AEAD, dst, plaintext, nonce, aad []byte) ([]byte, error) { + if len(nonce) != NonceSize { + return nil, fmt.Errorf("nonce size must be %d bytes. received: %d", NonceSize, len(nonce)) + } + // If we need to allocate an output buffer, we want to include space for + // the tag to avoid forcing the caller to reallocate as well. + dlen := len(dst) + dst, out := sliceForAppend(dst, len(plaintext)+TagSize) + data := out[:len(plaintext)] + copy(data, plaintext) // data may fully overlap plaintext + + // Seal appends the ciphertext and the tag to its first argument and + // returns the updated slice. However, sliceForAppend above ensures that + // dst has enough capacity to avoid a reallocation and copy due to the + // append. + dst = aead.Seal(dst[:dlen], nonce, data, aad) + return dst, nil +} + +// decrypt is the decryption function for an AEAD crypter, where aead determines +// the type of AEAD crypter, and dst the destination bytes for the decrypted +// ciphertext. The dst buffer may fully overlap with plaintext or not at all. +func decrypt(aead cipher.AEAD, dst, ciphertext, nonce, aad []byte) ([]byte, error) { + if len(nonce) != NonceSize { + return nil, fmt.Errorf("nonce size must be %d bytes. received: %d", NonceSize, len(nonce)) + } + // If dst is equal to ciphertext[:0], ciphertext storage is reused. + plaintext, err := aead.Open(dst, nonce, ciphertext, aad) + if err != nil { + return nil, fmt.Errorf("message auth failed: %v", err) + } + return plaintext, nil +} diff --git a/vendor/github.com/google/s2a-go/internal/record/internal/halfconn/ciphersuite.go b/vendor/github.com/google/s2a-go/internal/record/internal/halfconn/ciphersuite.go new file mode 100644 index 0000000000..ddeaa6d77d --- /dev/null +++ b/vendor/github.com/google/s2a-go/internal/record/internal/halfconn/ciphersuite.go @@ -0,0 +1,98 @@ +/* + * + * Copyright 2021 Google LLC + * + * 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 + * + * https://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. + * + */ + +package halfconn + +import ( + "crypto/sha256" + "crypto/sha512" + "fmt" + "hash" + + s2apb "github.com/google/s2a-go/internal/proto/common_go_proto" + "github.com/google/s2a-go/internal/record/internal/aeadcrypter" +) + +// ciphersuite is the interface for retrieving ciphersuite-specific information +// and utilities. +type ciphersuite interface { + // keySize returns the key size in bytes. This refers to the key used by + // the AEAD crypter. This is derived by calling HKDF expand on the traffic + // secret. + keySize() int + // nonceSize returns the nonce size in bytes. + nonceSize() int + // trafficSecretSize returns the traffic secret size in bytes. This refers + // to the secret used to derive the traffic key and nonce, as specified in + // https://tools.ietf.org/html/rfc8446#section-7. + trafficSecretSize() int + // hashFunction returns the hash function for the ciphersuite. + hashFunction() func() hash.Hash + // aeadCrypter takes a key and creates an AEAD crypter for the ciphersuite + // using that key. + aeadCrypter(key []byte) (aeadcrypter.S2AAEADCrypter, error) +} + +func newCiphersuite(ciphersuite s2apb.Ciphersuite) (ciphersuite, error) { + switch ciphersuite { + case s2apb.Ciphersuite_AES_128_GCM_SHA256: + return &aesgcm128sha256{}, nil + case s2apb.Ciphersuite_AES_256_GCM_SHA384: + return &aesgcm256sha384{}, nil + case s2apb.Ciphersuite_CHACHA20_POLY1305_SHA256: + return &chachapolysha256{}, nil + default: + return nil, fmt.Errorf("unrecognized ciphersuite: %v", ciphersuite) + } +} + +// aesgcm128sha256 is the AES-128-GCM-SHA256 implementation of the ciphersuite +// interface. +type aesgcm128sha256 struct{} + +func (aesgcm128sha256) keySize() int { return aeadcrypter.AES128GCMKeySize } +func (aesgcm128sha256) nonceSize() int { return aeadcrypter.NonceSize } +func (aesgcm128sha256) trafficSecretSize() int { return aeadcrypter.SHA256DigestSize } +func (aesgcm128sha256) hashFunction() func() hash.Hash { return sha256.New } +func (aesgcm128sha256) aeadCrypter(key []byte) (aeadcrypter.S2AAEADCrypter, error) { + return aeadcrypter.NewAESGCM(key) +} + +// aesgcm256sha384 is the AES-256-GCM-SHA384 implementation of the ciphersuite +// interface. +type aesgcm256sha384 struct{} + +func (aesgcm256sha384) keySize() int { return aeadcrypter.AES256GCMKeySize } +func (aesgcm256sha384) nonceSize() int { return aeadcrypter.NonceSize } +func (aesgcm256sha384) trafficSecretSize() int { return aeadcrypter.SHA384DigestSize } +func (aesgcm256sha384) hashFunction() func() hash.Hash { return sha512.New384 } +func (aesgcm256sha384) aeadCrypter(key []byte) (aeadcrypter.S2AAEADCrypter, error) { + return aeadcrypter.NewAESGCM(key) +} + +// chachapolysha256 is the ChaChaPoly-SHA256 implementation of the ciphersuite +// interface. +type chachapolysha256 struct{} + +func (chachapolysha256) keySize() int { return aeadcrypter.Chacha20Poly1305KeySize } +func (chachapolysha256) nonceSize() int { return aeadcrypter.NonceSize } +func (chachapolysha256) trafficSecretSize() int { return aeadcrypter.SHA256DigestSize } +func (chachapolysha256) hashFunction() func() hash.Hash { return sha256.New } +func (chachapolysha256) aeadCrypter(key []byte) (aeadcrypter.S2AAEADCrypter, error) { + return aeadcrypter.NewChachaPoly(key) +} diff --git a/vendor/github.com/google/s2a-go/internal/record/internal/halfconn/counter.go b/vendor/github.com/google/s2a-go/internal/record/internal/halfconn/counter.go new file mode 100644 index 0000000000..9499cdca75 --- /dev/null +++ b/vendor/github.com/google/s2a-go/internal/record/internal/halfconn/counter.go @@ -0,0 +1,60 @@ +/* + * + * Copyright 2021 Google LLC + * + * 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 + * + * https://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. + * + */ + +package halfconn + +import "errors" + +// counter is a 64-bit counter. +type counter struct { + val uint64 + hasOverflowed bool +} + +// newCounter creates a new counter with the initial value set to val. +func newCounter(val uint64) counter { + return counter{val: val} +} + +// value returns the current value of the counter. +func (c *counter) value() (uint64, error) { + if c.hasOverflowed { + return 0, errors.New("counter has overflowed") + } + return c.val, nil +} + +// increment increments the counter and checks for overflow. +func (c *counter) increment() { + // If the counter is already invalid due to overflow, there is no need to + // increase it. We check for the hasOverflowed flag in the call to value(). + if c.hasOverflowed { + return + } + c.val++ + if c.val == 0 { + c.hasOverflowed = true + } +} + +// reset sets the counter value to zero and sets the hasOverflowed flag to +// false. +func (c *counter) reset() { + c.val = 0 + c.hasOverflowed = false +} diff --git a/vendor/github.com/google/s2a-go/internal/record/internal/halfconn/expander.go b/vendor/github.com/google/s2a-go/internal/record/internal/halfconn/expander.go new file mode 100644 index 0000000000..e05f2c36a6 --- /dev/null +++ b/vendor/github.com/google/s2a-go/internal/record/internal/halfconn/expander.go @@ -0,0 +1,59 @@ +/* + * + * Copyright 2021 Google LLC + * + * 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 + * + * https://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. + * + */ + +package halfconn + +import ( + "fmt" + "hash" + + "golang.org/x/crypto/hkdf" +) + +// hkdfExpander is the interface for the HKDF expansion function; see +// https://tools.ietf.org/html/rfc5869 for details. its use in TLS 1.3 is +// specified in https://tools.ietf.org/html/rfc8446#section-7.2 +type hkdfExpander interface { + // expand takes a secret, a label, and the output length in bytes, and + // returns the resulting expanded key. + expand(secret, label []byte, length int) ([]byte, error) +} + +// defaultHKDFExpander is the default HKDF expander which uses Go's crypto/hkdf +// for HKDF expansion. +type defaultHKDFExpander struct { + h func() hash.Hash +} + +// newDefaultHKDFExpander creates an instance of the default HKDF expander +// using the given hash function. +func newDefaultHKDFExpander(h func() hash.Hash) hkdfExpander { + return &defaultHKDFExpander{h: h} +} + +func (d *defaultHKDFExpander) expand(secret, label []byte, length int) ([]byte, error) { + outBuf := make([]byte, length) + n, err := hkdf.Expand(d.h, secret, label).Read(outBuf) + if err != nil { + return nil, fmt.Errorf("hkdf.Expand.Read failed with error: %v", err) + } + if n < length { + return nil, fmt.Errorf("hkdf.Expand.Read returned unexpected length, got %d, want %d", n, length) + } + return outBuf, nil +} diff --git a/vendor/github.com/google/s2a-go/internal/record/internal/halfconn/halfconn.go b/vendor/github.com/google/s2a-go/internal/record/internal/halfconn/halfconn.go new file mode 100644 index 0000000000..dff99ff594 --- /dev/null +++ b/vendor/github.com/google/s2a-go/internal/record/internal/halfconn/halfconn.go @@ -0,0 +1,193 @@ +/* + * + * Copyright 2021 Google LLC + * + * 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 + * + * https://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. + * + */ + +// Package halfconn manages the inbound or outbound traffic of a TLS 1.3 +// connection. +package halfconn + +import ( + "fmt" + "sync" + + s2apb "github.com/google/s2a-go/internal/proto/common_go_proto" + "github.com/google/s2a-go/internal/record/internal/aeadcrypter" + "golang.org/x/crypto/cryptobyte" +) + +// The constants below were taken from Section 7.2 and 7.3 in +// https://tools.ietf.org/html/rfc8446#section-7. They are used as the label +// in HKDF-Expand-Label. +const ( + tls13Key = "tls13 key" + tls13Nonce = "tls13 iv" + tls13Update = "tls13 traffic upd" +) + +// S2AHalfConnection stores the state of the TLS 1.3 connection in the +// inbound or outbound direction. +type S2AHalfConnection struct { + cs ciphersuite + expander hkdfExpander + // mutex guards sequence, aeadCrypter, trafficSecret, and nonce. + mutex sync.Mutex + aeadCrypter aeadcrypter.S2AAEADCrypter + sequence counter + trafficSecret []byte + nonce []byte +} + +// New creates a new instance of S2AHalfConnection given a ciphersuite and a +// traffic secret. +func New(ciphersuite s2apb.Ciphersuite, trafficSecret []byte, sequence uint64) (*S2AHalfConnection, error) { + cs, err := newCiphersuite(ciphersuite) + if err != nil { + return nil, fmt.Errorf("failed to create new ciphersuite: %v", ciphersuite) + } + if cs.trafficSecretSize() != len(trafficSecret) { + return nil, fmt.Errorf("supplied traffic secret must be %v bytes, given: %v bytes", cs.trafficSecretSize(), len(trafficSecret)) + } + + hc := &S2AHalfConnection{cs: cs, expander: newDefaultHKDFExpander(cs.hashFunction()), sequence: newCounter(sequence), trafficSecret: trafficSecret} + if err = hc.updateCrypterAndNonce(hc.trafficSecret); err != nil { + return nil, fmt.Errorf("failed to create half connection using traffic secret: %v", err) + } + + return hc, nil +} + +// Encrypt encrypts the plaintext and computes the tag of dst and plaintext. +// dst and plaintext may fully overlap or not at all. Note that the sequence +// number will still be incremented on failure, unless the sequence has +// overflowed. +func (hc *S2AHalfConnection) Encrypt(dst, plaintext, aad []byte) ([]byte, error) { + hc.mutex.Lock() + sequence, err := hc.getAndIncrementSequence() + if err != nil { + hc.mutex.Unlock() + return nil, err + } + nonce := hc.maskedNonce(sequence) + crypter := hc.aeadCrypter + hc.mutex.Unlock() + return crypter.Encrypt(dst, plaintext, nonce, aad) +} + +// Decrypt decrypts ciphertext and verifies the tag. dst and ciphertext may +// fully overlap or not at all. Note that the sequence number will still be +// incremented on failure, unless the sequence has overflowed. +func (hc *S2AHalfConnection) Decrypt(dst, ciphertext, aad []byte) ([]byte, error) { + hc.mutex.Lock() + sequence, err := hc.getAndIncrementSequence() + if err != nil { + hc.mutex.Unlock() + return nil, err + } + nonce := hc.maskedNonce(sequence) + crypter := hc.aeadCrypter + hc.mutex.Unlock() + return crypter.Decrypt(dst, ciphertext, nonce, aad) +} + +// UpdateKey advances the traffic secret key, as specified in +// https://tools.ietf.org/html/rfc8446#section-7.2. In addition, it derives +// a new key and nonce, and resets the sequence number. +func (hc *S2AHalfConnection) UpdateKey() error { + hc.mutex.Lock() + defer hc.mutex.Unlock() + + var err error + hc.trafficSecret, err = hc.deriveSecret(hc.trafficSecret, []byte(tls13Update), hc.cs.trafficSecretSize()) + if err != nil { + return fmt.Errorf("failed to derive traffic secret: %v", err) + } + + if err = hc.updateCrypterAndNonce(hc.trafficSecret); err != nil { + return fmt.Errorf("failed to update half connection: %v", err) + } + + hc.sequence.reset() + return nil +} + +// TagSize returns the tag size in bytes of the underlying AEAD crypter. +func (hc *S2AHalfConnection) TagSize() int { + return hc.aeadCrypter.TagSize() +} + +// updateCrypterAndNonce takes a new traffic secret and updates the crypter +// and nonce. Note that the mutex must be held while calling this function. +func (hc *S2AHalfConnection) updateCrypterAndNonce(newTrafficSecret []byte) error { + key, err := hc.deriveSecret(newTrafficSecret, []byte(tls13Key), hc.cs.keySize()) + if err != nil { + return fmt.Errorf("failed to update key: %v", err) + } + + hc.nonce, err = hc.deriveSecret(newTrafficSecret, []byte(tls13Nonce), hc.cs.nonceSize()) + if err != nil { + return fmt.Errorf("failed to update nonce: %v", err) + } + + hc.aeadCrypter, err = hc.cs.aeadCrypter(key) + if err != nil { + return fmt.Errorf("failed to update AEAD crypter: %v", err) + } + return nil +} + +// getAndIncrement returns the current sequence number and increments it. Note +// that the mutex must be held while calling this function. +func (hc *S2AHalfConnection) getAndIncrementSequence() (uint64, error) { + sequence, err := hc.sequence.value() + if err != nil { + return 0, err + } + hc.sequence.increment() + return sequence, nil +} + +// maskedNonce creates a copy of the nonce that is masked with the sequence +// number. Note that the mutex must be held while calling this function. +func (hc *S2AHalfConnection) maskedNonce(sequence uint64) []byte { + const uint64Size = 8 + nonce := make([]byte, len(hc.nonce)) + copy(nonce, hc.nonce) + for i := 0; i < uint64Size; i++ { + nonce[aeadcrypter.NonceSize-uint64Size+i] ^= byte(sequence >> uint64(56-uint64Size*i)) + } + return nonce +} + +// deriveSecret implements the Derive-Secret function, as specified in +// https://tools.ietf.org/html/rfc8446#section-7.1. +func (hc *S2AHalfConnection) deriveSecret(secret, label []byte, length int) ([]byte, error) { + var hkdfLabel cryptobyte.Builder + hkdfLabel.AddUint16(uint16(length)) + hkdfLabel.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { + b.AddBytes(label) + }) + // Append an empty `Context` field to the label, as specified in the RFC. + // The half connection does not use the `Context` field. + hkdfLabel.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { + b.AddBytes([]byte("")) + }) + hkdfLabelBytes, err := hkdfLabel.Bytes() + if err != nil { + return nil, fmt.Errorf("deriveSecret failed: %v", err) + } + return hc.expander.expand(secret, hkdfLabelBytes, length) +} diff --git a/vendor/github.com/google/s2a-go/internal/record/record.go b/vendor/github.com/google/s2a-go/internal/record/record.go new file mode 100644 index 0000000000..c60515510a --- /dev/null +++ b/vendor/github.com/google/s2a-go/internal/record/record.go @@ -0,0 +1,757 @@ +/* + * + * Copyright 2021 Google LLC + * + * 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 + * + * https://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. + * + */ + +// Package record implements the TLS 1.3 record protocol used by the S2A +// transport credentials. +package record + +import ( + "encoding/binary" + "errors" + "fmt" + "math" + "net" + "sync" + + commonpb "github.com/google/s2a-go/internal/proto/common_go_proto" + "github.com/google/s2a-go/internal/record/internal/halfconn" + "github.com/google/s2a-go/internal/tokenmanager" + "google.golang.org/grpc/grpclog" +) + +// recordType is the `ContentType` as described in +// https://tools.ietf.org/html/rfc8446#section-5.1. +type recordType byte + +const ( + alert recordType = 21 + handshake recordType = 22 + applicationData recordType = 23 +) + +// keyUpdateRequest is the `KeyUpdateRequest` as described in +// https://tools.ietf.org/html/rfc8446#section-4.6.3. +type keyUpdateRequest byte + +const ( + updateNotRequested keyUpdateRequest = 0 + updateRequested keyUpdateRequest = 1 +) + +// alertDescription is the `AlertDescription` as described in +// https://tools.ietf.org/html/rfc8446#section-6. +type alertDescription byte + +const ( + closeNotify alertDescription = 0 +) + +// sessionTicketState is used to determine whether session tickets have not yet +// been received, are in the process of being received, or have finished +// receiving. +type sessionTicketState byte + +const ( + ticketsNotYetReceived sessionTicketState = 0 + receivingTickets sessionTicketState = 1 + notReceivingTickets sessionTicketState = 2 +) + +const ( + // The TLS 1.3-specific constants below (tlsRecordMaxPlaintextSize, + // tlsRecordHeaderSize, tlsRecordTypeSize) were taken from + // https://tools.ietf.org/html/rfc8446#section-5.1. + + // tlsRecordMaxPlaintextSize is the maximum size in bytes of the plaintext + // in a single TLS 1.3 record. + tlsRecordMaxPlaintextSize = 16384 // 2^14 + // tlsRecordTypeSize is the size in bytes of the TLS 1.3 record type. + tlsRecordTypeSize = 1 + // tlsTagSize is the size in bytes of the tag of the following three + // ciphersuites: AES-128-GCM-SHA256, AES-256-GCM-SHA384, + // CHACHA20-POLY1305-SHA256. + tlsTagSize = 16 + // tlsRecordMaxPayloadSize is the maximum size in bytes of the payload in a + // single TLS 1.3 record. This is the maximum size of the plaintext plus the + // record type byte and 16 bytes of the tag. + tlsRecordMaxPayloadSize = tlsRecordMaxPlaintextSize + tlsRecordTypeSize + tlsTagSize + // tlsRecordHeaderTypeSize is the size in bytes of the TLS 1.3 record + // header type. + tlsRecordHeaderTypeSize = 1 + // tlsRecordHeaderLegacyRecordVersionSize is the size in bytes of the TLS + // 1.3 record header legacy record version. + tlsRecordHeaderLegacyRecordVersionSize = 2 + // tlsRecordHeaderPayloadLengthSize is the size in bytes of the TLS 1.3 + // record header payload length. + tlsRecordHeaderPayloadLengthSize = 2 + // tlsRecordHeaderSize is the size in bytes of the TLS 1.3 record header. + tlsRecordHeaderSize = tlsRecordHeaderTypeSize + tlsRecordHeaderLegacyRecordVersionSize + tlsRecordHeaderPayloadLengthSize + // tlsRecordMaxSize + tlsRecordMaxSize = tlsRecordMaxPayloadSize + tlsRecordHeaderSize + // tlsApplicationData is the application data type of the TLS 1.3 record + // header. + tlsApplicationData = 23 + // tlsLegacyRecordVersion is the legacy record version of the TLS record. + tlsLegacyRecordVersion = 3 + // tlsAlertSize is the size in bytes of an alert of TLS 1.3. + tlsAlertSize = 2 +) + +const ( + // These are TLS 1.3 handshake-specific constants. + + // tlsHandshakeNewSessionTicketType is the prefix of a handshake new session + // ticket message of TLS 1.3. + tlsHandshakeNewSessionTicketType = 4 + // tlsHandshakeKeyUpdateType is the prefix of a handshake key update message + // of TLS 1.3. + tlsHandshakeKeyUpdateType = 24 + // tlsHandshakeMsgTypeSize is the size in bytes of the TLS 1.3 handshake + // message type field. + tlsHandshakeMsgTypeSize = 1 + // tlsHandshakeLengthSize is the size in bytes of the TLS 1.3 handshake + // message length field. + tlsHandshakeLengthSize = 3 + // tlsHandshakeKeyUpdateMsgSize is the size in bytes of the TLS 1.3 + // handshake key update message. + tlsHandshakeKeyUpdateMsgSize = 1 + // tlsHandshakePrefixSize is the size in bytes of the prefix of the TLS 1.3 + // handshake message. + tlsHandshakePrefixSize = 4 + // tlsMaxSessionTicketSize is the maximum size of a NewSessionTicket message + // in TLS 1.3. This is the sum of the max sizes of all the fields in the + // NewSessionTicket struct specified in + // https://tools.ietf.org/html/rfc8446#section-4.6.1. + tlsMaxSessionTicketSize = 131338 +) + +const ( + // outBufMaxRecords is the maximum number of records that can fit in the + // ourRecordsBuf buffer. + outBufMaxRecords = 16 + // outBufMaxSize is the maximum size (in bytes) of the outRecordsBuf buffer. + outBufMaxSize = outBufMaxRecords * tlsRecordMaxSize + // maxAllowedTickets is the maximum number of session tickets that are + // allowed. The number of tickets are limited to ensure that the size of the + // ticket queue does not grow indefinitely. S2A also keeps a limit on the + // number of tickets that it caches. + maxAllowedTickets = 5 +) + +// preConstructedKeyUpdateMsg holds the key update message. This is needed as an +// optimization so that the same message does not need to be constructed every +// time a key update message is sent. +var preConstructedKeyUpdateMsg = buildKeyUpdateRequest() + +// conn represents a secured TLS connection. It implements the net.Conn +// interface. +type conn struct { + net.Conn + // inConn is the half connection responsible for decrypting incoming bytes. + inConn *halfconn.S2AHalfConnection + // outConn is the half connection responsible for encrypting outgoing bytes. + outConn *halfconn.S2AHalfConnection + // pendingApplicationData holds data that has been read from the connection + // and decrypted, but has not yet been returned by Read. + pendingApplicationData []byte + // unusedBuf holds data read from the network that has not yet been + // decrypted. This data might not consist of a complete record. It may + // consist of several records, the last of which could be incomplete. + unusedBuf []byte + // outRecordsBuf is a buffer used to store outgoing TLS records before + // they are written to the network. + outRecordsBuf []byte + // nextRecord stores the next record info in the unusedBuf buffer. + nextRecord []byte + // overheadSize is the overhead size in bytes of each TLS 1.3 record, which + // is computed as overheadSize = header size + record type byte + tag size. + // Note that there is no padding by zeros in the overhead calculation. + overheadSize int + // readMutex guards against concurrent calls to Read. This is required since + // Close may be called during a Read. + readMutex sync.Mutex + // writeMutex guards against concurrent calls to Write. This is required + // since Close may be called during a Write, and also because a key update + // message may be written during a Read. + writeMutex sync.Mutex + // handshakeBuf holds handshake messages while they are being processed. + handshakeBuf []byte + // ticketState is the current processing state of the session tickets. + ticketState sessionTicketState + // sessionTickets holds the completed session tickets until they are sent to + // the handshaker service for processing. + sessionTickets [][]byte + // ticketSender sends session tickets to the S2A handshaker service. + ticketSender s2aTicketSender + // callComplete is a channel that blocks closing the record protocol until a + // pending call to the S2A completes. + callComplete chan bool +} + +// ConnParameters holds the parameters used for creating a new conn object. +type ConnParameters struct { + // NetConn is the TCP connection to the peer. This parameter is required. + NetConn net.Conn + // Ciphersuite is the TLS ciphersuite negotiated by the S2A handshaker + // service. This parameter is required. + Ciphersuite commonpb.Ciphersuite + // TLSVersion is the TLS version number negotiated by the S2A handshaker + // service. This parameter is required. + TLSVersion commonpb.TLSVersion + // InTrafficSecret is the traffic secret used to derive the session key for + // the inbound direction. This parameter is required. + InTrafficSecret []byte + // OutTrafficSecret is the traffic secret used to derive the session key + // for the outbound direction. This parameter is required. + OutTrafficSecret []byte + // UnusedBuf is the data read from the network that has not yet been + // decrypted. This parameter is optional. If not provided, then no + // application data was sent in the same flight of messages as the final + // handshake message. + UnusedBuf []byte + // InSequence is the sequence number of the next, incoming, TLS record. + // This parameter is required. + InSequence uint64 + // OutSequence is the sequence number of the next, outgoing, TLS record. + // This parameter is required. + OutSequence uint64 + // HSAddr stores the address of the S2A handshaker service. This parameter + // is optional. If not provided, then TLS resumption is disabled. + HSAddr string + // ConnectionId is the connection identifier that was created and sent by + // S2A at the end of a handshake. + ConnectionID uint64 + // LocalIdentity is the local identity that was used by S2A during session + // setup and included in the session result. + LocalIdentity *commonpb.Identity + // EnsureProcessSessionTickets allows users to wait and ensure that all + // available session tickets are sent to S2A before a process completes. + EnsureProcessSessionTickets *sync.WaitGroup +} + +// NewConn creates a TLS record protocol that wraps the TCP connection. +func NewConn(o *ConnParameters) (net.Conn, error) { + if o == nil { + return nil, errors.New("conn options must not be nil") + } + if o.TLSVersion != commonpb.TLSVersion_TLS1_3 { + return nil, errors.New("TLS version must be TLS 1.3") + } + + inConn, err := halfconn.New(o.Ciphersuite, o.InTrafficSecret, o.InSequence) + if err != nil { + return nil, fmt.Errorf("failed to create inbound half connection: %v", err) + } + outConn, err := halfconn.New(o.Ciphersuite, o.OutTrafficSecret, o.OutSequence) + if err != nil { + return nil, fmt.Errorf("failed to create outbound half connection: %v", err) + } + + // The tag size for the in/out connections should be the same. + overheadSize := tlsRecordHeaderSize + tlsRecordTypeSize + inConn.TagSize() + var unusedBuf []byte + if o.UnusedBuf == nil { + // We pre-allocate unusedBuf to be of size + // 2*tlsRecordMaxSize-1 during initialization. We only read from the + // network into unusedBuf when unusedBuf does not contain a complete + // record and the incomplete record is at most tlsRecordMaxSize-1 + // (bytes). And we read at most tlsRecordMaxSize bytes of data from the + // network into unusedBuf at one time. Therefore, 2*tlsRecordMaxSize-1 + // is large enough to buffer data read from the network. + unusedBuf = make([]byte, 0, 2*tlsRecordMaxSize-1) + } else { + unusedBuf = make([]byte, len(o.UnusedBuf)) + copy(unusedBuf, o.UnusedBuf) + } + + tokenManager, err := tokenmanager.NewSingleTokenAccessTokenManager() + if err != nil { + grpclog.Infof("failed to create single token access token manager: %v", err) + } + + s2aConn := &conn{ + Conn: o.NetConn, + inConn: inConn, + outConn: outConn, + unusedBuf: unusedBuf, + outRecordsBuf: make([]byte, tlsRecordMaxSize), + nextRecord: unusedBuf, + overheadSize: overheadSize, + ticketState: ticketsNotYetReceived, + // Pre-allocate the buffer for one session ticket message and the max + // plaintext size. This is the largest size that handshakeBuf will need + // to hold. The largest incomplete handshake message is the + // [handshake header size] + [max session ticket size] - 1. + // Then, tlsRecordMaxPlaintextSize is the maximum size that will be + // appended to the handshakeBuf before the handshake message is + // completed. Therefore, the buffer size below should be large enough to + // buffer any handshake messages. + handshakeBuf: make([]byte, 0, tlsHandshakePrefixSize+tlsMaxSessionTicketSize+tlsRecordMaxPlaintextSize-1), + ticketSender: &ticketSender{ + hsAddr: o.HSAddr, + connectionID: o.ConnectionID, + localIdentity: o.LocalIdentity, + tokenManager: tokenManager, + ensureProcessSessionTickets: o.EnsureProcessSessionTickets, + }, + callComplete: make(chan bool), + } + return s2aConn, nil +} + +// Read reads and decrypts a TLS 1.3 record from the underlying connection, and +// copies any application data received from the peer into b. If the size of the +// payload is greater than len(b), Read retains the remaining bytes in an +// internal buffer, and subsequent calls to Read will read from this buffer +// until it is exhausted. At most 1 TLS record worth of application data is +// written to b for each call to Read. +// +// Note that for the user to efficiently call this method, the user should +// ensure that the buffer b is allocated such that the buffer does not have any +// unused segments. This can be done by calling Read via io.ReadFull, which +// continually calls Read until the specified buffer has been filled. Also note +// that the user should close the connection via Close() if an error is thrown +// by a call to Read. +func (p *conn) Read(b []byte) (n int, err error) { + p.readMutex.Lock() + defer p.readMutex.Unlock() + // Check if p.pendingApplication data has leftover application data from + // the previous call to Read. + if len(p.pendingApplicationData) == 0 { + // Read a full record from the wire. + record, err := p.readFullRecord() + if err != nil { + return 0, err + } + // Now we have a complete record, so split the header and validate it + // The TLS record is split into 2 pieces: the record header and the + // payload. The payload has the following form: + // [payload] = [ciphertext of application data] + // + [ciphertext of record type byte] + // + [(optionally) ciphertext of padding by zeros] + // + [tag] + header, payload, err := splitAndValidateHeader(record) + if err != nil { + return 0, err + } + // Decrypt the ciphertext. + p.pendingApplicationData, err = p.inConn.Decrypt(payload[:0], payload, header) + if err != nil { + return 0, err + } + // Remove the padding by zeros and the record type byte from the + // p.pendingApplicationData buffer. + msgType, err := p.stripPaddingAndType() + if err != nil { + return 0, err + } + // Check that the length of the plaintext after stripping the padding + // and record type byte is under the maximum plaintext size. + if len(p.pendingApplicationData) > tlsRecordMaxPlaintextSize { + return 0, errors.New("plaintext size larger than maximum") + } + // The expected message types are application data, alert, and + // handshake. For application data, the bytes are directly copied into + // b. For an alert, the type of the alert is checked and the connection + // is closed on a close notify alert. For a handshake message, the + // handshake message type is checked. The handshake message type can be + // a key update type, for which we advance the traffic secret, and a + // new session ticket type, for which we send the received ticket to S2A + // for processing. + switch msgType { + case applicationData: + if len(p.handshakeBuf) > 0 { + return 0, errors.New("application data received while processing fragmented handshake messages") + } + if p.ticketState == receivingTickets { + p.ticketState = notReceivingTickets + grpclog.Infof("Sending session tickets to S2A.") + p.ticketSender.sendTicketsToS2A(p.sessionTickets, p.callComplete) + } + case alert: + return 0, p.handleAlertMessage() + case handshake: + if err = p.handleHandshakeMessage(); err != nil { + return 0, err + } + return 0, nil + default: + return 0, errors.New("unknown record type") + } + } + // Write as much application data as possible to b, the output buffer. + n = copy(b, p.pendingApplicationData) + p.pendingApplicationData = p.pendingApplicationData[n:] + return n, nil +} + +// Write divides b into segments of size tlsRecordMaxPlaintextSize, builds a +// TLS 1.3 record (of type "application data") from each segment, and sends +// the record to the peer. It returns the number of plaintext bytes that were +// successfully sent to the peer. +func (p *conn) Write(b []byte) (n int, err error) { + p.writeMutex.Lock() + defer p.writeMutex.Unlock() + return p.writeTLSRecord(b, tlsApplicationData) +} + +// writeTLSRecord divides b into segments of size maxPlaintextBytesPerRecord, +// builds a TLS 1.3 record (of type recordType) from each segment, and sends +// the record to the peer. It returns the number of plaintext bytes that were +// successfully sent to the peer. +func (p *conn) writeTLSRecord(b []byte, recordType byte) (n int, err error) { + // Create a record of only header, record type, and tag if given empty + // byte array. + if len(b) == 0 { + recordEndIndex, _, err := p.buildRecord(b, recordType, 0) + if err != nil { + return 0, err + } + + // Write the bytes stored in outRecordsBuf to p.Conn. Since we return + // the number of plaintext bytes written without overhead, we will + // always return 0 while p.Conn.Write returns the entire record length. + _, err = p.Conn.Write(p.outRecordsBuf[:recordEndIndex]) + return 0, err + } + + numRecords := int(math.Ceil(float64(len(b)) / float64(tlsRecordMaxPlaintextSize))) + totalRecordsSize := len(b) + numRecords*p.overheadSize + partialBSize := len(b) + if totalRecordsSize > outBufMaxSize { + totalRecordsSize = outBufMaxSize + partialBSize = outBufMaxRecords * tlsRecordMaxPlaintextSize + } + if len(p.outRecordsBuf) < totalRecordsSize { + p.outRecordsBuf = make([]byte, totalRecordsSize) + } + for bStart := 0; bStart < len(b); bStart += partialBSize { + bEnd := bStart + partialBSize + if bEnd > len(b) { + bEnd = len(b) + } + partialB := b[bStart:bEnd] + recordEndIndex := 0 + for len(partialB) > 0 { + recordEndIndex, partialB, err = p.buildRecord(partialB, recordType, recordEndIndex) + if err != nil { + // Return the amount of bytes written prior to the error. + return bStart, err + } + } + // Write the bytes stored in outRecordsBuf to p.Conn. If there is an + // error, calculate the total number of plaintext bytes of complete + // records successfully written to the peer and return it. + nn, err := p.Conn.Write(p.outRecordsBuf[:recordEndIndex]) + if err != nil { + numberOfCompletedRecords := int(math.Floor(float64(nn) / float64(tlsRecordMaxSize))) + return bStart + numberOfCompletedRecords*tlsRecordMaxPlaintextSize, err + } + } + return len(b), nil +} + +// buildRecord builds a TLS 1.3 record of type recordType from plaintext, +// and writes the record to outRecordsBuf at recordStartIndex. The record will +// have at most tlsRecordMaxPlaintextSize bytes of payload. It returns the +// index of outRecordsBuf where the current record ends, as well as any +// remaining plaintext bytes. +func (p *conn) buildRecord(plaintext []byte, recordType byte, recordStartIndex int) (n int, remainingPlaintext []byte, err error) { + // Construct the payload, which consists of application data and record type. + dataLen := len(plaintext) + if dataLen > tlsRecordMaxPlaintextSize { + dataLen = tlsRecordMaxPlaintextSize + } + remainingPlaintext = plaintext[dataLen:] + newRecordBuf := p.outRecordsBuf[recordStartIndex:] + + copy(newRecordBuf[tlsRecordHeaderSize:], plaintext[:dataLen]) + newRecordBuf[tlsRecordHeaderSize+dataLen] = recordType + payload := newRecordBuf[tlsRecordHeaderSize : tlsRecordHeaderSize+dataLen+1] // 1 is for the recordType. + // Construct the header. + newRecordBuf[0] = tlsApplicationData + newRecordBuf[1] = tlsLegacyRecordVersion + newRecordBuf[2] = tlsLegacyRecordVersion + binary.BigEndian.PutUint16(newRecordBuf[3:], uint16(len(payload)+tlsTagSize)) + header := newRecordBuf[:tlsRecordHeaderSize] + + // Encrypt the payload using header as aad. + encryptedPayload, err := p.outConn.Encrypt(newRecordBuf[tlsRecordHeaderSize:][:0], payload, header) + if err != nil { + return 0, plaintext, err + } + recordStartIndex += len(header) + len(encryptedPayload) + return recordStartIndex, remainingPlaintext, nil +} + +func (p *conn) Close() error { + p.readMutex.Lock() + defer p.readMutex.Unlock() + p.writeMutex.Lock() + defer p.writeMutex.Unlock() + // If p.ticketState is equal to notReceivingTickets, then S2A has + // been sent a flight of session tickets, and we must wait for the + // call to S2A to complete before closing the record protocol. + if p.ticketState == notReceivingTickets { + <-p.callComplete + grpclog.Infof("Safe to close the connection because sending tickets to S2A is (already) complete.") + } + return p.Conn.Close() +} + +// stripPaddingAndType strips the padding by zeros and record type from +// p.pendingApplicationData and returns the record type. Note that +// p.pendingApplicationData should be of the form: +// [application data] + [record type byte] + [trailing zeros] +func (p *conn) stripPaddingAndType() (recordType, error) { + if len(p.pendingApplicationData) == 0 { + return 0, errors.New("application data had length 0") + } + i := len(p.pendingApplicationData) - 1 + // Search for the index of the record type byte. + for i > 0 { + if p.pendingApplicationData[i] != 0 { + break + } + i-- + } + rt := recordType(p.pendingApplicationData[i]) + p.pendingApplicationData = p.pendingApplicationData[:i] + return rt, nil +} + +// readFullRecord reads from the wire until a record is completed and returns +// the full record. +func (p *conn) readFullRecord() (fullRecord []byte, err error) { + fullRecord, p.nextRecord, err = parseReadBuffer(p.nextRecord, tlsRecordMaxPayloadSize) + if err != nil { + return nil, err + } + // Check whether the next record to be decrypted has been completely + // received. + if len(fullRecord) == 0 { + copy(p.unusedBuf, p.nextRecord) + p.unusedBuf = p.unusedBuf[:len(p.nextRecord)] + // Always copy next incomplete record to the beginning of the + // unusedBuf buffer and reset nextRecord to it. + p.nextRecord = p.unusedBuf + } + // Keep reading from the wire until we have a complete record. + for len(fullRecord) == 0 { + if len(p.unusedBuf) == cap(p.unusedBuf) { + tmp := make([]byte, len(p.unusedBuf), cap(p.unusedBuf)+tlsRecordMaxSize) + copy(tmp, p.unusedBuf) + p.unusedBuf = tmp + } + n, err := p.Conn.Read(p.unusedBuf[len(p.unusedBuf):min(cap(p.unusedBuf), len(p.unusedBuf)+tlsRecordMaxSize)]) + if err != nil { + return nil, err + } + p.unusedBuf = p.unusedBuf[:len(p.unusedBuf)+n] + fullRecord, p.nextRecord, err = parseReadBuffer(p.unusedBuf, tlsRecordMaxPayloadSize) + if err != nil { + return nil, err + } + } + return fullRecord, nil +} + +// parseReadBuffer parses the provided buffer and returns a full record and any +// remaining bytes in that buffer. If the record is incomplete, nil is returned +// for the first return value and the given byte buffer is returned for the +// second return value. The length of the payload specified by the header should +// not be greater than maxLen, otherwise an error is returned. Note that this +// function does not allocate or copy any buffers. +func parseReadBuffer(b []byte, maxLen uint16) (fullRecord, remaining []byte, err error) { + // If the header is not complete, return the provided buffer as remaining + // buffer. + if len(b) < tlsRecordHeaderSize { + return nil, b, nil + } + msgLenField := b[tlsRecordHeaderTypeSize+tlsRecordHeaderLegacyRecordVersionSize : tlsRecordHeaderSize] + length := binary.BigEndian.Uint16(msgLenField) + if length > maxLen { + return nil, nil, fmt.Errorf("record length larger than the limit %d", maxLen) + } + if len(b) < int(length)+tlsRecordHeaderSize { + // Record is not complete yet. + return nil, b, nil + } + return b[:tlsRecordHeaderSize+length], b[tlsRecordHeaderSize+length:], nil +} + +// splitAndValidateHeader splits the header from the payload in the TLS 1.3 +// record and returns them. Note that the header is checked for validity, and an +// error is returned when an invalid header is parsed. Also note that this +// function does not allocate or copy any buffers. +func splitAndValidateHeader(record []byte) (header, payload []byte, err error) { + if len(record) < tlsRecordHeaderSize { + return nil, nil, fmt.Errorf("record was smaller than the header size") + } + header = record[:tlsRecordHeaderSize] + payload = record[tlsRecordHeaderSize:] + if header[0] != tlsApplicationData { + return nil, nil, fmt.Errorf("incorrect type in the header") + } + // Check the legacy record version, which should be 0x03, 0x03. + if header[1] != 0x03 || header[2] != 0x03 { + return nil, nil, fmt.Errorf("incorrect legacy record version in the header") + } + return header, payload, nil +} + +// handleAlertMessage handles an alert message. +func (p *conn) handleAlertMessage() error { + if len(p.pendingApplicationData) != tlsAlertSize { + return errors.New("invalid alert message size") + } + alertType := p.pendingApplicationData[1] + // Clear the body of the alert message. + p.pendingApplicationData = p.pendingApplicationData[:0] + if alertType == byte(closeNotify) { + return errors.New("received a close notify alert") + } + // TODO(matthewstevenson88): Add support for more alert types. + return fmt.Errorf("received an unrecognized alert type: %v", alertType) +} + +// parseHandshakeHeader parses a handshake message from the handshake buffer. +// It returns the message type, the message length, the message, the raw message +// that includes the type and length bytes and a flag indicating whether the +// handshake message has been fully parsed. i.e. whether the entire handshake +// message was in the handshake buffer. +func (p *conn) parseHandshakeMsg() (msgType byte, msgLen uint32, msg []byte, rawMsg []byte, ok bool) { + // Handle the case where the 4 byte handshake header is fragmented. + if len(p.handshakeBuf) < tlsHandshakePrefixSize { + return 0, 0, nil, nil, false + } + msgType = p.handshakeBuf[0] + msgLen = bigEndianInt24(p.handshakeBuf[tlsHandshakeMsgTypeSize : tlsHandshakeMsgTypeSize+tlsHandshakeLengthSize]) + if msgLen > uint32(len(p.handshakeBuf)-tlsHandshakePrefixSize) { + return 0, 0, nil, nil, false + } + msg = p.handshakeBuf[tlsHandshakePrefixSize : tlsHandshakePrefixSize+msgLen] + rawMsg = p.handshakeBuf[:tlsHandshakeMsgTypeSize+tlsHandshakeLengthSize+msgLen] + p.handshakeBuf = p.handshakeBuf[tlsHandshakePrefixSize+msgLen:] + return msgType, msgLen, msg, rawMsg, true +} + +// handleHandshakeMessage handles a handshake message. Note that the first +// complete handshake message from the handshake buffer is removed, if it +// exists. +func (p *conn) handleHandshakeMessage() error { + // Copy the pending application data to the handshake buffer. At this point, + // we are guaranteed that the pending application data contains only parts + // of a handshake message. + p.handshakeBuf = append(p.handshakeBuf, p.pendingApplicationData...) + p.pendingApplicationData = p.pendingApplicationData[:0] + // Several handshake messages may be coalesced into a single record. + // Continue reading them until the handshake buffer is empty. + for len(p.handshakeBuf) > 0 { + handshakeMsgType, msgLen, msg, rawMsg, ok := p.parseHandshakeMsg() + if !ok { + // The handshake could not be fully parsed, so read in another + // record and try again later. + break + } + switch handshakeMsgType { + case tlsHandshakeKeyUpdateType: + if msgLen != tlsHandshakeKeyUpdateMsgSize { + return errors.New("invalid handshake key update message length") + } + if len(p.handshakeBuf) != 0 { + return errors.New("key update message must be the last message of a handshake record") + } + if err := p.handleKeyUpdateMsg(msg); err != nil { + return err + } + case tlsHandshakeNewSessionTicketType: + // Ignore tickets that are received after a batch of tickets has + // been sent to S2A. + if p.ticketState == notReceivingTickets { + continue + } + if p.ticketState == ticketsNotYetReceived { + p.ticketState = receivingTickets + } + p.sessionTickets = append(p.sessionTickets, rawMsg) + if len(p.sessionTickets) == maxAllowedTickets { + p.ticketState = notReceivingTickets + grpclog.Infof("Sending session tickets to S2A.") + p.ticketSender.sendTicketsToS2A(p.sessionTickets, p.callComplete) + } + default: + return errors.New("unknown handshake message type") + } + } + return nil +} + +func buildKeyUpdateRequest() []byte { + b := make([]byte, tlsHandshakePrefixSize+tlsHandshakeKeyUpdateMsgSize) + b[0] = tlsHandshakeKeyUpdateType + b[1] = 0 + b[2] = 0 + b[3] = tlsHandshakeKeyUpdateMsgSize + b[4] = byte(updateNotRequested) + return b +} + +// handleKeyUpdateMsg handles a key update message. +func (p *conn) handleKeyUpdateMsg(msg []byte) error { + keyUpdateRequest := msg[0] + if keyUpdateRequest != byte(updateNotRequested) && + keyUpdateRequest != byte(updateRequested) { + return errors.New("invalid handshake key update message") + } + if err := p.inConn.UpdateKey(); err != nil { + return err + } + // Send a key update message back to the peer if requested. + if keyUpdateRequest == byte(updateRequested) { + p.writeMutex.Lock() + defer p.writeMutex.Unlock() + n, err := p.writeTLSRecord(preConstructedKeyUpdateMsg, byte(handshake)) + if err != nil { + return err + } + if n != tlsHandshakePrefixSize+tlsHandshakeKeyUpdateMsgSize { + return errors.New("key update request message wrote less bytes than expected") + } + if err = p.outConn.UpdateKey(); err != nil { + return err + } + } + return nil +} + +// bidEndianInt24 converts the given byte buffer of at least size 3 and +// outputs the resulting 24 bit integer as a uint32. This is needed because +// TLS 1.3 requires 3 byte integers, and the binary.BigEndian package does +// not provide a way to transform a byte buffer into a 3 byte integer. +func bigEndianInt24(b []byte) uint32 { + _ = b[2] // bounds check hint to compiler; see golang.org/issue/14808 + return uint32(b[2]) | uint32(b[1])<<8 | uint32(b[0])<<16 +} + +func min(a, b int) int { + if a < b { + return a + } + return b +} diff --git a/vendor/github.com/google/s2a-go/internal/record/ticketsender.go b/vendor/github.com/google/s2a-go/internal/record/ticketsender.go new file mode 100644 index 0000000000..33fa3c55d4 --- /dev/null +++ b/vendor/github.com/google/s2a-go/internal/record/ticketsender.go @@ -0,0 +1,176 @@ +/* + * + * Copyright 2021 Google LLC + * + * 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 + * + * https://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. + * + */ + +package record + +import ( + "context" + "fmt" + "sync" + "time" + + "github.com/google/s2a-go/internal/handshaker/service" + commonpb "github.com/google/s2a-go/internal/proto/common_go_proto" + s2apb "github.com/google/s2a-go/internal/proto/s2a_go_proto" + "github.com/google/s2a-go/internal/tokenmanager" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" +) + +// sessionTimeout is the timeout for creating a session with the S2A handshaker +// service. +const sessionTimeout = time.Second * 5 + +// s2aTicketSender sends session tickets to the S2A handshaker service. +type s2aTicketSender interface { + // sendTicketsToS2A sends the given session tickets to the S2A handshaker + // service. + sendTicketsToS2A(sessionTickets [][]byte, callComplete chan bool) +} + +// ticketStream is the stream used to send and receive session information. +type ticketStream interface { + Send(*s2apb.SessionReq) error + Recv() (*s2apb.SessionResp, error) +} + +type ticketSender struct { + // hsAddr stores the address of the S2A handshaker service. + hsAddr string + // connectionID is the connection identifier that was created and sent by + // S2A at the end of a handshake. + connectionID uint64 + // localIdentity is the local identity that was used by S2A during session + // setup and included in the session result. + localIdentity *commonpb.Identity + // tokenManager manages access tokens for authenticating to S2A. + tokenManager tokenmanager.AccessTokenManager + // ensureProcessSessionTickets allows users to wait and ensure that all + // available session tickets are sent to S2A before a process completes. + ensureProcessSessionTickets *sync.WaitGroup +} + +// sendTicketsToS2A sends the given sessionTickets to the S2A handshaker +// service. This is done asynchronously and writes to the error logs if an error +// occurs. +func (t *ticketSender) sendTicketsToS2A(sessionTickets [][]byte, callComplete chan bool) { + // Note that the goroutine is in the function rather than at the caller + // because the fake ticket sender used for testing must run synchronously + // so that the session tickets can be accessed from it after the tests have + // been run. + if t.ensureProcessSessionTickets != nil { + t.ensureProcessSessionTickets.Add(1) + } + go func() { + if err := func() error { + defer func() { + if t.ensureProcessSessionTickets != nil { + t.ensureProcessSessionTickets.Done() + } + }() + hsConn, err := service.Dial(t.hsAddr) + if err != nil { + return err + } + client := s2apb.NewS2AServiceClient(hsConn) + ctx, cancel := context.WithTimeout(context.Background(), sessionTimeout) + defer cancel() + session, err := client.SetUpSession(ctx) + if err != nil { + return err + } + defer func() { + if err := session.CloseSend(); err != nil { + grpclog.Error(err) + } + }() + return t.writeTicketsToStream(session, sessionTickets) + }(); err != nil { + grpclog.Errorf("failed to send resumption tickets to S2A with identity: %v, %v", + t.localIdentity, err) + } + callComplete <- true + close(callComplete) + }() +} + +// writeTicketsToStream writes the given session tickets to the given stream. +func (t *ticketSender) writeTicketsToStream(stream ticketStream, sessionTickets [][]byte) error { + if err := stream.Send( + &s2apb.SessionReq{ + ReqOneof: &s2apb.SessionReq_ResumptionTicket{ + ResumptionTicket: &s2apb.ResumptionTicketReq{ + InBytes: sessionTickets, + ConnectionId: t.connectionID, + LocalIdentity: t.localIdentity, + }, + }, + AuthMechanisms: t.getAuthMechanisms(), + }, + ); err != nil { + return err + } + sessionResp, err := stream.Recv() + if err != nil { + return err + } + if sessionResp.GetStatus().GetCode() != uint32(codes.OK) { + return fmt.Errorf("s2a session ticket response had error status: %v, %v", + sessionResp.GetStatus().GetCode(), sessionResp.GetStatus().GetDetails()) + } + return nil +} + +func (t *ticketSender) getAuthMechanisms() []*s2apb.AuthenticationMechanism { + if t.tokenManager == nil { + return nil + } + // First handle the special case when no local identity has been provided + // by the application. In this case, an AuthenticationMechanism with no local + // identity will be sent. + if t.localIdentity == nil { + token, err := t.tokenManager.DefaultToken() + if err != nil { + grpclog.Infof("unable to get token for empty local identity: %v", err) + return nil + } + return []*s2apb.AuthenticationMechanism{ + { + MechanismOneof: &s2apb.AuthenticationMechanism_Token{ + Token: token, + }, + }, + } + } + + // Next, handle the case where the application (or the S2A) has specified + // a local identity. + token, err := t.tokenManager.Token(t.localIdentity) + if err != nil { + grpclog.Infof("unable to get token for local identity %v: %v", t.localIdentity, err) + return nil + } + return []*s2apb.AuthenticationMechanism{ + { + Identity: t.localIdentity, + MechanismOneof: &s2apb.AuthenticationMechanism_Token{ + Token: token, + }, + }, + } +} diff --git a/vendor/github.com/google/s2a-go/internal/tokenmanager/tokenmanager.go b/vendor/github.com/google/s2a-go/internal/tokenmanager/tokenmanager.go new file mode 100644 index 0000000000..ec96ba3b6a --- /dev/null +++ b/vendor/github.com/google/s2a-go/internal/tokenmanager/tokenmanager.go @@ -0,0 +1,70 @@ +/* + * + * Copyright 2021 Google LLC + * + * 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 + * + * https://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. + * + */ + +// Package tokenmanager provides tokens for authenticating to S2A. +package tokenmanager + +import ( + "fmt" + "os" + + commonpb "github.com/google/s2a-go/internal/proto/common_go_proto" +) + +const ( + s2aAccessTokenEnvironmentVariable = "S2A_ACCESS_TOKEN" +) + +// AccessTokenManager manages tokens for authenticating to S2A. +type AccessTokenManager interface { + // DefaultToken returns a token that an application with no specified local + // identity must use to authenticate to S2A. + DefaultToken() (token string, err error) + // Token returns a token that an application with local identity equal to + // identity must use to authenticate to S2A. + Token(identity *commonpb.Identity) (token string, err error) +} + +type singleTokenAccessTokenManager struct { + token string +} + +// NewSingleTokenAccessTokenManager returns a new AccessTokenManager instance +// that will always manage the same token. +// +// The token to be managed is read from the s2aAccessTokenEnvironmentVariable +// environment variable. If this environment variable is not set, then this +// function returns an error. +func NewSingleTokenAccessTokenManager() (AccessTokenManager, error) { + token, variableExists := os.LookupEnv(s2aAccessTokenEnvironmentVariable) + if !variableExists { + return nil, fmt.Errorf("%s environment variable is not set", s2aAccessTokenEnvironmentVariable) + } + return &singleTokenAccessTokenManager{token: token}, nil +} + +// DefaultToken always returns the token managed by the +// singleTokenAccessTokenManager. +func (m *singleTokenAccessTokenManager) DefaultToken() (string, error) { + return m.token, nil +} + +// Token always returns the token managed by the singleTokenAccessTokenManager. +func (m *singleTokenAccessTokenManager) Token(*commonpb.Identity) (string, error) { + return m.token, nil +} diff --git a/vendor/github.com/google/s2a-go/internal/v2/README.md b/vendor/github.com/google/s2a-go/internal/v2/README.md new file mode 100644 index 0000000000..3806d1e9cc --- /dev/null +++ b/vendor/github.com/google/s2a-go/internal/v2/README.md @@ -0,0 +1 @@ +**This directory has the implementation of the S2Av2's gRPC-Go client libraries** diff --git a/vendor/github.com/google/s2a-go/internal/v2/certverifier/certverifier.go b/vendor/github.com/google/s2a-go/internal/v2/certverifier/certverifier.go new file mode 100644 index 0000000000..cc811879b5 --- /dev/null +++ b/vendor/github.com/google/s2a-go/internal/v2/certverifier/certverifier.go @@ -0,0 +1,122 @@ +/* + * + * Copyright 2022 Google LLC + * + * 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 + * + * https://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. + * + */ + +// Package certverifier offloads verifications to S2Av2. +package certverifier + +import ( + "crypto/x509" + "fmt" + + "github.com/google/s2a-go/stream" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + + s2av2pb "github.com/google/s2a-go/internal/proto/v2/s2a_go_proto" +) + +// VerifyClientCertificateChain builds a SessionReq, sends it to S2Av2 and +// receives a SessionResp. +func VerifyClientCertificateChain(verificationMode s2av2pb.ValidatePeerCertificateChainReq_VerificationMode, s2AStream stream.S2AStream) func(rawCerts [][]byte, verifiedChains [][]*x509.Certificate) error { + return func(rawCerts [][]byte, verifiedChains [][]*x509.Certificate) error { + // Offload verification to S2Av2. + if grpclog.V(1) { + grpclog.Infof("Sending request to S2Av2 for client peer cert chain validation.") + } + if err := s2AStream.Send(&s2av2pb.SessionReq{ + ReqOneof: &s2av2pb.SessionReq_ValidatePeerCertificateChainReq{ + ValidatePeerCertificateChainReq: &s2av2pb.ValidatePeerCertificateChainReq{ + Mode: verificationMode, + PeerOneof: &s2av2pb.ValidatePeerCertificateChainReq_ClientPeer_{ + ClientPeer: &s2av2pb.ValidatePeerCertificateChainReq_ClientPeer{ + CertificateChain: rawCerts, + }, + }, + }, + }, + }); err != nil { + grpclog.Infof("Failed to send request to S2Av2 for client peer cert chain validation.") + return err + } + + // Get the response from S2Av2. + resp, err := s2AStream.Recv() + if err != nil { + grpclog.Infof("Failed to receive client peer cert chain validation response from S2Av2.") + return err + } + + // Parse the response. + if (resp.GetStatus() != nil) && (resp.GetStatus().Code != uint32(codes.OK)) { + return fmt.Errorf("failed to offload client cert verification to S2A: %d, %v", resp.GetStatus().Code, resp.GetStatus().Details) + + } + + if resp.GetValidatePeerCertificateChainResp().ValidationResult != s2av2pb.ValidatePeerCertificateChainResp_SUCCESS { + return fmt.Errorf("client cert verification failed: %v", resp.GetValidatePeerCertificateChainResp().ValidationDetails) + } + + return nil + } +} + +// VerifyServerCertificateChain builds a SessionReq, sends it to S2Av2 and +// receives a SessionResp. +func VerifyServerCertificateChain(hostname string, verificationMode s2av2pb.ValidatePeerCertificateChainReq_VerificationMode, s2AStream stream.S2AStream, serverAuthorizationPolicy []byte) func(rawCerts [][]byte, verifiedChains [][]*x509.Certificate) error { + return func(rawCerts [][]byte, verifiedChains [][]*x509.Certificate) error { + // Offload verification to S2Av2. + if grpclog.V(1) { + grpclog.Infof("Sending request to S2Av2 for server peer cert chain validation.") + } + if err := s2AStream.Send(&s2av2pb.SessionReq{ + ReqOneof: &s2av2pb.SessionReq_ValidatePeerCertificateChainReq{ + ValidatePeerCertificateChainReq: &s2av2pb.ValidatePeerCertificateChainReq{ + Mode: verificationMode, + PeerOneof: &s2av2pb.ValidatePeerCertificateChainReq_ServerPeer_{ + ServerPeer: &s2av2pb.ValidatePeerCertificateChainReq_ServerPeer{ + CertificateChain: rawCerts, + ServerHostname: hostname, + SerializedUnrestrictedClientPolicy: serverAuthorizationPolicy, + }, + }, + }, + }, + }); err != nil { + grpclog.Infof("Failed to send request to S2Av2 for server peer cert chain validation.") + return err + } + + // Get the response from S2Av2. + resp, err := s2AStream.Recv() + if err != nil { + grpclog.Infof("Failed to receive server peer cert chain validation response from S2Av2.") + return err + } + + // Parse the response. + if (resp.GetStatus() != nil) && (resp.GetStatus().Code != uint32(codes.OK)) { + return fmt.Errorf("failed to offload server cert verification to S2A: %d, %v", resp.GetStatus().Code, resp.GetStatus().Details) + } + + if resp.GetValidatePeerCertificateChainResp().ValidationResult != s2av2pb.ValidatePeerCertificateChainResp_SUCCESS { + return fmt.Errorf("server cert verification failed: %v", resp.GetValidatePeerCertificateChainResp().ValidationDetails) + } + + return nil + } +} diff --git a/vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/client_intermediate_cert.der b/vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/client_intermediate_cert.der new file mode 100644 index 0000000000000000000000000000000000000000..958f3cfaddf3645fa6c0578b5b6955d65ac4c172 GIT binary patch literal 998 zcmXqLVt!=M#B^!_GZP~dlZfxTkgMw#Mx5CteAhsdS=K*t&xAY!UN%mxHjlRNyo`+8 ztPBQ??S|Y2oNUaYENsF|p}{Z?2M?38qoI(207!`V#>K<# zoS$2em{(~iXuuB=;pX9R$t=q(&dkp<6f+P32{H5V78@nTm!uY##3!c~l^9AHNWiV< zWEA7BsH}1TV!h=2Tmw0AULzv|Gec7&Lt`^z^C)p%6J+ina%mHz5^^vyvNA9?G4eAQ zG%<29H8CnfQWlH+MyjTjz z2Bjk+Ub9TzT(Z$!`+w1f9a{SYn?h^$U$mDJKK^KOurlxGlhf8coXvjW^}bgt-rFjD znHJ|Xo9Wew;}%JlW_Kjsthc+chb^XXpU3LOdy_KCS4OTntgUFd?YsGkV{8gPCrIUU z7xZ1<|6Oe5g44&3J$ODp>G5YKW=00a#V!U;2J*mEAgjzGVIbBZvce&_^W7!+r|T*d zavIkkZ(n>dQ`LY6q(GR3)qt6i@xOr}h$qOxWx&zImXe>Fn2DZTf#J-^uui3sYst!# z{ImS~I{#0uS#WDz%!i-3yIxOGkACKhN$DyM2L{LbrkL@xJCpY3crHP)J~LHEx;nsZlX$z1Na++S~*x&F8L zSHsIX`Pf;-7fz4f$yxWfRV}c$Te2$X#22gkrUlwjtNp9{IiD}~zjo}z)1J=iJoj~z zPFk$n)~eK8B%5+0@w1g$N8H(l+-H4!LOMmyS_+%b`$^TD`}g=z?!9=Gts-l=GE2@y HTP6bly#{pd literal 0 HcmV?d00001 diff --git a/vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/client_leaf_cert.der b/vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/client_leaf_cert.der new file mode 100644 index 0000000000000000000000000000000000000000..d2817641bafb022339926786ab85b545f40ac665 GIT binary patch literal 1147 zcmXqLVktLhVvb+H%*4pVB*OPMYW498DSV5WgVNVW|Jr8oCgimNFB_*;n@8JsUPeZ4 zRtAH{c0+ChPB!LH7B*p~&|nycgNMo4(NM@h03^fC!x>zfmseSqn3HNKV890w6yxnyM_06xZQcZ?W@M4y!->Y40>Qzg1y0 z&gNQpqF{|c>D+ZZ(rFIKEL_n{%!~|-iyLnkG+s4m+z3nvvdS!tD-9Z#Eo|&v(%3b4 zVzNoZ_g%=<^$R1;>=M3fAjvH2AGv2jo&gWY$-*qG2F#3%{|y8|JV6#N1CA!Pl>FSp z%sk}C2j(GQ()!XwH^ngbB~t_{rh@w&h5|n>_#Tt3odjy zuPCdY_u)fF^#8=jc^^+Q{aqN5`$@Gm({I-q6VU_LtQOD6naL>j(`V|D&;QI6%^$Dc z@$uH$=blqSKTV1FFaEpmVP=>@vvi*Y`l|mqO|ORNA0oIS8nOI z?NiA8%5=ljL@D29-OKpueEYz|zv5rHb554&taa#n7142tpUKWU?R-O_r^0)6j>G3Y aOB;Xxy<$H9NT-Uzt(mu6i*GEf3IzZ)c%0q< literal 0 HcmV?d00001 diff --git a/vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/client_root_cert.der b/vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/client_root_cert.der new file mode 100644 index 0000000000000000000000000000000000000000..d8c3710c85f9ff41ddfc709924c866350a727a4f GIT binary patch literal 1013 zcmXqLV*Y5*#B_53GZP~dlZa+?pWMd9xVH0Kw4Tf@Xyh=ks1AdSQHxGwPW?5!&W`3Tbn1KjLh?$4C*eEf+B(=CCJ~_3h#8ApW0&YDg zqZoHZWt9UE>m}#s8pw(B8W|aw8XFoJ7#JIxMv3#90J%nHQ0^ddX%nLoaxgNoGB7tW z@-rATF>*0AF)}hdZr#y6M}F(|x(>G^%gcAlKWcTb*S((Se#vIyuMojqJ6T@W9G$-N zZ|C3aC}V-ru$PA$a>||`V5!;WvLO9;#Z4xLTYkS~Q%%)mH+DGbsA<2rr@8F$Psyk! zC02_czBy5RY)XCG=Yl1DX=(>VSrdJ-C#|hK7^zn?b35awX)f$Ntvf$$ zcUg9sL1fPSDbXqWt6$VVZu~MYZrj`2y}fI?80UuXsujC8ao09pzReSEFH3&Hjk;!&j?yPw^7|NHlfMLseyY=TyHB}&&4U!T;kt&%Ic z-@@f=`1w!pGyVU%zJI$PWGYXZ;?Bg($iTQb*dWkA7MKcT`B=nQL{>NicfPwM|8!l2 zLQdoQtUFt($qvv(cdI=i6tz3tUW`|a0C z&5N-8^H(H$?psgMz!}^;s& z=?+d?)Hkg%emvc~QLj+DwRvTMu)Tl4_m}{_7kTC1{xNsF-p9krsM-B)Ge_#Kiu#~{ zd67^5U(N6lVcaug+5}Tw2V+f_-BCNQyG;7WAZ_<^`6QjCrOhu7&ztq4tdo7t^%&>) zTR0VF*I2Sr HHQW{e5x{wf literal 0 HcmV?d00001 diff --git a/vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/server_intermediate_cert.der b/vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/server_intermediate_cert.der new file mode 100644 index 0000000000000000000000000000000000000000..dae619c097512f20d09d2054c63fc0f715d7be24 GIT binary patch literal 998 zcmXqLVt!=M#B^!_GZP~dlZZk6mxvepr#-!NVoqOL*`yn*LOZ7#@Un4gwRyCC=VfH% zW@RvFY&YaK;ACSCWnmL$3Jr#FICz+x9SwyH1VA$EJeHTH8JZfJT11KSnjmurkxQExm5_sxk(GhDiIJbd zpox)-sfm%1VO{t`EzVyWX$3+}`kJnrGQY>^=jnZyz4d%;|IQeuB_Gcfo1a{_>B5Fg zXYbI=4K*7QZdjc*51-)~EjRzyir2SPA5Z@zcTLeXV*g^*2f0P(7p>c z?c<>#uh>H(ryKBq6bQ4h8Za|5{x=W=@dR183^XGxLzc8JJvw;mpWjp+5Pu z!*lq#5Sb^i@`a>klJNjzx%iu)2*?h3yy-gEL(;p^g~mZo#n!wzh9Qua5C+wfRd ztarh_l9E{Oro7&WNVTl@3-~vy&EDU;)-f|r-8<&mQ>C=;``&D2+5V0(pW(g3o1}Sj z^gY793Mi&+ntK1`1tm%ENt=U{rb%k1PtbRHEhYTylqR?8HqOeuvA1fBY>pc~NUFTR KZE!sDzAgX``fm0B literal 0 HcmV?d00001 diff --git a/vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/server_leaf_cert.der b/vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/server_leaf_cert.der new file mode 100644 index 0000000000000000000000000000000000000000..ce7f8d31d6802c7e68c188af8797c3a063894857 GIT binary patch literal 1147 zcmXqLVktLhVvb+H%*4pVB%&$)xidhT`$ARBi)~L`p2_`@+!*`b5acj4ER7|Ts-W~ z`MCv&d6kBO2K*oqZXOPo%(Bel%=|nTUzhK>3dC_Z(le%bCn$9moio9jI@8{ zd;5%c{XT!(ig$;5K+$bpwI6ChVmse+UV1r`!RY5*U#A%ppFJxS>PX#w$sz7*X_R~A zg!|$g&z66XI$)aW-TrxDio@fp!U^sS#+*GdHMB|H?BTf!^g~J_=D$Y-Ot{~xpTg~G+{k6 Zdr{DieczoQDL-a%Ib3(Tsv+bGCjf+Ap-TV& literal 0 HcmV?d00001 diff --git a/vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/server_root_cert.der b/vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/server_root_cert.der new file mode 100644 index 0000000000000000000000000000000000000000..04b0d73600b72f80a03943d41973b279db9e8b32 GIT binary patch literal 1013 zcmXqLV*Y5*#B_53GZP~dlZb{E^N!s~snriRh?%)HJiGKl>CAisUN%mxHjlRNyo`+8 ztPBQ??S|Y2oNUaYENsF|p}{Z?2M?38qoI(207!`V#>K<# zoS$2em{(~iXuuB=;pX9R$t=q(&dkp<6f+P32{H5V78@nTm!uY##3!c~l^9AHNWiV< zWEA7BsH}1TV!h=2Tmw0AULzv|Q)5FT0|N^q(aL-(RkWjuO*nCZC(^b4{cp%V+e53*PfoZW)2DU5BJN^Jypf0+ z%dyqB7eAAEDfH_&Z*6C3aP8^9M)sYbgC^`~v;4F5#oepTLYl5+2bdY(i!-?My>4G) z&8u+L`?_9LxQB1$HP?fpd*5i(-|SJJ!`sZHa8UZu(QeP3Dc(Yr8?G#iY20z>);Fh$ zMQ>DZHkC%KUBdEb&cYv;1sHCx@Vv~#%*epFIM^W2Ko*z^WcgUcSVVXxICA%7?w=9J zwOIRjXviz}kjUu<@*rtt76}8f2J8wz2}@R(k?}tZs{u2RLJoFd>IDWnBZI}4y?mP{ zW+WALO{`uTY0T-O8uy=9`&z_;*e^$wYu3!Wz-Re-&a7vV%g_8h++q8CMf&zxTFdl~ zp5i+{-R9L&+mdUFEBoKr@u=5M->UQ>MNWJ7BRi)4^M4~B*uKhe`J%yAbG&-Thr?bk zCap+`USuL4V}qf=6kBV_EFAN zmIn*31Qb`P{oxd|=2o5l$|&AdTJ_-*k&5oDQvTTOiN8OjczyHyta?pWMd9xVH0Kw4Tf@Xyh=ks1AdSQHxGwPW?5!&W`3Tbn1KjLh?$4C*eEf+B(=CCJ~_3h#8ApW0&YDg zqZoHZWt9UE>m}#s8pw(B8W|aw8XFoJ7#JIxMv3#90J%nHQ0^ddX%nLoaxgNoGB7tW z@-rATF>*0AF)}hdZr#y6M}F(|x(>G^%gcAlKWcTb*S((Se#vIyuMojqJ6T@W9G$-N zZ|C3aC}V-ru$PA$a>||`V5!;WvLO9;#Z4xLTYkS~Q%%)mH+DGbsA<2rr@8F$Psyk! zC02_czBy5RY)XCG=Yl1DX=(>VSrdJ-C#|hK7^zn?b35awX)f$Ntvf$$ zcUg9sL1fPSDbXqWt6$VVZu~MYZrj`2y}fI?80UuXsujC8ao09pzReSEFH3&Hjk;!&j?yPw^7|NHlfMLseyY=TyHB}&&4U!T;kt&%Ic z-@@f=`1w!pGyVU%zJI$PWGYXZ;?Bg($iTQb*dWkA7MKcT`B=nQL{>NicfPwM|8!l2 zLQdoQtUFt($qvv(cdI=i6tz3tUW`|a0C z&5N-8^H(H$?psgMz!}^;s& z=?+d?)Hkg%emvc~QLj+DwRvTMu)Tl4_m}{_7kTC1{xNsF-p9krsM-B)Ge_#Kiu#~{ zd67^5U(N6lVcaug+5}Tw2V+f_-BCNQyG;7WAZ_<^`6QjCrOhu7&ztq4tdo7t^%&>) zTR0VF*I2Sr HHQW{e5x{wf literal 0 HcmV?d00001 diff --git a/vendor/github.com/google/s2a-go/internal/v2/remotesigner/testdata/client_cert.pem b/vendor/github.com/google/s2a-go/internal/v2/remotesigner/testdata/client_cert.pem new file mode 100644 index 0000000000..493a5a2648 --- /dev/null +++ b/vendor/github.com/google/s2a-go/internal/v2/remotesigner/testdata/client_cert.pem @@ -0,0 +1,24 @@ +-----BEGIN CERTIFICATE----- +MIID8TCCAtmgAwIBAgIUKXNlBRVe6UepjQUijIFPZBd/4qYwDQYJKoZIhvcNAQEL +BQAwgYcxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTESMBAGA1UEBwwJU3Vubnl2 +YWxlMRAwDgYDVQQKDAdDb21wYW55MREwDwYDVQQLDAhEaXZpc2lvbjEWMBQGA1UE +AwwNczJhX3Rlc3RfY2VydDEaMBgGCSqGSIb3DQEJARYLeHl6QHh5ei5jb20wHhcN +MjIwNTMxMjAwMzE1WhcNNDIwNTI2MjAwMzE1WjCBhzELMAkGA1UEBhMCVVMxCzAJ +BgNVBAgMAkNBMRIwEAYDVQQHDAlTdW5ueXZhbGUxEDAOBgNVBAoMB0NvbXBhbnkx +ETAPBgNVBAsMCERpdmlzaW9uMRYwFAYDVQQDDA1zMmFfdGVzdF9jZXJ0MRowGAYJ +KoZIhvcNAQkBFgt4eXpAeHl6LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBAOOFuIucH7XXfohGxKd3uR/ihUA/LdduR9I8kfpUEbq5BOt8xZe5/Yn9 +a1ozEHVW6cOAbHbnwAR8tkSgZ/t42QIA2k77HWU1Jh2xiEIsJivo3imm4/kZWuR0 +OqPh7MhzxpR/hvNwpI5mJsAVBWFMa5KtecFZLnyZtwHylrRN1QXzuLrOxuKFufK3 +RKbTABScn5RbZL976H/jgfSeXrbt242NrIoBnVe6fRbekbq2DQ6zFArbQMUgHjHK +P0UqBgdr1QmHfi9KytFyx9BTP3gXWnWIu+bY7/v7qKJMHFwGETo+dCLWYevJL316 +HnLfhApDMfP8U+Yv/y1N/YvgaSOSlEcCAwEAAaNTMFEwHQYDVR0OBBYEFKhAU4nu +0h/lrnggbIGvx4ej0WklMB8GA1UdIwQYMBaAFKhAU4nu0h/lrnggbIGvx4ej0Wkl +MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAE/6NghzQ5fu6yR6 +EHKbj/YMrFdT7aGn5n2sAf7wJ33LIhiFHkpWBsVlm7rDtZtwhe891ZK/P60anlg9 +/P0Ua53tSRVRmCvTnEbXWOVMN4is6MsR7BlmzUxl4AtIn7jbeifEwRL7B4xDYmdA +QrQnsqoz45dLgS5xK4WDqXATP09Q91xQDuhud/b+A4jrvgwFASmL7rMIZbp4f1JQ +nlnl/9VoTBQBvJiWkDUtQDMpRLtauddEkv4AGz75p5IspXWD6cOemuh2iQec11xD +X20rs2WZbAcAiUa3nmy8OKYw435vmpj8gp39WYbX/Yx9TymrFFbVY92wYn+quTco +pKklVz0= +-----END CERTIFICATE----- diff --git a/vendor/github.com/google/s2a-go/internal/v2/remotesigner/testdata/client_key.pem b/vendor/github.com/google/s2a-go/internal/v2/remotesigner/testdata/client_key.pem new file mode 100644 index 0000000000..55a7f10c74 --- /dev/null +++ b/vendor/github.com/google/s2a-go/internal/v2/remotesigner/testdata/client_key.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEogIBAAKCAQEA44W4i5wftdd+iEbEp3e5H+KFQD8t125H0jyR+lQRurkE63zF +l7n9if1rWjMQdVbpw4BsdufABHy2RKBn+3jZAgDaTvsdZTUmHbGIQiwmK+jeKabj ++Rla5HQ6o+HsyHPGlH+G83CkjmYmwBUFYUxrkq15wVkufJm3AfKWtE3VBfO4us7G +4oW58rdEptMAFJyflFtkv3vof+OB9J5etu3bjY2sigGdV7p9Ft6RurYNDrMUCttA +xSAeMco/RSoGB2vVCYd+L0rK0XLH0FM/eBdadYi75tjv+/uookwcXAYROj50ItZh +68kvfXoect+ECkMx8/xT5i//LU39i+BpI5KURwIDAQABAoIBABgyjo/6iLzUMFbZ +/+w3pW6orrdIgN2akvTfED9pVYFgUA+jc3hRhY95bkNnjuaL2cy7Cc4Tk65mfRQL +Y0OxdJLr+EvSFSxAXM9npDA1ddHRsF8JqtFBSxNk8R+g1Yf0GDiO35Fgd3/ViWWA +VtQkRoSRApP3oiQKTRZd8H04keFR+PvmDk/Lq11l3Kc24A1PevKIPX1oI990ggw9 +9i4uSV+cnuMxmcI9xxJtgwdDFdjr39l2arLOHr4s6LGoV2IOdXHNlv5xRqWUZ0FH +MDHowkLgwDrdSTnNeaVNkce14Gqx+bd4hNaLCdKXMpedBTEmrut3f3hdV1kKjaKt +aqRYr8ECgYEA/YDGZY2jvFoHHBywlqmEMFrrCvQGH51m5R1Ntpkzr+Rh3YCmrpvq +xgwJXING0PUw3dz+xrH5lJICrfNE5Kt3fPu1rAEy+13mYsNowghtUq2Rtu0Hsjjx +2E3Bf8vEB6RNBMmGkUpTTIAroGF5tpJoRvfnWax+k4pFdrKYFtyZdNcCgYEA5cNv +EPltvOobjTXlUmtVP3n27KZN2aXexTcagLzRxE9CV4cYySENl3KuOMmccaZpIl6z +aHk6BT4X+M0LqElNUczrInfVqI+SGAFLGy7W6CJaqSr6cpyFUP/fosKpm6wKGgLq +udHfpvz5rckhKd8kJxFLvhGOK9yN5qpzih0gfhECgYAJfwRvk3G5wYmYpP58dlcs +VIuPenqsPoI3PPTHTU/hW+XKnWIhElgmGRdUrto9Q6IT/Y5RtSMLTLjq+Tzwb/fm +56rziYv2XJsfwgAvnI8z1Kqrto9ePsHYf3krJ1/thVsZPc9bq/QY3ohD1sLvcuaT +GgBBnLOVJU3a12/ZE2RwOwKBgF0csWMAoj8/5IB6if+3ral2xOGsl7oPZVMo/J2V +Z7EVqb4M6rd/pKFugTpUQgkwtkSOekhpcGD1hAN5HTNK2YG/+L5UMAsKe9sskwJm +HgOfAHy0BSDzW3ey6i9skg2bT9Cww+0gJ3Hl7U1HSCBO5LjMYpSZSrNtwzfqdb5Q +BX3xAoGARZdR28Ej3+/+0+fz47Yu2h4z0EI/EbrudLOWY936jIeAVwHckI3+BuqH +qR4poj1gfbnMxNuI9UzIXzjEmGewx9kDZ7IYnvloZKqoVQODO5GlKF2ja6IcMNlh +GCNdD6PSAS6HcmalmWo9sj+1YMkrl+GJikKZqVBHrHNwMGAG67w= +-----END RSA PRIVATE KEY----- diff --git a/vendor/github.com/google/s2a-go/internal/v2/remotesigner/testdata/server_cert.der b/vendor/github.com/google/s2a-go/internal/v2/remotesigner/testdata/server_cert.der new file mode 100644 index 0000000000000000000000000000000000000000..04b0d73600b72f80a03943d41973b279db9e8b32 GIT binary patch literal 1013 zcmXqLV*Y5*#B_53GZP~dlZb{E^N!s~snriRh?%)HJiGKl>CAisUN%mxHjlRNyo`+8 ztPBQ??S|Y2oNUaYENsF|p}{Z?2M?38qoI(207!`V#>K<# zoS$2em{(~iXuuB=;pX9R$t=q(&dkp<6f+P32{H5V78@nTm!uY##3!c~l^9AHNWiV< zWEA7BsH}1TV!h=2Tmw0AULzv|Q)5FT0|N^q(aL-(RkWjuO*nCZC(^b4{cp%V+e53*PfoZW)2DU5BJN^Jypf0+ z%dyqB7eAAEDfH_&Z*6C3aP8^9M)sYbgC^`~v;4F5#oepTLYl5+2bdY(i!-?My>4G) z&8u+L`?_9LxQB1$HP?fpd*5i(-|SJJ!`sZHa8UZu(QeP3Dc(Yr8?G#iY20z>);Fh$ zMQ>DZHkC%KUBdEb&cYv;1sHCx@Vv~#%*epFIM^W2Ko*z^WcgUcSVVXxICA%7?w=9J zwOIRjXviz}kjUu<@*rtt76}8f2J8wz2}@R(k?}tZs{u2RLJoFd>IDWnBZI}4y?mP{ zW+WALO{`uTY0T-O8uy=9`&z_;*e^$wYu3!Wz-Re-&a7vV%g_8h++q8CMf&zxTFdl~ zp5i+{-R9L&+mdUFEBoKr@u=5M->UQ>MNWJ7BRi)4^M4~B*uKhe`J%yAbG&-Thr?bk zCap+`USuL4V}qf=6kBV_EFAN zmIn*31Qb`P{oxd|=2o5l$|&AdTJ_-*k&5oDQvTTOiN8OjczyHyta 0 { + cert.PrivateKey = remotesigner.New(cert.Leaf, s2AStream) + if cert.PrivateKey == nil { + return nil, errors.New("failed to retrieve Private Key from Remote Signer Library") + } + } + + minVersion, maxVersion, err := getTLSMinMaxVersionsClient(tlsConfig) + if err != nil { + return nil, err + } + + // Create mTLS credentials for client. + config := &tls.Config{ + VerifyPeerCertificate: certverifier.VerifyServerCertificateChain(serverHostname, verificationMode, s2AStream, serverAuthorizationPolicy), + ServerName: serverHostname, + InsecureSkipVerify: true, // NOLINT + ClientSessionCache: nil, + SessionTicketsDisabled: true, + MinVersion: minVersion, + MaxVersion: maxVersion, + NextProtos: []string{h2}, + } + if len(tlsConfig.CertificateChain) > 0 { + config.Certificates = []tls.Certificate{cert} + } + return config, nil +} + +// GetTLSConfigurationForServer returns a tls.Config instance for use by a server application. +func GetTLSConfigurationForServer(s2AStream stream.S2AStream, tokenManager tokenmanager.AccessTokenManager, localIdentities []*commonpbv1.Identity, verificationMode s2av2pb.ValidatePeerCertificateChainReq_VerificationMode) (*tls.Config, error) { + return &tls.Config{ + GetConfigForClient: ClientConfig(tokenManager, localIdentities, verificationMode, s2AStream), + }, nil +} + +// ClientConfig builds a TLS config for a server to establish a secure +// connection with a client, based on SNI communicated during ClientHello. +// Ensures that server presents the correct certificate to establish a TLS +// connection. +func ClientConfig(tokenManager tokenmanager.AccessTokenManager, localIdentities []*commonpbv1.Identity, verificationMode s2av2pb.ValidatePeerCertificateChainReq_VerificationMode, s2AStream stream.S2AStream) func(chi *tls.ClientHelloInfo) (*tls.Config, error) { + return func(chi *tls.ClientHelloInfo) (*tls.Config, error) { + tlsConfig, err := getServerConfigFromS2Av2(tokenManager, localIdentities, chi.ServerName, s2AStream) + if err != nil { + return nil, err + } + + var cert tls.Certificate + for i, v := range tlsConfig.CertificateChain { + // Populate Certificates field. + block, _ := pem.Decode([]byte(v)) + if block == nil { + return nil, errors.New("certificate in CertificateChain obtained from S2Av2 is empty") + } + x509Cert, err := x509.ParseCertificate(block.Bytes) + if err != nil { + return nil, err + } + cert.Certificate = append(cert.Certificate, x509Cert.Raw) + if i == 0 { + cert.Leaf = x509Cert + } + } + + cert.PrivateKey = remotesigner.New(cert.Leaf, s2AStream) + if cert.PrivateKey == nil { + return nil, errors.New("failed to retrieve Private Key from Remote Signer Library") + } + + minVersion, maxVersion, err := getTLSMinMaxVersionsServer(tlsConfig) + if err != nil { + return nil, err + } + + clientAuth := getTLSClientAuthType(tlsConfig) + + var cipherSuites []uint16 + cipherSuites = getCipherSuites(tlsConfig.Ciphersuites) + + // Create mTLS credentials for server. + return &tls.Config{ + Certificates: []tls.Certificate{cert}, + VerifyPeerCertificate: certverifier.VerifyClientCertificateChain(verificationMode, s2AStream), + ClientAuth: clientAuth, + CipherSuites: cipherSuites, + SessionTicketsDisabled: true, + MinVersion: minVersion, + MaxVersion: maxVersion, + NextProtos: []string{h2}, + }, nil + } +} + +func getCipherSuites(tlsConfigCipherSuites []commonpb.Ciphersuite) []uint16 { + var tlsGoCipherSuites []uint16 + for _, v := range tlsConfigCipherSuites { + s := getTLSCipherSuite(v) + if s != 0xffff { + tlsGoCipherSuites = append(tlsGoCipherSuites, s) + } + } + return tlsGoCipherSuites +} + +func getTLSCipherSuite(tlsCipherSuite commonpb.Ciphersuite) uint16 { + switch tlsCipherSuite { + case commonpb.Ciphersuite_CIPHERSUITE_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256: + return tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 + case commonpb.Ciphersuite_CIPHERSUITE_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384: + return tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 + case commonpb.Ciphersuite_CIPHERSUITE_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256: + return tls.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 + case commonpb.Ciphersuite_CIPHERSUITE_ECDHE_RSA_WITH_AES_128_GCM_SHA256: + return tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 + case commonpb.Ciphersuite_CIPHERSUITE_ECDHE_RSA_WITH_AES_256_GCM_SHA384: + return tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 + case commonpb.Ciphersuite_CIPHERSUITE_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256: + return tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 + default: + return 0xffff + } +} + +func getServerConfigFromS2Av2(tokenManager tokenmanager.AccessTokenManager, localIdentities []*commonpbv1.Identity, sni string, s2AStream stream.S2AStream) (*s2av2pb.GetTlsConfigurationResp_ServerTlsConfiguration, error) { + authMechanisms := getAuthMechanisms(tokenManager, localIdentities) + var locID *commonpbv1.Identity + if localIdentities != nil { + locID = localIdentities[0] + } + + if err := s2AStream.Send(&s2av2pb.SessionReq{ + LocalIdentity: locID, + AuthenticationMechanisms: authMechanisms, + ReqOneof: &s2av2pb.SessionReq_GetTlsConfigurationReq{ + GetTlsConfigurationReq: &s2av2pb.GetTlsConfigurationReq{ + ConnectionSide: commonpb.ConnectionSide_CONNECTION_SIDE_SERVER, + Sni: sni, + }, + }, + }); err != nil { + return nil, err + } + + resp, err := s2AStream.Recv() + if err != nil { + return nil, err + } + + // TODO(rmehta19): Add unit test for this if statement. + if (resp.GetStatus() != nil) && (resp.GetStatus().Code != uint32(codes.OK)) { + return nil, fmt.Errorf("failed to get TLS configuration from S2A: %d, %v", resp.GetStatus().Code, resp.GetStatus().Details) + } + + return resp.GetGetTlsConfigurationResp().GetServerTlsConfiguration(), nil +} + +func getTLSClientAuthType(tlsConfig *s2av2pb.GetTlsConfigurationResp_ServerTlsConfiguration) tls.ClientAuthType { + var clientAuth tls.ClientAuthType + switch x := tlsConfig.RequestClientCertificate; x { + case s2av2pb.GetTlsConfigurationResp_ServerTlsConfiguration_DONT_REQUEST_CLIENT_CERTIFICATE: + clientAuth = tls.NoClientCert + case s2av2pb.GetTlsConfigurationResp_ServerTlsConfiguration_REQUEST_CLIENT_CERTIFICATE_BUT_DONT_VERIFY: + clientAuth = tls.RequestClientCert + case s2av2pb.GetTlsConfigurationResp_ServerTlsConfiguration_REQUEST_CLIENT_CERTIFICATE_AND_VERIFY: + // This case actually maps to tls.VerifyClientCertIfGiven. However this + // mapping triggers normal verification, followed by custom verification, + // specified in VerifyPeerCertificate. To bypass normal verification, and + // only do custom verification we set clientAuth to RequireAnyClientCert or + // RequestClientCert. See https://github.com/google/s2a-go/pull/43 for full + // discussion. + clientAuth = tls.RequireAnyClientCert + case s2av2pb.GetTlsConfigurationResp_ServerTlsConfiguration_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_BUT_DONT_VERIFY: + clientAuth = tls.RequireAnyClientCert + case s2av2pb.GetTlsConfigurationResp_ServerTlsConfiguration_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY: + // This case actually maps to tls.RequireAndVerifyClientCert. However this + // mapping triggers normal verification, followed by custom verification, + // specified in VerifyPeerCertificate. To bypass normal verification, and + // only do custom verification we set clientAuth to RequireAnyClientCert or + // RequestClientCert. See https://github.com/google/s2a-go/pull/43 for full + // discussion. + clientAuth = tls.RequireAnyClientCert + default: + clientAuth = tls.RequireAnyClientCert + } + return clientAuth +} + +func getAuthMechanisms(tokenManager tokenmanager.AccessTokenManager, localIdentities []*commonpbv1.Identity) []*s2av2pb.AuthenticationMechanism { + if tokenManager == nil { + return nil + } + if len(localIdentities) == 0 { + token, err := tokenManager.DefaultToken() + if err != nil { + grpclog.Infof("Unable to get token for empty local identity: %v", err) + return nil + } + return []*s2av2pb.AuthenticationMechanism{ + { + MechanismOneof: &s2av2pb.AuthenticationMechanism_Token{ + Token: token, + }, + }, + } + } + var authMechanisms []*s2av2pb.AuthenticationMechanism + for _, localIdentity := range localIdentities { + if localIdentity == nil { + token, err := tokenManager.DefaultToken() + if err != nil { + grpclog.Infof("Unable to get default token for local identity %v: %v", localIdentity, err) + continue + } + authMechanisms = append(authMechanisms, &s2av2pb.AuthenticationMechanism{ + Identity: localIdentity, + MechanismOneof: &s2av2pb.AuthenticationMechanism_Token{ + Token: token, + }, + }) + } else { + token, err := tokenManager.Token(localIdentity) + if err != nil { + grpclog.Infof("Unable to get token for local identity %v: %v", localIdentity, err) + continue + } + authMechanisms = append(authMechanisms, &s2av2pb.AuthenticationMechanism{ + Identity: localIdentity, + MechanismOneof: &s2av2pb.AuthenticationMechanism_Token{ + Token: token, + }, + }) + } + } + return authMechanisms +} + +// TODO(rmehta19): refactor switch statements into a helper function. +func getTLSMinMaxVersionsClient(tlsConfig *s2av2pb.GetTlsConfigurationResp_ClientTlsConfiguration) (uint16, uint16, error) { + // Map S2Av2 TLSVersion to consts defined in tls package. + var minVersion uint16 + var maxVersion uint16 + switch x := tlsConfig.MinTlsVersion; x { + case commonpb.TLSVersion_TLS_VERSION_1_0: + minVersion = tls.VersionTLS10 + case commonpb.TLSVersion_TLS_VERSION_1_1: + minVersion = tls.VersionTLS11 + case commonpb.TLSVersion_TLS_VERSION_1_2: + minVersion = tls.VersionTLS12 + case commonpb.TLSVersion_TLS_VERSION_1_3: + minVersion = tls.VersionTLS13 + default: + return minVersion, maxVersion, fmt.Errorf("S2Av2 provided invalid MinTlsVersion: %v", x) + } + + switch x := tlsConfig.MaxTlsVersion; x { + case commonpb.TLSVersion_TLS_VERSION_1_0: + maxVersion = tls.VersionTLS10 + case commonpb.TLSVersion_TLS_VERSION_1_1: + maxVersion = tls.VersionTLS11 + case commonpb.TLSVersion_TLS_VERSION_1_2: + maxVersion = tls.VersionTLS12 + case commonpb.TLSVersion_TLS_VERSION_1_3: + maxVersion = tls.VersionTLS13 + default: + return minVersion, maxVersion, fmt.Errorf("S2Av2 provided invalid MaxTlsVersion: %v", x) + } + if minVersion > maxVersion { + return minVersion, maxVersion, errors.New("S2Av2 provided minVersion > maxVersion") + } + return minVersion, maxVersion, nil +} + +func getTLSMinMaxVersionsServer(tlsConfig *s2av2pb.GetTlsConfigurationResp_ServerTlsConfiguration) (uint16, uint16, error) { + // Map S2Av2 TLSVersion to consts defined in tls package. + var minVersion uint16 + var maxVersion uint16 + switch x := tlsConfig.MinTlsVersion; x { + case commonpb.TLSVersion_TLS_VERSION_1_0: + minVersion = tls.VersionTLS10 + case commonpb.TLSVersion_TLS_VERSION_1_1: + minVersion = tls.VersionTLS11 + case commonpb.TLSVersion_TLS_VERSION_1_2: + minVersion = tls.VersionTLS12 + case commonpb.TLSVersion_TLS_VERSION_1_3: + minVersion = tls.VersionTLS13 + default: + return minVersion, maxVersion, fmt.Errorf("S2Av2 provided invalid MinTlsVersion: %v", x) + } + + switch x := tlsConfig.MaxTlsVersion; x { + case commonpb.TLSVersion_TLS_VERSION_1_0: + maxVersion = tls.VersionTLS10 + case commonpb.TLSVersion_TLS_VERSION_1_1: + maxVersion = tls.VersionTLS11 + case commonpb.TLSVersion_TLS_VERSION_1_2: + maxVersion = tls.VersionTLS12 + case commonpb.TLSVersion_TLS_VERSION_1_3: + maxVersion = tls.VersionTLS13 + default: + return minVersion, maxVersion, fmt.Errorf("S2Av2 provided invalid MaxTlsVersion: %v", x) + } + if minVersion > maxVersion { + return minVersion, maxVersion, errors.New("S2Av2 provided minVersion > maxVersion") + } + return minVersion, maxVersion, nil +} diff --git a/vendor/github.com/google/s2a-go/s2a.go b/vendor/github.com/google/s2a-go/s2a.go new file mode 100644 index 0000000000..1c1349de4a --- /dev/null +++ b/vendor/github.com/google/s2a-go/s2a.go @@ -0,0 +1,412 @@ +/* + * + * Copyright 2021 Google LLC + * + * 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 + * + * https://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. + * + */ + +// Package s2a provides the S2A transport credentials used by a gRPC +// application. +package s2a + +import ( + "context" + "crypto/tls" + "errors" + "fmt" + "net" + "sync" + "time" + + "github.com/golang/protobuf/proto" + "github.com/google/s2a-go/fallback" + "github.com/google/s2a-go/internal/handshaker" + "github.com/google/s2a-go/internal/handshaker/service" + "github.com/google/s2a-go/internal/tokenmanager" + "github.com/google/s2a-go/internal/v2" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/grpclog" + + commonpb "github.com/google/s2a-go/internal/proto/common_go_proto" + s2av2pb "github.com/google/s2a-go/internal/proto/v2/s2a_go_proto" +) + +const ( + s2aSecurityProtocol = "tls" + // defaultTimeout specifies the default server handshake timeout. + defaultTimeout = 30.0 * time.Second +) + +// s2aTransportCreds are the transport credentials required for establishing +// a secure connection using the S2A. They implement the +// credentials.TransportCredentials interface. +type s2aTransportCreds struct { + info *credentials.ProtocolInfo + minTLSVersion commonpb.TLSVersion + maxTLSVersion commonpb.TLSVersion + // tlsCiphersuites contains the ciphersuites used in the S2A connection. + // Note that these are currently unconfigurable. + tlsCiphersuites []commonpb.Ciphersuite + // localIdentity should only be used by the client. + localIdentity *commonpb.Identity + // localIdentities should only be used by the server. + localIdentities []*commonpb.Identity + // targetIdentities should only be used by the client. + targetIdentities []*commonpb.Identity + isClient bool + s2aAddr string + ensureProcessSessionTickets *sync.WaitGroup +} + +// NewClientCreds returns a client-side transport credentials object that uses +// the S2A to establish a secure connection with a server. +func NewClientCreds(opts *ClientOptions) (credentials.TransportCredentials, error) { + if opts == nil { + return nil, errors.New("nil client options") + } + var targetIdentities []*commonpb.Identity + for _, targetIdentity := range opts.TargetIdentities { + protoTargetIdentity, err := toProtoIdentity(targetIdentity) + if err != nil { + return nil, err + } + targetIdentities = append(targetIdentities, protoTargetIdentity) + } + localIdentity, err := toProtoIdentity(opts.LocalIdentity) + if err != nil { + return nil, err + } + if opts.EnableLegacyMode { + return &s2aTransportCreds{ + info: &credentials.ProtocolInfo{ + SecurityProtocol: s2aSecurityProtocol, + }, + minTLSVersion: commonpb.TLSVersion_TLS1_3, + maxTLSVersion: commonpb.TLSVersion_TLS1_3, + tlsCiphersuites: []commonpb.Ciphersuite{ + commonpb.Ciphersuite_AES_128_GCM_SHA256, + commonpb.Ciphersuite_AES_256_GCM_SHA384, + commonpb.Ciphersuite_CHACHA20_POLY1305_SHA256, + }, + localIdentity: localIdentity, + targetIdentities: targetIdentities, + isClient: true, + s2aAddr: opts.S2AAddress, + ensureProcessSessionTickets: opts.EnsureProcessSessionTickets, + }, nil + } + verificationMode := getVerificationMode(opts.VerificationMode) + var fallbackFunc fallback.ClientHandshake + if opts.FallbackOpts != nil && opts.FallbackOpts.FallbackClientHandshakeFunc != nil { + fallbackFunc = opts.FallbackOpts.FallbackClientHandshakeFunc + } + return v2.NewClientCreds(opts.S2AAddress, localIdentity, verificationMode, fallbackFunc, opts.getS2AStream, opts.serverAuthorizationPolicy) +} + +// NewServerCreds returns a server-side transport credentials object that uses +// the S2A to establish a secure connection with a client. +func NewServerCreds(opts *ServerOptions) (credentials.TransportCredentials, error) { + if opts == nil { + return nil, errors.New("nil server options") + } + var localIdentities []*commonpb.Identity + for _, localIdentity := range opts.LocalIdentities { + protoLocalIdentity, err := toProtoIdentity(localIdentity) + if err != nil { + return nil, err + } + localIdentities = append(localIdentities, protoLocalIdentity) + } + if opts.EnableLegacyMode { + return &s2aTransportCreds{ + info: &credentials.ProtocolInfo{ + SecurityProtocol: s2aSecurityProtocol, + }, + minTLSVersion: commonpb.TLSVersion_TLS1_3, + maxTLSVersion: commonpb.TLSVersion_TLS1_3, + tlsCiphersuites: []commonpb.Ciphersuite{ + commonpb.Ciphersuite_AES_128_GCM_SHA256, + commonpb.Ciphersuite_AES_256_GCM_SHA384, + commonpb.Ciphersuite_CHACHA20_POLY1305_SHA256, + }, + localIdentities: localIdentities, + isClient: false, + s2aAddr: opts.S2AAddress, + }, nil + } + verificationMode := getVerificationMode(opts.VerificationMode) + return v2.NewServerCreds(opts.S2AAddress, localIdentities, verificationMode, opts.getS2AStream) +} + +// ClientHandshake initiates a client-side TLS handshake using the S2A. +func (c *s2aTransportCreds) ClientHandshake(ctx context.Context, serverAuthority string, rawConn net.Conn) (net.Conn, credentials.AuthInfo, error) { + if !c.isClient { + return nil, nil, errors.New("client handshake called using server transport credentials") + } + + // Connect to the S2A. + hsConn, err := service.Dial(c.s2aAddr) + if err != nil { + grpclog.Infof("Failed to connect to S2A: %v", err) + return nil, nil, err + } + + var cancel context.CancelFunc + ctx, cancel = context.WithCancel(ctx) + defer cancel() + + opts := &handshaker.ClientHandshakerOptions{ + MinTLSVersion: c.minTLSVersion, + MaxTLSVersion: c.maxTLSVersion, + TLSCiphersuites: c.tlsCiphersuites, + TargetIdentities: c.targetIdentities, + LocalIdentity: c.localIdentity, + TargetName: serverAuthority, + EnsureProcessSessionTickets: c.ensureProcessSessionTickets, + } + chs, err := handshaker.NewClientHandshaker(ctx, hsConn, rawConn, c.s2aAddr, opts) + if err != nil { + grpclog.Infof("Call to handshaker.NewClientHandshaker failed: %v", err) + return nil, nil, err + } + defer func() { + if err != nil { + if closeErr := chs.Close(); closeErr != nil { + grpclog.Infof("Close failed unexpectedly: %v", err) + err = fmt.Errorf("%v: close unexpectedly failed: %v", err, closeErr) + } + } + }() + + secConn, authInfo, err := chs.ClientHandshake(context.Background()) + if err != nil { + grpclog.Infof("Handshake failed: %v", err) + return nil, nil, err + } + return secConn, authInfo, nil +} + +// ServerHandshake initiates a server-side TLS handshake using the S2A. +func (c *s2aTransportCreds) ServerHandshake(rawConn net.Conn) (net.Conn, credentials.AuthInfo, error) { + if c.isClient { + return nil, nil, errors.New("server handshake called using client transport credentials") + } + + // Connect to the S2A. + hsConn, err := service.Dial(c.s2aAddr) + if err != nil { + grpclog.Infof("Failed to connect to S2A: %v", err) + return nil, nil, err + } + + ctx, cancel := context.WithTimeout(context.Background(), defaultTimeout) + defer cancel() + + opts := &handshaker.ServerHandshakerOptions{ + MinTLSVersion: c.minTLSVersion, + MaxTLSVersion: c.maxTLSVersion, + TLSCiphersuites: c.tlsCiphersuites, + LocalIdentities: c.localIdentities, + } + shs, err := handshaker.NewServerHandshaker(ctx, hsConn, rawConn, c.s2aAddr, opts) + if err != nil { + grpclog.Infof("Call to handshaker.NewServerHandshaker failed: %v", err) + return nil, nil, err + } + defer func() { + if err != nil { + if closeErr := shs.Close(); closeErr != nil { + grpclog.Infof("Close failed unexpectedly: %v", err) + err = fmt.Errorf("%v: close unexpectedly failed: %v", err, closeErr) + } + } + }() + + secConn, authInfo, err := shs.ServerHandshake(context.Background()) + if err != nil { + grpclog.Infof("Handshake failed: %v", err) + return nil, nil, err + } + return secConn, authInfo, nil +} + +func (c *s2aTransportCreds) Info() credentials.ProtocolInfo { + return *c.info +} + +func (c *s2aTransportCreds) Clone() credentials.TransportCredentials { + info := *c.info + var localIdentity *commonpb.Identity + if c.localIdentity != nil { + localIdentity = proto.Clone(c.localIdentity).(*commonpb.Identity) + } + var localIdentities []*commonpb.Identity + if c.localIdentities != nil { + localIdentities = make([]*commonpb.Identity, len(c.localIdentities)) + for i, localIdentity := range c.localIdentities { + localIdentities[i] = proto.Clone(localIdentity).(*commonpb.Identity) + } + } + var targetIdentities []*commonpb.Identity + if c.targetIdentities != nil { + targetIdentities = make([]*commonpb.Identity, len(c.targetIdentities)) + for i, targetIdentity := range c.targetIdentities { + targetIdentities[i] = proto.Clone(targetIdentity).(*commonpb.Identity) + } + } + return &s2aTransportCreds{ + info: &info, + minTLSVersion: c.minTLSVersion, + maxTLSVersion: c.maxTLSVersion, + tlsCiphersuites: c.tlsCiphersuites, + localIdentity: localIdentity, + localIdentities: localIdentities, + targetIdentities: targetIdentities, + isClient: c.isClient, + s2aAddr: c.s2aAddr, + } +} + +func (c *s2aTransportCreds) OverrideServerName(serverNameOverride string) error { + c.info.ServerName = serverNameOverride + return nil +} + +// TLSClientConfigOptions specifies parameters for creating client TLS config. +type TLSClientConfigOptions struct { + // ServerName is required by s2a as the expected name when verifying the hostname found in server's certificate. + // tlsConfig, _ := factory.Build(ctx, &s2a.TLSClientConfigOptions{ + // ServerName: "example.com", + // }) + ServerName string +} + +// TLSClientConfigFactory defines the interface for a client TLS config factory. +type TLSClientConfigFactory interface { + Build(ctx context.Context, opts *TLSClientConfigOptions) (*tls.Config, error) +} + +// NewTLSClientConfigFactory returns an instance of s2aTLSClientConfigFactory. +func NewTLSClientConfigFactory(opts *ClientOptions) (TLSClientConfigFactory, error) { + if opts == nil { + return nil, fmt.Errorf("opts must be non-nil") + } + if opts.EnableLegacyMode { + return nil, fmt.Errorf("NewTLSClientConfigFactory only supports S2Av2") + } + tokenManager, err := tokenmanager.NewSingleTokenAccessTokenManager() + if err != nil { + // The only possible error is: access token not set in the environment, + // which is okay in environments other than serverless. + grpclog.Infof("Access token manager not initialized: %v", err) + return &s2aTLSClientConfigFactory{ + s2av2Address: opts.S2AAddress, + tokenManager: nil, + verificationMode: getVerificationMode(opts.VerificationMode), + serverAuthorizationPolicy: opts.serverAuthorizationPolicy, + }, nil + } + return &s2aTLSClientConfigFactory{ + s2av2Address: opts.S2AAddress, + tokenManager: tokenManager, + verificationMode: getVerificationMode(opts.VerificationMode), + serverAuthorizationPolicy: opts.serverAuthorizationPolicy, + }, nil +} + +type s2aTLSClientConfigFactory struct { + s2av2Address string + tokenManager tokenmanager.AccessTokenManager + verificationMode s2av2pb.ValidatePeerCertificateChainReq_VerificationMode + serverAuthorizationPolicy []byte +} + +func (f *s2aTLSClientConfigFactory) Build( + ctx context.Context, opts *TLSClientConfigOptions) (*tls.Config, error) { + serverName := "" + if opts != nil && opts.ServerName != "" { + serverName = opts.ServerName + } + return v2.NewClientTLSConfig(ctx, f.s2av2Address, f.tokenManager, f.verificationMode, serverName, f.serverAuthorizationPolicy) +} + +func getVerificationMode(verificationMode VerificationModeType) s2av2pb.ValidatePeerCertificateChainReq_VerificationMode { + switch verificationMode { + case ConnectToGoogle: + return s2av2pb.ValidatePeerCertificateChainReq_CONNECT_TO_GOOGLE + case Spiffe: + return s2av2pb.ValidatePeerCertificateChainReq_SPIFFE + default: + return s2av2pb.ValidatePeerCertificateChainReq_UNSPECIFIED + } +} + +// NewS2ADialTLSContextFunc returns a dialer which establishes an MTLS connection using S2A. +// Example use with http.RoundTripper: +// +// dialTLSContext := s2a.NewS2aDialTLSContextFunc(&s2a.ClientOptions{ +// S2AAddress: s2aAddress, // required +// }) +// transport := http.DefaultTransport +// transport.DialTLSContext = dialTLSContext +func NewS2ADialTLSContextFunc(opts *ClientOptions) func(ctx context.Context, network, addr string) (net.Conn, error) { + + return func(ctx context.Context, network, addr string) (net.Conn, error) { + + fallback := func(err error) (net.Conn, error) { + if opts.FallbackOpts != nil && opts.FallbackOpts.FallbackDialer != nil && + opts.FallbackOpts.FallbackDialer.Dialer != nil && opts.FallbackOpts.FallbackDialer.ServerAddr != "" { + fbDialer := opts.FallbackOpts.FallbackDialer + grpclog.Infof("fall back to dial: %s", fbDialer.ServerAddr) + fbConn, fbErr := fbDialer.Dialer.DialContext(ctx, network, fbDialer.ServerAddr) + if fbErr != nil { + return nil, fmt.Errorf("error fallback to %s: %v; S2A error: %w", fbDialer.ServerAddr, fbErr, err) + } + return fbConn, nil + } + return nil, err + } + + factory, err := NewTLSClientConfigFactory(opts) + if err != nil { + grpclog.Infof("error creating S2A client config factory: %v", err) + return fallback(err) + } + + serverName, _, err := net.SplitHostPort(addr) + if err != nil { + serverName = addr + } + timeoutCtx, cancel := context.WithTimeout(ctx, v2.GetS2ATimeout()) + defer cancel() + s2aTLSConfig, err := factory.Build(timeoutCtx, &TLSClientConfigOptions{ + ServerName: serverName, + }) + if err != nil { + grpclog.Infof("error building S2A TLS config: %v", err) + return fallback(err) + } + + s2aDialer := &tls.Dialer{ + Config: s2aTLSConfig, + } + c, err := s2aDialer.DialContext(ctx, network, addr) + if err != nil { + grpclog.Infof("error dialing with S2A to %s: %v", addr, err) + return fallback(err) + } + grpclog.Infof("success dialing MTLS to %s with S2A", addr) + return c, nil + } +} diff --git a/vendor/github.com/google/s2a-go/s2a_options.go b/vendor/github.com/google/s2a-go/s2a_options.go new file mode 100644 index 0000000000..94feafb9cf --- /dev/null +++ b/vendor/github.com/google/s2a-go/s2a_options.go @@ -0,0 +1,208 @@ +/* + * + * Copyright 2021 Google LLC + * + * 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 + * + * https://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. + * + */ + +package s2a + +import ( + "context" + "crypto/tls" + "errors" + "sync" + + "github.com/google/s2a-go/fallback" + "github.com/google/s2a-go/stream" + + s2apb "github.com/google/s2a-go/internal/proto/common_go_proto" +) + +// Identity is the interface for S2A identities. +type Identity interface { + // Name returns the name of the identity. + Name() string +} + +type spiffeID struct { + spiffeID string +} + +func (s *spiffeID) Name() string { return s.spiffeID } + +// NewSpiffeID creates a SPIFFE ID from id. +func NewSpiffeID(id string) Identity { + return &spiffeID{spiffeID: id} +} + +type hostname struct { + hostname string +} + +func (h *hostname) Name() string { return h.hostname } + +// NewHostname creates a hostname from name. +func NewHostname(name string) Identity { + return &hostname{hostname: name} +} + +type uid struct { + uid string +} + +func (h *uid) Name() string { return h.uid } + +// NewUID creates a UID from name. +func NewUID(name string) Identity { + return &uid{uid: name} +} + +// VerificationModeType specifies the mode that S2A must use to verify the peer +// certificate chain. +type VerificationModeType int + +// Three types of verification modes. +const ( + Unspecified = iota + ConnectToGoogle + Spiffe +) + +// ClientOptions contains the client-side options used to establish a secure +// channel using the S2A handshaker service. +type ClientOptions struct { + // TargetIdentities contains a list of allowed server identities. One of the + // target identities should match the peer identity in the handshake + // result; otherwise, the handshake fails. + TargetIdentities []Identity + // LocalIdentity is the local identity of the client application. If none is + // provided, then the S2A will choose the default identity, if one exists. + LocalIdentity Identity + // S2AAddress is the address of the S2A. + S2AAddress string + // EnsureProcessSessionTickets waits for all session tickets to be sent to + // S2A before a process completes. + // + // This functionality is crucial for processes that complete very soon after + // using S2A to establish a TLS connection, but it can be ignored for longer + // lived processes. + // + // Usage example: + // func main() { + // var ensureProcessSessionTickets sync.WaitGroup + // clientOpts := &s2a.ClientOptions{ + // EnsureProcessSessionTickets: &ensureProcessSessionTickets, + // // Set other members. + // } + // creds, _ := s2a.NewClientCreds(clientOpts) + // conn, _ := grpc.Dial(serverAddr, grpc.WithTransportCredentials(creds)) + // defer conn.Close() + // + // // Make RPC call. + // + // // The process terminates right after the RPC call ends. + // // ensureProcessSessionTickets can be used to ensure resumption + // // tickets are fully processed. If the process is long-lived, using + // // ensureProcessSessionTickets is not necessary. + // ensureProcessSessionTickets.Wait() + // } + EnsureProcessSessionTickets *sync.WaitGroup + // If true, enables the use of legacy S2Av1. + EnableLegacyMode bool + // VerificationMode specifies the mode that S2A must use to verify the + // peer certificate chain. + VerificationMode VerificationModeType + + // Optional fallback after dialing with S2A fails. + FallbackOpts *FallbackOptions + + // Generates an S2AStream interface for talking to the S2A server. + getS2AStream func(ctx context.Context, s2av2Address string) (stream.S2AStream, error) + + // Serialized user specified policy for server authorization. + serverAuthorizationPolicy []byte +} + +// FallbackOptions prescribes the fallback logic that should be taken if the application fails to connect with S2A. +type FallbackOptions struct { + // FallbackClientHandshakeFunc is used to specify fallback behavior when calling s2a.NewClientCreds(). + // It will be called by ClientHandshake function, after handshake with S2A fails. + // s2a.NewClientCreds() ignores the other FallbackDialer field. + FallbackClientHandshakeFunc fallback.ClientHandshake + + // FallbackDialer is used to specify fallback behavior when calling s2a.NewS2aDialTLSContextFunc(). + // It passes in a custom fallback dialer and server address to use after dialing with S2A fails. + // s2a.NewS2aDialTLSContextFunc() ignores the other FallbackClientHandshakeFunc field. + FallbackDialer *FallbackDialer +} + +// FallbackDialer contains a fallback tls.Dialer and a server address to connect to. +type FallbackDialer struct { + // Dialer specifies a fallback tls.Dialer. + Dialer *tls.Dialer + // ServerAddr is used by Dialer to establish fallback connection. + ServerAddr string +} + +// DefaultClientOptions returns the default client options. +func DefaultClientOptions(s2aAddress string) *ClientOptions { + return &ClientOptions{ + S2AAddress: s2aAddress, + VerificationMode: ConnectToGoogle, + } +} + +// ServerOptions contains the server-side options used to establish a secure +// channel using the S2A handshaker service. +type ServerOptions struct { + // LocalIdentities is the list of local identities that may be assumed by + // the server. If no local identity is specified, then the S2A chooses a + // default local identity, if one exists. + LocalIdentities []Identity + // S2AAddress is the address of the S2A. + S2AAddress string + // If true, enables the use of legacy S2Av1. + EnableLegacyMode bool + // VerificationMode specifies the mode that S2A must use to verify the + // peer certificate chain. + VerificationMode VerificationModeType + + // Generates an S2AStream interface for talking to the S2A server. + getS2AStream func(ctx context.Context, s2av2Address string) (stream.S2AStream, error) +} + +// DefaultServerOptions returns the default server options. +func DefaultServerOptions(s2aAddress string) *ServerOptions { + return &ServerOptions{ + S2AAddress: s2aAddress, + VerificationMode: ConnectToGoogle, + } +} + +func toProtoIdentity(identity Identity) (*s2apb.Identity, error) { + if identity == nil { + return nil, nil + } + switch id := identity.(type) { + case *spiffeID: + return &s2apb.Identity{IdentityOneof: &s2apb.Identity_SpiffeId{SpiffeId: id.Name()}}, nil + case *hostname: + return &s2apb.Identity{IdentityOneof: &s2apb.Identity_Hostname{Hostname: id.Name()}}, nil + case *uid: + return &s2apb.Identity{IdentityOneof: &s2apb.Identity_Uid{Uid: id.Name()}}, nil + default: + return nil, errors.New("unrecognized identity type") + } +} diff --git a/vendor/github.com/google/s2a-go/s2a_utils.go b/vendor/github.com/google/s2a-go/s2a_utils.go new file mode 100644 index 0000000000..d649cc4614 --- /dev/null +++ b/vendor/github.com/google/s2a-go/s2a_utils.go @@ -0,0 +1,79 @@ +/* + * + * Copyright 2021 Google LLC + * + * 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 + * + * https://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. + * + */ + +package s2a + +import ( + "context" + "errors" + + commonpb "github.com/google/s2a-go/internal/proto/common_go_proto" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/peer" +) + +// AuthInfo exposes security information from the S2A to the application. +type AuthInfo interface { + // AuthType returns the authentication type. + AuthType() string + // ApplicationProtocol returns the application protocol, e.g. "grpc". + ApplicationProtocol() string + // TLSVersion returns the TLS version negotiated during the handshake. + TLSVersion() commonpb.TLSVersion + // Ciphersuite returns the ciphersuite negotiated during the handshake. + Ciphersuite() commonpb.Ciphersuite + // PeerIdentity returns the authenticated identity of the peer. + PeerIdentity() *commonpb.Identity + // LocalIdentity returns the local identity of the application used during + // session setup. + LocalIdentity() *commonpb.Identity + // PeerCertFingerprint returns the SHA256 hash of the peer certificate used in + // the S2A handshake. + PeerCertFingerprint() []byte + // LocalCertFingerprint returns the SHA256 hash of the local certificate used + // in the S2A handshake. + LocalCertFingerprint() []byte + // IsHandshakeResumed returns true if a cached session was used to resume + // the handshake. + IsHandshakeResumed() bool + // SecurityLevel returns the security level of the connection. + SecurityLevel() credentials.SecurityLevel +} + +// AuthInfoFromPeer extracts the authinfo.S2AAuthInfo object from the given +// peer, if it exists. This API should be used by gRPC clients after +// obtaining a peer object using the grpc.Peer() CallOption. +func AuthInfoFromPeer(p *peer.Peer) (AuthInfo, error) { + s2aAuthInfo, ok := p.AuthInfo.(AuthInfo) + if !ok { + return nil, errors.New("no S2AAuthInfo found in Peer") + } + return s2aAuthInfo, nil +} + +// AuthInfoFromContext extracts the authinfo.S2AAuthInfo object from the given +// context, if it exists. This API should be used by gRPC server RPC handlers +// to get information about the peer. On the client-side, use the grpc.Peer() +// CallOption and the AuthInfoFromPeer function. +func AuthInfoFromContext(ctx context.Context) (AuthInfo, error) { + p, ok := peer.FromContext(ctx) + if !ok { + return nil, errors.New("no Peer found in Context") + } + return AuthInfoFromPeer(p) +} diff --git a/vendor/github.com/google/s2a-go/stream/s2a_stream.go b/vendor/github.com/google/s2a-go/stream/s2a_stream.go new file mode 100644 index 0000000000..584bf32b1c --- /dev/null +++ b/vendor/github.com/google/s2a-go/stream/s2a_stream.go @@ -0,0 +1,34 @@ +/* + * + * Copyright 2023 Google LLC + * + * 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 + * + * https://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. + * + */ + +// Package stream provides an interface for bidirectional streaming to the S2A server. +package stream + +import ( + s2av2pb "github.com/google/s2a-go/internal/proto/v2/s2a_go_proto" +) + +// S2AStream defines the operation for communicating with the S2A server over a bidirectional stream. +type S2AStream interface { + // Send sends the message to the S2A server. + Send(*s2av2pb.SessionReq) error + // Recv receives the message from the S2A server. + Recv() (*s2av2pb.SessionResp, error) + // Closes the channel to the S2A server. + CloseSend() error +} diff --git a/vendor/github.com/google/s2a-go/testdata/client_cert.pem b/vendor/github.com/google/s2a-go/testdata/client_cert.pem new file mode 100644 index 0000000000..493a5a2648 --- /dev/null +++ b/vendor/github.com/google/s2a-go/testdata/client_cert.pem @@ -0,0 +1,24 @@ +-----BEGIN CERTIFICATE----- +MIID8TCCAtmgAwIBAgIUKXNlBRVe6UepjQUijIFPZBd/4qYwDQYJKoZIhvcNAQEL +BQAwgYcxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTESMBAGA1UEBwwJU3Vubnl2 +YWxlMRAwDgYDVQQKDAdDb21wYW55MREwDwYDVQQLDAhEaXZpc2lvbjEWMBQGA1UE +AwwNczJhX3Rlc3RfY2VydDEaMBgGCSqGSIb3DQEJARYLeHl6QHh5ei5jb20wHhcN +MjIwNTMxMjAwMzE1WhcNNDIwNTI2MjAwMzE1WjCBhzELMAkGA1UEBhMCVVMxCzAJ +BgNVBAgMAkNBMRIwEAYDVQQHDAlTdW5ueXZhbGUxEDAOBgNVBAoMB0NvbXBhbnkx +ETAPBgNVBAsMCERpdmlzaW9uMRYwFAYDVQQDDA1zMmFfdGVzdF9jZXJ0MRowGAYJ +KoZIhvcNAQkBFgt4eXpAeHl6LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBAOOFuIucH7XXfohGxKd3uR/ihUA/LdduR9I8kfpUEbq5BOt8xZe5/Yn9 +a1ozEHVW6cOAbHbnwAR8tkSgZ/t42QIA2k77HWU1Jh2xiEIsJivo3imm4/kZWuR0 +OqPh7MhzxpR/hvNwpI5mJsAVBWFMa5KtecFZLnyZtwHylrRN1QXzuLrOxuKFufK3 +RKbTABScn5RbZL976H/jgfSeXrbt242NrIoBnVe6fRbekbq2DQ6zFArbQMUgHjHK +P0UqBgdr1QmHfi9KytFyx9BTP3gXWnWIu+bY7/v7qKJMHFwGETo+dCLWYevJL316 +HnLfhApDMfP8U+Yv/y1N/YvgaSOSlEcCAwEAAaNTMFEwHQYDVR0OBBYEFKhAU4nu +0h/lrnggbIGvx4ej0WklMB8GA1UdIwQYMBaAFKhAU4nu0h/lrnggbIGvx4ej0Wkl +MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAE/6NghzQ5fu6yR6 +EHKbj/YMrFdT7aGn5n2sAf7wJ33LIhiFHkpWBsVlm7rDtZtwhe891ZK/P60anlg9 +/P0Ua53tSRVRmCvTnEbXWOVMN4is6MsR7BlmzUxl4AtIn7jbeifEwRL7B4xDYmdA +QrQnsqoz45dLgS5xK4WDqXATP09Q91xQDuhud/b+A4jrvgwFASmL7rMIZbp4f1JQ +nlnl/9VoTBQBvJiWkDUtQDMpRLtauddEkv4AGz75p5IspXWD6cOemuh2iQec11xD +X20rs2WZbAcAiUa3nmy8OKYw435vmpj8gp39WYbX/Yx9TymrFFbVY92wYn+quTco +pKklVz0= +-----END CERTIFICATE----- diff --git a/vendor/github.com/google/s2a-go/testdata/client_key.pem b/vendor/github.com/google/s2a-go/testdata/client_key.pem new file mode 100644 index 0000000000..55a7f10c74 --- /dev/null +++ b/vendor/github.com/google/s2a-go/testdata/client_key.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEogIBAAKCAQEA44W4i5wftdd+iEbEp3e5H+KFQD8t125H0jyR+lQRurkE63zF +l7n9if1rWjMQdVbpw4BsdufABHy2RKBn+3jZAgDaTvsdZTUmHbGIQiwmK+jeKabj ++Rla5HQ6o+HsyHPGlH+G83CkjmYmwBUFYUxrkq15wVkufJm3AfKWtE3VBfO4us7G +4oW58rdEptMAFJyflFtkv3vof+OB9J5etu3bjY2sigGdV7p9Ft6RurYNDrMUCttA +xSAeMco/RSoGB2vVCYd+L0rK0XLH0FM/eBdadYi75tjv+/uookwcXAYROj50ItZh +68kvfXoect+ECkMx8/xT5i//LU39i+BpI5KURwIDAQABAoIBABgyjo/6iLzUMFbZ +/+w3pW6orrdIgN2akvTfED9pVYFgUA+jc3hRhY95bkNnjuaL2cy7Cc4Tk65mfRQL +Y0OxdJLr+EvSFSxAXM9npDA1ddHRsF8JqtFBSxNk8R+g1Yf0GDiO35Fgd3/ViWWA +VtQkRoSRApP3oiQKTRZd8H04keFR+PvmDk/Lq11l3Kc24A1PevKIPX1oI990ggw9 +9i4uSV+cnuMxmcI9xxJtgwdDFdjr39l2arLOHr4s6LGoV2IOdXHNlv5xRqWUZ0FH +MDHowkLgwDrdSTnNeaVNkce14Gqx+bd4hNaLCdKXMpedBTEmrut3f3hdV1kKjaKt +aqRYr8ECgYEA/YDGZY2jvFoHHBywlqmEMFrrCvQGH51m5R1Ntpkzr+Rh3YCmrpvq +xgwJXING0PUw3dz+xrH5lJICrfNE5Kt3fPu1rAEy+13mYsNowghtUq2Rtu0Hsjjx +2E3Bf8vEB6RNBMmGkUpTTIAroGF5tpJoRvfnWax+k4pFdrKYFtyZdNcCgYEA5cNv +EPltvOobjTXlUmtVP3n27KZN2aXexTcagLzRxE9CV4cYySENl3KuOMmccaZpIl6z +aHk6BT4X+M0LqElNUczrInfVqI+SGAFLGy7W6CJaqSr6cpyFUP/fosKpm6wKGgLq +udHfpvz5rckhKd8kJxFLvhGOK9yN5qpzih0gfhECgYAJfwRvk3G5wYmYpP58dlcs +VIuPenqsPoI3PPTHTU/hW+XKnWIhElgmGRdUrto9Q6IT/Y5RtSMLTLjq+Tzwb/fm +56rziYv2XJsfwgAvnI8z1Kqrto9ePsHYf3krJ1/thVsZPc9bq/QY3ohD1sLvcuaT +GgBBnLOVJU3a12/ZE2RwOwKBgF0csWMAoj8/5IB6if+3ral2xOGsl7oPZVMo/J2V +Z7EVqb4M6rd/pKFugTpUQgkwtkSOekhpcGD1hAN5HTNK2YG/+L5UMAsKe9sskwJm +HgOfAHy0BSDzW3ey6i9skg2bT9Cww+0gJ3Hl7U1HSCBO5LjMYpSZSrNtwzfqdb5Q +BX3xAoGARZdR28Ej3+/+0+fz47Yu2h4z0EI/EbrudLOWY936jIeAVwHckI3+BuqH +qR4poj1gfbnMxNuI9UzIXzjEmGewx9kDZ7IYnvloZKqoVQODO5GlKF2ja6IcMNlh +GCNdD6PSAS6HcmalmWo9sj+1YMkrl+GJikKZqVBHrHNwMGAG67w= +-----END RSA PRIVATE KEY----- diff --git a/vendor/github.com/google/s2a-go/testdata/server_cert.pem b/vendor/github.com/google/s2a-go/testdata/server_cert.pem new file mode 100644 index 0000000000..0f98322c72 --- /dev/null +++ b/vendor/github.com/google/s2a-go/testdata/server_cert.pem @@ -0,0 +1,24 @@ +-----BEGIN CERTIFICATE----- +MIID8TCCAtmgAwIBAgIUKCoDuLtiZXvhsBY2RoDm0ugizJ8wDQYJKoZIhvcNAQEL +BQAwgYcxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTESMBAGA1UEBwwJU3Vubnl2 +YWxlMRAwDgYDVQQKDAdDb21wYW55MREwDwYDVQQLDAhEaXZpc2lvbjEWMBQGA1UE +AwwNczJhX3Rlc3RfY2VydDEaMBgGCSqGSIb3DQEJARYLeHl6QHh5ei5jb20wHhcN +MjIwNTMxMjAwODI1WhcNNDIwNTI2MjAwODI1WjCBhzELMAkGA1UEBhMCVVMxCzAJ +BgNVBAgMAkNBMRIwEAYDVQQHDAlTdW5ueXZhbGUxEDAOBgNVBAoMB0NvbXBhbnkx +ETAPBgNVBAsMCERpdmlzaW9uMRYwFAYDVQQDDA1zMmFfdGVzdF9jZXJ0MRowGAYJ +KoZIhvcNAQkBFgt4eXpAeHl6LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBAKK1++PXQ+M3hjYH/v0K4UEYl5ljzpNM1i52eQM+gFooojT87PDSaphT +fs0PXy/PTAjHBEvPhWpOpmQXfJNYzjwcCvg66hbqkv++/VTZiFLAsHagzkEz+FRJ +qT5Eq7G5FLyw1izX1uxyPN7tAEWEEg7eqsiaXD3Cq8+TYN9cjirPeF7RZF8yFCYE +xqvbo+Yc6RL6xw19iXVTfctRgQe581KQuIY5/LXo3dWDEilFdsADAe8XAEcO64es +Ow0g1UvXLnpXSE151kXBFb3sKH/ZjCecDYMCIMEb4sWLSblkSxJ5sNSmXIG4wtr2 +Qnii7CXZgnVYraQE/Jyh+NMQANuoSdMCAwEAAaNTMFEwHQYDVR0OBBYEFAyQQQuM +ab+YUQqjK8dVVOoHVFmXMB8GA1UdIwQYMBaAFAyQQQuMab+YUQqjK8dVVOoHVFmX +MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBADj0vQ6ykWhicoqR +e6VZMwlEJV7/DSvWWKBd9MUjfKye0A4565ya5lmnzP3DiD3nqGe3miqmLsXKDs+X +POqlPXTWIamP7D4MJ32XtSLwZB4ru+I+Ao/P/VngPepoRPQoBnzHe7jww0rokqxl +AZERjlbTUwUAy/BPWPSzSJZ2j0tcs6ZLDNyYzpK4ao8R9/1VmQ92Tcp3feJs1QTg +odRQc3om/AkWOwsll+oyX0UbJeHkFHiLanUPXbdh+/BkSvZJ8ynL+feSDdaurPe+ +PSfnqLtQft9/neecGRdEaQzzzSFVQUVQzTdK1Q7hA7b55b2HvIa3ktDiks+sJsYN +Dhm6uZM= +-----END CERTIFICATE----- diff --git a/vendor/github.com/google/s2a-go/testdata/server_key.pem b/vendor/github.com/google/s2a-go/testdata/server_key.pem new file mode 100644 index 0000000000..81afea783d --- /dev/null +++ b/vendor/github.com/google/s2a-go/testdata/server_key.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEAorX749dD4zeGNgf+/QrhQRiXmWPOk0zWLnZ5Az6AWiiiNPzs +8NJqmFN+zQ9fL89MCMcES8+Fak6mZBd8k1jOPBwK+DrqFuqS/779VNmIUsCwdqDO +QTP4VEmpPkSrsbkUvLDWLNfW7HI83u0ARYQSDt6qyJpcPcKrz5Ng31yOKs94XtFk +XzIUJgTGq9uj5hzpEvrHDX2JdVN9y1GBB7nzUpC4hjn8tejd1YMSKUV2wAMB7xcA +Rw7rh6w7DSDVS9cueldITXnWRcEVvewof9mMJ5wNgwIgwRvixYtJuWRLEnmw1KZc +gbjC2vZCeKLsJdmCdVitpAT8nKH40xAA26hJ0wIDAQABAoIBACaNR+lsD8G+XiZf +LqN1+HkcAo9tfnyYMAdCOtnx7SdviT9Uzi8hK/B7mAeuJLeHPlS2EuaDfPD7QaFl +jza6S+MiIdc+3kgfvESsVAnOoOY6kZUJ9NSuI6CU82y1iJjLaYZrv9NQMLRFPPb0 +4KOX709mosB1EnXvshW0rbc+jtDFhrm1SxMt+k9TuzmMxjbOeW4LOLXPgU8X1T3Q +Xy0hMZZtcgBs9wFIo8yCtmOixax9pnFE8rRltgDxTodn9LLdz1FieyntNgDksZ0P +nt4kV7Mqly7ELaea+Foaj244mKsesic2e3GhAlMRLun/VSunSf7mOCxfpITB8dp1 +drDhOYECgYEA19151dVxRcviuovN6Dar+QszMTnU8pDJ8BjLFjXjP/hNBBwMTHDE +duMuWk2qnwZqMooI/shxrF/ufmTgS0CFrh2+ANBZu27vWConJNXcyNtdigI4wt50 +L0Y2qcZn2mg67qFXHwoR3QNwrwnPwEjRXA09at9CSRZzcwDQ0ETXhYsCgYEAwPaG +06QdK8Zyly7TTzZJwxzv9uGiqzodmGtX6NEKjgij2JaCxHpukqZBJoqa0jKeK1cm +eNVkOvT5ff9TMzarSHQLr3pZen2/oVLb5gaFkbcJt/klv9Fd+ZRilHY3i6QwS6pD +uMiPOWS4DrLHDRVoVlAZTDjT1RVwwTs+P2NhJdkCgYEAsriXysbxBYyMp05gqEW7 +lHIFbFgpSrs9th+Q5U6wW6JEgYaHWDJ1NslY80MiZI93FWjbkbZ7BvBWESeL3EIL +a+EMErht0pVCbIhZ6FF4foPAqia0wAJVx14mm+G80kNBp5jE/NnleEsE3KcO7nBb +hg8gLn+x7bk81JZ0TDrzBYkCgYEAuQKluv47SeF3tSScTfKLPpvcKCWmxe1uutkQ +7JShPhVioyOMNb39jnYBOWbjkm4d4QgqRuiytSR0oi3QI+Ziy5EYMyNn713qAk9j +r2TJZDDPDKnBW+zt4YI4EohWMXk3JRUW4XDKggjjwJQA7bZ812TtHHvP/xoThfG7 +eSNb3eECgYBw6ssgCtMrdvQiEmjKVX/9yI38mvC2kSGyzbrQnGUfgqRGomRpeZuD +B5E3kysA4td5pT5lvcLgSW0TbOz+YbiriXjwOihPIelCvc9gE2eOUI71/byUWPFz +7u5F/xQ4NaGr5suLF+lBC6h7pSbM4El9lIHQAQadpuEdzHqrw+hs3g== +-----END RSA PRIVATE KEY----- diff --git a/vendor/github.com/googleapis/gax-go/v2/.release-please-manifest.json b/vendor/github.com/googleapis/gax-go/v2/.release-please-manifest.json index d88960b7ef..91d60a809f 100644 --- a/vendor/github.com/googleapis/gax-go/v2/.release-please-manifest.json +++ b/vendor/github.com/googleapis/gax-go/v2/.release-please-manifest.json @@ -1,3 +1,3 @@ { - "v2": "2.7.0" + "v2": "2.11.0" } diff --git a/vendor/github.com/googleapis/gax-go/v2/CHANGES.md b/vendor/github.com/googleapis/gax-go/v2/CHANGES.md index b75170f222..e17b196f6c 100644 --- a/vendor/github.com/googleapis/gax-go/v2/CHANGES.md +++ b/vendor/github.com/googleapis/gax-go/v2/CHANGES.md @@ -1,5 +1,57 @@ # Changelog +## [2.11.0](https://github.com/googleapis/gax-go/compare/v2.10.0...v2.11.0) (2023-06-13) + + +### Features + +* **v2:** add GoVersion package variable ([#283](https://github.com/googleapis/gax-go/issues/283)) ([26553cc](https://github.com/googleapis/gax-go/commit/26553ccadb4016b189881f52e6c253b68bb3e3d5)) + + +### Bug Fixes + +* **v2:** handle space in non-devel go version ([#288](https://github.com/googleapis/gax-go/issues/288)) ([fd7bca0](https://github.com/googleapis/gax-go/commit/fd7bca029a1c5e63def8f0a5fd1ec3f725d92f75)) + +## [2.10.0](https://github.com/googleapis/gax-go/compare/v2.9.1...v2.10.0) (2023-05-30) + + +### Features + +* update dependencies ([#280](https://github.com/googleapis/gax-go/issues/280)) ([4514281](https://github.com/googleapis/gax-go/commit/4514281058590f3637c36bfd49baa65c4d3cfb21)) + +## [2.9.1](https://github.com/googleapis/gax-go/compare/v2.9.0...v2.9.1) (2023-05-23) + + +### Bug Fixes + +* **v2:** drop cloud lro test dep ([#276](https://github.com/googleapis/gax-go/issues/276)) ([c67eeba](https://github.com/googleapis/gax-go/commit/c67eeba0f10a3294b1d93c1b8fbe40211a55ae5f)), refs [#270](https://github.com/googleapis/gax-go/issues/270) + +## [2.9.0](https://github.com/googleapis/gax-go/compare/v2.8.0...v2.9.0) (2023-05-22) + + +### Features + +* **apierror:** add method to return HTTP status code conditionally ([#274](https://github.com/googleapis/gax-go/issues/274)) ([5874431](https://github.com/googleapis/gax-go/commit/587443169acd10f7f86d1989dc8aaf189e645e98)), refs [#229](https://github.com/googleapis/gax-go/issues/229) + + +### Documentation + +* add ref to usage with clients ([#272](https://github.com/googleapis/gax-go/issues/272)) ([ea4d72d](https://github.com/googleapis/gax-go/commit/ea4d72d514beba4de450868b5fb028601a29164e)), refs [#228](https://github.com/googleapis/gax-go/issues/228) + +## [2.8.0](https://github.com/googleapis/gax-go/compare/v2.7.1...v2.8.0) (2023-03-15) + + +### Features + +* **v2:** add WithTimeout option ([#259](https://github.com/googleapis/gax-go/issues/259)) ([9a8da43](https://github.com/googleapis/gax-go/commit/9a8da43693002448b1e8758023699387481866d1)) + +## [2.7.1](https://github.com/googleapis/gax-go/compare/v2.7.0...v2.7.1) (2023-03-06) + + +### Bug Fixes + +* **v2/apierror:** return Unknown GRPCStatus when err source is HTTP ([#260](https://github.com/googleapis/gax-go/issues/260)) ([043b734](https://github.com/googleapis/gax-go/commit/043b73437a240a91229207fb3ee52a9935a36f23)), refs [#254](https://github.com/googleapis/gax-go/issues/254) + ## [2.7.0](https://github.com/googleapis/gax-go/compare/v2.6.0...v2.7.0) (2022-11-02) diff --git a/vendor/github.com/googleapis/gax-go/v2/apierror/apierror.go b/vendor/github.com/googleapis/gax-go/v2/apierror/apierror.go index aa6be1304f..d785a065ca 100644 --- a/vendor/github.com/googleapis/gax-go/v2/apierror/apierror.go +++ b/vendor/github.com/googleapis/gax-go/v2/apierror/apierror.go @@ -29,6 +29,10 @@ // Package apierror implements a wrapper error for parsing error details from // API calls. Both HTTP & gRPC status errors are supported. +// +// For examples of how to use [APIError] with client libraries please reference +// [Inspecting errors](https://pkg.go.dev/cloud.google.com/go#hdr-Inspecting_errors) +// in the client library documentation. package apierror import ( @@ -39,6 +43,7 @@ import ( jsonerror "github.com/googleapis/gax-go/v2/apierror/internal/proto" "google.golang.org/api/googleapi" "google.golang.org/genproto/googleapis/rpc/errdetails" + "google.golang.org/grpc/codes" "google.golang.org/grpc/status" "google.golang.org/protobuf/encoding/protojson" "google.golang.org/protobuf/proto" @@ -197,12 +202,12 @@ func (a *APIError) Unwrap() error { // Error returns a readable representation of the APIError. func (a *APIError) Error() string { var msg string - if a.status != nil { - msg = a.err.Error() - } else if a.httpErr != nil { + if a.httpErr != nil { // Truncate the googleapi.Error message because it dumps the Details in // an ugly way. msg = fmt.Sprintf("googleapi: Error %d: %s", a.httpErr.Code, a.httpErr.Message) + } else if a.status != nil { + msg = a.err.Error() } return strings.TrimSpace(fmt.Sprintf("%s\n%s", msg, a.details)) } @@ -236,6 +241,9 @@ func (a *APIError) Metadata() map[string]string { // setDetailsFromError parses a Status error or a googleapi.Error // and sets status and details or httpErr and details, respectively. // It returns false if neither Status nor googleapi.Error can be parsed. +// When err is a googleapi.Error, the status of the returned error will +// be set to an Unknown error, rather than nil, since a nil code is +// interpreted as OK in the gRPC status package. func (a *APIError) setDetailsFromError(err error) bool { st, isStatus := status.FromError(err) var herr *googleapi.Error @@ -248,6 +256,7 @@ func (a *APIError) setDetailsFromError(err error) bool { case isHTTPErr: a.httpErr = herr a.details = parseHTTPDetails(herr) + a.status = status.New(codes.Unknown, herr.Message) default: return false } @@ -340,3 +349,13 @@ func parseHTTPDetails(gae *googleapi.Error) ErrDetails { return parseDetails(details) } + +// HTTPCode returns the underlying HTTP response status code. This method returns +// `-1` if the underlying error is a [google.golang.org/grpc/status.Status]. To +// check gRPC error codes use [google.golang.org/grpc/status.Code]. +func (a *APIError) HTTPCode() int { + if a.httpErr == nil { + return -1 + } + return a.httpErr.Code +} diff --git a/vendor/github.com/googleapis/gax-go/v2/call_option.go b/vendor/github.com/googleapis/gax-go/v2/call_option.go index e092005563..c52e03f643 100644 --- a/vendor/github.com/googleapis/gax-go/v2/call_option.go +++ b/vendor/github.com/googleapis/gax-go/v2/call_option.go @@ -218,6 +218,14 @@ func (p pathOpt) Resolve(s *CallSettings) { s.Path = p.p } +type timeoutOpt struct { + t time.Duration +} + +func (t timeoutOpt) Resolve(s *CallSettings) { + s.timeout = t.t +} + // WithPath applies a Path override to the HTTP-based APICall. // // This is for internal use only. @@ -230,6 +238,15 @@ func WithGRPCOptions(opt ...grpc.CallOption) CallOption { return grpcOpt(append([]grpc.CallOption(nil), opt...)) } +// WithTimeout is a convenience option for setting a context.WithTimeout on the +// singular context.Context used for **all** APICall attempts. Calculated from +// the start of the first APICall attempt. +// If the context.Context provided to Invoke already has a Deadline set, that +// will always be respected over the deadline calculated using this option. +func WithTimeout(t time.Duration) CallOption { + return &timeoutOpt{t: t} +} + // CallSettings allow fine-grained control over how calls are made. type CallSettings struct { // Retry returns a Retryer to be used to control retry logic of a method call. @@ -241,4 +258,8 @@ type CallSettings struct { // Path is an HTTP override for an APICall. Path string + + // Timeout defines the amount of time that Invoke has to complete. + // Unexported so it cannot be changed by the code in an APICall. + timeout time.Duration } diff --git a/vendor/github.com/googleapis/gax-go/v2/header.go b/vendor/github.com/googleapis/gax-go/v2/header.go index 139371a0bf..6488461f4d 100644 --- a/vendor/github.com/googleapis/gax-go/v2/header.go +++ b/vendor/github.com/googleapis/gax-go/v2/header.go @@ -29,7 +29,73 @@ package gax -import "bytes" +import ( + "bytes" + "runtime" + "strings" + "unicode" +) + +var ( + // GoVersion is a header-safe representation of the current runtime + // environment's Go version. This is for GAX consumers that need to + // report the Go runtime version in API calls. + GoVersion string + // version is a package internal global variable for testing purposes. + version = runtime.Version +) + +// versionUnknown is only used when the runtime version cannot be determined. +const versionUnknown = "UNKNOWN" + +func init() { + GoVersion = goVersion() +} + +// goVersion returns a Go runtime version derived from the runtime environment +// that is modified to be suitable for reporting in a header, meaning it has no +// whitespace. If it is unable to determine the Go runtime version, it returns +// versionUnknown. +func goVersion() string { + const develPrefix = "devel +" + + s := version() + if strings.HasPrefix(s, develPrefix) { + s = s[len(develPrefix):] + if p := strings.IndexFunc(s, unicode.IsSpace); p >= 0 { + s = s[:p] + } + return s + } else if p := strings.IndexFunc(s, unicode.IsSpace); p >= 0 { + s = s[:p] + } + + notSemverRune := func(r rune) bool { + return !strings.ContainsRune("0123456789.", r) + } + + if strings.HasPrefix(s, "go1") { + s = s[2:] + var prerelease string + if p := strings.IndexFunc(s, notSemverRune); p >= 0 { + s, prerelease = s[:p], s[p:] + } + if strings.HasSuffix(s, ".") { + s += "0" + } else if strings.Count(s, ".") < 2 { + s += ".0" + } + if prerelease != "" { + // Some release candidates already have a dash in them. + if !strings.HasPrefix(prerelease, "-") { + prerelease = "-" + prerelease + } + s += prerelease + } + return s + } + return "UNKNOWN" +} // XGoogHeader is for use by the Google Cloud Libraries only. // diff --git a/vendor/github.com/googleapis/gax-go/v2/internal/version.go b/vendor/github.com/googleapis/gax-go/v2/internal/version.go index 0ba5da1dd1..374dcdb115 100644 --- a/vendor/github.com/googleapis/gax-go/v2/internal/version.go +++ b/vendor/github.com/googleapis/gax-go/v2/internal/version.go @@ -30,4 +30,4 @@ package internal // Version is the current tagged release of the library. -const Version = "2.7.0" +const Version = "2.11.0" diff --git a/vendor/github.com/googleapis/gax-go/v2/invoke.go b/vendor/github.com/googleapis/gax-go/v2/invoke.go index 9fcc29959b..721d1af551 100644 --- a/vendor/github.com/googleapis/gax-go/v2/invoke.go +++ b/vendor/github.com/googleapis/gax-go/v2/invoke.go @@ -68,6 +68,16 @@ type sleeper func(ctx context.Context, d time.Duration) error // invoke implements Invoke, taking an additional sleeper argument for testing. func invoke(ctx context.Context, call APICall, settings CallSettings, sp sleeper) error { var retryer Retryer + + // Only use the value provided via WithTimeout if the context doesn't + // already have a deadline. This is important for backwards compatibility if + // the user already set a deadline on the context given to Invoke. + if _, ok := ctx.Deadline(); !ok && settings.timeout != 0 { + c, cc := context.WithTimeout(ctx, settings.timeout) + defer cc() + ctx = c + } + for { err := call(ctx, settings) if err == nil { diff --git a/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305.go b/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305.go new file mode 100644 index 0000000000..93da7322bc --- /dev/null +++ b/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305.go @@ -0,0 +1,98 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package chacha20poly1305 implements the ChaCha20-Poly1305 AEAD and its +// extended nonce variant XChaCha20-Poly1305, as specified in RFC 8439 and +// draft-irtf-cfrg-xchacha-01. +package chacha20poly1305 // import "golang.org/x/crypto/chacha20poly1305" + +import ( + "crypto/cipher" + "errors" +) + +const ( + // KeySize is the size of the key used by this AEAD, in bytes. + KeySize = 32 + + // NonceSize is the size of the nonce used with the standard variant of this + // AEAD, in bytes. + // + // Note that this is too short to be safely generated at random if the same + // key is reused more than 2³² times. + NonceSize = 12 + + // NonceSizeX is the size of the nonce used with the XChaCha20-Poly1305 + // variant of this AEAD, in bytes. + NonceSizeX = 24 + + // Overhead is the size of the Poly1305 authentication tag, and the + // difference between a ciphertext length and its plaintext. + Overhead = 16 +) + +type chacha20poly1305 struct { + key [KeySize]byte +} + +// New returns a ChaCha20-Poly1305 AEAD that uses the given 256-bit key. +func New(key []byte) (cipher.AEAD, error) { + if len(key) != KeySize { + return nil, errors.New("chacha20poly1305: bad key length") + } + ret := new(chacha20poly1305) + copy(ret.key[:], key) + return ret, nil +} + +func (c *chacha20poly1305) NonceSize() int { + return NonceSize +} + +func (c *chacha20poly1305) Overhead() int { + return Overhead +} + +func (c *chacha20poly1305) Seal(dst, nonce, plaintext, additionalData []byte) []byte { + if len(nonce) != NonceSize { + panic("chacha20poly1305: bad nonce length passed to Seal") + } + + if uint64(len(plaintext)) > (1<<38)-64 { + panic("chacha20poly1305: plaintext too large") + } + + return c.seal(dst, nonce, plaintext, additionalData) +} + +var errOpen = errors.New("chacha20poly1305: message authentication failed") + +func (c *chacha20poly1305) Open(dst, nonce, ciphertext, additionalData []byte) ([]byte, error) { + if len(nonce) != NonceSize { + panic("chacha20poly1305: bad nonce length passed to Open") + } + if len(ciphertext) < 16 { + return nil, errOpen + } + if uint64(len(ciphertext)) > (1<<38)-48 { + panic("chacha20poly1305: ciphertext too large") + } + + return c.open(dst, nonce, ciphertext, additionalData) +} + +// sliceForAppend takes a slice and a requested number of bytes. It returns a +// slice with the contents of the given slice followed by that many bytes and a +// second slice that aliases into it and contains only the extra bytes. If the +// original slice has sufficient capacity then no allocation is performed. +func sliceForAppend(in []byte, n int) (head, tail []byte) { + if total := len(in) + n; cap(in) >= total { + head = in[:total] + } else { + head = make([]byte, total) + copy(head, in) + } + tail = head[len(in):] + return +} diff --git a/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.go b/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.go new file mode 100644 index 0000000000..0c408c5709 --- /dev/null +++ b/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.go @@ -0,0 +1,87 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build gc && !purego +// +build gc,!purego + +package chacha20poly1305 + +import ( + "encoding/binary" + + "golang.org/x/crypto/internal/alias" + "golang.org/x/sys/cpu" +) + +//go:noescape +func chacha20Poly1305Open(dst []byte, key []uint32, src, ad []byte) bool + +//go:noescape +func chacha20Poly1305Seal(dst []byte, key []uint32, src, ad []byte) + +var ( + useAVX2 = cpu.X86.HasAVX2 && cpu.X86.HasBMI2 +) + +// setupState writes a ChaCha20 input matrix to state. See +// https://tools.ietf.org/html/rfc7539#section-2.3. +func setupState(state *[16]uint32, key *[32]byte, nonce []byte) { + state[0] = 0x61707865 + state[1] = 0x3320646e + state[2] = 0x79622d32 + state[3] = 0x6b206574 + + state[4] = binary.LittleEndian.Uint32(key[0:4]) + state[5] = binary.LittleEndian.Uint32(key[4:8]) + state[6] = binary.LittleEndian.Uint32(key[8:12]) + state[7] = binary.LittleEndian.Uint32(key[12:16]) + state[8] = binary.LittleEndian.Uint32(key[16:20]) + state[9] = binary.LittleEndian.Uint32(key[20:24]) + state[10] = binary.LittleEndian.Uint32(key[24:28]) + state[11] = binary.LittleEndian.Uint32(key[28:32]) + + state[12] = 0 + state[13] = binary.LittleEndian.Uint32(nonce[0:4]) + state[14] = binary.LittleEndian.Uint32(nonce[4:8]) + state[15] = binary.LittleEndian.Uint32(nonce[8:12]) +} + +func (c *chacha20poly1305) seal(dst, nonce, plaintext, additionalData []byte) []byte { + if !cpu.X86.HasSSSE3 { + return c.sealGeneric(dst, nonce, plaintext, additionalData) + } + + var state [16]uint32 + setupState(&state, &c.key, nonce) + + ret, out := sliceForAppend(dst, len(plaintext)+16) + if alias.InexactOverlap(out, plaintext) { + panic("chacha20poly1305: invalid buffer overlap") + } + chacha20Poly1305Seal(out[:], state[:], plaintext, additionalData) + return ret +} + +func (c *chacha20poly1305) open(dst, nonce, ciphertext, additionalData []byte) ([]byte, error) { + if !cpu.X86.HasSSSE3 { + return c.openGeneric(dst, nonce, ciphertext, additionalData) + } + + var state [16]uint32 + setupState(&state, &c.key, nonce) + + ciphertext = ciphertext[:len(ciphertext)-16] + ret, out := sliceForAppend(dst, len(ciphertext)) + if alias.InexactOverlap(out, ciphertext) { + panic("chacha20poly1305: invalid buffer overlap") + } + if !chacha20Poly1305Open(out, state[:], ciphertext, additionalData) { + for i := range out { + out[i] = 0 + } + return nil, errOpen + } + + return ret, nil +} diff --git a/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.s b/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.s new file mode 100644 index 0000000000..867c181a14 --- /dev/null +++ b/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.s @@ -0,0 +1,2696 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This file was originally from https://golang.org/cl/24717 by Vlad Krasnov of CloudFlare. + +//go:build gc && !purego +// +build gc,!purego + +#include "textflag.h" +// General register allocation +#define oup DI +#define inp SI +#define inl BX +#define adp CX // free to reuse, after we hash the additional data +#define keyp R8 // free to reuse, when we copy the key to stack +#define itr2 R9 // general iterator +#define itr1 CX // general iterator +#define acc0 R10 +#define acc1 R11 +#define acc2 R12 +#define t0 R13 +#define t1 R14 +#define t2 R15 +#define t3 R8 +// Register and stack allocation for the SSE code +#define rStore (0*16)(BP) +#define sStore (1*16)(BP) +#define state1Store (2*16)(BP) +#define state2Store (3*16)(BP) +#define tmpStore (4*16)(BP) +#define ctr0Store (5*16)(BP) +#define ctr1Store (6*16)(BP) +#define ctr2Store (7*16)(BP) +#define ctr3Store (8*16)(BP) +#define A0 X0 +#define A1 X1 +#define A2 X2 +#define B0 X3 +#define B1 X4 +#define B2 X5 +#define C0 X6 +#define C1 X7 +#define C2 X8 +#define D0 X9 +#define D1 X10 +#define D2 X11 +#define T0 X12 +#define T1 X13 +#define T2 X14 +#define T3 X15 +#define A3 T0 +#define B3 T1 +#define C3 T2 +#define D3 T3 +// Register and stack allocation for the AVX2 code +#define rsStoreAVX2 (0*32)(BP) +#define state1StoreAVX2 (1*32)(BP) +#define state2StoreAVX2 (2*32)(BP) +#define ctr0StoreAVX2 (3*32)(BP) +#define ctr1StoreAVX2 (4*32)(BP) +#define ctr2StoreAVX2 (5*32)(BP) +#define ctr3StoreAVX2 (6*32)(BP) +#define tmpStoreAVX2 (7*32)(BP) // 256 bytes on stack +#define AA0 Y0 +#define AA1 Y5 +#define AA2 Y6 +#define AA3 Y7 +#define BB0 Y14 +#define BB1 Y9 +#define BB2 Y10 +#define BB3 Y11 +#define CC0 Y12 +#define CC1 Y13 +#define CC2 Y8 +#define CC3 Y15 +#define DD0 Y4 +#define DD1 Y1 +#define DD2 Y2 +#define DD3 Y3 +#define TT0 DD3 +#define TT1 AA3 +#define TT2 BB3 +#define TT3 CC3 +// ChaCha20 constants +DATA ·chacha20Constants<>+0x00(SB)/4, $0x61707865 +DATA ·chacha20Constants<>+0x04(SB)/4, $0x3320646e +DATA ·chacha20Constants<>+0x08(SB)/4, $0x79622d32 +DATA ·chacha20Constants<>+0x0c(SB)/4, $0x6b206574 +DATA ·chacha20Constants<>+0x10(SB)/4, $0x61707865 +DATA ·chacha20Constants<>+0x14(SB)/4, $0x3320646e +DATA ·chacha20Constants<>+0x18(SB)/4, $0x79622d32 +DATA ·chacha20Constants<>+0x1c(SB)/4, $0x6b206574 +// <<< 16 with PSHUFB +DATA ·rol16<>+0x00(SB)/8, $0x0504070601000302 +DATA ·rol16<>+0x08(SB)/8, $0x0D0C0F0E09080B0A +DATA ·rol16<>+0x10(SB)/8, $0x0504070601000302 +DATA ·rol16<>+0x18(SB)/8, $0x0D0C0F0E09080B0A +// <<< 8 with PSHUFB +DATA ·rol8<>+0x00(SB)/8, $0x0605040702010003 +DATA ·rol8<>+0x08(SB)/8, $0x0E0D0C0F0A09080B +DATA ·rol8<>+0x10(SB)/8, $0x0605040702010003 +DATA ·rol8<>+0x18(SB)/8, $0x0E0D0C0F0A09080B + +DATA ·avx2InitMask<>+0x00(SB)/8, $0x0 +DATA ·avx2InitMask<>+0x08(SB)/8, $0x0 +DATA ·avx2InitMask<>+0x10(SB)/8, $0x1 +DATA ·avx2InitMask<>+0x18(SB)/8, $0x0 + +DATA ·avx2IncMask<>+0x00(SB)/8, $0x2 +DATA ·avx2IncMask<>+0x08(SB)/8, $0x0 +DATA ·avx2IncMask<>+0x10(SB)/8, $0x2 +DATA ·avx2IncMask<>+0x18(SB)/8, $0x0 +// Poly1305 key clamp +DATA ·polyClampMask<>+0x00(SB)/8, $0x0FFFFFFC0FFFFFFF +DATA ·polyClampMask<>+0x08(SB)/8, $0x0FFFFFFC0FFFFFFC +DATA ·polyClampMask<>+0x10(SB)/8, $0xFFFFFFFFFFFFFFFF +DATA ·polyClampMask<>+0x18(SB)/8, $0xFFFFFFFFFFFFFFFF + +DATA ·sseIncMask<>+0x00(SB)/8, $0x1 +DATA ·sseIncMask<>+0x08(SB)/8, $0x0 +// To load/store the last < 16 bytes in a buffer +DATA ·andMask<>+0x00(SB)/8, $0x00000000000000ff +DATA ·andMask<>+0x08(SB)/8, $0x0000000000000000 +DATA ·andMask<>+0x10(SB)/8, $0x000000000000ffff +DATA ·andMask<>+0x18(SB)/8, $0x0000000000000000 +DATA ·andMask<>+0x20(SB)/8, $0x0000000000ffffff +DATA ·andMask<>+0x28(SB)/8, $0x0000000000000000 +DATA ·andMask<>+0x30(SB)/8, $0x00000000ffffffff +DATA ·andMask<>+0x38(SB)/8, $0x0000000000000000 +DATA ·andMask<>+0x40(SB)/8, $0x000000ffffffffff +DATA ·andMask<>+0x48(SB)/8, $0x0000000000000000 +DATA ·andMask<>+0x50(SB)/8, $0x0000ffffffffffff +DATA ·andMask<>+0x58(SB)/8, $0x0000000000000000 +DATA ·andMask<>+0x60(SB)/8, $0x00ffffffffffffff +DATA ·andMask<>+0x68(SB)/8, $0x0000000000000000 +DATA ·andMask<>+0x70(SB)/8, $0xffffffffffffffff +DATA ·andMask<>+0x78(SB)/8, $0x0000000000000000 +DATA ·andMask<>+0x80(SB)/8, $0xffffffffffffffff +DATA ·andMask<>+0x88(SB)/8, $0x00000000000000ff +DATA ·andMask<>+0x90(SB)/8, $0xffffffffffffffff +DATA ·andMask<>+0x98(SB)/8, $0x000000000000ffff +DATA ·andMask<>+0xa0(SB)/8, $0xffffffffffffffff +DATA ·andMask<>+0xa8(SB)/8, $0x0000000000ffffff +DATA ·andMask<>+0xb0(SB)/8, $0xffffffffffffffff +DATA ·andMask<>+0xb8(SB)/8, $0x00000000ffffffff +DATA ·andMask<>+0xc0(SB)/8, $0xffffffffffffffff +DATA ·andMask<>+0xc8(SB)/8, $0x000000ffffffffff +DATA ·andMask<>+0xd0(SB)/8, $0xffffffffffffffff +DATA ·andMask<>+0xd8(SB)/8, $0x0000ffffffffffff +DATA ·andMask<>+0xe0(SB)/8, $0xffffffffffffffff +DATA ·andMask<>+0xe8(SB)/8, $0x00ffffffffffffff + +GLOBL ·chacha20Constants<>(SB), (NOPTR+RODATA), $32 +GLOBL ·rol16<>(SB), (NOPTR+RODATA), $32 +GLOBL ·rol8<>(SB), (NOPTR+RODATA), $32 +GLOBL ·sseIncMask<>(SB), (NOPTR+RODATA), $16 +GLOBL ·avx2IncMask<>(SB), (NOPTR+RODATA), $32 +GLOBL ·avx2InitMask<>(SB), (NOPTR+RODATA), $32 +GLOBL ·polyClampMask<>(SB), (NOPTR+RODATA), $32 +GLOBL ·andMask<>(SB), (NOPTR+RODATA), $240 +// No PALIGNR in Go ASM yet (but VPALIGNR is present). +#define shiftB0Left BYTE $0x66; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xdb; BYTE $0x04 // PALIGNR $4, X3, X3 +#define shiftB1Left BYTE $0x66; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xe4; BYTE $0x04 // PALIGNR $4, X4, X4 +#define shiftB2Left BYTE $0x66; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xed; BYTE $0x04 // PALIGNR $4, X5, X5 +#define shiftB3Left BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xed; BYTE $0x04 // PALIGNR $4, X13, X13 +#define shiftC0Left BYTE $0x66; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xf6; BYTE $0x08 // PALIGNR $8, X6, X6 +#define shiftC1Left BYTE $0x66; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xff; BYTE $0x08 // PALIGNR $8, X7, X7 +#define shiftC2Left BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xc0; BYTE $0x08 // PALIGNR $8, X8, X8 +#define shiftC3Left BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xf6; BYTE $0x08 // PALIGNR $8, X14, X14 +#define shiftD0Left BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xc9; BYTE $0x0c // PALIGNR $12, X9, X9 +#define shiftD1Left BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xd2; BYTE $0x0c // PALIGNR $12, X10, X10 +#define shiftD2Left BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xdb; BYTE $0x0c // PALIGNR $12, X11, X11 +#define shiftD3Left BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xff; BYTE $0x0c // PALIGNR $12, X15, X15 +#define shiftB0Right BYTE $0x66; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xdb; BYTE $0x0c // PALIGNR $12, X3, X3 +#define shiftB1Right BYTE $0x66; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xe4; BYTE $0x0c // PALIGNR $12, X4, X4 +#define shiftB2Right BYTE $0x66; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xed; BYTE $0x0c // PALIGNR $12, X5, X5 +#define shiftB3Right BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xed; BYTE $0x0c // PALIGNR $12, X13, X13 +#define shiftC0Right shiftC0Left +#define shiftC1Right shiftC1Left +#define shiftC2Right shiftC2Left +#define shiftC3Right shiftC3Left +#define shiftD0Right BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xc9; BYTE $0x04 // PALIGNR $4, X9, X9 +#define shiftD1Right BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xd2; BYTE $0x04 // PALIGNR $4, X10, X10 +#define shiftD2Right BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xdb; BYTE $0x04 // PALIGNR $4, X11, X11 +#define shiftD3Right BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xff; BYTE $0x04 // PALIGNR $4, X15, X15 +// Some macros +#define chachaQR(A, B, C, D, T) \ + PADDD B, A; PXOR A, D; PSHUFB ·rol16<>(SB), D \ + PADDD D, C; PXOR C, B; MOVO B, T; PSLLL $12, T; PSRLL $20, B; PXOR T, B \ + PADDD B, A; PXOR A, D; PSHUFB ·rol8<>(SB), D \ + PADDD D, C; PXOR C, B; MOVO B, T; PSLLL $7, T; PSRLL $25, B; PXOR T, B + +#define chachaQR_AVX2(A, B, C, D, T) \ + VPADDD B, A, A; VPXOR A, D, D; VPSHUFB ·rol16<>(SB), D, D \ + VPADDD D, C, C; VPXOR C, B, B; VPSLLD $12, B, T; VPSRLD $20, B, B; VPXOR T, B, B \ + VPADDD B, A, A; VPXOR A, D, D; VPSHUFB ·rol8<>(SB), D, D \ + VPADDD D, C, C; VPXOR C, B, B; VPSLLD $7, B, T; VPSRLD $25, B, B; VPXOR T, B, B + +#define polyAdd(S) ADDQ S, acc0; ADCQ 8+S, acc1; ADCQ $1, acc2 +#define polyMulStage1 MOVQ (0*8)(BP), AX; MOVQ AX, t2; MULQ acc0; MOVQ AX, t0; MOVQ DX, t1; MOVQ (0*8)(BP), AX; MULQ acc1; IMULQ acc2, t2; ADDQ AX, t1; ADCQ DX, t2 +#define polyMulStage2 MOVQ (1*8)(BP), AX; MOVQ AX, t3; MULQ acc0; ADDQ AX, t1; ADCQ $0, DX; MOVQ DX, acc0; MOVQ (1*8)(BP), AX; MULQ acc1; ADDQ AX, t2; ADCQ $0, DX +#define polyMulStage3 IMULQ acc2, t3; ADDQ acc0, t2; ADCQ DX, t3 +#define polyMulReduceStage MOVQ t0, acc0; MOVQ t1, acc1; MOVQ t2, acc2; ANDQ $3, acc2; MOVQ t2, t0; ANDQ $-4, t0; MOVQ t3, t1; SHRQ $2, t3, t2; SHRQ $2, t3; ADDQ t0, acc0; ADCQ t1, acc1; ADCQ $0, acc2; ADDQ t2, acc0; ADCQ t3, acc1; ADCQ $0, acc2 + +#define polyMulStage1_AVX2 MOVQ (0*8)(BP), DX; MOVQ DX, t2; MULXQ acc0, t0, t1; IMULQ acc2, t2; MULXQ acc1, AX, DX; ADDQ AX, t1; ADCQ DX, t2 +#define polyMulStage2_AVX2 MOVQ (1*8)(BP), DX; MULXQ acc0, acc0, AX; ADDQ acc0, t1; MULXQ acc1, acc1, t3; ADCQ acc1, t2; ADCQ $0, t3 +#define polyMulStage3_AVX2 IMULQ acc2, DX; ADDQ AX, t2; ADCQ DX, t3 + +#define polyMul polyMulStage1; polyMulStage2; polyMulStage3; polyMulReduceStage +#define polyMulAVX2 polyMulStage1_AVX2; polyMulStage2_AVX2; polyMulStage3_AVX2; polyMulReduceStage +// ---------------------------------------------------------------------------- +TEXT polyHashADInternal<>(SB), NOSPLIT, $0 + // adp points to beginning of additional data + // itr2 holds ad length + XORQ acc0, acc0 + XORQ acc1, acc1 + XORQ acc2, acc2 + CMPQ itr2, $13 + JNE hashADLoop + +openFastTLSAD: + // Special treatment for the TLS case of 13 bytes + MOVQ (adp), acc0 + MOVQ 5(adp), acc1 + SHRQ $24, acc1 + MOVQ $1, acc2 + polyMul + RET + +hashADLoop: + // Hash in 16 byte chunks + CMPQ itr2, $16 + JB hashADTail + polyAdd(0(adp)) + LEAQ (1*16)(adp), adp + SUBQ $16, itr2 + polyMul + JMP hashADLoop + +hashADTail: + CMPQ itr2, $0 + JE hashADDone + + // Hash last < 16 byte tail + XORQ t0, t0 + XORQ t1, t1 + XORQ t2, t2 + ADDQ itr2, adp + +hashADTailLoop: + SHLQ $8, t0, t1 + SHLQ $8, t0 + MOVB -1(adp), t2 + XORQ t2, t0 + DECQ adp + DECQ itr2 + JNE hashADTailLoop + +hashADTailFinish: + ADDQ t0, acc0; ADCQ t1, acc1; ADCQ $1, acc2 + polyMul + + // Finished AD +hashADDone: + RET + +// ---------------------------------------------------------------------------- +// func chacha20Poly1305Open(dst, key, src, ad []byte) bool +TEXT ·chacha20Poly1305Open(SB), 0, $288-97 + // For aligned stack access + MOVQ SP, BP + ADDQ $32, BP + ANDQ $-32, BP + MOVQ dst+0(FP), oup + MOVQ key+24(FP), keyp + MOVQ src+48(FP), inp + MOVQ src_len+56(FP), inl + MOVQ ad+72(FP), adp + + // Check for AVX2 support + CMPB ·useAVX2(SB), $1 + JE chacha20Poly1305Open_AVX2 + + // Special optimization, for very short buffers + CMPQ inl, $128 + JBE openSSE128 // About 16% faster + + // For long buffers, prepare the poly key first + MOVOU ·chacha20Constants<>(SB), A0 + MOVOU (1*16)(keyp), B0 + MOVOU (2*16)(keyp), C0 + MOVOU (3*16)(keyp), D0 + MOVO D0, T1 + + // Store state on stack for future use + MOVO B0, state1Store + MOVO C0, state2Store + MOVO D0, ctr3Store + MOVQ $10, itr2 + +openSSEPreparePolyKey: + chachaQR(A0, B0, C0, D0, T0) + shiftB0Left; shiftC0Left; shiftD0Left + chachaQR(A0, B0, C0, D0, T0) + shiftB0Right; shiftC0Right; shiftD0Right + DECQ itr2 + JNE openSSEPreparePolyKey + + // A0|B0 hold the Poly1305 32-byte key, C0,D0 can be discarded + PADDL ·chacha20Constants<>(SB), A0; PADDL state1Store, B0 + + // Clamp and store the key + PAND ·polyClampMask<>(SB), A0 + MOVO A0, rStore; MOVO B0, sStore + + // Hash AAD + MOVQ ad_len+80(FP), itr2 + CALL polyHashADInternal<>(SB) + +openSSEMainLoop: + CMPQ inl, $256 + JB openSSEMainLoopDone + + // Load state, increment counter blocks + MOVO ·chacha20Constants<>(SB), A0; MOVO state1Store, B0; MOVO state2Store, C0; MOVO ctr3Store, D0; PADDL ·sseIncMask<>(SB), D0 + MOVO A0, A1; MOVO B0, B1; MOVO C0, C1; MOVO D0, D1; PADDL ·sseIncMask<>(SB), D1 + MOVO A1, A2; MOVO B1, B2; MOVO C1, C2; MOVO D1, D2; PADDL ·sseIncMask<>(SB), D2 + MOVO A2, A3; MOVO B2, B3; MOVO C2, C3; MOVO D2, D3; PADDL ·sseIncMask<>(SB), D3 + + // Store counters + MOVO D0, ctr0Store; MOVO D1, ctr1Store; MOVO D2, ctr2Store; MOVO D3, ctr3Store + + // There are 10 ChaCha20 iterations of 2QR each, so for 6 iterations we hash 2 blocks, and for the remaining 4 only 1 block - for a total of 16 + MOVQ $4, itr1 + MOVQ inp, itr2 + +openSSEInternalLoop: + MOVO C3, tmpStore + chachaQR(A0, B0, C0, D0, C3); chachaQR(A1, B1, C1, D1, C3); chachaQR(A2, B2, C2, D2, C3) + MOVO tmpStore, C3 + MOVO C1, tmpStore + chachaQR(A3, B3, C3, D3, C1) + MOVO tmpStore, C1 + polyAdd(0(itr2)) + shiftB0Left; shiftB1Left; shiftB2Left; shiftB3Left + shiftC0Left; shiftC1Left; shiftC2Left; shiftC3Left + shiftD0Left; shiftD1Left; shiftD2Left; shiftD3Left + polyMulStage1 + polyMulStage2 + LEAQ (2*8)(itr2), itr2 + MOVO C3, tmpStore + chachaQR(A0, B0, C0, D0, C3); chachaQR(A1, B1, C1, D1, C3); chachaQR(A2, B2, C2, D2, C3) + MOVO tmpStore, C3 + MOVO C1, tmpStore + polyMulStage3 + chachaQR(A3, B3, C3, D3, C1) + MOVO tmpStore, C1 + polyMulReduceStage + shiftB0Right; shiftB1Right; shiftB2Right; shiftB3Right + shiftC0Right; shiftC1Right; shiftC2Right; shiftC3Right + shiftD0Right; shiftD1Right; shiftD2Right; shiftD3Right + DECQ itr1 + JGE openSSEInternalLoop + + polyAdd(0(itr2)) + polyMul + LEAQ (2*8)(itr2), itr2 + + CMPQ itr1, $-6 + JG openSSEInternalLoop + + // Add in the state + PADDD ·chacha20Constants<>(SB), A0; PADDD ·chacha20Constants<>(SB), A1; PADDD ·chacha20Constants<>(SB), A2; PADDD ·chacha20Constants<>(SB), A3 + PADDD state1Store, B0; PADDD state1Store, B1; PADDD state1Store, B2; PADDD state1Store, B3 + PADDD state2Store, C0; PADDD state2Store, C1; PADDD state2Store, C2; PADDD state2Store, C3 + PADDD ctr0Store, D0; PADDD ctr1Store, D1; PADDD ctr2Store, D2; PADDD ctr3Store, D3 + + // Load - xor - store + MOVO D3, tmpStore + MOVOU (0*16)(inp), D3; PXOR D3, A0; MOVOU A0, (0*16)(oup) + MOVOU (1*16)(inp), D3; PXOR D3, B0; MOVOU B0, (1*16)(oup) + MOVOU (2*16)(inp), D3; PXOR D3, C0; MOVOU C0, (2*16)(oup) + MOVOU (3*16)(inp), D3; PXOR D3, D0; MOVOU D0, (3*16)(oup) + MOVOU (4*16)(inp), D0; PXOR D0, A1; MOVOU A1, (4*16)(oup) + MOVOU (5*16)(inp), D0; PXOR D0, B1; MOVOU B1, (5*16)(oup) + MOVOU (6*16)(inp), D0; PXOR D0, C1; MOVOU C1, (6*16)(oup) + MOVOU (7*16)(inp), D0; PXOR D0, D1; MOVOU D1, (7*16)(oup) + MOVOU (8*16)(inp), D0; PXOR D0, A2; MOVOU A2, (8*16)(oup) + MOVOU (9*16)(inp), D0; PXOR D0, B2; MOVOU B2, (9*16)(oup) + MOVOU (10*16)(inp), D0; PXOR D0, C2; MOVOU C2, (10*16)(oup) + MOVOU (11*16)(inp), D0; PXOR D0, D2; MOVOU D2, (11*16)(oup) + MOVOU (12*16)(inp), D0; PXOR D0, A3; MOVOU A3, (12*16)(oup) + MOVOU (13*16)(inp), D0; PXOR D0, B3; MOVOU B3, (13*16)(oup) + MOVOU (14*16)(inp), D0; PXOR D0, C3; MOVOU C3, (14*16)(oup) + MOVOU (15*16)(inp), D0; PXOR tmpStore, D0; MOVOU D0, (15*16)(oup) + LEAQ 256(inp), inp + LEAQ 256(oup), oup + SUBQ $256, inl + JMP openSSEMainLoop + +openSSEMainLoopDone: + // Handle the various tail sizes efficiently + TESTQ inl, inl + JE openSSEFinalize + CMPQ inl, $64 + JBE openSSETail64 + CMPQ inl, $128 + JBE openSSETail128 + CMPQ inl, $192 + JBE openSSETail192 + JMP openSSETail256 + +openSSEFinalize: + // Hash in the PT, AAD lengths + ADDQ ad_len+80(FP), acc0; ADCQ src_len+56(FP), acc1; ADCQ $1, acc2 + polyMul + + // Final reduce + MOVQ acc0, t0 + MOVQ acc1, t1 + MOVQ acc2, t2 + SUBQ $-5, acc0 + SBBQ $-1, acc1 + SBBQ $3, acc2 + CMOVQCS t0, acc0 + CMOVQCS t1, acc1 + CMOVQCS t2, acc2 + + // Add in the "s" part of the key + ADDQ 0+sStore, acc0 + ADCQ 8+sStore, acc1 + + // Finally, constant time compare to the tag at the end of the message + XORQ AX, AX + MOVQ $1, DX + XORQ (0*8)(inp), acc0 + XORQ (1*8)(inp), acc1 + ORQ acc1, acc0 + CMOVQEQ DX, AX + + // Return true iff tags are equal + MOVB AX, ret+96(FP) + RET + +// ---------------------------------------------------------------------------- +// Special optimization for buffers smaller than 129 bytes +openSSE128: + // For up to 128 bytes of ciphertext and 64 bytes for the poly key, we require to process three blocks + MOVOU ·chacha20Constants<>(SB), A0; MOVOU (1*16)(keyp), B0; MOVOU (2*16)(keyp), C0; MOVOU (3*16)(keyp), D0 + MOVO A0, A1; MOVO B0, B1; MOVO C0, C1; MOVO D0, D1; PADDL ·sseIncMask<>(SB), D1 + MOVO A1, A2; MOVO B1, B2; MOVO C1, C2; MOVO D1, D2; PADDL ·sseIncMask<>(SB), D2 + MOVO B0, T1; MOVO C0, T2; MOVO D1, T3 + MOVQ $10, itr2 + +openSSE128InnerCipherLoop: + chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0); chachaQR(A2, B2, C2, D2, T0) + shiftB0Left; shiftB1Left; shiftB2Left + shiftC0Left; shiftC1Left; shiftC2Left + shiftD0Left; shiftD1Left; shiftD2Left + chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0); chachaQR(A2, B2, C2, D2, T0) + shiftB0Right; shiftB1Right; shiftB2Right + shiftC0Right; shiftC1Right; shiftC2Right + shiftD0Right; shiftD1Right; shiftD2Right + DECQ itr2 + JNE openSSE128InnerCipherLoop + + // A0|B0 hold the Poly1305 32-byte key, C0,D0 can be discarded + PADDL ·chacha20Constants<>(SB), A0; PADDL ·chacha20Constants<>(SB), A1; PADDL ·chacha20Constants<>(SB), A2 + PADDL T1, B0; PADDL T1, B1; PADDL T1, B2 + PADDL T2, C1; PADDL T2, C2 + PADDL T3, D1; PADDL ·sseIncMask<>(SB), T3; PADDL T3, D2 + + // Clamp and store the key + PAND ·polyClampMask<>(SB), A0 + MOVOU A0, rStore; MOVOU B0, sStore + + // Hash + MOVQ ad_len+80(FP), itr2 + CALL polyHashADInternal<>(SB) + +openSSE128Open: + CMPQ inl, $16 + JB openSSETail16 + SUBQ $16, inl + + // Load for hashing + polyAdd(0(inp)) + + // Load for decryption + MOVOU (inp), T0; PXOR T0, A1; MOVOU A1, (oup) + LEAQ (1*16)(inp), inp + LEAQ (1*16)(oup), oup + polyMul + + // Shift the stream "left" + MOVO B1, A1 + MOVO C1, B1 + MOVO D1, C1 + MOVO A2, D1 + MOVO B2, A2 + MOVO C2, B2 + MOVO D2, C2 + JMP openSSE128Open + +openSSETail16: + TESTQ inl, inl + JE openSSEFinalize + + // We can safely load the CT from the end, because it is padded with the MAC + MOVQ inl, itr2 + SHLQ $4, itr2 + LEAQ ·andMask<>(SB), t0 + MOVOU (inp), T0 + ADDQ inl, inp + PAND -16(t0)(itr2*1), T0 + MOVO T0, 0+tmpStore + MOVQ T0, t0 + MOVQ 8+tmpStore, t1 + PXOR A1, T0 + + // We can only store one byte at a time, since plaintext can be shorter than 16 bytes +openSSETail16Store: + MOVQ T0, t3 + MOVB t3, (oup) + PSRLDQ $1, T0 + INCQ oup + DECQ inl + JNE openSSETail16Store + ADDQ t0, acc0; ADCQ t1, acc1; ADCQ $1, acc2 + polyMul + JMP openSSEFinalize + +// ---------------------------------------------------------------------------- +// Special optimization for the last 64 bytes of ciphertext +openSSETail64: + // Need to decrypt up to 64 bytes - prepare single block + MOVO ·chacha20Constants<>(SB), A0; MOVO state1Store, B0; MOVO state2Store, C0; MOVO ctr3Store, D0; PADDL ·sseIncMask<>(SB), D0; MOVO D0, ctr0Store + XORQ itr2, itr2 + MOVQ inl, itr1 + CMPQ itr1, $16 + JB openSSETail64LoopB + +openSSETail64LoopA: + // Perform ChaCha rounds, while hashing the remaining input + polyAdd(0(inp)(itr2*1)) + polyMul + SUBQ $16, itr1 + +openSSETail64LoopB: + ADDQ $16, itr2 + chachaQR(A0, B0, C0, D0, T0) + shiftB0Left; shiftC0Left; shiftD0Left + chachaQR(A0, B0, C0, D0, T0) + shiftB0Right; shiftC0Right; shiftD0Right + + CMPQ itr1, $16 + JAE openSSETail64LoopA + + CMPQ itr2, $160 + JNE openSSETail64LoopB + + PADDL ·chacha20Constants<>(SB), A0; PADDL state1Store, B0; PADDL state2Store, C0; PADDL ctr0Store, D0 + +openSSETail64DecLoop: + CMPQ inl, $16 + JB openSSETail64DecLoopDone + SUBQ $16, inl + MOVOU (inp), T0 + PXOR T0, A0 + MOVOU A0, (oup) + LEAQ 16(inp), inp + LEAQ 16(oup), oup + MOVO B0, A0 + MOVO C0, B0 + MOVO D0, C0 + JMP openSSETail64DecLoop + +openSSETail64DecLoopDone: + MOVO A0, A1 + JMP openSSETail16 + +// ---------------------------------------------------------------------------- +// Special optimization for the last 128 bytes of ciphertext +openSSETail128: + // Need to decrypt up to 128 bytes - prepare two blocks + MOVO ·chacha20Constants<>(SB), A1; MOVO state1Store, B1; MOVO state2Store, C1; MOVO ctr3Store, D1; PADDL ·sseIncMask<>(SB), D1; MOVO D1, ctr0Store + MOVO A1, A0; MOVO B1, B0; MOVO C1, C0; MOVO D1, D0; PADDL ·sseIncMask<>(SB), D0; MOVO D0, ctr1Store + XORQ itr2, itr2 + MOVQ inl, itr1 + ANDQ $-16, itr1 + +openSSETail128LoopA: + // Perform ChaCha rounds, while hashing the remaining input + polyAdd(0(inp)(itr2*1)) + polyMul + +openSSETail128LoopB: + ADDQ $16, itr2 + chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0) + shiftB0Left; shiftC0Left; shiftD0Left + shiftB1Left; shiftC1Left; shiftD1Left + chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0) + shiftB0Right; shiftC0Right; shiftD0Right + shiftB1Right; shiftC1Right; shiftD1Right + + CMPQ itr2, itr1 + JB openSSETail128LoopA + + CMPQ itr2, $160 + JNE openSSETail128LoopB + + PADDL ·chacha20Constants<>(SB), A0; PADDL ·chacha20Constants<>(SB), A1 + PADDL state1Store, B0; PADDL state1Store, B1 + PADDL state2Store, C0; PADDL state2Store, C1 + PADDL ctr1Store, D0; PADDL ctr0Store, D1 + + MOVOU (0*16)(inp), T0; MOVOU (1*16)(inp), T1; MOVOU (2*16)(inp), T2; MOVOU (3*16)(inp), T3 + PXOR T0, A1; PXOR T1, B1; PXOR T2, C1; PXOR T3, D1 + MOVOU A1, (0*16)(oup); MOVOU B1, (1*16)(oup); MOVOU C1, (2*16)(oup); MOVOU D1, (3*16)(oup) + + SUBQ $64, inl + LEAQ 64(inp), inp + LEAQ 64(oup), oup + JMP openSSETail64DecLoop + +// ---------------------------------------------------------------------------- +// Special optimization for the last 192 bytes of ciphertext +openSSETail192: + // Need to decrypt up to 192 bytes - prepare three blocks + MOVO ·chacha20Constants<>(SB), A2; MOVO state1Store, B2; MOVO state2Store, C2; MOVO ctr3Store, D2; PADDL ·sseIncMask<>(SB), D2; MOVO D2, ctr0Store + MOVO A2, A1; MOVO B2, B1; MOVO C2, C1; MOVO D2, D1; PADDL ·sseIncMask<>(SB), D1; MOVO D1, ctr1Store + MOVO A1, A0; MOVO B1, B0; MOVO C1, C0; MOVO D1, D0; PADDL ·sseIncMask<>(SB), D0; MOVO D0, ctr2Store + + MOVQ inl, itr1 + MOVQ $160, itr2 + CMPQ itr1, $160 + CMOVQGT itr2, itr1 + ANDQ $-16, itr1 + XORQ itr2, itr2 + +openSSLTail192LoopA: + // Perform ChaCha rounds, while hashing the remaining input + polyAdd(0(inp)(itr2*1)) + polyMul + +openSSLTail192LoopB: + ADDQ $16, itr2 + chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0); chachaQR(A2, B2, C2, D2, T0) + shiftB0Left; shiftC0Left; shiftD0Left + shiftB1Left; shiftC1Left; shiftD1Left + shiftB2Left; shiftC2Left; shiftD2Left + + chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0); chachaQR(A2, B2, C2, D2, T0) + shiftB0Right; shiftC0Right; shiftD0Right + shiftB1Right; shiftC1Right; shiftD1Right + shiftB2Right; shiftC2Right; shiftD2Right + + CMPQ itr2, itr1 + JB openSSLTail192LoopA + + CMPQ itr2, $160 + JNE openSSLTail192LoopB + + CMPQ inl, $176 + JB openSSLTail192Store + + polyAdd(160(inp)) + polyMul + + CMPQ inl, $192 + JB openSSLTail192Store + + polyAdd(176(inp)) + polyMul + +openSSLTail192Store: + PADDL ·chacha20Constants<>(SB), A0; PADDL ·chacha20Constants<>(SB), A1; PADDL ·chacha20Constants<>(SB), A2 + PADDL state1Store, B0; PADDL state1Store, B1; PADDL state1Store, B2 + PADDL state2Store, C0; PADDL state2Store, C1; PADDL state2Store, C2 + PADDL ctr2Store, D0; PADDL ctr1Store, D1; PADDL ctr0Store, D2 + + MOVOU (0*16)(inp), T0; MOVOU (1*16)(inp), T1; MOVOU (2*16)(inp), T2; MOVOU (3*16)(inp), T3 + PXOR T0, A2; PXOR T1, B2; PXOR T2, C2; PXOR T3, D2 + MOVOU A2, (0*16)(oup); MOVOU B2, (1*16)(oup); MOVOU C2, (2*16)(oup); MOVOU D2, (3*16)(oup) + + MOVOU (4*16)(inp), T0; MOVOU (5*16)(inp), T1; MOVOU (6*16)(inp), T2; MOVOU (7*16)(inp), T3 + PXOR T0, A1; PXOR T1, B1; PXOR T2, C1; PXOR T3, D1 + MOVOU A1, (4*16)(oup); MOVOU B1, (5*16)(oup); MOVOU C1, (6*16)(oup); MOVOU D1, (7*16)(oup) + + SUBQ $128, inl + LEAQ 128(inp), inp + LEAQ 128(oup), oup + JMP openSSETail64DecLoop + +// ---------------------------------------------------------------------------- +// Special optimization for the last 256 bytes of ciphertext +openSSETail256: + // Need to decrypt up to 256 bytes - prepare four blocks + MOVO ·chacha20Constants<>(SB), A0; MOVO state1Store, B0; MOVO state2Store, C0; MOVO ctr3Store, D0; PADDL ·sseIncMask<>(SB), D0 + MOVO A0, A1; MOVO B0, B1; MOVO C0, C1; MOVO D0, D1; PADDL ·sseIncMask<>(SB), D1 + MOVO A1, A2; MOVO B1, B2; MOVO C1, C2; MOVO D1, D2; PADDL ·sseIncMask<>(SB), D2 + MOVO A2, A3; MOVO B2, B3; MOVO C2, C3; MOVO D2, D3; PADDL ·sseIncMask<>(SB), D3 + + // Store counters + MOVO D0, ctr0Store; MOVO D1, ctr1Store; MOVO D2, ctr2Store; MOVO D3, ctr3Store + XORQ itr2, itr2 + +openSSETail256Loop: + // This loop inteleaves 8 ChaCha quarter rounds with 1 poly multiplication + polyAdd(0(inp)(itr2*1)) + MOVO C3, tmpStore + chachaQR(A0, B0, C0, D0, C3); chachaQR(A1, B1, C1, D1, C3); chachaQR(A2, B2, C2, D2, C3) + MOVO tmpStore, C3 + MOVO C1, tmpStore + chachaQR(A3, B3, C3, D3, C1) + MOVO tmpStore, C1 + shiftB0Left; shiftB1Left; shiftB2Left; shiftB3Left + shiftC0Left; shiftC1Left; shiftC2Left; shiftC3Left + shiftD0Left; shiftD1Left; shiftD2Left; shiftD3Left + polyMulStage1 + polyMulStage2 + MOVO C3, tmpStore + chachaQR(A0, B0, C0, D0, C3); chachaQR(A1, B1, C1, D1, C3); chachaQR(A2, B2, C2, D2, C3) + MOVO tmpStore, C3 + MOVO C1, tmpStore + chachaQR(A3, B3, C3, D3, C1) + MOVO tmpStore, C1 + polyMulStage3 + polyMulReduceStage + shiftB0Right; shiftB1Right; shiftB2Right; shiftB3Right + shiftC0Right; shiftC1Right; shiftC2Right; shiftC3Right + shiftD0Right; shiftD1Right; shiftD2Right; shiftD3Right + ADDQ $2*8, itr2 + CMPQ itr2, $160 + JB openSSETail256Loop + MOVQ inl, itr1 + ANDQ $-16, itr1 + +openSSETail256HashLoop: + polyAdd(0(inp)(itr2*1)) + polyMul + ADDQ $2*8, itr2 + CMPQ itr2, itr1 + JB openSSETail256HashLoop + + // Add in the state + PADDD ·chacha20Constants<>(SB), A0; PADDD ·chacha20Constants<>(SB), A1; PADDD ·chacha20Constants<>(SB), A2; PADDD ·chacha20Constants<>(SB), A3 + PADDD state1Store, B0; PADDD state1Store, B1; PADDD state1Store, B2; PADDD state1Store, B3 + PADDD state2Store, C0; PADDD state2Store, C1; PADDD state2Store, C2; PADDD state2Store, C3 + PADDD ctr0Store, D0; PADDD ctr1Store, D1; PADDD ctr2Store, D2; PADDD ctr3Store, D3 + MOVO D3, tmpStore + + // Load - xor - store + MOVOU (0*16)(inp), D3; PXOR D3, A0 + MOVOU (1*16)(inp), D3; PXOR D3, B0 + MOVOU (2*16)(inp), D3; PXOR D3, C0 + MOVOU (3*16)(inp), D3; PXOR D3, D0 + MOVOU A0, (0*16)(oup) + MOVOU B0, (1*16)(oup) + MOVOU C0, (2*16)(oup) + MOVOU D0, (3*16)(oup) + MOVOU (4*16)(inp), A0; MOVOU (5*16)(inp), B0; MOVOU (6*16)(inp), C0; MOVOU (7*16)(inp), D0 + PXOR A0, A1; PXOR B0, B1; PXOR C0, C1; PXOR D0, D1 + MOVOU A1, (4*16)(oup); MOVOU B1, (5*16)(oup); MOVOU C1, (6*16)(oup); MOVOU D1, (7*16)(oup) + MOVOU (8*16)(inp), A0; MOVOU (9*16)(inp), B0; MOVOU (10*16)(inp), C0; MOVOU (11*16)(inp), D0 + PXOR A0, A2; PXOR B0, B2; PXOR C0, C2; PXOR D0, D2 + MOVOU A2, (8*16)(oup); MOVOU B2, (9*16)(oup); MOVOU C2, (10*16)(oup); MOVOU D2, (11*16)(oup) + LEAQ 192(inp), inp + LEAQ 192(oup), oup + SUBQ $192, inl + MOVO A3, A0 + MOVO B3, B0 + MOVO C3, C0 + MOVO tmpStore, D0 + + JMP openSSETail64DecLoop + +// ---------------------------------------------------------------------------- +// ------------------------- AVX2 Code ---------------------------------------- +chacha20Poly1305Open_AVX2: + VZEROUPPER + VMOVDQU ·chacha20Constants<>(SB), AA0 + BYTE $0xc4; BYTE $0x42; BYTE $0x7d; BYTE $0x5a; BYTE $0x70; BYTE $0x10 // broadcasti128 16(r8), ymm14 + BYTE $0xc4; BYTE $0x42; BYTE $0x7d; BYTE $0x5a; BYTE $0x60; BYTE $0x20 // broadcasti128 32(r8), ymm12 + BYTE $0xc4; BYTE $0xc2; BYTE $0x7d; BYTE $0x5a; BYTE $0x60; BYTE $0x30 // broadcasti128 48(r8), ymm4 + VPADDD ·avx2InitMask<>(SB), DD0, DD0 + + // Special optimization, for very short buffers + CMPQ inl, $192 + JBE openAVX2192 + CMPQ inl, $320 + JBE openAVX2320 + + // For the general key prepare the key first - as a byproduct we have 64 bytes of cipher stream + VMOVDQA BB0, state1StoreAVX2 + VMOVDQA CC0, state2StoreAVX2 + VMOVDQA DD0, ctr3StoreAVX2 + MOVQ $10, itr2 + +openAVX2PreparePolyKey: + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0) + VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $12, DD0, DD0, DD0 + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0) + VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $4, DD0, DD0, DD0 + DECQ itr2 + JNE openAVX2PreparePolyKey + + VPADDD ·chacha20Constants<>(SB), AA0, AA0 + VPADDD state1StoreAVX2, BB0, BB0 + VPADDD state2StoreAVX2, CC0, CC0 + VPADDD ctr3StoreAVX2, DD0, DD0 + + VPERM2I128 $0x02, AA0, BB0, TT0 + + // Clamp and store poly key + VPAND ·polyClampMask<>(SB), TT0, TT0 + VMOVDQA TT0, rsStoreAVX2 + + // Stream for the first 64 bytes + VPERM2I128 $0x13, AA0, BB0, AA0 + VPERM2I128 $0x13, CC0, DD0, BB0 + + // Hash AD + first 64 bytes + MOVQ ad_len+80(FP), itr2 + CALL polyHashADInternal<>(SB) + XORQ itr1, itr1 + +openAVX2InitialHash64: + polyAdd(0(inp)(itr1*1)) + polyMulAVX2 + ADDQ $16, itr1 + CMPQ itr1, $64 + JNE openAVX2InitialHash64 + + // Decrypt the first 64 bytes + VPXOR (0*32)(inp), AA0, AA0 + VPXOR (1*32)(inp), BB0, BB0 + VMOVDQU AA0, (0*32)(oup) + VMOVDQU BB0, (1*32)(oup) + LEAQ (2*32)(inp), inp + LEAQ (2*32)(oup), oup + SUBQ $64, inl + +openAVX2MainLoop: + CMPQ inl, $512 + JB openAVX2MainLoopDone + + // Load state, increment counter blocks, store the incremented counters + VMOVDQU ·chacha20Constants<>(SB), AA0; VMOVDQA AA0, AA1; VMOVDQA AA0, AA2; VMOVDQA AA0, AA3 + VMOVDQA state1StoreAVX2, BB0; VMOVDQA BB0, BB1; VMOVDQA BB0, BB2; VMOVDQA BB0, BB3 + VMOVDQA state2StoreAVX2, CC0; VMOVDQA CC0, CC1; VMOVDQA CC0, CC2; VMOVDQA CC0, CC3 + VMOVDQA ctr3StoreAVX2, DD0; VPADDD ·avx2IncMask<>(SB), DD0, DD0; VPADDD ·avx2IncMask<>(SB), DD0, DD1; VPADDD ·avx2IncMask<>(SB), DD1, DD2; VPADDD ·avx2IncMask<>(SB), DD2, DD3 + VMOVDQA DD0, ctr0StoreAVX2; VMOVDQA DD1, ctr1StoreAVX2; VMOVDQA DD2, ctr2StoreAVX2; VMOVDQA DD3, ctr3StoreAVX2 + XORQ itr1, itr1 + +openAVX2InternalLoop: + // Lets just say this spaghetti loop interleaves 2 quarter rounds with 3 poly multiplications + // Effectively per 512 bytes of stream we hash 480 bytes of ciphertext + polyAdd(0*8(inp)(itr1*1)) + VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 + polyMulStage1_AVX2 + VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 + VPSHUFB ·rol16<>(SB), DD0, DD0; VPSHUFB ·rol16<>(SB), DD1, DD1; VPSHUFB ·rol16<>(SB), DD2, DD2; VPSHUFB ·rol16<>(SB), DD3, DD3 + polyMulStage2_AVX2 + VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 + VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 + polyMulStage3_AVX2 + VMOVDQA CC3, tmpStoreAVX2 + VPSLLD $12, BB0, CC3; VPSRLD $20, BB0, BB0; VPXOR CC3, BB0, BB0 + VPSLLD $12, BB1, CC3; VPSRLD $20, BB1, BB1; VPXOR CC3, BB1, BB1 + VPSLLD $12, BB2, CC3; VPSRLD $20, BB2, BB2; VPXOR CC3, BB2, BB2 + VPSLLD $12, BB3, CC3; VPSRLD $20, BB3, BB3; VPXOR CC3, BB3, BB3 + VMOVDQA tmpStoreAVX2, CC3 + polyMulReduceStage + VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 + VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 + VPSHUFB ·rol8<>(SB), DD0, DD0; VPSHUFB ·rol8<>(SB), DD1, DD1; VPSHUFB ·rol8<>(SB), DD2, DD2; VPSHUFB ·rol8<>(SB), DD3, DD3 + polyAdd(2*8(inp)(itr1*1)) + VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 + polyMulStage1_AVX2 + VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 + VMOVDQA CC3, tmpStoreAVX2 + VPSLLD $7, BB0, CC3; VPSRLD $25, BB0, BB0; VPXOR CC3, BB0, BB0 + VPSLLD $7, BB1, CC3; VPSRLD $25, BB1, BB1; VPXOR CC3, BB1, BB1 + VPSLLD $7, BB2, CC3; VPSRLD $25, BB2, BB2; VPXOR CC3, BB2, BB2 + VPSLLD $7, BB3, CC3; VPSRLD $25, BB3, BB3; VPXOR CC3, BB3, BB3 + VMOVDQA tmpStoreAVX2, CC3 + polyMulStage2_AVX2 + VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1; VPALIGNR $4, BB2, BB2, BB2; VPALIGNR $4, BB3, BB3, BB3 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $8, CC3, CC3, CC3 + VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1; VPALIGNR $12, DD2, DD2, DD2; VPALIGNR $12, DD3, DD3, DD3 + VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 + polyMulStage3_AVX2 + VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 + VPSHUFB ·rol16<>(SB), DD0, DD0; VPSHUFB ·rol16<>(SB), DD1, DD1; VPSHUFB ·rol16<>(SB), DD2, DD2; VPSHUFB ·rol16<>(SB), DD3, DD3 + polyMulReduceStage + VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 + VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 + polyAdd(4*8(inp)(itr1*1)) + LEAQ (6*8)(itr1), itr1 + VMOVDQA CC3, tmpStoreAVX2 + VPSLLD $12, BB0, CC3; VPSRLD $20, BB0, BB0; VPXOR CC3, BB0, BB0 + VPSLLD $12, BB1, CC3; VPSRLD $20, BB1, BB1; VPXOR CC3, BB1, BB1 + VPSLLD $12, BB2, CC3; VPSRLD $20, BB2, BB2; VPXOR CC3, BB2, BB2 + VPSLLD $12, BB3, CC3; VPSRLD $20, BB3, BB3; VPXOR CC3, BB3, BB3 + VMOVDQA tmpStoreAVX2, CC3 + polyMulStage1_AVX2 + VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 + VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 + polyMulStage2_AVX2 + VPSHUFB ·rol8<>(SB), DD0, DD0; VPSHUFB ·rol8<>(SB), DD1, DD1; VPSHUFB ·rol8<>(SB), DD2, DD2; VPSHUFB ·rol8<>(SB), DD3, DD3 + VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 + polyMulStage3_AVX2 + VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 + VMOVDQA CC3, tmpStoreAVX2 + VPSLLD $7, BB0, CC3; VPSRLD $25, BB0, BB0; VPXOR CC3, BB0, BB0 + VPSLLD $7, BB1, CC3; VPSRLD $25, BB1, BB1; VPXOR CC3, BB1, BB1 + VPSLLD $7, BB2, CC3; VPSRLD $25, BB2, BB2; VPXOR CC3, BB2, BB2 + VPSLLD $7, BB3, CC3; VPSRLD $25, BB3, BB3; VPXOR CC3, BB3, BB3 + VMOVDQA tmpStoreAVX2, CC3 + polyMulReduceStage + VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1; VPALIGNR $12, BB2, BB2, BB2; VPALIGNR $12, BB3, BB3, BB3 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $8, CC3, CC3, CC3 + VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1; VPALIGNR $4, DD2, DD2, DD2; VPALIGNR $4, DD3, DD3, DD3 + CMPQ itr1, $480 + JNE openAVX2InternalLoop + + VPADDD ·chacha20Constants<>(SB), AA0, AA0; VPADDD ·chacha20Constants<>(SB), AA1, AA1; VPADDD ·chacha20Constants<>(SB), AA2, AA2; VPADDD ·chacha20Constants<>(SB), AA3, AA3 + VPADDD state1StoreAVX2, BB0, BB0; VPADDD state1StoreAVX2, BB1, BB1; VPADDD state1StoreAVX2, BB2, BB2; VPADDD state1StoreAVX2, BB3, BB3 + VPADDD state2StoreAVX2, CC0, CC0; VPADDD state2StoreAVX2, CC1, CC1; VPADDD state2StoreAVX2, CC2, CC2; VPADDD state2StoreAVX2, CC3, CC3 + VPADDD ctr0StoreAVX2, DD0, DD0; VPADDD ctr1StoreAVX2, DD1, DD1; VPADDD ctr2StoreAVX2, DD2, DD2; VPADDD ctr3StoreAVX2, DD3, DD3 + VMOVDQA CC3, tmpStoreAVX2 + + // We only hashed 480 of the 512 bytes available - hash the remaining 32 here + polyAdd(480(inp)) + polyMulAVX2 + VPERM2I128 $0x02, AA0, BB0, CC3; VPERM2I128 $0x13, AA0, BB0, BB0; VPERM2I128 $0x02, CC0, DD0, AA0; VPERM2I128 $0x13, CC0, DD0, CC0 + VPXOR (0*32)(inp), CC3, CC3; VPXOR (1*32)(inp), AA0, AA0; VPXOR (2*32)(inp), BB0, BB0; VPXOR (3*32)(inp), CC0, CC0 + VMOVDQU CC3, (0*32)(oup); VMOVDQU AA0, (1*32)(oup); VMOVDQU BB0, (2*32)(oup); VMOVDQU CC0, (3*32)(oup) + VPERM2I128 $0x02, AA1, BB1, AA0; VPERM2I128 $0x02, CC1, DD1, BB0; VPERM2I128 $0x13, AA1, BB1, CC0; VPERM2I128 $0x13, CC1, DD1, DD0 + VPXOR (4*32)(inp), AA0, AA0; VPXOR (5*32)(inp), BB0, BB0; VPXOR (6*32)(inp), CC0, CC0; VPXOR (7*32)(inp), DD0, DD0 + VMOVDQU AA0, (4*32)(oup); VMOVDQU BB0, (5*32)(oup); VMOVDQU CC0, (6*32)(oup); VMOVDQU DD0, (7*32)(oup) + + // and here + polyAdd(496(inp)) + polyMulAVX2 + VPERM2I128 $0x02, AA2, BB2, AA0; VPERM2I128 $0x02, CC2, DD2, BB0; VPERM2I128 $0x13, AA2, BB2, CC0; VPERM2I128 $0x13, CC2, DD2, DD0 + VPXOR (8*32)(inp), AA0, AA0; VPXOR (9*32)(inp), BB0, BB0; VPXOR (10*32)(inp), CC0, CC0; VPXOR (11*32)(inp), DD0, DD0 + VMOVDQU AA0, (8*32)(oup); VMOVDQU BB0, (9*32)(oup); VMOVDQU CC0, (10*32)(oup); VMOVDQU DD0, (11*32)(oup) + VPERM2I128 $0x02, AA3, BB3, AA0; VPERM2I128 $0x02, tmpStoreAVX2, DD3, BB0; VPERM2I128 $0x13, AA3, BB3, CC0; VPERM2I128 $0x13, tmpStoreAVX2, DD3, DD0 + VPXOR (12*32)(inp), AA0, AA0; VPXOR (13*32)(inp), BB0, BB0; VPXOR (14*32)(inp), CC0, CC0; VPXOR (15*32)(inp), DD0, DD0 + VMOVDQU AA0, (12*32)(oup); VMOVDQU BB0, (13*32)(oup); VMOVDQU CC0, (14*32)(oup); VMOVDQU DD0, (15*32)(oup) + LEAQ (32*16)(inp), inp + LEAQ (32*16)(oup), oup + SUBQ $(32*16), inl + JMP openAVX2MainLoop + +openAVX2MainLoopDone: + // Handle the various tail sizes efficiently + TESTQ inl, inl + JE openSSEFinalize + CMPQ inl, $128 + JBE openAVX2Tail128 + CMPQ inl, $256 + JBE openAVX2Tail256 + CMPQ inl, $384 + JBE openAVX2Tail384 + JMP openAVX2Tail512 + +// ---------------------------------------------------------------------------- +// Special optimization for buffers smaller than 193 bytes +openAVX2192: + // For up to 192 bytes of ciphertext and 64 bytes for the poly key, we process four blocks + VMOVDQA AA0, AA1 + VMOVDQA BB0, BB1 + VMOVDQA CC0, CC1 + VPADDD ·avx2IncMask<>(SB), DD0, DD1 + VMOVDQA AA0, AA2 + VMOVDQA BB0, BB2 + VMOVDQA CC0, CC2 + VMOVDQA DD0, DD2 + VMOVDQA DD1, TT3 + MOVQ $10, itr2 + +openAVX2192InnerCipherLoop: + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0) + VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1 + VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1 + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0) + VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1 + VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1 + DECQ itr2 + JNE openAVX2192InnerCipherLoop + VPADDD AA2, AA0, AA0; VPADDD AA2, AA1, AA1 + VPADDD BB2, BB0, BB0; VPADDD BB2, BB1, BB1 + VPADDD CC2, CC0, CC0; VPADDD CC2, CC1, CC1 + VPADDD DD2, DD0, DD0; VPADDD TT3, DD1, DD1 + VPERM2I128 $0x02, AA0, BB0, TT0 + + // Clamp and store poly key + VPAND ·polyClampMask<>(SB), TT0, TT0 + VMOVDQA TT0, rsStoreAVX2 + + // Stream for up to 192 bytes + VPERM2I128 $0x13, AA0, BB0, AA0 + VPERM2I128 $0x13, CC0, DD0, BB0 + VPERM2I128 $0x02, AA1, BB1, CC0 + VPERM2I128 $0x02, CC1, DD1, DD0 + VPERM2I128 $0x13, AA1, BB1, AA1 + VPERM2I128 $0x13, CC1, DD1, BB1 + +openAVX2ShortOpen: + // Hash + MOVQ ad_len+80(FP), itr2 + CALL polyHashADInternal<>(SB) + +openAVX2ShortOpenLoop: + CMPQ inl, $32 + JB openAVX2ShortTail32 + SUBQ $32, inl + + // Load for hashing + polyAdd(0*8(inp)) + polyMulAVX2 + polyAdd(2*8(inp)) + polyMulAVX2 + + // Load for decryption + VPXOR (inp), AA0, AA0 + VMOVDQU AA0, (oup) + LEAQ (1*32)(inp), inp + LEAQ (1*32)(oup), oup + + // Shift stream left + VMOVDQA BB0, AA0 + VMOVDQA CC0, BB0 + VMOVDQA DD0, CC0 + VMOVDQA AA1, DD0 + VMOVDQA BB1, AA1 + VMOVDQA CC1, BB1 + VMOVDQA DD1, CC1 + VMOVDQA AA2, DD1 + VMOVDQA BB2, AA2 + JMP openAVX2ShortOpenLoop + +openAVX2ShortTail32: + CMPQ inl, $16 + VMOVDQA A0, A1 + JB openAVX2ShortDone + + SUBQ $16, inl + + // Load for hashing + polyAdd(0*8(inp)) + polyMulAVX2 + + // Load for decryption + VPXOR (inp), A0, T0 + VMOVDQU T0, (oup) + LEAQ (1*16)(inp), inp + LEAQ (1*16)(oup), oup + VPERM2I128 $0x11, AA0, AA0, AA0 + VMOVDQA A0, A1 + +openAVX2ShortDone: + VZEROUPPER + JMP openSSETail16 + +// ---------------------------------------------------------------------------- +// Special optimization for buffers smaller than 321 bytes +openAVX2320: + // For up to 320 bytes of ciphertext and 64 bytes for the poly key, we process six blocks + VMOVDQA AA0, AA1; VMOVDQA BB0, BB1; VMOVDQA CC0, CC1; VPADDD ·avx2IncMask<>(SB), DD0, DD1 + VMOVDQA AA0, AA2; VMOVDQA BB0, BB2; VMOVDQA CC0, CC2; VPADDD ·avx2IncMask<>(SB), DD1, DD2 + VMOVDQA BB0, TT1; VMOVDQA CC0, TT2; VMOVDQA DD0, TT3 + MOVQ $10, itr2 + +openAVX2320InnerCipherLoop: + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0); chachaQR_AVX2(AA2, BB2, CC2, DD2, TT0) + VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1; VPALIGNR $4, BB2, BB2, BB2 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2 + VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1; VPALIGNR $12, DD2, DD2, DD2 + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0); chachaQR_AVX2(AA2, BB2, CC2, DD2, TT0) + VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1; VPALIGNR $12, BB2, BB2, BB2 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2 + VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1; VPALIGNR $4, DD2, DD2, DD2 + DECQ itr2 + JNE openAVX2320InnerCipherLoop + + VMOVDQA ·chacha20Constants<>(SB), TT0 + VPADDD TT0, AA0, AA0; VPADDD TT0, AA1, AA1; VPADDD TT0, AA2, AA2 + VPADDD TT1, BB0, BB0; VPADDD TT1, BB1, BB1; VPADDD TT1, BB2, BB2 + VPADDD TT2, CC0, CC0; VPADDD TT2, CC1, CC1; VPADDD TT2, CC2, CC2 + VMOVDQA ·avx2IncMask<>(SB), TT0 + VPADDD TT3, DD0, DD0; VPADDD TT0, TT3, TT3 + VPADDD TT3, DD1, DD1; VPADDD TT0, TT3, TT3 + VPADDD TT3, DD2, DD2 + + // Clamp and store poly key + VPERM2I128 $0x02, AA0, BB0, TT0 + VPAND ·polyClampMask<>(SB), TT0, TT0 + VMOVDQA TT0, rsStoreAVX2 + + // Stream for up to 320 bytes + VPERM2I128 $0x13, AA0, BB0, AA0 + VPERM2I128 $0x13, CC0, DD0, BB0 + VPERM2I128 $0x02, AA1, BB1, CC0 + VPERM2I128 $0x02, CC1, DD1, DD0 + VPERM2I128 $0x13, AA1, BB1, AA1 + VPERM2I128 $0x13, CC1, DD1, BB1 + VPERM2I128 $0x02, AA2, BB2, CC1 + VPERM2I128 $0x02, CC2, DD2, DD1 + VPERM2I128 $0x13, AA2, BB2, AA2 + VPERM2I128 $0x13, CC2, DD2, BB2 + JMP openAVX2ShortOpen + +// ---------------------------------------------------------------------------- +// Special optimization for the last 128 bytes of ciphertext +openAVX2Tail128: + // Need to decrypt up to 128 bytes - prepare two blocks + VMOVDQA ·chacha20Constants<>(SB), AA1 + VMOVDQA state1StoreAVX2, BB1 + VMOVDQA state2StoreAVX2, CC1 + VMOVDQA ctr3StoreAVX2, DD1 + VPADDD ·avx2IncMask<>(SB), DD1, DD1 + VMOVDQA DD1, DD0 + + XORQ itr2, itr2 + MOVQ inl, itr1 + ANDQ $-16, itr1 + TESTQ itr1, itr1 + JE openAVX2Tail128LoopB + +openAVX2Tail128LoopA: + // Perform ChaCha rounds, while hashing the remaining input + polyAdd(0(inp)(itr2*1)) + polyMulAVX2 + +openAVX2Tail128LoopB: + ADDQ $16, itr2 + chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0) + VPALIGNR $4, BB1, BB1, BB1 + VPALIGNR $8, CC1, CC1, CC1 + VPALIGNR $12, DD1, DD1, DD1 + chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0) + VPALIGNR $12, BB1, BB1, BB1 + VPALIGNR $8, CC1, CC1, CC1 + VPALIGNR $4, DD1, DD1, DD1 + CMPQ itr2, itr1 + JB openAVX2Tail128LoopA + CMPQ itr2, $160 + JNE openAVX2Tail128LoopB + + VPADDD ·chacha20Constants<>(SB), AA1, AA1 + VPADDD state1StoreAVX2, BB1, BB1 + VPADDD state2StoreAVX2, CC1, CC1 + VPADDD DD0, DD1, DD1 + VPERM2I128 $0x02, AA1, BB1, AA0; VPERM2I128 $0x02, CC1, DD1, BB0; VPERM2I128 $0x13, AA1, BB1, CC0; VPERM2I128 $0x13, CC1, DD1, DD0 + +openAVX2TailLoop: + CMPQ inl, $32 + JB openAVX2Tail + SUBQ $32, inl + + // Load for decryption + VPXOR (inp), AA0, AA0 + VMOVDQU AA0, (oup) + LEAQ (1*32)(inp), inp + LEAQ (1*32)(oup), oup + VMOVDQA BB0, AA0 + VMOVDQA CC0, BB0 + VMOVDQA DD0, CC0 + JMP openAVX2TailLoop + +openAVX2Tail: + CMPQ inl, $16 + VMOVDQA A0, A1 + JB openAVX2TailDone + SUBQ $16, inl + + // Load for decryption + VPXOR (inp), A0, T0 + VMOVDQU T0, (oup) + LEAQ (1*16)(inp), inp + LEAQ (1*16)(oup), oup + VPERM2I128 $0x11, AA0, AA0, AA0 + VMOVDQA A0, A1 + +openAVX2TailDone: + VZEROUPPER + JMP openSSETail16 + +// ---------------------------------------------------------------------------- +// Special optimization for the last 256 bytes of ciphertext +openAVX2Tail256: + // Need to decrypt up to 256 bytes - prepare four blocks + VMOVDQA ·chacha20Constants<>(SB), AA0; VMOVDQA AA0, AA1 + VMOVDQA state1StoreAVX2, BB0; VMOVDQA BB0, BB1 + VMOVDQA state2StoreAVX2, CC0; VMOVDQA CC0, CC1 + VMOVDQA ctr3StoreAVX2, DD0 + VPADDD ·avx2IncMask<>(SB), DD0, DD0 + VPADDD ·avx2IncMask<>(SB), DD0, DD1 + VMOVDQA DD0, TT1 + VMOVDQA DD1, TT2 + + // Compute the number of iterations that will hash data + MOVQ inl, tmpStoreAVX2 + MOVQ inl, itr1 + SUBQ $128, itr1 + SHRQ $4, itr1 + MOVQ $10, itr2 + CMPQ itr1, $10 + CMOVQGT itr2, itr1 + MOVQ inp, inl + XORQ itr2, itr2 + +openAVX2Tail256LoopA: + polyAdd(0(inl)) + polyMulAVX2 + LEAQ 16(inl), inl + + // Perform ChaCha rounds, while hashing the remaining input +openAVX2Tail256LoopB: + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0) + VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1 + VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1 + INCQ itr2 + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0) + VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1 + VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1 + CMPQ itr2, itr1 + JB openAVX2Tail256LoopA + + CMPQ itr2, $10 + JNE openAVX2Tail256LoopB + + MOVQ inl, itr2 + SUBQ inp, inl + MOVQ inl, itr1 + MOVQ tmpStoreAVX2, inl + + // Hash the remainder of data (if any) +openAVX2Tail256Hash: + ADDQ $16, itr1 + CMPQ itr1, inl + JGT openAVX2Tail256HashEnd + polyAdd (0(itr2)) + polyMulAVX2 + LEAQ 16(itr2), itr2 + JMP openAVX2Tail256Hash + +// Store 128 bytes safely, then go to store loop +openAVX2Tail256HashEnd: + VPADDD ·chacha20Constants<>(SB), AA0, AA0; VPADDD ·chacha20Constants<>(SB), AA1, AA1 + VPADDD state1StoreAVX2, BB0, BB0; VPADDD state1StoreAVX2, BB1, BB1 + VPADDD state2StoreAVX2, CC0, CC0; VPADDD state2StoreAVX2, CC1, CC1 + VPADDD TT1, DD0, DD0; VPADDD TT2, DD1, DD1 + VPERM2I128 $0x02, AA0, BB0, AA2; VPERM2I128 $0x02, CC0, DD0, BB2; VPERM2I128 $0x13, AA0, BB0, CC2; VPERM2I128 $0x13, CC0, DD0, DD2 + VPERM2I128 $0x02, AA1, BB1, AA0; VPERM2I128 $0x02, CC1, DD1, BB0; VPERM2I128 $0x13, AA1, BB1, CC0; VPERM2I128 $0x13, CC1, DD1, DD0 + + VPXOR (0*32)(inp), AA2, AA2; VPXOR (1*32)(inp), BB2, BB2; VPXOR (2*32)(inp), CC2, CC2; VPXOR (3*32)(inp), DD2, DD2 + VMOVDQU AA2, (0*32)(oup); VMOVDQU BB2, (1*32)(oup); VMOVDQU CC2, (2*32)(oup); VMOVDQU DD2, (3*32)(oup) + LEAQ (4*32)(inp), inp + LEAQ (4*32)(oup), oup + SUBQ $4*32, inl + + JMP openAVX2TailLoop + +// ---------------------------------------------------------------------------- +// Special optimization for the last 384 bytes of ciphertext +openAVX2Tail384: + // Need to decrypt up to 384 bytes - prepare six blocks + VMOVDQA ·chacha20Constants<>(SB), AA0; VMOVDQA AA0, AA1; VMOVDQA AA0, AA2 + VMOVDQA state1StoreAVX2, BB0; VMOVDQA BB0, BB1; VMOVDQA BB0, BB2 + VMOVDQA state2StoreAVX2, CC0; VMOVDQA CC0, CC1; VMOVDQA CC0, CC2 + VMOVDQA ctr3StoreAVX2, DD0 + VPADDD ·avx2IncMask<>(SB), DD0, DD0 + VPADDD ·avx2IncMask<>(SB), DD0, DD1 + VPADDD ·avx2IncMask<>(SB), DD1, DD2 + VMOVDQA DD0, ctr0StoreAVX2 + VMOVDQA DD1, ctr1StoreAVX2 + VMOVDQA DD2, ctr2StoreAVX2 + + // Compute the number of iterations that will hash two blocks of data + MOVQ inl, tmpStoreAVX2 + MOVQ inl, itr1 + SUBQ $256, itr1 + SHRQ $4, itr1 + ADDQ $6, itr1 + MOVQ $10, itr2 + CMPQ itr1, $10 + CMOVQGT itr2, itr1 + MOVQ inp, inl + XORQ itr2, itr2 + + // Perform ChaCha rounds, while hashing the remaining input +openAVX2Tail384LoopB: + polyAdd(0(inl)) + polyMulAVX2 + LEAQ 16(inl), inl + +openAVX2Tail384LoopA: + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0); chachaQR_AVX2(AA2, BB2, CC2, DD2, TT0) + VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1; VPALIGNR $4, BB2, BB2, BB2 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2 + VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1; VPALIGNR $12, DD2, DD2, DD2 + polyAdd(0(inl)) + polyMulAVX2 + LEAQ 16(inl), inl + INCQ itr2 + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0); chachaQR_AVX2(AA2, BB2, CC2, DD2, TT0) + VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1; VPALIGNR $12, BB2, BB2, BB2 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2 + VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1; VPALIGNR $4, DD2, DD2, DD2 + + CMPQ itr2, itr1 + JB openAVX2Tail384LoopB + + CMPQ itr2, $10 + JNE openAVX2Tail384LoopA + + MOVQ inl, itr2 + SUBQ inp, inl + MOVQ inl, itr1 + MOVQ tmpStoreAVX2, inl + +openAVX2Tail384Hash: + ADDQ $16, itr1 + CMPQ itr1, inl + JGT openAVX2Tail384HashEnd + polyAdd(0(itr2)) + polyMulAVX2 + LEAQ 16(itr2), itr2 + JMP openAVX2Tail384Hash + +// Store 256 bytes safely, then go to store loop +openAVX2Tail384HashEnd: + VPADDD ·chacha20Constants<>(SB), AA0, AA0; VPADDD ·chacha20Constants<>(SB), AA1, AA1; VPADDD ·chacha20Constants<>(SB), AA2, AA2 + VPADDD state1StoreAVX2, BB0, BB0; VPADDD state1StoreAVX2, BB1, BB1; VPADDD state1StoreAVX2, BB2, BB2 + VPADDD state2StoreAVX2, CC0, CC0; VPADDD state2StoreAVX2, CC1, CC1; VPADDD state2StoreAVX2, CC2, CC2 + VPADDD ctr0StoreAVX2, DD0, DD0; VPADDD ctr1StoreAVX2, DD1, DD1; VPADDD ctr2StoreAVX2, DD2, DD2 + VPERM2I128 $0x02, AA0, BB0, TT0; VPERM2I128 $0x02, CC0, DD0, TT1; VPERM2I128 $0x13, AA0, BB0, TT2; VPERM2I128 $0x13, CC0, DD0, TT3 + VPXOR (0*32)(inp), TT0, TT0; VPXOR (1*32)(inp), TT1, TT1; VPXOR (2*32)(inp), TT2, TT2; VPXOR (3*32)(inp), TT3, TT3 + VMOVDQU TT0, (0*32)(oup); VMOVDQU TT1, (1*32)(oup); VMOVDQU TT2, (2*32)(oup); VMOVDQU TT3, (3*32)(oup) + VPERM2I128 $0x02, AA1, BB1, TT0; VPERM2I128 $0x02, CC1, DD1, TT1; VPERM2I128 $0x13, AA1, BB1, TT2; VPERM2I128 $0x13, CC1, DD1, TT3 + VPXOR (4*32)(inp), TT0, TT0; VPXOR (5*32)(inp), TT1, TT1; VPXOR (6*32)(inp), TT2, TT2; VPXOR (7*32)(inp), TT3, TT3 + VMOVDQU TT0, (4*32)(oup); VMOVDQU TT1, (5*32)(oup); VMOVDQU TT2, (6*32)(oup); VMOVDQU TT3, (7*32)(oup) + VPERM2I128 $0x02, AA2, BB2, AA0; VPERM2I128 $0x02, CC2, DD2, BB0; VPERM2I128 $0x13, AA2, BB2, CC0; VPERM2I128 $0x13, CC2, DD2, DD0 + LEAQ (8*32)(inp), inp + LEAQ (8*32)(oup), oup + SUBQ $8*32, inl + JMP openAVX2TailLoop + +// ---------------------------------------------------------------------------- +// Special optimization for the last 512 bytes of ciphertext +openAVX2Tail512: + VMOVDQU ·chacha20Constants<>(SB), AA0; VMOVDQA AA0, AA1; VMOVDQA AA0, AA2; VMOVDQA AA0, AA3 + VMOVDQA state1StoreAVX2, BB0; VMOVDQA BB0, BB1; VMOVDQA BB0, BB2; VMOVDQA BB0, BB3 + VMOVDQA state2StoreAVX2, CC0; VMOVDQA CC0, CC1; VMOVDQA CC0, CC2; VMOVDQA CC0, CC3 + VMOVDQA ctr3StoreAVX2, DD0; VPADDD ·avx2IncMask<>(SB), DD0, DD0; VPADDD ·avx2IncMask<>(SB), DD0, DD1; VPADDD ·avx2IncMask<>(SB), DD1, DD2; VPADDD ·avx2IncMask<>(SB), DD2, DD3 + VMOVDQA DD0, ctr0StoreAVX2; VMOVDQA DD1, ctr1StoreAVX2; VMOVDQA DD2, ctr2StoreAVX2; VMOVDQA DD3, ctr3StoreAVX2 + XORQ itr1, itr1 + MOVQ inp, itr2 + +openAVX2Tail512LoopB: + polyAdd(0(itr2)) + polyMulAVX2 + LEAQ (2*8)(itr2), itr2 + +openAVX2Tail512LoopA: + VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 + VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 + VPSHUFB ·rol16<>(SB), DD0, DD0; VPSHUFB ·rol16<>(SB), DD1, DD1; VPSHUFB ·rol16<>(SB), DD2, DD2; VPSHUFB ·rol16<>(SB), DD3, DD3 + VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 + VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 + VMOVDQA CC3, tmpStoreAVX2 + VPSLLD $12, BB0, CC3; VPSRLD $20, BB0, BB0; VPXOR CC3, BB0, BB0 + VPSLLD $12, BB1, CC3; VPSRLD $20, BB1, BB1; VPXOR CC3, BB1, BB1 + VPSLLD $12, BB2, CC3; VPSRLD $20, BB2, BB2; VPXOR CC3, BB2, BB2 + VPSLLD $12, BB3, CC3; VPSRLD $20, BB3, BB3; VPXOR CC3, BB3, BB3 + VMOVDQA tmpStoreAVX2, CC3 + polyAdd(0*8(itr2)) + polyMulAVX2 + VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 + VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 + VPSHUFB ·rol8<>(SB), DD0, DD0; VPSHUFB ·rol8<>(SB), DD1, DD1; VPSHUFB ·rol8<>(SB), DD2, DD2; VPSHUFB ·rol8<>(SB), DD3, DD3 + VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 + VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 + VMOVDQA CC3, tmpStoreAVX2 + VPSLLD $7, BB0, CC3; VPSRLD $25, BB0, BB0; VPXOR CC3, BB0, BB0 + VPSLLD $7, BB1, CC3; VPSRLD $25, BB1, BB1; VPXOR CC3, BB1, BB1 + VPSLLD $7, BB2, CC3; VPSRLD $25, BB2, BB2; VPXOR CC3, BB2, BB2 + VPSLLD $7, BB3, CC3; VPSRLD $25, BB3, BB3; VPXOR CC3, BB3, BB3 + VMOVDQA tmpStoreAVX2, CC3 + VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1; VPALIGNR $4, BB2, BB2, BB2; VPALIGNR $4, BB3, BB3, BB3 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $8, CC3, CC3, CC3 + VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1; VPALIGNR $12, DD2, DD2, DD2; VPALIGNR $12, DD3, DD3, DD3 + VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 + VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 + VPSHUFB ·rol16<>(SB), DD0, DD0; VPSHUFB ·rol16<>(SB), DD1, DD1; VPSHUFB ·rol16<>(SB), DD2, DD2; VPSHUFB ·rol16<>(SB), DD3, DD3 + VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 + VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 + polyAdd(2*8(itr2)) + polyMulAVX2 + LEAQ (4*8)(itr2), itr2 + VMOVDQA CC3, tmpStoreAVX2 + VPSLLD $12, BB0, CC3; VPSRLD $20, BB0, BB0; VPXOR CC3, BB0, BB0 + VPSLLD $12, BB1, CC3; VPSRLD $20, BB1, BB1; VPXOR CC3, BB1, BB1 + VPSLLD $12, BB2, CC3; VPSRLD $20, BB2, BB2; VPXOR CC3, BB2, BB2 + VPSLLD $12, BB3, CC3; VPSRLD $20, BB3, BB3; VPXOR CC3, BB3, BB3 + VMOVDQA tmpStoreAVX2, CC3 + VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 + VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 + VPSHUFB ·rol8<>(SB), DD0, DD0; VPSHUFB ·rol8<>(SB), DD1, DD1; VPSHUFB ·rol8<>(SB), DD2, DD2; VPSHUFB ·rol8<>(SB), DD3, DD3 + VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 + VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 + VMOVDQA CC3, tmpStoreAVX2 + VPSLLD $7, BB0, CC3; VPSRLD $25, BB0, BB0; VPXOR CC3, BB0, BB0 + VPSLLD $7, BB1, CC3; VPSRLD $25, BB1, BB1; VPXOR CC3, BB1, BB1 + VPSLLD $7, BB2, CC3; VPSRLD $25, BB2, BB2; VPXOR CC3, BB2, BB2 + VPSLLD $7, BB3, CC3; VPSRLD $25, BB3, BB3; VPXOR CC3, BB3, BB3 + VMOVDQA tmpStoreAVX2, CC3 + VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1; VPALIGNR $12, BB2, BB2, BB2; VPALIGNR $12, BB3, BB3, BB3 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $8, CC3, CC3, CC3 + VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1; VPALIGNR $4, DD2, DD2, DD2; VPALIGNR $4, DD3, DD3, DD3 + INCQ itr1 + CMPQ itr1, $4 + JLT openAVX2Tail512LoopB + + CMPQ itr1, $10 + JNE openAVX2Tail512LoopA + + MOVQ inl, itr1 + SUBQ $384, itr1 + ANDQ $-16, itr1 + +openAVX2Tail512HashLoop: + TESTQ itr1, itr1 + JE openAVX2Tail512HashEnd + polyAdd(0(itr2)) + polyMulAVX2 + LEAQ 16(itr2), itr2 + SUBQ $16, itr1 + JMP openAVX2Tail512HashLoop + +openAVX2Tail512HashEnd: + VPADDD ·chacha20Constants<>(SB), AA0, AA0; VPADDD ·chacha20Constants<>(SB), AA1, AA1; VPADDD ·chacha20Constants<>(SB), AA2, AA2; VPADDD ·chacha20Constants<>(SB), AA3, AA3 + VPADDD state1StoreAVX2, BB0, BB0; VPADDD state1StoreAVX2, BB1, BB1; VPADDD state1StoreAVX2, BB2, BB2; VPADDD state1StoreAVX2, BB3, BB3 + VPADDD state2StoreAVX2, CC0, CC0; VPADDD state2StoreAVX2, CC1, CC1; VPADDD state2StoreAVX2, CC2, CC2; VPADDD state2StoreAVX2, CC3, CC3 + VPADDD ctr0StoreAVX2, DD0, DD0; VPADDD ctr1StoreAVX2, DD1, DD1; VPADDD ctr2StoreAVX2, DD2, DD2; VPADDD ctr3StoreAVX2, DD3, DD3 + VMOVDQA CC3, tmpStoreAVX2 + VPERM2I128 $0x02, AA0, BB0, CC3; VPERM2I128 $0x13, AA0, BB0, BB0; VPERM2I128 $0x02, CC0, DD0, AA0; VPERM2I128 $0x13, CC0, DD0, CC0 + VPXOR (0*32)(inp), CC3, CC3; VPXOR (1*32)(inp), AA0, AA0; VPXOR (2*32)(inp), BB0, BB0; VPXOR (3*32)(inp), CC0, CC0 + VMOVDQU CC3, (0*32)(oup); VMOVDQU AA0, (1*32)(oup); VMOVDQU BB0, (2*32)(oup); VMOVDQU CC0, (3*32)(oup) + VPERM2I128 $0x02, AA1, BB1, AA0; VPERM2I128 $0x02, CC1, DD1, BB0; VPERM2I128 $0x13, AA1, BB1, CC0; VPERM2I128 $0x13, CC1, DD1, DD0 + VPXOR (4*32)(inp), AA0, AA0; VPXOR (5*32)(inp), BB0, BB0; VPXOR (6*32)(inp), CC0, CC0; VPXOR (7*32)(inp), DD0, DD0 + VMOVDQU AA0, (4*32)(oup); VMOVDQU BB0, (5*32)(oup); VMOVDQU CC0, (6*32)(oup); VMOVDQU DD0, (7*32)(oup) + VPERM2I128 $0x02, AA2, BB2, AA0; VPERM2I128 $0x02, CC2, DD2, BB0; VPERM2I128 $0x13, AA2, BB2, CC0; VPERM2I128 $0x13, CC2, DD2, DD0 + VPXOR (8*32)(inp), AA0, AA0; VPXOR (9*32)(inp), BB0, BB0; VPXOR (10*32)(inp), CC0, CC0; VPXOR (11*32)(inp), DD0, DD0 + VMOVDQU AA0, (8*32)(oup); VMOVDQU BB0, (9*32)(oup); VMOVDQU CC0, (10*32)(oup); VMOVDQU DD0, (11*32)(oup) + VPERM2I128 $0x02, AA3, BB3, AA0; VPERM2I128 $0x02, tmpStoreAVX2, DD3, BB0; VPERM2I128 $0x13, AA3, BB3, CC0; VPERM2I128 $0x13, tmpStoreAVX2, DD3, DD0 + + LEAQ (12*32)(inp), inp + LEAQ (12*32)(oup), oup + SUBQ $12*32, inl + + JMP openAVX2TailLoop + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- +// func chacha20Poly1305Seal(dst, key, src, ad []byte) +TEXT ·chacha20Poly1305Seal(SB), 0, $288-96 + // For aligned stack access + MOVQ SP, BP + ADDQ $32, BP + ANDQ $-32, BP + MOVQ dst+0(FP), oup + MOVQ key+24(FP), keyp + MOVQ src+48(FP), inp + MOVQ src_len+56(FP), inl + MOVQ ad+72(FP), adp + + CMPB ·useAVX2(SB), $1 + JE chacha20Poly1305Seal_AVX2 + + // Special optimization, for very short buffers + CMPQ inl, $128 + JBE sealSSE128 // About 15% faster + + // In the seal case - prepare the poly key + 3 blocks of stream in the first iteration + MOVOU ·chacha20Constants<>(SB), A0 + MOVOU (1*16)(keyp), B0 + MOVOU (2*16)(keyp), C0 + MOVOU (3*16)(keyp), D0 + + // Store state on stack for future use + MOVO B0, state1Store + MOVO C0, state2Store + + // Load state, increment counter blocks + MOVO A0, A1; MOVO B0, B1; MOVO C0, C1; MOVO D0, D1; PADDL ·sseIncMask<>(SB), D1 + MOVO A1, A2; MOVO B1, B2; MOVO C1, C2; MOVO D1, D2; PADDL ·sseIncMask<>(SB), D2 + MOVO A2, A3; MOVO B2, B3; MOVO C2, C3; MOVO D2, D3; PADDL ·sseIncMask<>(SB), D3 + + // Store counters + MOVO D0, ctr0Store; MOVO D1, ctr1Store; MOVO D2, ctr2Store; MOVO D3, ctr3Store + MOVQ $10, itr2 + +sealSSEIntroLoop: + MOVO C3, tmpStore + chachaQR(A0, B0, C0, D0, C3); chachaQR(A1, B1, C1, D1, C3); chachaQR(A2, B2, C2, D2, C3) + MOVO tmpStore, C3 + MOVO C1, tmpStore + chachaQR(A3, B3, C3, D3, C1) + MOVO tmpStore, C1 + shiftB0Left; shiftB1Left; shiftB2Left; shiftB3Left + shiftC0Left; shiftC1Left; shiftC2Left; shiftC3Left + shiftD0Left; shiftD1Left; shiftD2Left; shiftD3Left + + MOVO C3, tmpStore + chachaQR(A0, B0, C0, D0, C3); chachaQR(A1, B1, C1, D1, C3); chachaQR(A2, B2, C2, D2, C3) + MOVO tmpStore, C3 + MOVO C1, tmpStore + chachaQR(A3, B3, C3, D3, C1) + MOVO tmpStore, C1 + shiftB0Right; shiftB1Right; shiftB2Right; shiftB3Right + shiftC0Right; shiftC1Right; shiftC2Right; shiftC3Right + shiftD0Right; shiftD1Right; shiftD2Right; shiftD3Right + DECQ itr2 + JNE sealSSEIntroLoop + + // Add in the state + PADDD ·chacha20Constants<>(SB), A0; PADDD ·chacha20Constants<>(SB), A1; PADDD ·chacha20Constants<>(SB), A2; PADDD ·chacha20Constants<>(SB), A3 + PADDD state1Store, B0; PADDD state1Store, B1; PADDD state1Store, B2; PADDD state1Store, B3 + PADDD state2Store, C1; PADDD state2Store, C2; PADDD state2Store, C3 + PADDD ctr1Store, D1; PADDD ctr2Store, D2; PADDD ctr3Store, D3 + + // Clamp and store the key + PAND ·polyClampMask<>(SB), A0 + MOVO A0, rStore + MOVO B0, sStore + + // Hash AAD + MOVQ ad_len+80(FP), itr2 + CALL polyHashADInternal<>(SB) + + MOVOU (0*16)(inp), A0; MOVOU (1*16)(inp), B0; MOVOU (2*16)(inp), C0; MOVOU (3*16)(inp), D0 + PXOR A0, A1; PXOR B0, B1; PXOR C0, C1; PXOR D0, D1 + MOVOU A1, (0*16)(oup); MOVOU B1, (1*16)(oup); MOVOU C1, (2*16)(oup); MOVOU D1, (3*16)(oup) + MOVOU (4*16)(inp), A0; MOVOU (5*16)(inp), B0; MOVOU (6*16)(inp), C0; MOVOU (7*16)(inp), D0 + PXOR A0, A2; PXOR B0, B2; PXOR C0, C2; PXOR D0, D2 + MOVOU A2, (4*16)(oup); MOVOU B2, (5*16)(oup); MOVOU C2, (6*16)(oup); MOVOU D2, (7*16)(oup) + + MOVQ $128, itr1 + SUBQ $128, inl + LEAQ 128(inp), inp + + MOVO A3, A1; MOVO B3, B1; MOVO C3, C1; MOVO D3, D1 + + CMPQ inl, $64 + JBE sealSSE128SealHash + + MOVOU (0*16)(inp), A0; MOVOU (1*16)(inp), B0; MOVOU (2*16)(inp), C0; MOVOU (3*16)(inp), D0 + PXOR A0, A3; PXOR B0, B3; PXOR C0, C3; PXOR D0, D3 + MOVOU A3, (8*16)(oup); MOVOU B3, (9*16)(oup); MOVOU C3, (10*16)(oup); MOVOU D3, (11*16)(oup) + + ADDQ $64, itr1 + SUBQ $64, inl + LEAQ 64(inp), inp + + MOVQ $2, itr1 + MOVQ $8, itr2 + + CMPQ inl, $64 + JBE sealSSETail64 + CMPQ inl, $128 + JBE sealSSETail128 + CMPQ inl, $192 + JBE sealSSETail192 + +sealSSEMainLoop: + // Load state, increment counter blocks + MOVO ·chacha20Constants<>(SB), A0; MOVO state1Store, B0; MOVO state2Store, C0; MOVO ctr3Store, D0; PADDL ·sseIncMask<>(SB), D0 + MOVO A0, A1; MOVO B0, B1; MOVO C0, C1; MOVO D0, D1; PADDL ·sseIncMask<>(SB), D1 + MOVO A1, A2; MOVO B1, B2; MOVO C1, C2; MOVO D1, D2; PADDL ·sseIncMask<>(SB), D2 + MOVO A2, A3; MOVO B2, B3; MOVO C2, C3; MOVO D2, D3; PADDL ·sseIncMask<>(SB), D3 + + // Store counters + MOVO D0, ctr0Store; MOVO D1, ctr1Store; MOVO D2, ctr2Store; MOVO D3, ctr3Store + +sealSSEInnerLoop: + MOVO C3, tmpStore + chachaQR(A0, B0, C0, D0, C3); chachaQR(A1, B1, C1, D1, C3); chachaQR(A2, B2, C2, D2, C3) + MOVO tmpStore, C3 + MOVO C1, tmpStore + chachaQR(A3, B3, C3, D3, C1) + MOVO tmpStore, C1 + polyAdd(0(oup)) + shiftB0Left; shiftB1Left; shiftB2Left; shiftB3Left + shiftC0Left; shiftC1Left; shiftC2Left; shiftC3Left + shiftD0Left; shiftD1Left; shiftD2Left; shiftD3Left + polyMulStage1 + polyMulStage2 + LEAQ (2*8)(oup), oup + MOVO C3, tmpStore + chachaQR(A0, B0, C0, D0, C3); chachaQR(A1, B1, C1, D1, C3); chachaQR(A2, B2, C2, D2, C3) + MOVO tmpStore, C3 + MOVO C1, tmpStore + polyMulStage3 + chachaQR(A3, B3, C3, D3, C1) + MOVO tmpStore, C1 + polyMulReduceStage + shiftB0Right; shiftB1Right; shiftB2Right; shiftB3Right + shiftC0Right; shiftC1Right; shiftC2Right; shiftC3Right + shiftD0Right; shiftD1Right; shiftD2Right; shiftD3Right + DECQ itr2 + JGE sealSSEInnerLoop + polyAdd(0(oup)) + polyMul + LEAQ (2*8)(oup), oup + DECQ itr1 + JG sealSSEInnerLoop + + // Add in the state + PADDD ·chacha20Constants<>(SB), A0; PADDD ·chacha20Constants<>(SB), A1; PADDD ·chacha20Constants<>(SB), A2; PADDD ·chacha20Constants<>(SB), A3 + PADDD state1Store, B0; PADDD state1Store, B1; PADDD state1Store, B2; PADDD state1Store, B3 + PADDD state2Store, C0; PADDD state2Store, C1; PADDD state2Store, C2; PADDD state2Store, C3 + PADDD ctr0Store, D0; PADDD ctr1Store, D1; PADDD ctr2Store, D2; PADDD ctr3Store, D3 + MOVO D3, tmpStore + + // Load - xor - store + MOVOU (0*16)(inp), D3; PXOR D3, A0 + MOVOU (1*16)(inp), D3; PXOR D3, B0 + MOVOU (2*16)(inp), D3; PXOR D3, C0 + MOVOU (3*16)(inp), D3; PXOR D3, D0 + MOVOU A0, (0*16)(oup) + MOVOU B0, (1*16)(oup) + MOVOU C0, (2*16)(oup) + MOVOU D0, (3*16)(oup) + MOVO tmpStore, D3 + + MOVOU (4*16)(inp), A0; MOVOU (5*16)(inp), B0; MOVOU (6*16)(inp), C0; MOVOU (7*16)(inp), D0 + PXOR A0, A1; PXOR B0, B1; PXOR C0, C1; PXOR D0, D1 + MOVOU A1, (4*16)(oup); MOVOU B1, (5*16)(oup); MOVOU C1, (6*16)(oup); MOVOU D1, (7*16)(oup) + MOVOU (8*16)(inp), A0; MOVOU (9*16)(inp), B0; MOVOU (10*16)(inp), C0; MOVOU (11*16)(inp), D0 + PXOR A0, A2; PXOR B0, B2; PXOR C0, C2; PXOR D0, D2 + MOVOU A2, (8*16)(oup); MOVOU B2, (9*16)(oup); MOVOU C2, (10*16)(oup); MOVOU D2, (11*16)(oup) + ADDQ $192, inp + MOVQ $192, itr1 + SUBQ $192, inl + MOVO A3, A1 + MOVO B3, B1 + MOVO C3, C1 + MOVO D3, D1 + CMPQ inl, $64 + JBE sealSSE128SealHash + MOVOU (0*16)(inp), A0; MOVOU (1*16)(inp), B0; MOVOU (2*16)(inp), C0; MOVOU (3*16)(inp), D0 + PXOR A0, A3; PXOR B0, B3; PXOR C0, C3; PXOR D0, D3 + MOVOU A3, (12*16)(oup); MOVOU B3, (13*16)(oup); MOVOU C3, (14*16)(oup); MOVOU D3, (15*16)(oup) + LEAQ 64(inp), inp + SUBQ $64, inl + MOVQ $6, itr1 + MOVQ $4, itr2 + CMPQ inl, $192 + JG sealSSEMainLoop + + MOVQ inl, itr1 + TESTQ inl, inl + JE sealSSE128SealHash + MOVQ $6, itr1 + CMPQ inl, $64 + JBE sealSSETail64 + CMPQ inl, $128 + JBE sealSSETail128 + JMP sealSSETail192 + +// ---------------------------------------------------------------------------- +// Special optimization for the last 64 bytes of plaintext +sealSSETail64: + // Need to encrypt up to 64 bytes - prepare single block, hash 192 or 256 bytes + MOVO ·chacha20Constants<>(SB), A1 + MOVO state1Store, B1 + MOVO state2Store, C1 + MOVO ctr3Store, D1 + PADDL ·sseIncMask<>(SB), D1 + MOVO D1, ctr0Store + +sealSSETail64LoopA: + // Perform ChaCha rounds, while hashing the previously encrypted ciphertext + polyAdd(0(oup)) + polyMul + LEAQ 16(oup), oup + +sealSSETail64LoopB: + chachaQR(A1, B1, C1, D1, T1) + shiftB1Left; shiftC1Left; shiftD1Left + chachaQR(A1, B1, C1, D1, T1) + shiftB1Right; shiftC1Right; shiftD1Right + polyAdd(0(oup)) + polyMul + LEAQ 16(oup), oup + + DECQ itr1 + JG sealSSETail64LoopA + + DECQ itr2 + JGE sealSSETail64LoopB + PADDL ·chacha20Constants<>(SB), A1 + PADDL state1Store, B1 + PADDL state2Store, C1 + PADDL ctr0Store, D1 + + JMP sealSSE128Seal + +// ---------------------------------------------------------------------------- +// Special optimization for the last 128 bytes of plaintext +sealSSETail128: + // Need to encrypt up to 128 bytes - prepare two blocks, hash 192 or 256 bytes + MOVO ·chacha20Constants<>(SB), A0; MOVO state1Store, B0; MOVO state2Store, C0; MOVO ctr3Store, D0; PADDL ·sseIncMask<>(SB), D0; MOVO D0, ctr0Store + MOVO A0, A1; MOVO B0, B1; MOVO C0, C1; MOVO D0, D1; PADDL ·sseIncMask<>(SB), D1; MOVO D1, ctr1Store + +sealSSETail128LoopA: + // Perform ChaCha rounds, while hashing the previously encrypted ciphertext + polyAdd(0(oup)) + polyMul + LEAQ 16(oup), oup + +sealSSETail128LoopB: + chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0) + shiftB0Left; shiftC0Left; shiftD0Left + shiftB1Left; shiftC1Left; shiftD1Left + polyAdd(0(oup)) + polyMul + LEAQ 16(oup), oup + chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0) + shiftB0Right; shiftC0Right; shiftD0Right + shiftB1Right; shiftC1Right; shiftD1Right + + DECQ itr1 + JG sealSSETail128LoopA + + DECQ itr2 + JGE sealSSETail128LoopB + + PADDL ·chacha20Constants<>(SB), A0; PADDL ·chacha20Constants<>(SB), A1 + PADDL state1Store, B0; PADDL state1Store, B1 + PADDL state2Store, C0; PADDL state2Store, C1 + PADDL ctr0Store, D0; PADDL ctr1Store, D1 + + MOVOU (0*16)(inp), T0; MOVOU (1*16)(inp), T1; MOVOU (2*16)(inp), T2; MOVOU (3*16)(inp), T3 + PXOR T0, A0; PXOR T1, B0; PXOR T2, C0; PXOR T3, D0 + MOVOU A0, (0*16)(oup); MOVOU B0, (1*16)(oup); MOVOU C0, (2*16)(oup); MOVOU D0, (3*16)(oup) + + MOVQ $64, itr1 + LEAQ 64(inp), inp + SUBQ $64, inl + + JMP sealSSE128SealHash + +// ---------------------------------------------------------------------------- +// Special optimization for the last 192 bytes of plaintext +sealSSETail192: + // Need to encrypt up to 192 bytes - prepare three blocks, hash 192 or 256 bytes + MOVO ·chacha20Constants<>(SB), A0; MOVO state1Store, B0; MOVO state2Store, C0; MOVO ctr3Store, D0; PADDL ·sseIncMask<>(SB), D0; MOVO D0, ctr0Store + MOVO A0, A1; MOVO B0, B1; MOVO C0, C1; MOVO D0, D1; PADDL ·sseIncMask<>(SB), D1; MOVO D1, ctr1Store + MOVO A1, A2; MOVO B1, B2; MOVO C1, C2; MOVO D1, D2; PADDL ·sseIncMask<>(SB), D2; MOVO D2, ctr2Store + +sealSSETail192LoopA: + // Perform ChaCha rounds, while hashing the previously encrypted ciphertext + polyAdd(0(oup)) + polyMul + LEAQ 16(oup), oup + +sealSSETail192LoopB: + chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0); chachaQR(A2, B2, C2, D2, T0) + shiftB0Left; shiftC0Left; shiftD0Left + shiftB1Left; shiftC1Left; shiftD1Left + shiftB2Left; shiftC2Left; shiftD2Left + + polyAdd(0(oup)) + polyMul + LEAQ 16(oup), oup + + chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0); chachaQR(A2, B2, C2, D2, T0) + shiftB0Right; shiftC0Right; shiftD0Right + shiftB1Right; shiftC1Right; shiftD1Right + shiftB2Right; shiftC2Right; shiftD2Right + + DECQ itr1 + JG sealSSETail192LoopA + + DECQ itr2 + JGE sealSSETail192LoopB + + PADDL ·chacha20Constants<>(SB), A0; PADDL ·chacha20Constants<>(SB), A1; PADDL ·chacha20Constants<>(SB), A2 + PADDL state1Store, B0; PADDL state1Store, B1; PADDL state1Store, B2 + PADDL state2Store, C0; PADDL state2Store, C1; PADDL state2Store, C2 + PADDL ctr0Store, D0; PADDL ctr1Store, D1; PADDL ctr2Store, D2 + + MOVOU (0*16)(inp), T0; MOVOU (1*16)(inp), T1; MOVOU (2*16)(inp), T2; MOVOU (3*16)(inp), T3 + PXOR T0, A0; PXOR T1, B0; PXOR T2, C0; PXOR T3, D0 + MOVOU A0, (0*16)(oup); MOVOU B0, (1*16)(oup); MOVOU C0, (2*16)(oup); MOVOU D0, (3*16)(oup) + MOVOU (4*16)(inp), T0; MOVOU (5*16)(inp), T1; MOVOU (6*16)(inp), T2; MOVOU (7*16)(inp), T3 + PXOR T0, A1; PXOR T1, B1; PXOR T2, C1; PXOR T3, D1 + MOVOU A1, (4*16)(oup); MOVOU B1, (5*16)(oup); MOVOU C1, (6*16)(oup); MOVOU D1, (7*16)(oup) + + MOVO A2, A1 + MOVO B2, B1 + MOVO C2, C1 + MOVO D2, D1 + MOVQ $128, itr1 + LEAQ 128(inp), inp + SUBQ $128, inl + + JMP sealSSE128SealHash + +// ---------------------------------------------------------------------------- +// Special seal optimization for buffers smaller than 129 bytes +sealSSE128: + // For up to 128 bytes of ciphertext and 64 bytes for the poly key, we require to process three blocks + MOVOU ·chacha20Constants<>(SB), A0; MOVOU (1*16)(keyp), B0; MOVOU (2*16)(keyp), C0; MOVOU (3*16)(keyp), D0 + MOVO A0, A1; MOVO B0, B1; MOVO C0, C1; MOVO D0, D1; PADDL ·sseIncMask<>(SB), D1 + MOVO A1, A2; MOVO B1, B2; MOVO C1, C2; MOVO D1, D2; PADDL ·sseIncMask<>(SB), D2 + MOVO B0, T1; MOVO C0, T2; MOVO D1, T3 + MOVQ $10, itr2 + +sealSSE128InnerCipherLoop: + chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0); chachaQR(A2, B2, C2, D2, T0) + shiftB0Left; shiftB1Left; shiftB2Left + shiftC0Left; shiftC1Left; shiftC2Left + shiftD0Left; shiftD1Left; shiftD2Left + chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0); chachaQR(A2, B2, C2, D2, T0) + shiftB0Right; shiftB1Right; shiftB2Right + shiftC0Right; shiftC1Right; shiftC2Right + shiftD0Right; shiftD1Right; shiftD2Right + DECQ itr2 + JNE sealSSE128InnerCipherLoop + + // A0|B0 hold the Poly1305 32-byte key, C0,D0 can be discarded + PADDL ·chacha20Constants<>(SB), A0; PADDL ·chacha20Constants<>(SB), A1; PADDL ·chacha20Constants<>(SB), A2 + PADDL T1, B0; PADDL T1, B1; PADDL T1, B2 + PADDL T2, C1; PADDL T2, C2 + PADDL T3, D1; PADDL ·sseIncMask<>(SB), T3; PADDL T3, D2 + PAND ·polyClampMask<>(SB), A0 + MOVOU A0, rStore + MOVOU B0, sStore + + // Hash + MOVQ ad_len+80(FP), itr2 + CALL polyHashADInternal<>(SB) + XORQ itr1, itr1 + +sealSSE128SealHash: + // itr1 holds the number of bytes encrypted but not yet hashed + CMPQ itr1, $16 + JB sealSSE128Seal + polyAdd(0(oup)) + polyMul + + SUBQ $16, itr1 + ADDQ $16, oup + + JMP sealSSE128SealHash + +sealSSE128Seal: + CMPQ inl, $16 + JB sealSSETail + SUBQ $16, inl + + // Load for decryption + MOVOU (inp), T0 + PXOR T0, A1 + MOVOU A1, (oup) + LEAQ (1*16)(inp), inp + LEAQ (1*16)(oup), oup + + // Extract for hashing + MOVQ A1, t0 + PSRLDQ $8, A1 + MOVQ A1, t1 + ADDQ t0, acc0; ADCQ t1, acc1; ADCQ $1, acc2 + polyMul + + // Shift the stream "left" + MOVO B1, A1 + MOVO C1, B1 + MOVO D1, C1 + MOVO A2, D1 + MOVO B2, A2 + MOVO C2, B2 + MOVO D2, C2 + JMP sealSSE128Seal + +sealSSETail: + TESTQ inl, inl + JE sealSSEFinalize + + // We can only load the PT one byte at a time to avoid read after end of buffer + MOVQ inl, itr2 + SHLQ $4, itr2 + LEAQ ·andMask<>(SB), t0 + MOVQ inl, itr1 + LEAQ -1(inp)(inl*1), inp + XORQ t2, t2 + XORQ t3, t3 + XORQ AX, AX + +sealSSETailLoadLoop: + SHLQ $8, t2, t3 + SHLQ $8, t2 + MOVB (inp), AX + XORQ AX, t2 + LEAQ -1(inp), inp + DECQ itr1 + JNE sealSSETailLoadLoop + MOVQ t2, 0+tmpStore + MOVQ t3, 8+tmpStore + PXOR 0+tmpStore, A1 + MOVOU A1, (oup) + MOVOU -16(t0)(itr2*1), T0 + PAND T0, A1 + MOVQ A1, t0 + PSRLDQ $8, A1 + MOVQ A1, t1 + ADDQ t0, acc0; ADCQ t1, acc1; ADCQ $1, acc2 + polyMul + + ADDQ inl, oup + +sealSSEFinalize: + // Hash in the buffer lengths + ADDQ ad_len+80(FP), acc0 + ADCQ src_len+56(FP), acc1 + ADCQ $1, acc2 + polyMul + + // Final reduce + MOVQ acc0, t0 + MOVQ acc1, t1 + MOVQ acc2, t2 + SUBQ $-5, acc0 + SBBQ $-1, acc1 + SBBQ $3, acc2 + CMOVQCS t0, acc0 + CMOVQCS t1, acc1 + CMOVQCS t2, acc2 + + // Add in the "s" part of the key + ADDQ 0+sStore, acc0 + ADCQ 8+sStore, acc1 + + // Finally store the tag at the end of the message + MOVQ acc0, (0*8)(oup) + MOVQ acc1, (1*8)(oup) + RET + +// ---------------------------------------------------------------------------- +// ------------------------- AVX2 Code ---------------------------------------- +chacha20Poly1305Seal_AVX2: + VZEROUPPER + VMOVDQU ·chacha20Constants<>(SB), AA0 + BYTE $0xc4; BYTE $0x42; BYTE $0x7d; BYTE $0x5a; BYTE $0x70; BYTE $0x10 // broadcasti128 16(r8), ymm14 + BYTE $0xc4; BYTE $0x42; BYTE $0x7d; BYTE $0x5a; BYTE $0x60; BYTE $0x20 // broadcasti128 32(r8), ymm12 + BYTE $0xc4; BYTE $0xc2; BYTE $0x7d; BYTE $0x5a; BYTE $0x60; BYTE $0x30 // broadcasti128 48(r8), ymm4 + VPADDD ·avx2InitMask<>(SB), DD0, DD0 + + // Special optimizations, for very short buffers + CMPQ inl, $192 + JBE seal192AVX2 // 33% faster + CMPQ inl, $320 + JBE seal320AVX2 // 17% faster + + // For the general key prepare the key first - as a byproduct we have 64 bytes of cipher stream + VMOVDQA AA0, AA1; VMOVDQA AA0, AA2; VMOVDQA AA0, AA3 + VMOVDQA BB0, BB1; VMOVDQA BB0, BB2; VMOVDQA BB0, BB3; VMOVDQA BB0, state1StoreAVX2 + VMOVDQA CC0, CC1; VMOVDQA CC0, CC2; VMOVDQA CC0, CC3; VMOVDQA CC0, state2StoreAVX2 + VPADDD ·avx2IncMask<>(SB), DD0, DD1; VMOVDQA DD0, ctr0StoreAVX2 + VPADDD ·avx2IncMask<>(SB), DD1, DD2; VMOVDQA DD1, ctr1StoreAVX2 + VPADDD ·avx2IncMask<>(SB), DD2, DD3; VMOVDQA DD2, ctr2StoreAVX2 + VMOVDQA DD3, ctr3StoreAVX2 + MOVQ $10, itr2 + +sealAVX2IntroLoop: + VMOVDQA CC3, tmpStoreAVX2 + chachaQR_AVX2(AA0, BB0, CC0, DD0, CC3); chachaQR_AVX2(AA1, BB1, CC1, DD1, CC3); chachaQR_AVX2(AA2, BB2, CC2, DD2, CC3) + VMOVDQA tmpStoreAVX2, CC3 + VMOVDQA CC1, tmpStoreAVX2 + chachaQR_AVX2(AA3, BB3, CC3, DD3, CC1) + VMOVDQA tmpStoreAVX2, CC1 + + VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $12, DD0, DD0, DD0 + VPALIGNR $4, BB1, BB1, BB1; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $12, DD1, DD1, DD1 + VPALIGNR $4, BB2, BB2, BB2; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $12, DD2, DD2, DD2 + VPALIGNR $4, BB3, BB3, BB3; VPALIGNR $8, CC3, CC3, CC3; VPALIGNR $12, DD3, DD3, DD3 + + VMOVDQA CC3, tmpStoreAVX2 + chachaQR_AVX2(AA0, BB0, CC0, DD0, CC3); chachaQR_AVX2(AA1, BB1, CC1, DD1, CC3); chachaQR_AVX2(AA2, BB2, CC2, DD2, CC3) + VMOVDQA tmpStoreAVX2, CC3 + VMOVDQA CC1, tmpStoreAVX2 + chachaQR_AVX2(AA3, BB3, CC3, DD3, CC1) + VMOVDQA tmpStoreAVX2, CC1 + + VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $4, DD0, DD0, DD0 + VPALIGNR $12, BB1, BB1, BB1; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $4, DD1, DD1, DD1 + VPALIGNR $12, BB2, BB2, BB2; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $4, DD2, DD2, DD2 + VPALIGNR $12, BB3, BB3, BB3; VPALIGNR $8, CC3, CC3, CC3; VPALIGNR $4, DD3, DD3, DD3 + DECQ itr2 + JNE sealAVX2IntroLoop + + VPADDD ·chacha20Constants<>(SB), AA0, AA0; VPADDD ·chacha20Constants<>(SB), AA1, AA1; VPADDD ·chacha20Constants<>(SB), AA2, AA2; VPADDD ·chacha20Constants<>(SB), AA3, AA3 + VPADDD state1StoreAVX2, BB0, BB0; VPADDD state1StoreAVX2, BB1, BB1; VPADDD state1StoreAVX2, BB2, BB2; VPADDD state1StoreAVX2, BB3, BB3 + VPADDD state2StoreAVX2, CC0, CC0; VPADDD state2StoreAVX2, CC1, CC1; VPADDD state2StoreAVX2, CC2, CC2; VPADDD state2StoreAVX2, CC3, CC3 + VPADDD ctr0StoreAVX2, DD0, DD0; VPADDD ctr1StoreAVX2, DD1, DD1; VPADDD ctr2StoreAVX2, DD2, DD2; VPADDD ctr3StoreAVX2, DD3, DD3 + + VPERM2I128 $0x13, CC0, DD0, CC0 // Stream bytes 96 - 127 + VPERM2I128 $0x02, AA0, BB0, DD0 // The Poly1305 key + VPERM2I128 $0x13, AA0, BB0, AA0 // Stream bytes 64 - 95 + + // Clamp and store poly key + VPAND ·polyClampMask<>(SB), DD0, DD0 + VMOVDQA DD0, rsStoreAVX2 + + // Hash AD + MOVQ ad_len+80(FP), itr2 + CALL polyHashADInternal<>(SB) + + // Can store at least 320 bytes + VPXOR (0*32)(inp), AA0, AA0 + VPXOR (1*32)(inp), CC0, CC0 + VMOVDQU AA0, (0*32)(oup) + VMOVDQU CC0, (1*32)(oup) + + VPERM2I128 $0x02, AA1, BB1, AA0; VPERM2I128 $0x02, CC1, DD1, BB0; VPERM2I128 $0x13, AA1, BB1, CC0; VPERM2I128 $0x13, CC1, DD1, DD0 + VPXOR (2*32)(inp), AA0, AA0; VPXOR (3*32)(inp), BB0, BB0; VPXOR (4*32)(inp), CC0, CC0; VPXOR (5*32)(inp), DD0, DD0 + VMOVDQU AA0, (2*32)(oup); VMOVDQU BB0, (3*32)(oup); VMOVDQU CC0, (4*32)(oup); VMOVDQU DD0, (5*32)(oup) + VPERM2I128 $0x02, AA2, BB2, AA0; VPERM2I128 $0x02, CC2, DD2, BB0; VPERM2I128 $0x13, AA2, BB2, CC0; VPERM2I128 $0x13, CC2, DD2, DD0 + VPXOR (6*32)(inp), AA0, AA0; VPXOR (7*32)(inp), BB0, BB0; VPXOR (8*32)(inp), CC0, CC0; VPXOR (9*32)(inp), DD0, DD0 + VMOVDQU AA0, (6*32)(oup); VMOVDQU BB0, (7*32)(oup); VMOVDQU CC0, (8*32)(oup); VMOVDQU DD0, (9*32)(oup) + + MOVQ $320, itr1 + SUBQ $320, inl + LEAQ 320(inp), inp + + VPERM2I128 $0x02, AA3, BB3, AA0; VPERM2I128 $0x02, CC3, DD3, BB0; VPERM2I128 $0x13, AA3, BB3, CC0; VPERM2I128 $0x13, CC3, DD3, DD0 + CMPQ inl, $128 + JBE sealAVX2SealHash + + VPXOR (0*32)(inp), AA0, AA0; VPXOR (1*32)(inp), BB0, BB0; VPXOR (2*32)(inp), CC0, CC0; VPXOR (3*32)(inp), DD0, DD0 + VMOVDQU AA0, (10*32)(oup); VMOVDQU BB0, (11*32)(oup); VMOVDQU CC0, (12*32)(oup); VMOVDQU DD0, (13*32)(oup) + SUBQ $128, inl + LEAQ 128(inp), inp + + MOVQ $8, itr1 + MOVQ $2, itr2 + + CMPQ inl, $128 + JBE sealAVX2Tail128 + CMPQ inl, $256 + JBE sealAVX2Tail256 + CMPQ inl, $384 + JBE sealAVX2Tail384 + CMPQ inl, $512 + JBE sealAVX2Tail512 + + // We have 448 bytes to hash, but main loop hashes 512 bytes at a time - perform some rounds, before the main loop + VMOVDQA ·chacha20Constants<>(SB), AA0; VMOVDQA AA0, AA1; VMOVDQA AA0, AA2; VMOVDQA AA0, AA3 + VMOVDQA state1StoreAVX2, BB0; VMOVDQA BB0, BB1; VMOVDQA BB0, BB2; VMOVDQA BB0, BB3 + VMOVDQA state2StoreAVX2, CC0; VMOVDQA CC0, CC1; VMOVDQA CC0, CC2; VMOVDQA CC0, CC3 + VMOVDQA ctr3StoreAVX2, DD0 + VPADDD ·avx2IncMask<>(SB), DD0, DD0; VPADDD ·avx2IncMask<>(SB), DD0, DD1; VPADDD ·avx2IncMask<>(SB), DD1, DD2; VPADDD ·avx2IncMask<>(SB), DD2, DD3 + VMOVDQA DD0, ctr0StoreAVX2; VMOVDQA DD1, ctr1StoreAVX2; VMOVDQA DD2, ctr2StoreAVX2; VMOVDQA DD3, ctr3StoreAVX2 + + VMOVDQA CC3, tmpStoreAVX2 + chachaQR_AVX2(AA0, BB0, CC0, DD0, CC3); chachaQR_AVX2(AA1, BB1, CC1, DD1, CC3); chachaQR_AVX2(AA2, BB2, CC2, DD2, CC3) + VMOVDQA tmpStoreAVX2, CC3 + VMOVDQA CC1, tmpStoreAVX2 + chachaQR_AVX2(AA3, BB3, CC3, DD3, CC1) + VMOVDQA tmpStoreAVX2, CC1 + + VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $12, DD0, DD0, DD0 + VPALIGNR $4, BB1, BB1, BB1; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $12, DD1, DD1, DD1 + VPALIGNR $4, BB2, BB2, BB2; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $12, DD2, DD2, DD2 + VPALIGNR $4, BB3, BB3, BB3; VPALIGNR $8, CC3, CC3, CC3; VPALIGNR $12, DD3, DD3, DD3 + + VMOVDQA CC3, tmpStoreAVX2 + chachaQR_AVX2(AA0, BB0, CC0, DD0, CC3); chachaQR_AVX2(AA1, BB1, CC1, DD1, CC3); chachaQR_AVX2(AA2, BB2, CC2, DD2, CC3) + VMOVDQA tmpStoreAVX2, CC3 + VMOVDQA CC1, tmpStoreAVX2 + chachaQR_AVX2(AA3, BB3, CC3, DD3, CC1) + VMOVDQA tmpStoreAVX2, CC1 + + VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $4, DD0, DD0, DD0 + VPALIGNR $12, BB1, BB1, BB1; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $4, DD1, DD1, DD1 + VPALIGNR $12, BB2, BB2, BB2; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $4, DD2, DD2, DD2 + VPALIGNR $12, BB3, BB3, BB3; VPALIGNR $8, CC3, CC3, CC3; VPALIGNR $4, DD3, DD3, DD3 + VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 + VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 + VPSHUFB ·rol16<>(SB), DD0, DD0; VPSHUFB ·rol16<>(SB), DD1, DD1; VPSHUFB ·rol16<>(SB), DD2, DD2; VPSHUFB ·rol16<>(SB), DD3, DD3 + VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 + VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 + VMOVDQA CC3, tmpStoreAVX2 + VPSLLD $12, BB0, CC3; VPSRLD $20, BB0, BB0; VPXOR CC3, BB0, BB0 + VPSLLD $12, BB1, CC3; VPSRLD $20, BB1, BB1; VPXOR CC3, BB1, BB1 + VPSLLD $12, BB2, CC3; VPSRLD $20, BB2, BB2; VPXOR CC3, BB2, BB2 + VPSLLD $12, BB3, CC3; VPSRLD $20, BB3, BB3; VPXOR CC3, BB3, BB3 + VMOVDQA tmpStoreAVX2, CC3 + + SUBQ $16, oup // Adjust the pointer + MOVQ $9, itr1 + JMP sealAVX2InternalLoopStart + +sealAVX2MainLoop: + // Load state, increment counter blocks, store the incremented counters + VMOVDQU ·chacha20Constants<>(SB), AA0; VMOVDQA AA0, AA1; VMOVDQA AA0, AA2; VMOVDQA AA0, AA3 + VMOVDQA state1StoreAVX2, BB0; VMOVDQA BB0, BB1; VMOVDQA BB0, BB2; VMOVDQA BB0, BB3 + VMOVDQA state2StoreAVX2, CC0; VMOVDQA CC0, CC1; VMOVDQA CC0, CC2; VMOVDQA CC0, CC3 + VMOVDQA ctr3StoreAVX2, DD0; VPADDD ·avx2IncMask<>(SB), DD0, DD0; VPADDD ·avx2IncMask<>(SB), DD0, DD1; VPADDD ·avx2IncMask<>(SB), DD1, DD2; VPADDD ·avx2IncMask<>(SB), DD2, DD3 + VMOVDQA DD0, ctr0StoreAVX2; VMOVDQA DD1, ctr1StoreAVX2; VMOVDQA DD2, ctr2StoreAVX2; VMOVDQA DD3, ctr3StoreAVX2 + MOVQ $10, itr1 + +sealAVX2InternalLoop: + polyAdd(0*8(oup)) + VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 + polyMulStage1_AVX2 + VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 + VPSHUFB ·rol16<>(SB), DD0, DD0; VPSHUFB ·rol16<>(SB), DD1, DD1; VPSHUFB ·rol16<>(SB), DD2, DD2; VPSHUFB ·rol16<>(SB), DD3, DD3 + polyMulStage2_AVX2 + VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 + VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 + polyMulStage3_AVX2 + VMOVDQA CC3, tmpStoreAVX2 + VPSLLD $12, BB0, CC3; VPSRLD $20, BB0, BB0; VPXOR CC3, BB0, BB0 + VPSLLD $12, BB1, CC3; VPSRLD $20, BB1, BB1; VPXOR CC3, BB1, BB1 + VPSLLD $12, BB2, CC3; VPSRLD $20, BB2, BB2; VPXOR CC3, BB2, BB2 + VPSLLD $12, BB3, CC3; VPSRLD $20, BB3, BB3; VPXOR CC3, BB3, BB3 + VMOVDQA tmpStoreAVX2, CC3 + polyMulReduceStage + +sealAVX2InternalLoopStart: + VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 + VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 + VPSHUFB ·rol8<>(SB), DD0, DD0; VPSHUFB ·rol8<>(SB), DD1, DD1; VPSHUFB ·rol8<>(SB), DD2, DD2; VPSHUFB ·rol8<>(SB), DD3, DD3 + polyAdd(2*8(oup)) + VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 + polyMulStage1_AVX2 + VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 + VMOVDQA CC3, tmpStoreAVX2 + VPSLLD $7, BB0, CC3; VPSRLD $25, BB0, BB0; VPXOR CC3, BB0, BB0 + VPSLLD $7, BB1, CC3; VPSRLD $25, BB1, BB1; VPXOR CC3, BB1, BB1 + VPSLLD $7, BB2, CC3; VPSRLD $25, BB2, BB2; VPXOR CC3, BB2, BB2 + VPSLLD $7, BB3, CC3; VPSRLD $25, BB3, BB3; VPXOR CC3, BB3, BB3 + VMOVDQA tmpStoreAVX2, CC3 + polyMulStage2_AVX2 + VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1; VPALIGNR $4, BB2, BB2, BB2; VPALIGNR $4, BB3, BB3, BB3 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $8, CC3, CC3, CC3 + VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1; VPALIGNR $12, DD2, DD2, DD2; VPALIGNR $12, DD3, DD3, DD3 + VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 + polyMulStage3_AVX2 + VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 + VPSHUFB ·rol16<>(SB), DD0, DD0; VPSHUFB ·rol16<>(SB), DD1, DD1; VPSHUFB ·rol16<>(SB), DD2, DD2; VPSHUFB ·rol16<>(SB), DD3, DD3 + polyMulReduceStage + VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 + VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 + polyAdd(4*8(oup)) + LEAQ (6*8)(oup), oup + VMOVDQA CC3, tmpStoreAVX2 + VPSLLD $12, BB0, CC3; VPSRLD $20, BB0, BB0; VPXOR CC3, BB0, BB0 + VPSLLD $12, BB1, CC3; VPSRLD $20, BB1, BB1; VPXOR CC3, BB1, BB1 + VPSLLD $12, BB2, CC3; VPSRLD $20, BB2, BB2; VPXOR CC3, BB2, BB2 + VPSLLD $12, BB3, CC3; VPSRLD $20, BB3, BB3; VPXOR CC3, BB3, BB3 + VMOVDQA tmpStoreAVX2, CC3 + polyMulStage1_AVX2 + VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 + VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 + polyMulStage2_AVX2 + VPSHUFB ·rol8<>(SB), DD0, DD0; VPSHUFB ·rol8<>(SB), DD1, DD1; VPSHUFB ·rol8<>(SB), DD2, DD2; VPSHUFB ·rol8<>(SB), DD3, DD3 + VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 + polyMulStage3_AVX2 + VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 + VMOVDQA CC3, tmpStoreAVX2 + VPSLLD $7, BB0, CC3; VPSRLD $25, BB0, BB0; VPXOR CC3, BB0, BB0 + VPSLLD $7, BB1, CC3; VPSRLD $25, BB1, BB1; VPXOR CC3, BB1, BB1 + VPSLLD $7, BB2, CC3; VPSRLD $25, BB2, BB2; VPXOR CC3, BB2, BB2 + VPSLLD $7, BB3, CC3; VPSRLD $25, BB3, BB3; VPXOR CC3, BB3, BB3 + VMOVDQA tmpStoreAVX2, CC3 + polyMulReduceStage + VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1; VPALIGNR $12, BB2, BB2, BB2; VPALIGNR $12, BB3, BB3, BB3 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $8, CC3, CC3, CC3 + VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1; VPALIGNR $4, DD2, DD2, DD2; VPALIGNR $4, DD3, DD3, DD3 + DECQ itr1 + JNE sealAVX2InternalLoop + + VPADDD ·chacha20Constants<>(SB), AA0, AA0; VPADDD ·chacha20Constants<>(SB), AA1, AA1; VPADDD ·chacha20Constants<>(SB), AA2, AA2; VPADDD ·chacha20Constants<>(SB), AA3, AA3 + VPADDD state1StoreAVX2, BB0, BB0; VPADDD state1StoreAVX2, BB1, BB1; VPADDD state1StoreAVX2, BB2, BB2; VPADDD state1StoreAVX2, BB3, BB3 + VPADDD state2StoreAVX2, CC0, CC0; VPADDD state2StoreAVX2, CC1, CC1; VPADDD state2StoreAVX2, CC2, CC2; VPADDD state2StoreAVX2, CC3, CC3 + VPADDD ctr0StoreAVX2, DD0, DD0; VPADDD ctr1StoreAVX2, DD1, DD1; VPADDD ctr2StoreAVX2, DD2, DD2; VPADDD ctr3StoreAVX2, DD3, DD3 + VMOVDQA CC3, tmpStoreAVX2 + + // We only hashed 480 of the 512 bytes available - hash the remaining 32 here + polyAdd(0*8(oup)) + polyMulAVX2 + LEAQ (4*8)(oup), oup + VPERM2I128 $0x02, AA0, BB0, CC3; VPERM2I128 $0x13, AA0, BB0, BB0; VPERM2I128 $0x02, CC0, DD0, AA0; VPERM2I128 $0x13, CC0, DD0, CC0 + VPXOR (0*32)(inp), CC3, CC3; VPXOR (1*32)(inp), AA0, AA0; VPXOR (2*32)(inp), BB0, BB0; VPXOR (3*32)(inp), CC0, CC0 + VMOVDQU CC3, (0*32)(oup); VMOVDQU AA0, (1*32)(oup); VMOVDQU BB0, (2*32)(oup); VMOVDQU CC0, (3*32)(oup) + VPERM2I128 $0x02, AA1, BB1, AA0; VPERM2I128 $0x02, CC1, DD1, BB0; VPERM2I128 $0x13, AA1, BB1, CC0; VPERM2I128 $0x13, CC1, DD1, DD0 + VPXOR (4*32)(inp), AA0, AA0; VPXOR (5*32)(inp), BB0, BB0; VPXOR (6*32)(inp), CC0, CC0; VPXOR (7*32)(inp), DD0, DD0 + VMOVDQU AA0, (4*32)(oup); VMOVDQU BB0, (5*32)(oup); VMOVDQU CC0, (6*32)(oup); VMOVDQU DD0, (7*32)(oup) + + // and here + polyAdd(-2*8(oup)) + polyMulAVX2 + VPERM2I128 $0x02, AA2, BB2, AA0; VPERM2I128 $0x02, CC2, DD2, BB0; VPERM2I128 $0x13, AA2, BB2, CC0; VPERM2I128 $0x13, CC2, DD2, DD0 + VPXOR (8*32)(inp), AA0, AA0; VPXOR (9*32)(inp), BB0, BB0; VPXOR (10*32)(inp), CC0, CC0; VPXOR (11*32)(inp), DD0, DD0 + VMOVDQU AA0, (8*32)(oup); VMOVDQU BB0, (9*32)(oup); VMOVDQU CC0, (10*32)(oup); VMOVDQU DD0, (11*32)(oup) + VPERM2I128 $0x02, AA3, BB3, AA0; VPERM2I128 $0x02, tmpStoreAVX2, DD3, BB0; VPERM2I128 $0x13, AA3, BB3, CC0; VPERM2I128 $0x13, tmpStoreAVX2, DD3, DD0 + VPXOR (12*32)(inp), AA0, AA0; VPXOR (13*32)(inp), BB0, BB0; VPXOR (14*32)(inp), CC0, CC0; VPXOR (15*32)(inp), DD0, DD0 + VMOVDQU AA0, (12*32)(oup); VMOVDQU BB0, (13*32)(oup); VMOVDQU CC0, (14*32)(oup); VMOVDQU DD0, (15*32)(oup) + LEAQ (32*16)(inp), inp + SUBQ $(32*16), inl + CMPQ inl, $512 + JG sealAVX2MainLoop + + // Tail can only hash 480 bytes + polyAdd(0*8(oup)) + polyMulAVX2 + polyAdd(2*8(oup)) + polyMulAVX2 + LEAQ 32(oup), oup + + MOVQ $10, itr1 + MOVQ $0, itr2 + CMPQ inl, $128 + JBE sealAVX2Tail128 + CMPQ inl, $256 + JBE sealAVX2Tail256 + CMPQ inl, $384 + JBE sealAVX2Tail384 + JMP sealAVX2Tail512 + +// ---------------------------------------------------------------------------- +// Special optimization for buffers smaller than 193 bytes +seal192AVX2: + // For up to 192 bytes of ciphertext and 64 bytes for the poly key, we process four blocks + VMOVDQA AA0, AA1 + VMOVDQA BB0, BB1 + VMOVDQA CC0, CC1 + VPADDD ·avx2IncMask<>(SB), DD0, DD1 + VMOVDQA AA0, AA2 + VMOVDQA BB0, BB2 + VMOVDQA CC0, CC2 + VMOVDQA DD0, DD2 + VMOVDQA DD1, TT3 + MOVQ $10, itr2 + +sealAVX2192InnerCipherLoop: + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0) + VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1 + VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1 + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0) + VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1 + VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1 + DECQ itr2 + JNE sealAVX2192InnerCipherLoop + VPADDD AA2, AA0, AA0; VPADDD AA2, AA1, AA1 + VPADDD BB2, BB0, BB0; VPADDD BB2, BB1, BB1 + VPADDD CC2, CC0, CC0; VPADDD CC2, CC1, CC1 + VPADDD DD2, DD0, DD0; VPADDD TT3, DD1, DD1 + VPERM2I128 $0x02, AA0, BB0, TT0 + + // Clamp and store poly key + VPAND ·polyClampMask<>(SB), TT0, TT0 + VMOVDQA TT0, rsStoreAVX2 + + // Stream for up to 192 bytes + VPERM2I128 $0x13, AA0, BB0, AA0 + VPERM2I128 $0x13, CC0, DD0, BB0 + VPERM2I128 $0x02, AA1, BB1, CC0 + VPERM2I128 $0x02, CC1, DD1, DD0 + VPERM2I128 $0x13, AA1, BB1, AA1 + VPERM2I128 $0x13, CC1, DD1, BB1 + +sealAVX2ShortSeal: + // Hash aad + MOVQ ad_len+80(FP), itr2 + CALL polyHashADInternal<>(SB) + XORQ itr1, itr1 + +sealAVX2SealHash: + // itr1 holds the number of bytes encrypted but not yet hashed + CMPQ itr1, $16 + JB sealAVX2ShortSealLoop + polyAdd(0(oup)) + polyMul + SUBQ $16, itr1 + ADDQ $16, oup + JMP sealAVX2SealHash + +sealAVX2ShortSealLoop: + CMPQ inl, $32 + JB sealAVX2ShortTail32 + SUBQ $32, inl + + // Load for encryption + VPXOR (inp), AA0, AA0 + VMOVDQU AA0, (oup) + LEAQ (1*32)(inp), inp + + // Now can hash + polyAdd(0*8(oup)) + polyMulAVX2 + polyAdd(2*8(oup)) + polyMulAVX2 + LEAQ (1*32)(oup), oup + + // Shift stream left + VMOVDQA BB0, AA0 + VMOVDQA CC0, BB0 + VMOVDQA DD0, CC0 + VMOVDQA AA1, DD0 + VMOVDQA BB1, AA1 + VMOVDQA CC1, BB1 + VMOVDQA DD1, CC1 + VMOVDQA AA2, DD1 + VMOVDQA BB2, AA2 + JMP sealAVX2ShortSealLoop + +sealAVX2ShortTail32: + CMPQ inl, $16 + VMOVDQA A0, A1 + JB sealAVX2ShortDone + + SUBQ $16, inl + + // Load for encryption + VPXOR (inp), A0, T0 + VMOVDQU T0, (oup) + LEAQ (1*16)(inp), inp + + // Hash + polyAdd(0*8(oup)) + polyMulAVX2 + LEAQ (1*16)(oup), oup + VPERM2I128 $0x11, AA0, AA0, AA0 + VMOVDQA A0, A1 + +sealAVX2ShortDone: + VZEROUPPER + JMP sealSSETail + +// ---------------------------------------------------------------------------- +// Special optimization for buffers smaller than 321 bytes +seal320AVX2: + // For up to 320 bytes of ciphertext and 64 bytes for the poly key, we process six blocks + VMOVDQA AA0, AA1; VMOVDQA BB0, BB1; VMOVDQA CC0, CC1; VPADDD ·avx2IncMask<>(SB), DD0, DD1 + VMOVDQA AA0, AA2; VMOVDQA BB0, BB2; VMOVDQA CC0, CC2; VPADDD ·avx2IncMask<>(SB), DD1, DD2 + VMOVDQA BB0, TT1; VMOVDQA CC0, TT2; VMOVDQA DD0, TT3 + MOVQ $10, itr2 + +sealAVX2320InnerCipherLoop: + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0); chachaQR_AVX2(AA2, BB2, CC2, DD2, TT0) + VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1; VPALIGNR $4, BB2, BB2, BB2 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2 + VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1; VPALIGNR $12, DD2, DD2, DD2 + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0); chachaQR_AVX2(AA2, BB2, CC2, DD2, TT0) + VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1; VPALIGNR $12, BB2, BB2, BB2 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2 + VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1; VPALIGNR $4, DD2, DD2, DD2 + DECQ itr2 + JNE sealAVX2320InnerCipherLoop + + VMOVDQA ·chacha20Constants<>(SB), TT0 + VPADDD TT0, AA0, AA0; VPADDD TT0, AA1, AA1; VPADDD TT0, AA2, AA2 + VPADDD TT1, BB0, BB0; VPADDD TT1, BB1, BB1; VPADDD TT1, BB2, BB2 + VPADDD TT2, CC0, CC0; VPADDD TT2, CC1, CC1; VPADDD TT2, CC2, CC2 + VMOVDQA ·avx2IncMask<>(SB), TT0 + VPADDD TT3, DD0, DD0; VPADDD TT0, TT3, TT3 + VPADDD TT3, DD1, DD1; VPADDD TT0, TT3, TT3 + VPADDD TT3, DD2, DD2 + + // Clamp and store poly key + VPERM2I128 $0x02, AA0, BB0, TT0 + VPAND ·polyClampMask<>(SB), TT0, TT0 + VMOVDQA TT0, rsStoreAVX2 + + // Stream for up to 320 bytes + VPERM2I128 $0x13, AA0, BB0, AA0 + VPERM2I128 $0x13, CC0, DD0, BB0 + VPERM2I128 $0x02, AA1, BB1, CC0 + VPERM2I128 $0x02, CC1, DD1, DD0 + VPERM2I128 $0x13, AA1, BB1, AA1 + VPERM2I128 $0x13, CC1, DD1, BB1 + VPERM2I128 $0x02, AA2, BB2, CC1 + VPERM2I128 $0x02, CC2, DD2, DD1 + VPERM2I128 $0x13, AA2, BB2, AA2 + VPERM2I128 $0x13, CC2, DD2, BB2 + JMP sealAVX2ShortSeal + +// ---------------------------------------------------------------------------- +// Special optimization for the last 128 bytes of ciphertext +sealAVX2Tail128: + // Need to decrypt up to 128 bytes - prepare two blocks + // If we got here after the main loop - there are 512 encrypted bytes waiting to be hashed + // If we got here before the main loop - there are 448 encrpyred bytes waiting to be hashed + VMOVDQA ·chacha20Constants<>(SB), AA0 + VMOVDQA state1StoreAVX2, BB0 + VMOVDQA state2StoreAVX2, CC0 + VMOVDQA ctr3StoreAVX2, DD0 + VPADDD ·avx2IncMask<>(SB), DD0, DD0 + VMOVDQA DD0, DD1 + +sealAVX2Tail128LoopA: + polyAdd(0(oup)) + polyMul + LEAQ 16(oup), oup + +sealAVX2Tail128LoopB: + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0) + polyAdd(0(oup)) + polyMul + VPALIGNR $4, BB0, BB0, BB0 + VPALIGNR $8, CC0, CC0, CC0 + VPALIGNR $12, DD0, DD0, DD0 + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0) + polyAdd(16(oup)) + polyMul + LEAQ 32(oup), oup + VPALIGNR $12, BB0, BB0, BB0 + VPALIGNR $8, CC0, CC0, CC0 + VPALIGNR $4, DD0, DD0, DD0 + DECQ itr1 + JG sealAVX2Tail128LoopA + DECQ itr2 + JGE sealAVX2Tail128LoopB + + VPADDD ·chacha20Constants<>(SB), AA0, AA1 + VPADDD state1StoreAVX2, BB0, BB1 + VPADDD state2StoreAVX2, CC0, CC1 + VPADDD DD1, DD0, DD1 + + VPERM2I128 $0x02, AA1, BB1, AA0 + VPERM2I128 $0x02, CC1, DD1, BB0 + VPERM2I128 $0x13, AA1, BB1, CC0 + VPERM2I128 $0x13, CC1, DD1, DD0 + JMP sealAVX2ShortSealLoop + +// ---------------------------------------------------------------------------- +// Special optimization for the last 256 bytes of ciphertext +sealAVX2Tail256: + // Need to decrypt up to 256 bytes - prepare two blocks + // If we got here after the main loop - there are 512 encrypted bytes waiting to be hashed + // If we got here before the main loop - there are 448 encrpyred bytes waiting to be hashed + VMOVDQA ·chacha20Constants<>(SB), AA0; VMOVDQA ·chacha20Constants<>(SB), AA1 + VMOVDQA state1StoreAVX2, BB0; VMOVDQA state1StoreAVX2, BB1 + VMOVDQA state2StoreAVX2, CC0; VMOVDQA state2StoreAVX2, CC1 + VMOVDQA ctr3StoreAVX2, DD0 + VPADDD ·avx2IncMask<>(SB), DD0, DD0 + VPADDD ·avx2IncMask<>(SB), DD0, DD1 + VMOVDQA DD0, TT1 + VMOVDQA DD1, TT2 + +sealAVX2Tail256LoopA: + polyAdd(0(oup)) + polyMul + LEAQ 16(oup), oup + +sealAVX2Tail256LoopB: + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0) + polyAdd(0(oup)) + polyMul + VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1 + VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1 + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0) + polyAdd(16(oup)) + polyMul + LEAQ 32(oup), oup + VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1 + VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1 + DECQ itr1 + JG sealAVX2Tail256LoopA + DECQ itr2 + JGE sealAVX2Tail256LoopB + + VPADDD ·chacha20Constants<>(SB), AA0, AA0; VPADDD ·chacha20Constants<>(SB), AA1, AA1 + VPADDD state1StoreAVX2, BB0, BB0; VPADDD state1StoreAVX2, BB1, BB1 + VPADDD state2StoreAVX2, CC0, CC0; VPADDD state2StoreAVX2, CC1, CC1 + VPADDD TT1, DD0, DD0; VPADDD TT2, DD1, DD1 + VPERM2I128 $0x02, AA0, BB0, TT0 + VPERM2I128 $0x02, CC0, DD0, TT1 + VPERM2I128 $0x13, AA0, BB0, TT2 + VPERM2I128 $0x13, CC0, DD0, TT3 + VPXOR (0*32)(inp), TT0, TT0; VPXOR (1*32)(inp), TT1, TT1; VPXOR (2*32)(inp), TT2, TT2; VPXOR (3*32)(inp), TT3, TT3 + VMOVDQU TT0, (0*32)(oup); VMOVDQU TT1, (1*32)(oup); VMOVDQU TT2, (2*32)(oup); VMOVDQU TT3, (3*32)(oup) + MOVQ $128, itr1 + LEAQ 128(inp), inp + SUBQ $128, inl + VPERM2I128 $0x02, AA1, BB1, AA0 + VPERM2I128 $0x02, CC1, DD1, BB0 + VPERM2I128 $0x13, AA1, BB1, CC0 + VPERM2I128 $0x13, CC1, DD1, DD0 + + JMP sealAVX2SealHash + +// ---------------------------------------------------------------------------- +// Special optimization for the last 384 bytes of ciphertext +sealAVX2Tail384: + // Need to decrypt up to 384 bytes - prepare two blocks + // If we got here after the main loop - there are 512 encrypted bytes waiting to be hashed + // If we got here before the main loop - there are 448 encrpyred bytes waiting to be hashed + VMOVDQA ·chacha20Constants<>(SB), AA0; VMOVDQA AA0, AA1; VMOVDQA AA0, AA2 + VMOVDQA state1StoreAVX2, BB0; VMOVDQA BB0, BB1; VMOVDQA BB0, BB2 + VMOVDQA state2StoreAVX2, CC0; VMOVDQA CC0, CC1; VMOVDQA CC0, CC2 + VMOVDQA ctr3StoreAVX2, DD0 + VPADDD ·avx2IncMask<>(SB), DD0, DD0; VPADDD ·avx2IncMask<>(SB), DD0, DD1; VPADDD ·avx2IncMask<>(SB), DD1, DD2 + VMOVDQA DD0, TT1; VMOVDQA DD1, TT2; VMOVDQA DD2, TT3 + +sealAVX2Tail384LoopA: + polyAdd(0(oup)) + polyMul + LEAQ 16(oup), oup + +sealAVX2Tail384LoopB: + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0); chachaQR_AVX2(AA2, BB2, CC2, DD2, TT0) + polyAdd(0(oup)) + polyMul + VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1; VPALIGNR $4, BB2, BB2, BB2 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2 + VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1; VPALIGNR $12, DD2, DD2, DD2 + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0); chachaQR_AVX2(AA2, BB2, CC2, DD2, TT0) + polyAdd(16(oup)) + polyMul + LEAQ 32(oup), oup + VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1; VPALIGNR $12, BB2, BB2, BB2 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2 + VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1; VPALIGNR $4, DD2, DD2, DD2 + DECQ itr1 + JG sealAVX2Tail384LoopA + DECQ itr2 + JGE sealAVX2Tail384LoopB + + VPADDD ·chacha20Constants<>(SB), AA0, AA0; VPADDD ·chacha20Constants<>(SB), AA1, AA1; VPADDD ·chacha20Constants<>(SB), AA2, AA2 + VPADDD state1StoreAVX2, BB0, BB0; VPADDD state1StoreAVX2, BB1, BB1; VPADDD state1StoreAVX2, BB2, BB2 + VPADDD state2StoreAVX2, CC0, CC0; VPADDD state2StoreAVX2, CC1, CC1; VPADDD state2StoreAVX2, CC2, CC2 + VPADDD TT1, DD0, DD0; VPADDD TT2, DD1, DD1; VPADDD TT3, DD2, DD2 + VPERM2I128 $0x02, AA0, BB0, TT0 + VPERM2I128 $0x02, CC0, DD0, TT1 + VPERM2I128 $0x13, AA0, BB0, TT2 + VPERM2I128 $0x13, CC0, DD0, TT3 + VPXOR (0*32)(inp), TT0, TT0; VPXOR (1*32)(inp), TT1, TT1; VPXOR (2*32)(inp), TT2, TT2; VPXOR (3*32)(inp), TT3, TT3 + VMOVDQU TT0, (0*32)(oup); VMOVDQU TT1, (1*32)(oup); VMOVDQU TT2, (2*32)(oup); VMOVDQU TT3, (3*32)(oup) + VPERM2I128 $0x02, AA1, BB1, TT0 + VPERM2I128 $0x02, CC1, DD1, TT1 + VPERM2I128 $0x13, AA1, BB1, TT2 + VPERM2I128 $0x13, CC1, DD1, TT3 + VPXOR (4*32)(inp), TT0, TT0; VPXOR (5*32)(inp), TT1, TT1; VPXOR (6*32)(inp), TT2, TT2; VPXOR (7*32)(inp), TT3, TT3 + VMOVDQU TT0, (4*32)(oup); VMOVDQU TT1, (5*32)(oup); VMOVDQU TT2, (6*32)(oup); VMOVDQU TT3, (7*32)(oup) + MOVQ $256, itr1 + LEAQ 256(inp), inp + SUBQ $256, inl + VPERM2I128 $0x02, AA2, BB2, AA0 + VPERM2I128 $0x02, CC2, DD2, BB0 + VPERM2I128 $0x13, AA2, BB2, CC0 + VPERM2I128 $0x13, CC2, DD2, DD0 + + JMP sealAVX2SealHash + +// ---------------------------------------------------------------------------- +// Special optimization for the last 512 bytes of ciphertext +sealAVX2Tail512: + // Need to decrypt up to 512 bytes - prepare two blocks + // If we got here after the main loop - there are 512 encrypted bytes waiting to be hashed + // If we got here before the main loop - there are 448 encrpyred bytes waiting to be hashed + VMOVDQA ·chacha20Constants<>(SB), AA0; VMOVDQA AA0, AA1; VMOVDQA AA0, AA2; VMOVDQA AA0, AA3 + VMOVDQA state1StoreAVX2, BB0; VMOVDQA BB0, BB1; VMOVDQA BB0, BB2; VMOVDQA BB0, BB3 + VMOVDQA state2StoreAVX2, CC0; VMOVDQA CC0, CC1; VMOVDQA CC0, CC2; VMOVDQA CC0, CC3 + VMOVDQA ctr3StoreAVX2, DD0 + VPADDD ·avx2IncMask<>(SB), DD0, DD0; VPADDD ·avx2IncMask<>(SB), DD0, DD1; VPADDD ·avx2IncMask<>(SB), DD1, DD2; VPADDD ·avx2IncMask<>(SB), DD2, DD3 + VMOVDQA DD0, ctr0StoreAVX2; VMOVDQA DD1, ctr1StoreAVX2; VMOVDQA DD2, ctr2StoreAVX2; VMOVDQA DD3, ctr3StoreAVX2 + +sealAVX2Tail512LoopA: + polyAdd(0(oup)) + polyMul + LEAQ 16(oup), oup + +sealAVX2Tail512LoopB: + VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 + VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 + VPSHUFB ·rol16<>(SB), DD0, DD0; VPSHUFB ·rol16<>(SB), DD1, DD1; VPSHUFB ·rol16<>(SB), DD2, DD2; VPSHUFB ·rol16<>(SB), DD3, DD3 + VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 + VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 + VMOVDQA CC3, tmpStoreAVX2 + VPSLLD $12, BB0, CC3; VPSRLD $20, BB0, BB0; VPXOR CC3, BB0, BB0 + VPSLLD $12, BB1, CC3; VPSRLD $20, BB1, BB1; VPXOR CC3, BB1, BB1 + VPSLLD $12, BB2, CC3; VPSRLD $20, BB2, BB2; VPXOR CC3, BB2, BB2 + VPSLLD $12, BB3, CC3; VPSRLD $20, BB3, BB3; VPXOR CC3, BB3, BB3 + VMOVDQA tmpStoreAVX2, CC3 + polyAdd(0*8(oup)) + polyMulAVX2 + VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 + VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 + VPSHUFB ·rol8<>(SB), DD0, DD0; VPSHUFB ·rol8<>(SB), DD1, DD1; VPSHUFB ·rol8<>(SB), DD2, DD2; VPSHUFB ·rol8<>(SB), DD3, DD3 + VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 + VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 + VMOVDQA CC3, tmpStoreAVX2 + VPSLLD $7, BB0, CC3; VPSRLD $25, BB0, BB0; VPXOR CC3, BB0, BB0 + VPSLLD $7, BB1, CC3; VPSRLD $25, BB1, BB1; VPXOR CC3, BB1, BB1 + VPSLLD $7, BB2, CC3; VPSRLD $25, BB2, BB2; VPXOR CC3, BB2, BB2 + VPSLLD $7, BB3, CC3; VPSRLD $25, BB3, BB3; VPXOR CC3, BB3, BB3 + VMOVDQA tmpStoreAVX2, CC3 + VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1; VPALIGNR $4, BB2, BB2, BB2; VPALIGNR $4, BB3, BB3, BB3 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $8, CC3, CC3, CC3 + VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1; VPALIGNR $12, DD2, DD2, DD2; VPALIGNR $12, DD3, DD3, DD3 + VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 + VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 + VPSHUFB ·rol16<>(SB), DD0, DD0; VPSHUFB ·rol16<>(SB), DD1, DD1; VPSHUFB ·rol16<>(SB), DD2, DD2; VPSHUFB ·rol16<>(SB), DD3, DD3 + VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 + VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 + polyAdd(2*8(oup)) + polyMulAVX2 + LEAQ (4*8)(oup), oup + VMOVDQA CC3, tmpStoreAVX2 + VPSLLD $12, BB0, CC3; VPSRLD $20, BB0, BB0; VPXOR CC3, BB0, BB0 + VPSLLD $12, BB1, CC3; VPSRLD $20, BB1, BB1; VPXOR CC3, BB1, BB1 + VPSLLD $12, BB2, CC3; VPSRLD $20, BB2, BB2; VPXOR CC3, BB2, BB2 + VPSLLD $12, BB3, CC3; VPSRLD $20, BB3, BB3; VPXOR CC3, BB3, BB3 + VMOVDQA tmpStoreAVX2, CC3 + VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 + VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 + VPSHUFB ·rol8<>(SB), DD0, DD0; VPSHUFB ·rol8<>(SB), DD1, DD1; VPSHUFB ·rol8<>(SB), DD2, DD2; VPSHUFB ·rol8<>(SB), DD3, DD3 + VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 + VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 + VMOVDQA CC3, tmpStoreAVX2 + VPSLLD $7, BB0, CC3; VPSRLD $25, BB0, BB0; VPXOR CC3, BB0, BB0 + VPSLLD $7, BB1, CC3; VPSRLD $25, BB1, BB1; VPXOR CC3, BB1, BB1 + VPSLLD $7, BB2, CC3; VPSRLD $25, BB2, BB2; VPXOR CC3, BB2, BB2 + VPSLLD $7, BB3, CC3; VPSRLD $25, BB3, BB3; VPXOR CC3, BB3, BB3 + VMOVDQA tmpStoreAVX2, CC3 + VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1; VPALIGNR $12, BB2, BB2, BB2; VPALIGNR $12, BB3, BB3, BB3 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $8, CC3, CC3, CC3 + VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1; VPALIGNR $4, DD2, DD2, DD2; VPALIGNR $4, DD3, DD3, DD3 + + DECQ itr1 + JG sealAVX2Tail512LoopA + DECQ itr2 + JGE sealAVX2Tail512LoopB + + VPADDD ·chacha20Constants<>(SB), AA0, AA0; VPADDD ·chacha20Constants<>(SB), AA1, AA1; VPADDD ·chacha20Constants<>(SB), AA2, AA2; VPADDD ·chacha20Constants<>(SB), AA3, AA3 + VPADDD state1StoreAVX2, BB0, BB0; VPADDD state1StoreAVX2, BB1, BB1; VPADDD state1StoreAVX2, BB2, BB2; VPADDD state1StoreAVX2, BB3, BB3 + VPADDD state2StoreAVX2, CC0, CC0; VPADDD state2StoreAVX2, CC1, CC1; VPADDD state2StoreAVX2, CC2, CC2; VPADDD state2StoreAVX2, CC3, CC3 + VPADDD ctr0StoreAVX2, DD0, DD0; VPADDD ctr1StoreAVX2, DD1, DD1; VPADDD ctr2StoreAVX2, DD2, DD2; VPADDD ctr3StoreAVX2, DD3, DD3 + VMOVDQA CC3, tmpStoreAVX2 + VPERM2I128 $0x02, AA0, BB0, CC3 + VPXOR (0*32)(inp), CC3, CC3 + VMOVDQU CC3, (0*32)(oup) + VPERM2I128 $0x02, CC0, DD0, CC3 + VPXOR (1*32)(inp), CC3, CC3 + VMOVDQU CC3, (1*32)(oup) + VPERM2I128 $0x13, AA0, BB0, CC3 + VPXOR (2*32)(inp), CC3, CC3 + VMOVDQU CC3, (2*32)(oup) + VPERM2I128 $0x13, CC0, DD0, CC3 + VPXOR (3*32)(inp), CC3, CC3 + VMOVDQU CC3, (3*32)(oup) + + VPERM2I128 $0x02, AA1, BB1, AA0 + VPERM2I128 $0x02, CC1, DD1, BB0 + VPERM2I128 $0x13, AA1, BB1, CC0 + VPERM2I128 $0x13, CC1, DD1, DD0 + VPXOR (4*32)(inp), AA0, AA0; VPXOR (5*32)(inp), BB0, BB0; VPXOR (6*32)(inp), CC0, CC0; VPXOR (7*32)(inp), DD0, DD0 + VMOVDQU AA0, (4*32)(oup); VMOVDQU BB0, (5*32)(oup); VMOVDQU CC0, (6*32)(oup); VMOVDQU DD0, (7*32)(oup) + + VPERM2I128 $0x02, AA2, BB2, AA0 + VPERM2I128 $0x02, CC2, DD2, BB0 + VPERM2I128 $0x13, AA2, BB2, CC0 + VPERM2I128 $0x13, CC2, DD2, DD0 + VPXOR (8*32)(inp), AA0, AA0; VPXOR (9*32)(inp), BB0, BB0; VPXOR (10*32)(inp), CC0, CC0; VPXOR (11*32)(inp), DD0, DD0 + VMOVDQU AA0, (8*32)(oup); VMOVDQU BB0, (9*32)(oup); VMOVDQU CC0, (10*32)(oup); VMOVDQU DD0, (11*32)(oup) + + MOVQ $384, itr1 + LEAQ 384(inp), inp + SUBQ $384, inl + VPERM2I128 $0x02, AA3, BB3, AA0 + VPERM2I128 $0x02, tmpStoreAVX2, DD3, BB0 + VPERM2I128 $0x13, AA3, BB3, CC0 + VPERM2I128 $0x13, tmpStoreAVX2, DD3, DD0 + + JMP sealAVX2SealHash diff --git a/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_generic.go b/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_generic.go new file mode 100644 index 0000000000..6313898f0a --- /dev/null +++ b/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_generic.go @@ -0,0 +1,81 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package chacha20poly1305 + +import ( + "encoding/binary" + + "golang.org/x/crypto/chacha20" + "golang.org/x/crypto/internal/alias" + "golang.org/x/crypto/internal/poly1305" +) + +func writeWithPadding(p *poly1305.MAC, b []byte) { + p.Write(b) + if rem := len(b) % 16; rem != 0 { + var buf [16]byte + padLen := 16 - rem + p.Write(buf[:padLen]) + } +} + +func writeUint64(p *poly1305.MAC, n int) { + var buf [8]byte + binary.LittleEndian.PutUint64(buf[:], uint64(n)) + p.Write(buf[:]) +} + +func (c *chacha20poly1305) sealGeneric(dst, nonce, plaintext, additionalData []byte) []byte { + ret, out := sliceForAppend(dst, len(plaintext)+poly1305.TagSize) + ciphertext, tag := out[:len(plaintext)], out[len(plaintext):] + if alias.InexactOverlap(out, plaintext) { + panic("chacha20poly1305: invalid buffer overlap") + } + + var polyKey [32]byte + s, _ := chacha20.NewUnauthenticatedCipher(c.key[:], nonce) + s.XORKeyStream(polyKey[:], polyKey[:]) + s.SetCounter(1) // set the counter to 1, skipping 32 bytes + s.XORKeyStream(ciphertext, plaintext) + + p := poly1305.New(&polyKey) + writeWithPadding(p, additionalData) + writeWithPadding(p, ciphertext) + writeUint64(p, len(additionalData)) + writeUint64(p, len(plaintext)) + p.Sum(tag[:0]) + + return ret +} + +func (c *chacha20poly1305) openGeneric(dst, nonce, ciphertext, additionalData []byte) ([]byte, error) { + tag := ciphertext[len(ciphertext)-16:] + ciphertext = ciphertext[:len(ciphertext)-16] + + var polyKey [32]byte + s, _ := chacha20.NewUnauthenticatedCipher(c.key[:], nonce) + s.XORKeyStream(polyKey[:], polyKey[:]) + s.SetCounter(1) // set the counter to 1, skipping 32 bytes + + p := poly1305.New(&polyKey) + writeWithPadding(p, additionalData) + writeWithPadding(p, ciphertext) + writeUint64(p, len(additionalData)) + writeUint64(p, len(ciphertext)) + + ret, out := sliceForAppend(dst, len(ciphertext)) + if alias.InexactOverlap(out, ciphertext) { + panic("chacha20poly1305: invalid buffer overlap") + } + if !p.Verify(tag) { + for i := range out { + out[i] = 0 + } + return nil, errOpen + } + + s.XORKeyStream(out, ciphertext) + return ret, nil +} diff --git a/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_noasm.go b/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_noasm.go new file mode 100644 index 0000000000..f832b33d45 --- /dev/null +++ b/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_noasm.go @@ -0,0 +1,16 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !amd64 || !gc || purego +// +build !amd64 !gc purego + +package chacha20poly1305 + +func (c *chacha20poly1305) seal(dst, nonce, plaintext, additionalData []byte) []byte { + return c.sealGeneric(dst, nonce, plaintext, additionalData) +} + +func (c *chacha20poly1305) open(dst, nonce, ciphertext, additionalData []byte) ([]byte, error) { + return c.openGeneric(dst, nonce, ciphertext, additionalData) +} diff --git a/vendor/golang.org/x/crypto/chacha20poly1305/xchacha20poly1305.go b/vendor/golang.org/x/crypto/chacha20poly1305/xchacha20poly1305.go new file mode 100644 index 0000000000..1cebfe946f --- /dev/null +++ b/vendor/golang.org/x/crypto/chacha20poly1305/xchacha20poly1305.go @@ -0,0 +1,86 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package chacha20poly1305 + +import ( + "crypto/cipher" + "errors" + + "golang.org/x/crypto/chacha20" +) + +type xchacha20poly1305 struct { + key [KeySize]byte +} + +// NewX returns a XChaCha20-Poly1305 AEAD that uses the given 256-bit key. +// +// XChaCha20-Poly1305 is a ChaCha20-Poly1305 variant that takes a longer nonce, +// suitable to be generated randomly without risk of collisions. It should be +// preferred when nonce uniqueness cannot be trivially ensured, or whenever +// nonces are randomly generated. +func NewX(key []byte) (cipher.AEAD, error) { + if len(key) != KeySize { + return nil, errors.New("chacha20poly1305: bad key length") + } + ret := new(xchacha20poly1305) + copy(ret.key[:], key) + return ret, nil +} + +func (*xchacha20poly1305) NonceSize() int { + return NonceSizeX +} + +func (*xchacha20poly1305) Overhead() int { + return Overhead +} + +func (x *xchacha20poly1305) Seal(dst, nonce, plaintext, additionalData []byte) []byte { + if len(nonce) != NonceSizeX { + panic("chacha20poly1305: bad nonce length passed to Seal") + } + + // XChaCha20-Poly1305 technically supports a 64-bit counter, so there is no + // size limit. However, since we reuse the ChaCha20-Poly1305 implementation, + // the second half of the counter is not available. This is unlikely to be + // an issue because the cipher.AEAD API requires the entire message to be in + // memory, and the counter overflows at 256 GB. + if uint64(len(plaintext)) > (1<<38)-64 { + panic("chacha20poly1305: plaintext too large") + } + + c := new(chacha20poly1305) + hKey, _ := chacha20.HChaCha20(x.key[:], nonce[0:16]) + copy(c.key[:], hKey) + + // The first 4 bytes of the final nonce are unused counter space. + cNonce := make([]byte, NonceSize) + copy(cNonce[4:12], nonce[16:24]) + + return c.seal(dst, cNonce[:], plaintext, additionalData) +} + +func (x *xchacha20poly1305) Open(dst, nonce, ciphertext, additionalData []byte) ([]byte, error) { + if len(nonce) != NonceSizeX { + panic("chacha20poly1305: bad nonce length passed to Open") + } + if len(ciphertext) < 16 { + return nil, errOpen + } + if uint64(len(ciphertext)) > (1<<38)-48 { + panic("chacha20poly1305: ciphertext too large") + } + + c := new(chacha20poly1305) + hKey, _ := chacha20.HChaCha20(x.key[:], nonce[0:16]) + copy(c.key[:], hKey) + + // The first 4 bytes of the final nonce are unused counter space. + cNonce := make([]byte, NonceSize) + copy(cNonce[4:12], nonce[16:24]) + + return c.open(dst, cNonce[:], ciphertext, additionalData) +} diff --git a/vendor/golang.org/x/crypto/cryptobyte/asn1.go b/vendor/golang.org/x/crypto/cryptobyte/asn1.go new file mode 100644 index 0000000000..6fc2838a3f --- /dev/null +++ b/vendor/golang.org/x/crypto/cryptobyte/asn1.go @@ -0,0 +1,824 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cryptobyte + +import ( + encoding_asn1 "encoding/asn1" + "fmt" + "math/big" + "reflect" + "time" + + "golang.org/x/crypto/cryptobyte/asn1" +) + +// This file contains ASN.1-related methods for String and Builder. + +// Builder + +// AddASN1Int64 appends a DER-encoded ASN.1 INTEGER. +func (b *Builder) AddASN1Int64(v int64) { + b.addASN1Signed(asn1.INTEGER, v) +} + +// AddASN1Int64WithTag appends a DER-encoded ASN.1 INTEGER with the +// given tag. +func (b *Builder) AddASN1Int64WithTag(v int64, tag asn1.Tag) { + b.addASN1Signed(tag, v) +} + +// AddASN1Enum appends a DER-encoded ASN.1 ENUMERATION. +func (b *Builder) AddASN1Enum(v int64) { + b.addASN1Signed(asn1.ENUM, v) +} + +func (b *Builder) addASN1Signed(tag asn1.Tag, v int64) { + b.AddASN1(tag, func(c *Builder) { + length := 1 + for i := v; i >= 0x80 || i < -0x80; i >>= 8 { + length++ + } + + for ; length > 0; length-- { + i := v >> uint((length-1)*8) & 0xff + c.AddUint8(uint8(i)) + } + }) +} + +// AddASN1Uint64 appends a DER-encoded ASN.1 INTEGER. +func (b *Builder) AddASN1Uint64(v uint64) { + b.AddASN1(asn1.INTEGER, func(c *Builder) { + length := 1 + for i := v; i >= 0x80; i >>= 8 { + length++ + } + + for ; length > 0; length-- { + i := v >> uint((length-1)*8) & 0xff + c.AddUint8(uint8(i)) + } + }) +} + +// AddASN1BigInt appends a DER-encoded ASN.1 INTEGER. +func (b *Builder) AddASN1BigInt(n *big.Int) { + if b.err != nil { + return + } + + b.AddASN1(asn1.INTEGER, func(c *Builder) { + if n.Sign() < 0 { + // A negative number has to be converted to two's-complement form. So we + // invert and subtract 1. If the most-significant-bit isn't set then + // we'll need to pad the beginning with 0xff in order to keep the number + // negative. + nMinus1 := new(big.Int).Neg(n) + nMinus1.Sub(nMinus1, bigOne) + bytes := nMinus1.Bytes() + for i := range bytes { + bytes[i] ^= 0xff + } + if len(bytes) == 0 || bytes[0]&0x80 == 0 { + c.add(0xff) + } + c.add(bytes...) + } else if n.Sign() == 0 { + c.add(0) + } else { + bytes := n.Bytes() + if bytes[0]&0x80 != 0 { + c.add(0) + } + c.add(bytes...) + } + }) +} + +// AddASN1OctetString appends a DER-encoded ASN.1 OCTET STRING. +func (b *Builder) AddASN1OctetString(bytes []byte) { + b.AddASN1(asn1.OCTET_STRING, func(c *Builder) { + c.AddBytes(bytes) + }) +} + +const generalizedTimeFormatStr = "20060102150405Z0700" + +// AddASN1GeneralizedTime appends a DER-encoded ASN.1 GENERALIZEDTIME. +func (b *Builder) AddASN1GeneralizedTime(t time.Time) { + if t.Year() < 0 || t.Year() > 9999 { + b.err = fmt.Errorf("cryptobyte: cannot represent %v as a GeneralizedTime", t) + return + } + b.AddASN1(asn1.GeneralizedTime, func(c *Builder) { + c.AddBytes([]byte(t.Format(generalizedTimeFormatStr))) + }) +} + +// AddASN1UTCTime appends a DER-encoded ASN.1 UTCTime. +func (b *Builder) AddASN1UTCTime(t time.Time) { + b.AddASN1(asn1.UTCTime, func(c *Builder) { + // As utilized by the X.509 profile, UTCTime can only + // represent the years 1950 through 2049. + if t.Year() < 1950 || t.Year() >= 2050 { + b.err = fmt.Errorf("cryptobyte: cannot represent %v as a UTCTime", t) + return + } + c.AddBytes([]byte(t.Format(defaultUTCTimeFormatStr))) + }) +} + +// AddASN1BitString appends a DER-encoded ASN.1 BIT STRING. This does not +// support BIT STRINGs that are not a whole number of bytes. +func (b *Builder) AddASN1BitString(data []byte) { + b.AddASN1(asn1.BIT_STRING, func(b *Builder) { + b.AddUint8(0) + b.AddBytes(data) + }) +} + +func (b *Builder) addBase128Int(n int64) { + var length int + if n == 0 { + length = 1 + } else { + for i := n; i > 0; i >>= 7 { + length++ + } + } + + for i := length - 1; i >= 0; i-- { + o := byte(n >> uint(i*7)) + o &= 0x7f + if i != 0 { + o |= 0x80 + } + + b.add(o) + } +} + +func isValidOID(oid encoding_asn1.ObjectIdentifier) bool { + if len(oid) < 2 { + return false + } + + if oid[0] > 2 || (oid[0] <= 1 && oid[1] >= 40) { + return false + } + + for _, v := range oid { + if v < 0 { + return false + } + } + + return true +} + +func (b *Builder) AddASN1ObjectIdentifier(oid encoding_asn1.ObjectIdentifier) { + b.AddASN1(asn1.OBJECT_IDENTIFIER, func(b *Builder) { + if !isValidOID(oid) { + b.err = fmt.Errorf("cryptobyte: invalid OID: %v", oid) + return + } + + b.addBase128Int(int64(oid[0])*40 + int64(oid[1])) + for _, v := range oid[2:] { + b.addBase128Int(int64(v)) + } + }) +} + +func (b *Builder) AddASN1Boolean(v bool) { + b.AddASN1(asn1.BOOLEAN, func(b *Builder) { + if v { + b.AddUint8(0xff) + } else { + b.AddUint8(0) + } + }) +} + +func (b *Builder) AddASN1NULL() { + b.add(uint8(asn1.NULL), 0) +} + +// MarshalASN1 calls encoding_asn1.Marshal on its input and appends the result if +// successful or records an error if one occurred. +func (b *Builder) MarshalASN1(v interface{}) { + // NOTE(martinkr): This is somewhat of a hack to allow propagation of + // encoding_asn1.Marshal errors into Builder.err. N.B. if you call MarshalASN1 with a + // value embedded into a struct, its tag information is lost. + if b.err != nil { + return + } + bytes, err := encoding_asn1.Marshal(v) + if err != nil { + b.err = err + return + } + b.AddBytes(bytes) +} + +// AddASN1 appends an ASN.1 object. The object is prefixed with the given tag. +// Tags greater than 30 are not supported and result in an error (i.e. +// low-tag-number form only). The child builder passed to the +// BuilderContinuation can be used to build the content of the ASN.1 object. +func (b *Builder) AddASN1(tag asn1.Tag, f BuilderContinuation) { + if b.err != nil { + return + } + // Identifiers with the low five bits set indicate high-tag-number format + // (two or more octets), which we don't support. + if tag&0x1f == 0x1f { + b.err = fmt.Errorf("cryptobyte: high-tag number identifier octects not supported: 0x%x", tag) + return + } + b.AddUint8(uint8(tag)) + b.addLengthPrefixed(1, true, f) +} + +// String + +// ReadASN1Boolean decodes an ASN.1 BOOLEAN and converts it to a boolean +// representation into out and advances. It reports whether the read +// was successful. +func (s *String) ReadASN1Boolean(out *bool) bool { + var bytes String + if !s.ReadASN1(&bytes, asn1.BOOLEAN) || len(bytes) != 1 { + return false + } + + switch bytes[0] { + case 0: + *out = false + case 0xff: + *out = true + default: + return false + } + + return true +} + +// ReadASN1Integer decodes an ASN.1 INTEGER into out and advances. If out does +// not point to an integer, to a big.Int, or to a []byte it panics. Only +// positive and zero values can be decoded into []byte, and they are returned as +// big-endian binary values that share memory with s. Positive values will have +// no leading zeroes, and zero will be returned as a single zero byte. +// ReadASN1Integer reports whether the read was successful. +func (s *String) ReadASN1Integer(out interface{}) bool { + switch out := out.(type) { + case *int, *int8, *int16, *int32, *int64: + var i int64 + if !s.readASN1Int64(&i) || reflect.ValueOf(out).Elem().OverflowInt(i) { + return false + } + reflect.ValueOf(out).Elem().SetInt(i) + return true + case *uint, *uint8, *uint16, *uint32, *uint64: + var u uint64 + if !s.readASN1Uint64(&u) || reflect.ValueOf(out).Elem().OverflowUint(u) { + return false + } + reflect.ValueOf(out).Elem().SetUint(u) + return true + case *big.Int: + return s.readASN1BigInt(out) + case *[]byte: + return s.readASN1Bytes(out) + default: + panic("out does not point to an integer type") + } +} + +func checkASN1Integer(bytes []byte) bool { + if len(bytes) == 0 { + // An INTEGER is encoded with at least one octet. + return false + } + if len(bytes) == 1 { + return true + } + if bytes[0] == 0 && bytes[1]&0x80 == 0 || bytes[0] == 0xff && bytes[1]&0x80 == 0x80 { + // Value is not minimally encoded. + return false + } + return true +} + +var bigOne = big.NewInt(1) + +func (s *String) readASN1BigInt(out *big.Int) bool { + var bytes String + if !s.ReadASN1(&bytes, asn1.INTEGER) || !checkASN1Integer(bytes) { + return false + } + if bytes[0]&0x80 == 0x80 { + // Negative number. + neg := make([]byte, len(bytes)) + for i, b := range bytes { + neg[i] = ^b + } + out.SetBytes(neg) + out.Add(out, bigOne) + out.Neg(out) + } else { + out.SetBytes(bytes) + } + return true +} + +func (s *String) readASN1Bytes(out *[]byte) bool { + var bytes String + if !s.ReadASN1(&bytes, asn1.INTEGER) || !checkASN1Integer(bytes) { + return false + } + if bytes[0]&0x80 == 0x80 { + return false + } + for len(bytes) > 1 && bytes[0] == 0 { + bytes = bytes[1:] + } + *out = bytes + return true +} + +func (s *String) readASN1Int64(out *int64) bool { + var bytes String + if !s.ReadASN1(&bytes, asn1.INTEGER) || !checkASN1Integer(bytes) || !asn1Signed(out, bytes) { + return false + } + return true +} + +func asn1Signed(out *int64, n []byte) bool { + length := len(n) + if length > 8 { + return false + } + for i := 0; i < length; i++ { + *out <<= 8 + *out |= int64(n[i]) + } + // Shift up and down in order to sign extend the result. + *out <<= 64 - uint8(length)*8 + *out >>= 64 - uint8(length)*8 + return true +} + +func (s *String) readASN1Uint64(out *uint64) bool { + var bytes String + if !s.ReadASN1(&bytes, asn1.INTEGER) || !checkASN1Integer(bytes) || !asn1Unsigned(out, bytes) { + return false + } + return true +} + +func asn1Unsigned(out *uint64, n []byte) bool { + length := len(n) + if length > 9 || length == 9 && n[0] != 0 { + // Too large for uint64. + return false + } + if n[0]&0x80 != 0 { + // Negative number. + return false + } + for i := 0; i < length; i++ { + *out <<= 8 + *out |= uint64(n[i]) + } + return true +} + +// ReadASN1Int64WithTag decodes an ASN.1 INTEGER with the given tag into out +// and advances. It reports whether the read was successful and resulted in a +// value that can be represented in an int64. +func (s *String) ReadASN1Int64WithTag(out *int64, tag asn1.Tag) bool { + var bytes String + return s.ReadASN1(&bytes, tag) && checkASN1Integer(bytes) && asn1Signed(out, bytes) +} + +// ReadASN1Enum decodes an ASN.1 ENUMERATION into out and advances. It reports +// whether the read was successful. +func (s *String) ReadASN1Enum(out *int) bool { + var bytes String + var i int64 + if !s.ReadASN1(&bytes, asn1.ENUM) || !checkASN1Integer(bytes) || !asn1Signed(&i, bytes) { + return false + } + if int64(int(i)) != i { + return false + } + *out = int(i) + return true +} + +func (s *String) readBase128Int(out *int) bool { + ret := 0 + for i := 0; len(*s) > 0; i++ { + if i == 5 { + return false + } + // Avoid overflowing int on a 32-bit platform. + // We don't want different behavior based on the architecture. + if ret >= 1<<(31-7) { + return false + } + ret <<= 7 + b := s.read(1)[0] + + // ITU-T X.690, section 8.19.2: + // The subidentifier shall be encoded in the fewest possible octets, + // that is, the leading octet of the subidentifier shall not have the value 0x80. + if i == 0 && b == 0x80 { + return false + } + + ret |= int(b & 0x7f) + if b&0x80 == 0 { + *out = ret + return true + } + } + return false // truncated +} + +// ReadASN1ObjectIdentifier decodes an ASN.1 OBJECT IDENTIFIER into out and +// advances. It reports whether the read was successful. +func (s *String) ReadASN1ObjectIdentifier(out *encoding_asn1.ObjectIdentifier) bool { + var bytes String + if !s.ReadASN1(&bytes, asn1.OBJECT_IDENTIFIER) || len(bytes) == 0 { + return false + } + + // In the worst case, we get two elements from the first byte (which is + // encoded differently) and then every varint is a single byte long. + components := make([]int, len(bytes)+1) + + // The first varint is 40*value1 + value2: + // According to this packing, value1 can take the values 0, 1 and 2 only. + // When value1 = 0 or value1 = 1, then value2 is <= 39. When value1 = 2, + // then there are no restrictions on value2. + var v int + if !bytes.readBase128Int(&v) { + return false + } + if v < 80 { + components[0] = v / 40 + components[1] = v % 40 + } else { + components[0] = 2 + components[1] = v - 80 + } + + i := 2 + for ; len(bytes) > 0; i++ { + if !bytes.readBase128Int(&v) { + return false + } + components[i] = v + } + *out = components[:i] + return true +} + +// ReadASN1GeneralizedTime decodes an ASN.1 GENERALIZEDTIME into out and +// advances. It reports whether the read was successful. +func (s *String) ReadASN1GeneralizedTime(out *time.Time) bool { + var bytes String + if !s.ReadASN1(&bytes, asn1.GeneralizedTime) { + return false + } + t := string(bytes) + res, err := time.Parse(generalizedTimeFormatStr, t) + if err != nil { + return false + } + if serialized := res.Format(generalizedTimeFormatStr); serialized != t { + return false + } + *out = res + return true +} + +const defaultUTCTimeFormatStr = "060102150405Z0700" + +// ReadASN1UTCTime decodes an ASN.1 UTCTime into out and advances. +// It reports whether the read was successful. +func (s *String) ReadASN1UTCTime(out *time.Time) bool { + var bytes String + if !s.ReadASN1(&bytes, asn1.UTCTime) { + return false + } + t := string(bytes) + + formatStr := defaultUTCTimeFormatStr + var err error + res, err := time.Parse(formatStr, t) + if err != nil { + // Fallback to minute precision if we can't parse second + // precision. If we are following X.509 or X.690 we shouldn't + // support this, but we do. + formatStr = "0601021504Z0700" + res, err = time.Parse(formatStr, t) + } + if err != nil { + return false + } + + if serialized := res.Format(formatStr); serialized != t { + return false + } + + if res.Year() >= 2050 { + // UTCTime interprets the low order digits 50-99 as 1950-99. + // This only applies to its use in the X.509 profile. + // See https://tools.ietf.org/html/rfc5280#section-4.1.2.5.1 + res = res.AddDate(-100, 0, 0) + } + *out = res + return true +} + +// ReadASN1BitString decodes an ASN.1 BIT STRING into out and advances. +// It reports whether the read was successful. +func (s *String) ReadASN1BitString(out *encoding_asn1.BitString) bool { + var bytes String + if !s.ReadASN1(&bytes, asn1.BIT_STRING) || len(bytes) == 0 || + len(bytes)*8/8 != len(bytes) { + return false + } + + paddingBits := bytes[0] + bytes = bytes[1:] + if paddingBits > 7 || + len(bytes) == 0 && paddingBits != 0 || + len(bytes) > 0 && bytes[len(bytes)-1]&(1< 4 || len(*s) < int(2+lenLen) { + return false + } + + lenBytes := String((*s)[2 : 2+lenLen]) + if !lenBytes.readUnsigned(&len32, int(lenLen)) { + return false + } + + // ITU-T X.690 section 10.1 (DER length forms) requires encoding the length + // with the minimum number of octets. + if len32 < 128 { + // Length should have used short-form encoding. + return false + } + if len32>>((lenLen-1)*8) == 0 { + // Leading octet is 0. Length should have been at least one byte shorter. + return false + } + + headerLen = 2 + uint32(lenLen) + if headerLen+len32 < len32 { + // Overflow. + return false + } + length = headerLen + len32 + } + + if int(length) < 0 || !s.ReadBytes((*[]byte)(out), int(length)) { + return false + } + if skipHeader && !out.Skip(int(headerLen)) { + panic("cryptobyte: internal error") + } + + return true +} diff --git a/vendor/golang.org/x/crypto/cryptobyte/asn1/asn1.go b/vendor/golang.org/x/crypto/cryptobyte/asn1/asn1.go new file mode 100644 index 0000000000..cda8e3edfd --- /dev/null +++ b/vendor/golang.org/x/crypto/cryptobyte/asn1/asn1.go @@ -0,0 +1,46 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package asn1 contains supporting types for parsing and building ASN.1 +// messages with the cryptobyte package. +package asn1 // import "golang.org/x/crypto/cryptobyte/asn1" + +// Tag represents an ASN.1 identifier octet, consisting of a tag number +// (indicating a type) and class (such as context-specific or constructed). +// +// Methods in the cryptobyte package only support the low-tag-number form, i.e. +// a single identifier octet with bits 7-8 encoding the class and bits 1-6 +// encoding the tag number. +type Tag uint8 + +const ( + classConstructed = 0x20 + classContextSpecific = 0x80 +) + +// Constructed returns t with the constructed class bit set. +func (t Tag) Constructed() Tag { return t | classConstructed } + +// ContextSpecific returns t with the context-specific class bit set. +func (t Tag) ContextSpecific() Tag { return t | classContextSpecific } + +// The following is a list of standard tag and class combinations. +const ( + BOOLEAN = Tag(1) + INTEGER = Tag(2) + BIT_STRING = Tag(3) + OCTET_STRING = Tag(4) + NULL = Tag(5) + OBJECT_IDENTIFIER = Tag(6) + ENUM = Tag(10) + UTF8String = Tag(12) + SEQUENCE = Tag(16 | classConstructed) + SET = Tag(17 | classConstructed) + PrintableString = Tag(19) + T61String = Tag(20) + IA5String = Tag(22) + UTCTime = Tag(23) + GeneralizedTime = Tag(24) + GeneralString = Tag(27) +) diff --git a/vendor/golang.org/x/crypto/cryptobyte/builder.go b/vendor/golang.org/x/crypto/cryptobyte/builder.go new file mode 100644 index 0000000000..c05ac7d16d --- /dev/null +++ b/vendor/golang.org/x/crypto/cryptobyte/builder.go @@ -0,0 +1,345 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cryptobyte + +import ( + "errors" + "fmt" +) + +// A Builder builds byte strings from fixed-length and length-prefixed values. +// Builders either allocate space as needed, or are ‘fixed’, which means that +// they write into a given buffer and produce an error if it's exhausted. +// +// The zero value is a usable Builder that allocates space as needed. +// +// Simple values are marshaled and appended to a Builder using methods on the +// Builder. Length-prefixed values are marshaled by providing a +// BuilderContinuation, which is a function that writes the inner contents of +// the value to a given Builder. See the documentation for BuilderContinuation +// for details. +type Builder struct { + err error + result []byte + fixedSize bool + child *Builder + offset int + pendingLenLen int + pendingIsASN1 bool + inContinuation *bool +} + +// NewBuilder creates a Builder that appends its output to the given buffer. +// Like append(), the slice will be reallocated if its capacity is exceeded. +// Use Bytes to get the final buffer. +func NewBuilder(buffer []byte) *Builder { + return &Builder{ + result: buffer, + } +} + +// NewFixedBuilder creates a Builder that appends its output into the given +// buffer. This builder does not reallocate the output buffer. Writes that +// would exceed the buffer's capacity are treated as an error. +func NewFixedBuilder(buffer []byte) *Builder { + return &Builder{ + result: buffer, + fixedSize: true, + } +} + +// SetError sets the value to be returned as the error from Bytes. Writes +// performed after calling SetError are ignored. +func (b *Builder) SetError(err error) { + b.err = err +} + +// Bytes returns the bytes written by the builder or an error if one has +// occurred during building. +func (b *Builder) Bytes() ([]byte, error) { + if b.err != nil { + return nil, b.err + } + return b.result[b.offset:], nil +} + +// BytesOrPanic returns the bytes written by the builder or panics if an error +// has occurred during building. +func (b *Builder) BytesOrPanic() []byte { + if b.err != nil { + panic(b.err) + } + return b.result[b.offset:] +} + +// AddUint8 appends an 8-bit value to the byte string. +func (b *Builder) AddUint8(v uint8) { + b.add(byte(v)) +} + +// AddUint16 appends a big-endian, 16-bit value to the byte string. +func (b *Builder) AddUint16(v uint16) { + b.add(byte(v>>8), byte(v)) +} + +// AddUint24 appends a big-endian, 24-bit value to the byte string. The highest +// byte of the 32-bit input value is silently truncated. +func (b *Builder) AddUint24(v uint32) { + b.add(byte(v>>16), byte(v>>8), byte(v)) +} + +// AddUint32 appends a big-endian, 32-bit value to the byte string. +func (b *Builder) AddUint32(v uint32) { + b.add(byte(v>>24), byte(v>>16), byte(v>>8), byte(v)) +} + +// AddUint64 appends a big-endian, 64-bit value to the byte string. +func (b *Builder) AddUint64(v uint64) { + b.add(byte(v>>56), byte(v>>48), byte(v>>40), byte(v>>32), byte(v>>24), byte(v>>16), byte(v>>8), byte(v)) +} + +// AddBytes appends a sequence of bytes to the byte string. +func (b *Builder) AddBytes(v []byte) { + b.add(v...) +} + +// BuilderContinuation is a continuation-passing interface for building +// length-prefixed byte sequences. Builder methods for length-prefixed +// sequences (AddUint8LengthPrefixed etc) will invoke the BuilderContinuation +// supplied to them. The child builder passed to the continuation can be used +// to build the content of the length-prefixed sequence. For example: +// +// parent := cryptobyte.NewBuilder() +// parent.AddUint8LengthPrefixed(func (child *Builder) { +// child.AddUint8(42) +// child.AddUint8LengthPrefixed(func (grandchild *Builder) { +// grandchild.AddUint8(5) +// }) +// }) +// +// It is an error to write more bytes to the child than allowed by the reserved +// length prefix. After the continuation returns, the child must be considered +// invalid, i.e. users must not store any copies or references of the child +// that outlive the continuation. +// +// If the continuation panics with a value of type BuildError then the inner +// error will be returned as the error from Bytes. If the child panics +// otherwise then Bytes will repanic with the same value. +type BuilderContinuation func(child *Builder) + +// BuildError wraps an error. If a BuilderContinuation panics with this value, +// the panic will be recovered and the inner error will be returned from +// Builder.Bytes. +type BuildError struct { + Err error +} + +// AddUint8LengthPrefixed adds a 8-bit length-prefixed byte sequence. +func (b *Builder) AddUint8LengthPrefixed(f BuilderContinuation) { + b.addLengthPrefixed(1, false, f) +} + +// AddUint16LengthPrefixed adds a big-endian, 16-bit length-prefixed byte sequence. +func (b *Builder) AddUint16LengthPrefixed(f BuilderContinuation) { + b.addLengthPrefixed(2, false, f) +} + +// AddUint24LengthPrefixed adds a big-endian, 24-bit length-prefixed byte sequence. +func (b *Builder) AddUint24LengthPrefixed(f BuilderContinuation) { + b.addLengthPrefixed(3, false, f) +} + +// AddUint32LengthPrefixed adds a big-endian, 32-bit length-prefixed byte sequence. +func (b *Builder) AddUint32LengthPrefixed(f BuilderContinuation) { + b.addLengthPrefixed(4, false, f) +} + +func (b *Builder) callContinuation(f BuilderContinuation, arg *Builder) { + if !*b.inContinuation { + *b.inContinuation = true + + defer func() { + *b.inContinuation = false + + r := recover() + if r == nil { + return + } + + if buildError, ok := r.(BuildError); ok { + b.err = buildError.Err + } else { + panic(r) + } + }() + } + + f(arg) +} + +func (b *Builder) addLengthPrefixed(lenLen int, isASN1 bool, f BuilderContinuation) { + // Subsequent writes can be ignored if the builder has encountered an error. + if b.err != nil { + return + } + + offset := len(b.result) + b.add(make([]byte, lenLen)...) + + if b.inContinuation == nil { + b.inContinuation = new(bool) + } + + b.child = &Builder{ + result: b.result, + fixedSize: b.fixedSize, + offset: offset, + pendingLenLen: lenLen, + pendingIsASN1: isASN1, + inContinuation: b.inContinuation, + } + + b.callContinuation(f, b.child) + b.flushChild() + if b.child != nil { + panic("cryptobyte: internal error") + } +} + +func (b *Builder) flushChild() { + if b.child == nil { + return + } + b.child.flushChild() + child := b.child + b.child = nil + + if child.err != nil { + b.err = child.err + return + } + + length := len(child.result) - child.pendingLenLen - child.offset + + if length < 0 { + panic("cryptobyte: internal error") // result unexpectedly shrunk + } + + if child.pendingIsASN1 { + // For ASN.1, we reserved a single byte for the length. If that turned out + // to be incorrect, we have to move the contents along in order to make + // space. + if child.pendingLenLen != 1 { + panic("cryptobyte: internal error") + } + var lenLen, lenByte uint8 + if int64(length) > 0xfffffffe { + b.err = errors.New("pending ASN.1 child too long") + return + } else if length > 0xffffff { + lenLen = 5 + lenByte = 0x80 | 4 + } else if length > 0xffff { + lenLen = 4 + lenByte = 0x80 | 3 + } else if length > 0xff { + lenLen = 3 + lenByte = 0x80 | 2 + } else if length > 0x7f { + lenLen = 2 + lenByte = 0x80 | 1 + } else { + lenLen = 1 + lenByte = uint8(length) + length = 0 + } + + // Insert the initial length byte, make space for successive length bytes, + // and adjust the offset. + child.result[child.offset] = lenByte + extraBytes := int(lenLen - 1) + if extraBytes != 0 { + child.add(make([]byte, extraBytes)...) + childStart := child.offset + child.pendingLenLen + copy(child.result[childStart+extraBytes:], child.result[childStart:]) + } + child.offset++ + child.pendingLenLen = extraBytes + } + + l := length + for i := child.pendingLenLen - 1; i >= 0; i-- { + child.result[child.offset+i] = uint8(l) + l >>= 8 + } + if l != 0 { + b.err = fmt.Errorf("cryptobyte: pending child length %d exceeds %d-byte length prefix", length, child.pendingLenLen) + return + } + + if b.fixedSize && &b.result[0] != &child.result[0] { + panic("cryptobyte: BuilderContinuation reallocated a fixed-size buffer") + } + + b.result = child.result +} + +func (b *Builder) add(bytes ...byte) { + if b.err != nil { + return + } + if b.child != nil { + panic("cryptobyte: attempted write while child is pending") + } + if len(b.result)+len(bytes) < len(bytes) { + b.err = errors.New("cryptobyte: length overflow") + } + if b.fixedSize && len(b.result)+len(bytes) > cap(b.result) { + b.err = errors.New("cryptobyte: Builder is exceeding its fixed-size buffer") + return + } + b.result = append(b.result, bytes...) +} + +// Unwrite rolls back non-negative n bytes written directly to the Builder. +// An attempt by a child builder passed to a continuation to unwrite bytes +// from its parent will panic. +func (b *Builder) Unwrite(n int) { + if b.err != nil { + return + } + if b.child != nil { + panic("cryptobyte: attempted unwrite while child is pending") + } + length := len(b.result) - b.pendingLenLen - b.offset + if length < 0 { + panic("cryptobyte: internal error") + } + if n < 0 { + panic("cryptobyte: attempted to unwrite negative number of bytes") + } + if n > length { + panic("cryptobyte: attempted to unwrite more than was written") + } + b.result = b.result[:len(b.result)-n] +} + +// A MarshalingValue marshals itself into a Builder. +type MarshalingValue interface { + // Marshal is called by Builder.AddValue. It receives a pointer to a builder + // to marshal itself into. It may return an error that occurred during + // marshaling, such as unset or invalid values. + Marshal(b *Builder) error +} + +// AddValue calls Marshal on v, passing a pointer to the builder to append to. +// If Marshal returns an error, it is set on the Builder so that subsequent +// appends don't have an effect. +func (b *Builder) AddValue(v MarshalingValue) { + err := v.Marshal(b) + if err != nil { + b.err = err + } +} diff --git a/vendor/golang.org/x/crypto/cryptobyte/string.go b/vendor/golang.org/x/crypto/cryptobyte/string.go new file mode 100644 index 0000000000..0531a3d6f1 --- /dev/null +++ b/vendor/golang.org/x/crypto/cryptobyte/string.go @@ -0,0 +1,172 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package cryptobyte contains types that help with parsing and constructing +// length-prefixed, binary messages, including ASN.1 DER. (The asn1 subpackage +// contains useful ASN.1 constants.) +// +// The String type is for parsing. It wraps a []byte slice and provides helper +// functions for consuming structures, value by value. +// +// The Builder type is for constructing messages. It providers helper functions +// for appending values and also for appending length-prefixed submessages – +// without having to worry about calculating the length prefix ahead of time. +// +// See the documentation and examples for the Builder and String types to get +// started. +package cryptobyte // import "golang.org/x/crypto/cryptobyte" + +// String represents a string of bytes. It provides methods for parsing +// fixed-length and length-prefixed values from it. +type String []byte + +// read advances a String by n bytes and returns them. If less than n bytes +// remain, it returns nil. +func (s *String) read(n int) []byte { + if len(*s) < n || n < 0 { + return nil + } + v := (*s)[:n] + *s = (*s)[n:] + return v +} + +// Skip advances the String by n byte and reports whether it was successful. +func (s *String) Skip(n int) bool { + return s.read(n) != nil +} + +// ReadUint8 decodes an 8-bit value into out and advances over it. +// It reports whether the read was successful. +func (s *String) ReadUint8(out *uint8) bool { + v := s.read(1) + if v == nil { + return false + } + *out = uint8(v[0]) + return true +} + +// ReadUint16 decodes a big-endian, 16-bit value into out and advances over it. +// It reports whether the read was successful. +func (s *String) ReadUint16(out *uint16) bool { + v := s.read(2) + if v == nil { + return false + } + *out = uint16(v[0])<<8 | uint16(v[1]) + return true +} + +// ReadUint24 decodes a big-endian, 24-bit value into out and advances over it. +// It reports whether the read was successful. +func (s *String) ReadUint24(out *uint32) bool { + v := s.read(3) + if v == nil { + return false + } + *out = uint32(v[0])<<16 | uint32(v[1])<<8 | uint32(v[2]) + return true +} + +// ReadUint32 decodes a big-endian, 32-bit value into out and advances over it. +// It reports whether the read was successful. +func (s *String) ReadUint32(out *uint32) bool { + v := s.read(4) + if v == nil { + return false + } + *out = uint32(v[0])<<24 | uint32(v[1])<<16 | uint32(v[2])<<8 | uint32(v[3]) + return true +} + +// ReadUint64 decodes a big-endian, 64-bit value into out and advances over it. +// It reports whether the read was successful. +func (s *String) ReadUint64(out *uint64) bool { + v := s.read(8) + if v == nil { + return false + } + *out = uint64(v[0])<<56 | uint64(v[1])<<48 | uint64(v[2])<<40 | uint64(v[3])<<32 | uint64(v[4])<<24 | uint64(v[5])<<16 | uint64(v[6])<<8 | uint64(v[7]) + return true +} + +func (s *String) readUnsigned(out *uint32, length int) bool { + v := s.read(length) + if v == nil { + return false + } + var result uint32 + for i := 0; i < length; i++ { + result <<= 8 + result |= uint32(v[i]) + } + *out = result + return true +} + +func (s *String) readLengthPrefixed(lenLen int, outChild *String) bool { + lenBytes := s.read(lenLen) + if lenBytes == nil { + return false + } + var length uint32 + for _, b := range lenBytes { + length = length << 8 + length = length | uint32(b) + } + v := s.read(int(length)) + if v == nil { + return false + } + *outChild = v + return true +} + +// ReadUint8LengthPrefixed reads the content of an 8-bit length-prefixed value +// into out and advances over it. It reports whether the read was successful. +func (s *String) ReadUint8LengthPrefixed(out *String) bool { + return s.readLengthPrefixed(1, out) +} + +// ReadUint16LengthPrefixed reads the content of a big-endian, 16-bit +// length-prefixed value into out and advances over it. It reports whether the +// read was successful. +func (s *String) ReadUint16LengthPrefixed(out *String) bool { + return s.readLengthPrefixed(2, out) +} + +// ReadUint24LengthPrefixed reads the content of a big-endian, 24-bit +// length-prefixed value into out and advances over it. It reports whether +// the read was successful. +func (s *String) ReadUint24LengthPrefixed(out *String) bool { + return s.readLengthPrefixed(3, out) +} + +// ReadBytes reads n bytes into out and advances over them. It reports +// whether the read was successful. +func (s *String) ReadBytes(out *[]byte, n int) bool { + v := s.read(n) + if v == nil { + return false + } + *out = v + return true +} + +// CopyBytes copies len(out) bytes into out and advances over them. It reports +// whether the copy operation was successful +func (s *String) CopyBytes(out []byte) bool { + n := len(out) + v := s.read(n) + if v == nil { + return false + } + return copy(out, v) == n +} + +// Empty reports whether the string does not contain any bytes. +func (s String) Empty() bool { + return len(s) == 0 +} diff --git a/vendor/golang.org/x/crypto/curve25519/curve25519.go b/vendor/golang.org/x/crypto/curve25519/curve25519.go index bc62161d6e..00f963ea20 100644 --- a/vendor/golang.org/x/crypto/curve25519/curve25519.go +++ b/vendor/golang.org/x/crypto/curve25519/curve25519.go @@ -5,71 +5,18 @@ // Package curve25519 provides an implementation of the X25519 function, which // performs scalar multiplication on the elliptic curve known as Curve25519. // See RFC 7748. +// +// Starting in Go 1.20, this package is a wrapper for the X25519 implementation +// in the crypto/ecdh package. package curve25519 // import "golang.org/x/crypto/curve25519" -import ( - "crypto/subtle" - "errors" - "strconv" - - "golang.org/x/crypto/curve25519/internal/field" -) - // ScalarMult sets dst to the product scalar * point. // // Deprecated: when provided a low-order point, ScalarMult will set dst to all // zeroes, irrespective of the scalar. Instead, use the X25519 function, which // will return an error. func ScalarMult(dst, scalar, point *[32]byte) { - var e [32]byte - - copy(e[:], scalar[:]) - e[0] &= 248 - e[31] &= 127 - e[31] |= 64 - - var x1, x2, z2, x3, z3, tmp0, tmp1 field.Element - x1.SetBytes(point[:]) - x2.One() - x3.Set(&x1) - z3.One() - - swap := 0 - for pos := 254; pos >= 0; pos-- { - b := e[pos/8] >> uint(pos&7) - b &= 1 - swap ^= int(b) - x2.Swap(&x3, swap) - z2.Swap(&z3, swap) - swap = int(b) - - tmp0.Subtract(&x3, &z3) - tmp1.Subtract(&x2, &z2) - x2.Add(&x2, &z2) - z2.Add(&x3, &z3) - z3.Multiply(&tmp0, &x2) - z2.Multiply(&z2, &tmp1) - tmp0.Square(&tmp1) - tmp1.Square(&x2) - x3.Add(&z3, &z2) - z2.Subtract(&z3, &z2) - x2.Multiply(&tmp1, &tmp0) - tmp1.Subtract(&tmp1, &tmp0) - z2.Square(&z2) - - z3.Mult32(&tmp1, 121666) - x3.Square(&x3) - tmp0.Add(&tmp0, &z3) - z3.Multiply(&x1, &z2) - z2.Multiply(&tmp1, &tmp0) - } - - x2.Swap(&x3, swap) - z2.Swap(&z3, swap) - - z2.Invert(&z2) - x2.Multiply(&x2, &z2) - copy(dst[:], x2.Bytes()) + scalarMult(dst, scalar, point) } // ScalarBaseMult sets dst to the product scalar * base where base is the @@ -78,7 +25,7 @@ func ScalarMult(dst, scalar, point *[32]byte) { // It is recommended to use the X25519 function with Basepoint instead, as // copying into fixed size arrays can lead to unexpected bugs. func ScalarBaseMult(dst, scalar *[32]byte) { - ScalarMult(dst, scalar, &basePoint) + scalarBaseMult(dst, scalar) } const ( @@ -91,21 +38,10 @@ const ( // Basepoint is the canonical Curve25519 generator. var Basepoint []byte -var basePoint = [32]byte{9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} +var basePoint = [32]byte{9} func init() { Basepoint = basePoint[:] } -func checkBasepoint() { - if subtle.ConstantTimeCompare(Basepoint, []byte{ - 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }) != 1 { - panic("curve25519: global Basepoint value was modified") - } -} - // X25519 returns the result of the scalar multiplication (scalar * point), // according to RFC 7748, Section 5. scalar, point and the return value are // slices of 32 bytes. @@ -121,26 +57,3 @@ func X25519(scalar, point []byte) ([]byte, error) { var dst [32]byte return x25519(&dst, scalar, point) } - -func x25519(dst *[32]byte, scalar, point []byte) ([]byte, error) { - var in [32]byte - if l := len(scalar); l != 32 { - return nil, errors.New("bad scalar length: " + strconv.Itoa(l) + ", expected 32") - } - if l := len(point); l != 32 { - return nil, errors.New("bad point length: " + strconv.Itoa(l) + ", expected 32") - } - copy(in[:], scalar) - if &point[0] == &Basepoint[0] { - checkBasepoint() - ScalarBaseMult(dst, &in) - } else { - var base, zero [32]byte - copy(base[:], point) - ScalarMult(dst, &in, &base) - if subtle.ConstantTimeCompare(dst[:], zero[:]) == 1 { - return nil, errors.New("bad input point: low order point") - } - } - return dst[:], nil -} diff --git a/vendor/golang.org/x/crypto/curve25519/curve25519_compat.go b/vendor/golang.org/x/crypto/curve25519/curve25519_compat.go new file mode 100644 index 0000000000..ba647e8d77 --- /dev/null +++ b/vendor/golang.org/x/crypto/curve25519/curve25519_compat.go @@ -0,0 +1,105 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !go1.20 + +package curve25519 + +import ( + "crypto/subtle" + "errors" + "strconv" + + "golang.org/x/crypto/curve25519/internal/field" +) + +func scalarMult(dst, scalar, point *[32]byte) { + var e [32]byte + + copy(e[:], scalar[:]) + e[0] &= 248 + e[31] &= 127 + e[31] |= 64 + + var x1, x2, z2, x3, z3, tmp0, tmp1 field.Element + x1.SetBytes(point[:]) + x2.One() + x3.Set(&x1) + z3.One() + + swap := 0 + for pos := 254; pos >= 0; pos-- { + b := e[pos/8] >> uint(pos&7) + b &= 1 + swap ^= int(b) + x2.Swap(&x3, swap) + z2.Swap(&z3, swap) + swap = int(b) + + tmp0.Subtract(&x3, &z3) + tmp1.Subtract(&x2, &z2) + x2.Add(&x2, &z2) + z2.Add(&x3, &z3) + z3.Multiply(&tmp0, &x2) + z2.Multiply(&z2, &tmp1) + tmp0.Square(&tmp1) + tmp1.Square(&x2) + x3.Add(&z3, &z2) + z2.Subtract(&z3, &z2) + x2.Multiply(&tmp1, &tmp0) + tmp1.Subtract(&tmp1, &tmp0) + z2.Square(&z2) + + z3.Mult32(&tmp1, 121666) + x3.Square(&x3) + tmp0.Add(&tmp0, &z3) + z3.Multiply(&x1, &z2) + z2.Multiply(&tmp1, &tmp0) + } + + x2.Swap(&x3, swap) + z2.Swap(&z3, swap) + + z2.Invert(&z2) + x2.Multiply(&x2, &z2) + copy(dst[:], x2.Bytes()) +} + +func scalarBaseMult(dst, scalar *[32]byte) { + checkBasepoint() + scalarMult(dst, scalar, &basePoint) +} + +func x25519(dst *[32]byte, scalar, point []byte) ([]byte, error) { + var in [32]byte + if l := len(scalar); l != 32 { + return nil, errors.New("bad scalar length: " + strconv.Itoa(l) + ", expected 32") + } + if l := len(point); l != 32 { + return nil, errors.New("bad point length: " + strconv.Itoa(l) + ", expected 32") + } + copy(in[:], scalar) + if &point[0] == &Basepoint[0] { + scalarBaseMult(dst, &in) + } else { + var base, zero [32]byte + copy(base[:], point) + scalarMult(dst, &in, &base) + if subtle.ConstantTimeCompare(dst[:], zero[:]) == 1 { + return nil, errors.New("bad input point: low order point") + } + } + return dst[:], nil +} + +func checkBasepoint() { + if subtle.ConstantTimeCompare(Basepoint, []byte{ + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }) != 1 { + panic("curve25519: global Basepoint value was modified") + } +} diff --git a/vendor/golang.org/x/crypto/curve25519/curve25519_go120.go b/vendor/golang.org/x/crypto/curve25519/curve25519_go120.go new file mode 100644 index 0000000000..627df49727 --- /dev/null +++ b/vendor/golang.org/x/crypto/curve25519/curve25519_go120.go @@ -0,0 +1,46 @@ +// Copyright 2022 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build go1.20 + +package curve25519 + +import "crypto/ecdh" + +func x25519(dst *[32]byte, scalar, point []byte) ([]byte, error) { + curve := ecdh.X25519() + pub, err := curve.NewPublicKey(point) + if err != nil { + return nil, err + } + priv, err := curve.NewPrivateKey(scalar) + if err != nil { + return nil, err + } + out, err := priv.ECDH(pub) + if err != nil { + return nil, err + } + copy(dst[:], out) + return dst[:], nil +} + +func scalarMult(dst, scalar, point *[32]byte) { + if _, err := x25519(dst, scalar[:], point[:]); err != nil { + // The only error condition for x25519 when the inputs are 32 bytes long + // is if the output would have been the all-zero value. + for i := range dst { + dst[i] = 0 + } + } +} + +func scalarBaseMult(dst, scalar *[32]byte) { + curve := ecdh.X25519() + priv, err := curve.NewPrivateKey(scalar[:]) + if err != nil { + panic("curve25519: internal error: scalarBaseMult was not 32 bytes") + } + copy(dst[:], priv.PublicKey().Bytes()) +} diff --git a/vendor/golang.org/x/crypto/curve25519/internal/field/fe_generic.go b/vendor/golang.org/x/crypto/curve25519/internal/field/fe_generic.go index 7b5b78cbd6..2671217da5 100644 --- a/vendor/golang.org/x/crypto/curve25519/internal/field/fe_generic.go +++ b/vendor/golang.org/x/crypto/curve25519/internal/field/fe_generic.go @@ -245,7 +245,7 @@ func feSquareGeneric(v, a *Element) { v.carryPropagate() } -// carryPropagate brings the limbs below 52 bits by applying the reduction +// carryPropagateGeneric brings the limbs below 52 bits by applying the reduction // identity (a * 2²⁵⁵ + b = a * 19 + b) to the l4 carry. TODO inline func (v *Element) carryPropagateGeneric() *Element { c0 := v.l0 >> 51 diff --git a/vendor/golang.org/x/crypto/hkdf/hkdf.go b/vendor/golang.org/x/crypto/hkdf/hkdf.go new file mode 100644 index 0000000000..dda3f143be --- /dev/null +++ b/vendor/golang.org/x/crypto/hkdf/hkdf.go @@ -0,0 +1,93 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package hkdf implements the HMAC-based Extract-and-Expand Key Derivation +// Function (HKDF) as defined in RFC 5869. +// +// HKDF is a cryptographic key derivation function (KDF) with the goal of +// expanding limited input keying material into one or more cryptographically +// strong secret keys. +package hkdf // import "golang.org/x/crypto/hkdf" + +import ( + "crypto/hmac" + "errors" + "hash" + "io" +) + +// Extract generates a pseudorandom key for use with Expand from an input secret +// and an optional independent salt. +// +// Only use this function if you need to reuse the extracted key with multiple +// Expand invocations and different context values. Most common scenarios, +// including the generation of multiple keys, should use New instead. +func Extract(hash func() hash.Hash, secret, salt []byte) []byte { + if salt == nil { + salt = make([]byte, hash().Size()) + } + extractor := hmac.New(hash, salt) + extractor.Write(secret) + return extractor.Sum(nil) +} + +type hkdf struct { + expander hash.Hash + size int + + info []byte + counter byte + + prev []byte + buf []byte +} + +func (f *hkdf) Read(p []byte) (int, error) { + // Check whether enough data can be generated + need := len(p) + remains := len(f.buf) + int(255-f.counter+1)*f.size + if remains < need { + return 0, errors.New("hkdf: entropy limit reached") + } + // Read any leftover from the buffer + n := copy(p, f.buf) + p = p[n:] + + // Fill the rest of the buffer + for len(p) > 0 { + f.expander.Reset() + f.expander.Write(f.prev) + f.expander.Write(f.info) + f.expander.Write([]byte{f.counter}) + f.prev = f.expander.Sum(f.prev[:0]) + f.counter++ + + // Copy the new batch into p + f.buf = f.prev + n = copy(p, f.buf) + p = p[n:] + } + // Save leftovers for next run + f.buf = f.buf[n:] + + return need, nil +} + +// Expand returns a Reader, from which keys can be read, using the given +// pseudorandom key and optional context info, skipping the extraction step. +// +// The pseudorandomKey should have been generated by Extract, or be a uniformly +// random or pseudorandom cryptographically strong key. See RFC 5869, Section +// 3.3. Most common scenarios will want to use New instead. +func Expand(hash func() hash.Hash, pseudorandomKey, info []byte) io.Reader { + expander := hmac.New(hash, pseudorandomKey) + return &hkdf{expander, expander.Size(), info, 1, nil, nil} +} + +// New returns a Reader, from which keys can be read, using the given hash, +// secret, salt and context info. Salt and info can be nil. +func New(hash func() hash.Hash, secret, salt, info []byte) io.Reader { + prk := Extract(hash, secret, salt) + return Expand(hash, prk, info) +} diff --git a/vendor/golang.org/x/crypto/ssh/agent/server.go b/vendor/golang.org/x/crypto/ssh/agent/server.go index 6e7a1e02f2..9a769de03d 100644 --- a/vendor/golang.org/x/crypto/ssh/agent/server.go +++ b/vendor/golang.org/x/crypto/ssh/agent/server.go @@ -20,7 +20,7 @@ import ( "golang.org/x/crypto/ssh" ) -// Server wraps an Agent and uses it to implement the agent side of +// server wraps an Agent and uses it to implement the agent side of // the SSH-agent, wire protocol. type server struct { agent Agent diff --git a/vendor/golang.org/x/crypto/ssh/cipher.go b/vendor/golang.org/x/crypto/ssh/cipher.go index 87f48552ce..741e984f33 100644 --- a/vendor/golang.org/x/crypto/ssh/cipher.go +++ b/vendor/golang.org/x/crypto/ssh/cipher.go @@ -114,7 +114,8 @@ var cipherModes = map[string]*cipherMode{ "arcfour": {16, 0, streamCipherMode(0, newRC4)}, // AEAD ciphers - gcmCipherID: {16, 12, newGCMCipher}, + gcm128CipherID: {16, 12, newGCMCipher}, + gcm256CipherID: {32, 12, newGCMCipher}, chacha20Poly1305ID: {64, 0, newChaCha20Cipher}, // CBC mode is insecure and so is not included in the default config. diff --git a/vendor/golang.org/x/crypto/ssh/common.go b/vendor/golang.org/x/crypto/ssh/common.go index 7a5ff2d2eb..e6a77f26a0 100644 --- a/vendor/golang.org/x/crypto/ssh/common.go +++ b/vendor/golang.org/x/crypto/ssh/common.go @@ -10,6 +10,7 @@ import ( "fmt" "io" "math" + "strings" "sync" _ "crypto/sha1" @@ -27,7 +28,7 @@ const ( // supportedCiphers lists ciphers we support but might not recommend. var supportedCiphers = []string{ "aes128-ctr", "aes192-ctr", "aes256-ctr", - "aes128-gcm@openssh.com", + "aes128-gcm@openssh.com", gcm256CipherID, chacha20Poly1305ID, "arcfour256", "arcfour128", "arcfour", aes128cbcID, @@ -36,7 +37,7 @@ var supportedCiphers = []string{ // preferredCiphers specifies the default preference for ciphers. var preferredCiphers = []string{ - "aes128-gcm@openssh.com", + "aes128-gcm@openssh.com", gcm256CipherID, chacha20Poly1305ID, "aes128-ctr", "aes192-ctr", "aes256-ctr", } @@ -118,6 +119,20 @@ func algorithmsForKeyFormat(keyFormat string) []string { } } +// supportedPubKeyAuthAlgos specifies the supported client public key +// authentication algorithms. Note that this doesn't include certificate types +// since those use the underlying algorithm. This list is sent to the client if +// it supports the server-sig-algs extension. Order is irrelevant. +var supportedPubKeyAuthAlgos = []string{ + KeyAlgoED25519, + KeyAlgoSKED25519, KeyAlgoSKECDSA256, + KeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521, + KeyAlgoRSASHA256, KeyAlgoRSASHA512, KeyAlgoRSA, + KeyAlgoDSA, +} + +var supportedPubKeyAuthAlgosList = strings.Join(supportedPubKeyAuthAlgos, ",") + // unexpectedMessageError results when the SSH message that we received didn't // match what we wanted. func unexpectedMessageError(expected, got uint8) error { @@ -153,7 +168,7 @@ func (a *directionAlgorithms) rekeyBytes() int64 { // 2^(BLOCKSIZE/4) blocks. For all AES flavors BLOCKSIZE is // 128. switch a.Cipher { - case "aes128-ctr", "aes192-ctr", "aes256-ctr", gcmCipherID, aes128cbcID: + case "aes128-ctr", "aes192-ctr", "aes256-ctr", gcm128CipherID, gcm256CipherID, aes128cbcID: return 16 * (1 << 32) } @@ -163,7 +178,8 @@ func (a *directionAlgorithms) rekeyBytes() int64 { } var aeadCiphers = map[string]bool{ - gcmCipherID: true, + gcm128CipherID: true, + gcm256CipherID: true, chacha20Poly1305ID: true, } diff --git a/vendor/golang.org/x/crypto/ssh/connection.go b/vendor/golang.org/x/crypto/ssh/connection.go index 35661a52be..8f345ee924 100644 --- a/vendor/golang.org/x/crypto/ssh/connection.go +++ b/vendor/golang.org/x/crypto/ssh/connection.go @@ -97,7 +97,7 @@ func (c *connection) Close() error { return c.sshConn.conn.Close() } -// sshconn provides net.Conn metadata, but disallows direct reads and +// sshConn provides net.Conn metadata, but disallows direct reads and // writes. type sshConn struct { conn net.Conn diff --git a/vendor/golang.org/x/crypto/ssh/handshake.go b/vendor/golang.org/x/crypto/ssh/handshake.go index 653dc4d2cf..07a1843e0a 100644 --- a/vendor/golang.org/x/crypto/ssh/handshake.go +++ b/vendor/golang.org/x/crypto/ssh/handshake.go @@ -58,11 +58,13 @@ type handshakeTransport struct { incoming chan []byte readError error - mu sync.Mutex - writeError error - sentInitPacket []byte - sentInitMsg *kexInitMsg - pendingPackets [][]byte // Used when a key exchange is in progress. + mu sync.Mutex + writeError error + sentInitPacket []byte + sentInitMsg *kexInitMsg + pendingPackets [][]byte // Used when a key exchange is in progress. + writePacketsLeft uint32 + writeBytesLeft int64 // If the read loop wants to schedule a kex, it pings this // channel, and the write loop will send out a kex @@ -71,7 +73,8 @@ type handshakeTransport struct { // If the other side requests or confirms a kex, its kexInit // packet is sent here for the write loop to find it. - startKex chan *pendingKex + startKex chan *pendingKex + kexLoopDone chan struct{} // closed (with writeError non-nil) when kexLoop exits // data for host key checking hostKeyCallback HostKeyCallback @@ -86,12 +89,10 @@ type handshakeTransport struct { // Algorithms agreed in the last key exchange. algorithms *algorithms + // Counters exclusively owned by readLoop. readPacketsLeft uint32 readBytesLeft int64 - writePacketsLeft uint32 - writeBytesLeft int64 - // The session ID or nil if first kex did not complete yet. sessionID []byte } @@ -108,7 +109,8 @@ func newHandshakeTransport(conn keyingTransport, config *Config, clientVersion, clientVersion: clientVersion, incoming: make(chan []byte, chanSize), requestKex: make(chan struct{}, 1), - startKex: make(chan *pendingKex, 1), + startKex: make(chan *pendingKex), + kexLoopDone: make(chan struct{}), config: config, } @@ -340,16 +342,17 @@ write: t.mu.Unlock() } + // Unblock reader. + t.conn.Close() + // drain startKex channel. We don't service t.requestKex // because nobody does blocking sends there. - go func() { - for init := range t.startKex { - init.done <- t.writeError - } - }() + for request := range t.startKex { + request.done <- t.getWriteError() + } - // Unblock reader. - t.conn.Close() + // Mark that the loop is done so that Close can return. + close(t.kexLoopDone) } // The protocol uses uint32 for packet counters, so we can't let them @@ -545,7 +548,16 @@ func (t *handshakeTransport) writePacket(p []byte) error { } func (t *handshakeTransport) Close() error { - return t.conn.Close() + // Close the connection. This should cause the readLoop goroutine to wake up + // and close t.startKex, which will shut down kexLoop if running. + err := t.conn.Close() + + // Wait for the kexLoop goroutine to complete. + // At that point we know that the readLoop goroutine is complete too, + // because kexLoop itself waits for readLoop to close the startKex channel. + <-t.kexLoopDone + + return err } func (t *handshakeTransport) enterKeyExchange(otherInitPacket []byte) error { @@ -615,7 +627,8 @@ func (t *handshakeTransport) enterKeyExchange(otherInitPacket []byte) error { return err } - if t.sessionID == nil { + firstKeyExchange := t.sessionID == nil + if firstKeyExchange { t.sessionID = result.H } result.SessionID = t.sessionID @@ -626,6 +639,24 @@ func (t *handshakeTransport) enterKeyExchange(otherInitPacket []byte) error { if err = t.conn.writePacket([]byte{msgNewKeys}); err != nil { return err } + + // On the server side, after the first SSH_MSG_NEWKEYS, send a SSH_MSG_EXT_INFO + // message with the server-sig-algs extension if the client supports it. See + // RFC 8308, Sections 2.4 and 3.1. + if !isClient && firstKeyExchange && contains(clientInit.KexAlgos, "ext-info-c") { + extInfo := &extInfoMsg{ + NumExtensions: 1, + Payload: make([]byte, 0, 4+15+4+len(supportedPubKeyAuthAlgosList)), + } + extInfo.Payload = appendInt(extInfo.Payload, len("server-sig-algs")) + extInfo.Payload = append(extInfo.Payload, "server-sig-algs"...) + extInfo.Payload = appendInt(extInfo.Payload, len(supportedPubKeyAuthAlgosList)) + extInfo.Payload = append(extInfo.Payload, supportedPubKeyAuthAlgosList...) + if err := t.conn.writePacket(Marshal(extInfo)); err != nil { + return err + } + } + if packet, err := t.conn.readPacket(); err != nil { return err } else if packet[0] != msgNewKeys { diff --git a/vendor/golang.org/x/crypto/ssh/keys.go b/vendor/golang.org/x/crypto/ssh/keys.go index 7296980413..dac8ee7244 100644 --- a/vendor/golang.org/x/crypto/ssh/keys.go +++ b/vendor/golang.org/x/crypto/ssh/keys.go @@ -1087,9 +1087,9 @@ func (*PassphraseMissingError) Error() string { return "ssh: this private key is passphrase protected" } -// ParseRawPrivateKey returns a private key from a PEM encoded private key. It -// supports RSA (PKCS#1), PKCS#8, DSA (OpenSSL), and ECDSA private keys. If the -// private key is encrypted, it will return a PassphraseMissingError. +// ParseRawPrivateKey returns a private key from a PEM encoded private key. It supports +// RSA, DSA, ECDSA, and Ed25519 private keys in PKCS#1, PKCS#8, OpenSSL, and OpenSSH +// formats. If the private key is encrypted, it will return a PassphraseMissingError. func ParseRawPrivateKey(pemBytes []byte) (interface{}, error) { block, _ := pem.Decode(pemBytes) if block == nil { diff --git a/vendor/golang.org/x/crypto/ssh/knownhosts/knownhosts.go b/vendor/golang.org/x/crypto/ssh/knownhosts/knownhosts.go index 260cfe58c6..7376a8dff2 100644 --- a/vendor/golang.org/x/crypto/ssh/knownhosts/knownhosts.go +++ b/vendor/golang.org/x/crypto/ssh/knownhosts/knownhosts.go @@ -142,7 +142,7 @@ func keyEq(a, b ssh.PublicKey) bool { return bytes.Equal(a.Marshal(), b.Marshal()) } -// IsAuthorityForHost can be used as a callback in ssh.CertChecker +// IsHostAuthority can be used as a callback in ssh.CertChecker func (db *hostKeyDB) IsHostAuthority(remote ssh.PublicKey, address string) bool { h, p, err := net.SplitHostPort(address) if err != nil { diff --git a/vendor/golang.org/x/crypto/ssh/server.go b/vendor/golang.org/x/crypto/ssh/server.go index 2260b20afc..9e3870292f 100644 --- a/vendor/golang.org/x/crypto/ssh/server.go +++ b/vendor/golang.org/x/crypto/ssh/server.go @@ -291,15 +291,6 @@ func (s *connection) serverHandshake(config *ServerConfig) (*Permissions, error) return perms, err } -func isAcceptableAlgo(algo string) bool { - switch algo { - case KeyAlgoRSA, KeyAlgoRSASHA256, KeyAlgoRSASHA512, KeyAlgoDSA, KeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521, KeyAlgoSKECDSA256, KeyAlgoED25519, KeyAlgoSKED25519, - CertAlgoRSAv01, CertAlgoDSAv01, CertAlgoECDSA256v01, CertAlgoECDSA384v01, CertAlgoECDSA521v01, CertAlgoSKECDSA256v01, CertAlgoED25519v01, CertAlgoSKED25519v01: - return true - } - return false -} - func checkSourceAddress(addr net.Addr, sourceAddrs string) error { if addr == nil { return errors.New("ssh: no address known for client, but source-address match required") @@ -514,7 +505,7 @@ userAuthLoop: return nil, parseError(msgUserAuthRequest) } algo := string(algoBytes) - if !isAcceptableAlgo(algo) { + if !contains(supportedPubKeyAuthAlgos, underlyingAlgo(algo)) { authErr = fmt.Errorf("ssh: algorithm %q not accepted", algo) break } @@ -572,7 +563,7 @@ userAuthLoop: // algorithm name that corresponds to algo with // sig.Format. This is usually the same, but // for certs, the names differ. - if !isAcceptableAlgo(sig.Format) { + if !contains(supportedPubKeyAuthAlgos, sig.Format) { authErr = fmt.Errorf("ssh: algorithm %q not accepted", sig.Format) break } diff --git a/vendor/golang.org/x/crypto/ssh/transport.go b/vendor/golang.org/x/crypto/ssh/transport.go index acf5a21bbb..da015801ea 100644 --- a/vendor/golang.org/x/crypto/ssh/transport.go +++ b/vendor/golang.org/x/crypto/ssh/transport.go @@ -17,7 +17,8 @@ import ( const debugTransport = false const ( - gcmCipherID = "aes128-gcm@openssh.com" + gcm128CipherID = "aes128-gcm@openssh.com" + gcm256CipherID = "aes256-gcm@openssh.com" aes128cbcID = "aes128-cbc" tripledescbcID = "3des-cbc" ) diff --git a/vendor/golang.org/x/net/http2/pipe.go b/vendor/golang.org/x/net/http2/pipe.go index c15b8a7719..684d984fd9 100644 --- a/vendor/golang.org/x/net/http2/pipe.go +++ b/vendor/golang.org/x/net/http2/pipe.go @@ -88,13 +88,9 @@ func (p *pipe) Write(d []byte) (n int, err error) { p.c.L = &p.mu } defer p.c.Signal() - if p.err != nil { + if p.err != nil || p.breakErr != nil { return 0, errClosedPipeWrite } - if p.breakErr != nil { - p.unread += len(d) - return len(d), nil // discard when there is no reader - } return p.b.Write(d) } diff --git a/vendor/golang.org/x/net/http2/server.go b/vendor/golang.org/x/net/http2/server.go index 8cb14f3c97..cd057f3982 100644 --- a/vendor/golang.org/x/net/http2/server.go +++ b/vendor/golang.org/x/net/http2/server.go @@ -1822,15 +1822,18 @@ func (sc *serverConn) processData(f *DataFrame) error { } if len(data) > 0 { + st.bodyBytes += int64(len(data)) wrote, err := st.body.Write(data) if err != nil { + // The handler has closed the request body. + // Return the connection-level flow control for the discarded data, + // but not the stream-level flow control. sc.sendWindowUpdate(nil, int(f.Length)-wrote) - return sc.countError("body_write_err", streamError(id, ErrCodeStreamClosed)) + return nil } if wrote != len(data) { panic("internal error: bad Writer") } - st.bodyBytes += int64(len(data)) } // Return any padded flow control now, since we won't diff --git a/vendor/golang.org/x/net/http2/transport.go b/vendor/golang.org/x/net/http2/transport.go index 05ba23d3d9..ac90a2631c 100644 --- a/vendor/golang.org/x/net/http2/transport.go +++ b/vendor/golang.org/x/net/http2/transport.go @@ -560,10 +560,11 @@ func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Res traceGotConn(req, cc, reused) res, err := cc.RoundTrip(req) if err != nil && retry <= 6 { + roundTripErr := err if req, err = shouldRetryRequest(req, err); err == nil { // After the first retry, do exponential backoff with 10% jitter. if retry == 0 { - t.vlogf("RoundTrip retrying after failure: %v", err) + t.vlogf("RoundTrip retrying after failure: %v", roundTripErr) continue } backoff := float64(uint(1) << (uint(retry) - 1)) @@ -572,7 +573,7 @@ func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Res timer := backoffNewTimer(d) select { case <-timer.C: - t.vlogf("RoundTrip retrying after failure: %v", err) + t.vlogf("RoundTrip retrying after failure: %v", roundTripErr) continue case <-req.Context().Done(): timer.Stop() @@ -1265,6 +1266,27 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) { return res, nil } + cancelRequest := func(cs *clientStream, err error) error { + cs.cc.mu.Lock() + defer cs.cc.mu.Unlock() + cs.abortStreamLocked(err) + if cs.ID != 0 { + // This request may have failed because of a problem with the connection, + // or for some unrelated reason. (For example, the user might have canceled + // the request without waiting for a response.) Mark the connection as + // not reusable, since trying to reuse a dead connection is worse than + // unnecessarily creating a new one. + // + // If cs.ID is 0, then the request was never allocated a stream ID and + // whatever went wrong was unrelated to the connection. We might have + // timed out waiting for a stream slot when StrictMaxConcurrentStreams + // is set, for example, in which case retrying on a different connection + // will not help. + cs.cc.doNotReuse = true + } + return err + } + for { select { case <-cs.respHeaderRecv: @@ -1279,15 +1301,12 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) { return handleResponseHeaders() default: waitDone() - return nil, cs.abortErr + return nil, cancelRequest(cs, cs.abortErr) } case <-ctx.Done(): - err := ctx.Err() - cs.abortStream(err) - return nil, err + return nil, cancelRequest(cs, ctx.Err()) case <-cs.reqCancel: - cs.abortStream(errRequestCanceled) - return nil, errRequestCanceled + return nil, cancelRequest(cs, errRequestCanceled) } } } @@ -2555,6 +2574,9 @@ func (b transportResponseBody) Close() error { cs := b.cs cc := cs.cc + cs.bufPipe.BreakWithError(errClosedResponseBody) + cs.abortStream(errClosedResponseBody) + unread := cs.bufPipe.Len() if unread > 0 { cc.mu.Lock() @@ -2573,9 +2595,6 @@ func (b transportResponseBody) Close() error { cc.wmu.Unlock() } - cs.bufPipe.BreakWithError(errClosedResponseBody) - cs.abortStream(errClosedResponseBody) - select { case <-cs.donec: case <-cs.ctx.Done(): diff --git a/vendor/golang.org/x/net/internal/socks/socks.go b/vendor/golang.org/x/net/internal/socks/socks.go index 97db2340ec..84fcc32b63 100644 --- a/vendor/golang.org/x/net/internal/socks/socks.go +++ b/vendor/golang.org/x/net/internal/socks/socks.go @@ -289,7 +289,7 @@ func (up *UsernamePassword) Authenticate(ctx context.Context, rw io.ReadWriter, case AuthMethodNotRequired: return nil case AuthMethodUsernamePassword: - if len(up.Username) == 0 || len(up.Username) > 255 || len(up.Password) == 0 || len(up.Password) > 255 { + if len(up.Username) == 0 || len(up.Username) > 255 || len(up.Password) > 255 { return errors.New("invalid username/password") } b := []byte{authUsernamePasswordVersion} diff --git a/vendor/golang.org/x/oauth2/README.md b/vendor/golang.org/x/oauth2/README.md index 1473e1296d..781770c204 100644 --- a/vendor/golang.org/x/oauth2/README.md +++ b/vendor/golang.org/x/oauth2/README.md @@ -19,7 +19,7 @@ See pkg.go.dev for further documentation and examples. * [pkg.go.dev/golang.org/x/oauth2](https://pkg.go.dev/golang.org/x/oauth2) * [pkg.go.dev/golang.org/x/oauth2/google](https://pkg.go.dev/golang.org/x/oauth2/google) -## Policy for new packages +## Policy for new endpoints We no longer accept new provider-specific packages in this repo if all they do is add a single endpoint variable. If you just want to add a @@ -29,8 +29,12 @@ package. ## Report Issues / Send Patches -This repository uses Gerrit for code changes. To learn how to submit changes to -this repository, see https://golang.org/doc/contribute.html. - The main issue tracker for the oauth2 repository is located at https://github.com/golang/oauth2/issues. + +This repository uses Gerrit for code changes. To learn how to submit changes to +this repository, see https://golang.org/doc/contribute.html. In particular: + +* Excluding trivial changes, all contributions should be connected to an existing issue. +* API changes must go through the [change proposal process](https://go.dev/s/proposal-process) before they can be accepted. +* The code owners are listed at [dev.golang.org/owners](https://dev.golang.org/owners#:~:text=x/oauth2). diff --git a/vendor/golang.org/x/oauth2/google/default.go b/vendor/golang.org/x/oauth2/google/default.go index db6b19e93d..2cf71f0f93 100644 --- a/vendor/golang.org/x/oauth2/google/default.go +++ b/vendor/golang.org/x/oauth2/google/default.go @@ -8,17 +8,19 @@ import ( "context" "encoding/json" "fmt" - "io/ioutil" "net/http" "os" "path/filepath" "runtime" + "time" "cloud.google.com/go/compute/metadata" "golang.org/x/oauth2" "golang.org/x/oauth2/authhandler" ) +const adcSetupURL = "https://cloud.google.com/docs/authentication/external/set-up-adc" + // Credentials holds Google credentials, including "Application Default Credentials". // For more details, see: // https://developers.google.com/accounts/docs/application-default-credentials @@ -66,6 +68,14 @@ type CredentialsParams struct { // The OAuth2 TokenURL default override. This value overrides the default TokenURL, // unless explicitly specified by the credentials config file. Optional. TokenURL string + + // EarlyTokenRefresh is the amount of time before a token expires that a new + // token will be preemptively fetched. If unset the default value is 10 + // seconds. + // + // Note: This option is currently only respected when using credentials + // fetched from the GCE metadata server. + EarlyTokenRefresh time.Duration } func (params CredentialsParams) deepCopy() CredentialsParams { @@ -131,10 +141,8 @@ func FindDefaultCredentialsWithParams(ctx context.Context, params CredentialsPar // Second, try a well-known file. filename := wellKnownFile() - if creds, err := readCredentialsFile(ctx, filename, params); err == nil { - return creds, nil - } else if !os.IsNotExist(err) { - return nil, fmt.Errorf("google: error getting credentials using well-known file (%v): %v", filename, err) + if b, err := os.ReadFile(filename); err == nil { + return CredentialsFromJSONWithParams(ctx, b, params) } // Third, if we're on a Google App Engine standard first generation runtime (<= Go 1.9) @@ -153,13 +161,12 @@ func FindDefaultCredentialsWithParams(ctx context.Context, params CredentialsPar id, _ := metadata.ProjectID() return &Credentials{ ProjectID: id, - TokenSource: ComputeTokenSource("", params.Scopes...), + TokenSource: computeTokenSource("", params.EarlyTokenRefresh, params.Scopes...), }, nil } // None are found; return helpful error. - const url = "https://developers.google.com/accounts/docs/application-default-credentials" - return nil, fmt.Errorf("google: could not find default credentials. See %v for more information.", url) + return nil, fmt.Errorf("google: could not find default credentials. See %v for more information", adcSetupURL) } // FindDefaultCredentials invokes FindDefaultCredentialsWithParams with the specified scopes. @@ -221,7 +228,7 @@ func wellKnownFile() string { } func readCredentialsFile(ctx context.Context, filename string, params CredentialsParams) (*Credentials, error) { - b, err := ioutil.ReadFile(filename) + b, err := os.ReadFile(filename) if err != nil { return nil, err } diff --git a/vendor/golang.org/x/oauth2/google/doc.go b/vendor/golang.org/x/oauth2/google/doc.go index 8a3349fc2c..ca717634a3 100644 --- a/vendor/golang.org/x/oauth2/google/doc.go +++ b/vendor/golang.org/x/oauth2/google/doc.go @@ -26,7 +26,7 @@ // // Using workload identity federation, your application can access Google Cloud // resources from Amazon Web Services (AWS), Microsoft Azure or any identity -// provider that supports OpenID Connect (OIDC). +// provider that supports OpenID Connect (OIDC) or SAML 2.0. // Traditionally, applications running outside Google Cloud have used service // account keys to access Google Cloud resources. Using identity federation, // you can allow your workload to impersonate a service account. @@ -36,26 +36,70 @@ // Follow the detailed instructions on how to configure Workload Identity Federation // in various platforms: // -// Amazon Web Services (AWS): https://cloud.google.com/iam/docs/access-resources-aws -// Microsoft Azure: https://cloud.google.com/iam/docs/access-resources-azure -// OIDC identity provider: https://cloud.google.com/iam/docs/access-resources-oidc +// Amazon Web Services (AWS): https://cloud.google.com/iam/docs/workload-identity-federation-with-other-clouds#aws +// Microsoft Azure: https://cloud.google.com/iam/docs/workload-identity-federation-with-other-clouds#azure +// OIDC identity provider: https://cloud.google.com/iam/docs/workload-identity-federation-with-other-providers#oidc +// SAML 2.0 identity provider: https://cloud.google.com/iam/docs/workload-identity-federation-with-other-providers#saml // // For OIDC and SAML providers, the library can retrieve tokens in three ways: // from a local file location (file-sourced credentials), from a server // (URL-sourced credentials), or from a local executable (executable-sourced // credentials). // For file-sourced credentials, a background process needs to be continuously -// refreshing the file location with a new OIDC token prior to expiration. +// refreshing the file location with a new OIDC/SAML token prior to expiration. // For tokens with one hour lifetimes, the token needs to be updated in the file // every hour. The token can be stored directly as plain text or in JSON format. // For URL-sourced credentials, a local server needs to host a GET endpoint to -// return the OIDC token. The response can be in plain text or JSON. +// return the OIDC/SAML token. The response can be in plain text or JSON. // Additional required request headers can also be specified. // For executable-sourced credentials, an application needs to be available to -// output the OIDC token and other information in a JSON format. +// output the OIDC/SAML token and other information in a JSON format. // For more information on how these work (and how to implement // executable-sourced credentials), please check out: -// https://cloud.google.com/iam/docs/using-workload-identity-federation#oidc +// https://cloud.google.com/iam/docs/workload-identity-federation-with-other-providers#create_a_credential_configuration +// +// Note that this library does not perform any validation on the token_url, token_info_url, +// or service_account_impersonation_url fields of the credential configuration. +// It is not recommended to use a credential configuration that you did not generate with +// the gcloud CLI unless you verify that the URL fields point to a googleapis.com domain. +// +// # Workforce Identity Federation +// +// Workforce identity federation lets you use an external identity provider (IdP) to +// authenticate and authorize a workforce—a group of users, such as employees, partners, +// and contractors—using IAM, so that the users can access Google Cloud services. +// Workforce identity federation extends Google Cloud's identity capabilities to support +// syncless, attribute-based single sign on. +// +// With workforce identity federation, your workforce can access Google Cloud resources +// using an external identity provider (IdP) that supports OpenID Connect (OIDC) or +// SAML 2.0 such as Azure Active Directory (Azure AD), Active Directory Federation +// Services (AD FS), Okta, and others. +// +// Follow the detailed instructions on how to configure Workload Identity Federation +// in various platforms: +// +// Azure AD: https://cloud.google.com/iam/docs/workforce-sign-in-azure-ad +// Okta: https://cloud.google.com/iam/docs/workforce-sign-in-okta +// OIDC identity provider: https://cloud.google.com/iam/docs/configuring-workforce-identity-federation#oidc +// SAML 2.0 identity provider: https://cloud.google.com/iam/docs/configuring-workforce-identity-federation#saml +// +// For workforce identity federation, the library can retrieve tokens in three ways: +// from a local file location (file-sourced credentials), from a server +// (URL-sourced credentials), or from a local executable (executable-sourced +// credentials). +// For file-sourced credentials, a background process needs to be continuously +// refreshing the file location with a new OIDC/SAML token prior to expiration. +// For tokens with one hour lifetimes, the token needs to be updated in the file +// every hour. The token can be stored directly as plain text or in JSON format. +// For URL-sourced credentials, a local server needs to host a GET endpoint to +// return the OIDC/SAML token. The response can be in plain text or JSON. +// Additional required request headers can also be specified. +// For executable-sourced credentials, an application needs to be available to +// output the OIDC/SAML token and other information in a JSON format. +// For more information on how these work (and how to implement +// executable-sourced credentials), please check out: +// https://cloud.google.com/iam/docs/workforce-obtaining-short-lived-credentials#generate_a_configuration_file_for_non-interactive_sign-in // // Note that this library does not perform any validation on the token_url, token_info_url, // or service_account_impersonation_url fields of the credential configuration. @@ -86,5 +130,4 @@ // same as the one obtained from the oauth2.Config returned from ConfigFromJSON or // JWTConfigFromJSON, but the Credentials may contain additional information // that is useful is some circumstances. -// package google // import "golang.org/x/oauth2/google" diff --git a/vendor/golang.org/x/oauth2/google/google.go b/vendor/golang.org/x/oauth2/google/google.go index a1b629a2eb..cc1223889e 100644 --- a/vendor/golang.org/x/oauth2/google/google.go +++ b/vendor/golang.org/x/oauth2/google/google.go @@ -231,7 +231,11 @@ func (f *credentialsFile) tokenSource(ctx context.Context, params CredentialsPar // Further information about retrieving access tokens from the GCE metadata // server can be found at https://cloud.google.com/compute/docs/authentication. func ComputeTokenSource(account string, scope ...string) oauth2.TokenSource { - return oauth2.ReuseTokenSource(nil, computeSource{account: account, scopes: scope}) + return computeTokenSource(account, 0, scope...) +} + +func computeTokenSource(account string, earlyExpiry time.Duration, scope ...string) oauth2.TokenSource { + return oauth2.ReuseTokenSourceWithExpiry(nil, computeSource{account: account, scopes: scope}, earlyExpiry) } type computeSource struct { diff --git a/vendor/golang.org/x/oauth2/internal/oauth2.go b/vendor/golang.org/x/oauth2/internal/oauth2.go index c0ab196cf4..14989beaf4 100644 --- a/vendor/golang.org/x/oauth2/internal/oauth2.go +++ b/vendor/golang.org/x/oauth2/internal/oauth2.go @@ -14,7 +14,7 @@ import ( // ParseKey converts the binary contents of a private key file // to an *rsa.PrivateKey. It detects whether the private key is in a -// PEM container or not. If so, it extracts the the private key +// PEM container or not. If so, it extracts the private key // from PEM container before conversion. It only supports PEM // containers with no passphrase. func ParseKey(key []byte) (*rsa.PrivateKey, error) { diff --git a/vendor/golang.org/x/oauth2/internal/token.go b/vendor/golang.org/x/oauth2/internal/token.go index b4723fcace..58901bda53 100644 --- a/vendor/golang.org/x/oauth2/internal/token.go +++ b/vendor/golang.org/x/oauth2/internal/token.go @@ -55,12 +55,18 @@ type Token struct { } // tokenJSON is the struct representing the HTTP response from OAuth2 -// providers returning a token in JSON form. +// providers returning a token or error in JSON form. +// https://datatracker.ietf.org/doc/html/rfc6749#section-5.1 type tokenJSON struct { AccessToken string `json:"access_token"` TokenType string `json:"token_type"` RefreshToken string `json:"refresh_token"` ExpiresIn expirationTime `json:"expires_in"` // at least PayPal returns string, while most return number + // error fields + // https://datatracker.ietf.org/doc/html/rfc6749#section-5.2 + ErrorCode string `json:"error"` + ErrorDescription string `json:"error_description"` + ErrorURI string `json:"error_uri"` } func (e *tokenJSON) expiry() (t time.Time) { @@ -236,21 +242,29 @@ func doTokenRoundTrip(ctx context.Context, req *http.Request) (*Token, error) { if err != nil { return nil, fmt.Errorf("oauth2: cannot fetch token: %v", err) } - if code := r.StatusCode; code < 200 || code > 299 { - return nil, &RetrieveError{ - Response: r, - Body: body, - } + + failureStatus := r.StatusCode < 200 || r.StatusCode > 299 + retrieveError := &RetrieveError{ + Response: r, + Body: body, + // attempt to populate error detail below } var token *Token content, _, _ := mime.ParseMediaType(r.Header.Get("Content-Type")) switch content { case "application/x-www-form-urlencoded", "text/plain": + // some endpoints return a query string vals, err := url.ParseQuery(string(body)) if err != nil { - return nil, err + if failureStatus { + return nil, retrieveError + } + return nil, fmt.Errorf("oauth2: cannot parse response: %v", err) } + retrieveError.ErrorCode = vals.Get("error") + retrieveError.ErrorDescription = vals.Get("error_description") + retrieveError.ErrorURI = vals.Get("error_uri") token = &Token{ AccessToken: vals.Get("access_token"), TokenType: vals.Get("token_type"), @@ -265,8 +279,14 @@ func doTokenRoundTrip(ctx context.Context, req *http.Request) (*Token, error) { default: var tj tokenJSON if err = json.Unmarshal(body, &tj); err != nil { - return nil, err + if failureStatus { + return nil, retrieveError + } + return nil, fmt.Errorf("oauth2: cannot parse json: %v", err) } + retrieveError.ErrorCode = tj.ErrorCode + retrieveError.ErrorDescription = tj.ErrorDescription + retrieveError.ErrorURI = tj.ErrorURI token = &Token{ AccessToken: tj.AccessToken, TokenType: tj.TokenType, @@ -276,17 +296,37 @@ func doTokenRoundTrip(ctx context.Context, req *http.Request) (*Token, error) { } json.Unmarshal(body, &token.Raw) // no error checks for optional fields } + // according to spec, servers should respond status 400 in error case + // https://www.rfc-editor.org/rfc/rfc6749#section-5.2 + // but some unorthodox servers respond 200 in error case + if failureStatus || retrieveError.ErrorCode != "" { + return nil, retrieveError + } if token.AccessToken == "" { return nil, errors.New("oauth2: server response missing access_token") } return token, nil } +// mirrors oauth2.RetrieveError type RetrieveError struct { - Response *http.Response - Body []byte + Response *http.Response + Body []byte + ErrorCode string + ErrorDescription string + ErrorURI string } func (r *RetrieveError) Error() string { + if r.ErrorCode != "" { + s := fmt.Sprintf("oauth2: %q", r.ErrorCode) + if r.ErrorDescription != "" { + s += fmt.Sprintf(" %q", r.ErrorDescription) + } + if r.ErrorURI != "" { + s += fmt.Sprintf(" %q", r.ErrorURI) + } + return s + } return fmt.Sprintf("oauth2: cannot fetch token: %v\nResponse: %s", r.Response.Status, r.Body) } diff --git a/vendor/golang.org/x/oauth2/oauth2.go b/vendor/golang.org/x/oauth2/oauth2.go index 291df5c833..9085fabe34 100644 --- a/vendor/golang.org/x/oauth2/oauth2.go +++ b/vendor/golang.org/x/oauth2/oauth2.go @@ -16,6 +16,7 @@ import ( "net/url" "strings" "sync" + "time" "golang.org/x/oauth2/internal" ) @@ -140,7 +141,7 @@ func SetAuthURLParam(key, value string) AuthCodeOption { // // State is a token to protect the user from CSRF attacks. You must // always provide a non-empty string and validate that it matches the -// the state query parameter on your redirect callback. +// state query parameter on your redirect callback. // See http://tools.ietf.org/html/rfc6749#section-10.12 for more info. // // Opts may include AccessTypeOnline or AccessTypeOffline, as well @@ -290,6 +291,8 @@ type reuseTokenSource struct { mu sync.Mutex // guards t t *Token + + expiryDelta time.Duration } // Token returns the current token if it's still valid, else will @@ -305,6 +308,7 @@ func (s *reuseTokenSource) Token() (*Token, error) { if err != nil { return nil, err } + t.expiryDelta = s.expiryDelta s.t = t return t, nil } @@ -379,3 +383,30 @@ func ReuseTokenSource(t *Token, src TokenSource) TokenSource { new: src, } } + +// ReuseTokenSource returns a TokenSource that acts in the same manner as the +// TokenSource returned by ReuseTokenSource, except the expiry buffer is +// configurable. The expiration time of a token is calculated as +// t.Expiry.Add(-earlyExpiry). +func ReuseTokenSourceWithExpiry(t *Token, src TokenSource, earlyExpiry time.Duration) TokenSource { + // Don't wrap a reuseTokenSource in itself. That would work, + // but cause an unnecessary number of mutex operations. + // Just build the equivalent one. + if rt, ok := src.(*reuseTokenSource); ok { + if t == nil { + // Just use it directly, but set the expiryDelta to earlyExpiry, + // so the behavior matches what the user expects. + rt.expiryDelta = earlyExpiry + return rt + } + src = rt.new + } + if t != nil { + t.expiryDelta = earlyExpiry + } + return &reuseTokenSource{ + t: t, + new: src, + expiryDelta: earlyExpiry, + } +} diff --git a/vendor/golang.org/x/oauth2/token.go b/vendor/golang.org/x/oauth2/token.go index 822720341a..5ffce9764b 100644 --- a/vendor/golang.org/x/oauth2/token.go +++ b/vendor/golang.org/x/oauth2/token.go @@ -16,10 +16,10 @@ import ( "golang.org/x/oauth2/internal" ) -// expiryDelta determines how earlier a token should be considered +// defaultExpiryDelta determines how earlier a token should be considered // expired than its actual expiration time. It is used to avoid late // expirations due to client-server time mismatches. -const expiryDelta = 10 * time.Second +const defaultExpiryDelta = 10 * time.Second // Token represents the credentials used to authorize // the requests to access protected resources on the OAuth 2.0 @@ -52,6 +52,11 @@ type Token struct { // raw optionally contains extra metadata from the server // when updating a token. raw interface{} + + // expiryDelta is used to calculate when a token is considered + // expired, by subtracting from Expiry. If zero, defaultExpiryDelta + // is used. + expiryDelta time.Duration } // Type returns t.TokenType if non-empty, else "Bearer". @@ -127,6 +132,11 @@ func (t *Token) expired() bool { if t.Expiry.IsZero() { return false } + + expiryDelta := defaultExpiryDelta + if t.expiryDelta != 0 { + expiryDelta = t.expiryDelta + } return t.Expiry.Round(0).Add(-expiryDelta).Before(timeNow()) } @@ -165,14 +175,31 @@ func retrieveToken(ctx context.Context, c *Config, v url.Values) (*Token, error) } // RetrieveError is the error returned when the token endpoint returns a -// non-2XX HTTP status code. +// non-2XX HTTP status code or populates RFC 6749's 'error' parameter. +// https://datatracker.ietf.org/doc/html/rfc6749#section-5.2 type RetrieveError struct { Response *http.Response // Body is the body that was consumed by reading Response.Body. // It may be truncated. Body []byte + // ErrorCode is RFC 6749's 'error' parameter. + ErrorCode string + // ErrorDescription is RFC 6749's 'error_description' parameter. + ErrorDescription string + // ErrorURI is RFC 6749's 'error_uri' parameter. + ErrorURI string } func (r *RetrieveError) Error() string { + if r.ErrorCode != "" { + s := fmt.Sprintf("oauth2: %q", r.ErrorCode) + if r.ErrorDescription != "" { + s += fmt.Sprintf(" %q", r.ErrorDescription) + } + if r.ErrorURI != "" { + s += fmt.Sprintf(" %q", r.ErrorURI) + } + return s + } return fmt.Sprintf("oauth2: cannot fetch token: %v\nResponse: %s", r.Response.Status, r.Body) } diff --git a/vendor/golang.org/x/sys/unix/ioctl_signed.go b/vendor/golang.org/x/sys/unix/ioctl_signed.go new file mode 100644 index 0000000000..7def9580e6 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ioctl_signed.go @@ -0,0 +1,70 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build aix || solaris +// +build aix solaris + +package unix + +import ( + "unsafe" +) + +// ioctl itself should not be exposed directly, but additional get/set +// functions for specific types are permissible. + +// IoctlSetInt performs an ioctl operation which sets an integer value +// on fd, using the specified request number. +func IoctlSetInt(fd int, req int, value int) error { + return ioctl(fd, req, uintptr(value)) +} + +// IoctlSetPointerInt performs an ioctl operation which sets an +// integer value on fd, using the specified request number. The ioctl +// argument is called with a pointer to the integer value, rather than +// passing the integer value directly. +func IoctlSetPointerInt(fd int, req int, value int) error { + v := int32(value) + return ioctlPtr(fd, req, unsafe.Pointer(&v)) +} + +// IoctlSetWinsize performs an ioctl on fd with a *Winsize argument. +// +// To change fd's window size, the req argument should be TIOCSWINSZ. +func IoctlSetWinsize(fd int, req int, value *Winsize) error { + // TODO: if we get the chance, remove the req parameter and + // hardcode TIOCSWINSZ. + return ioctlPtr(fd, req, unsafe.Pointer(value)) +} + +// IoctlSetTermios performs an ioctl on fd with a *Termios. +// +// The req value will usually be TCSETA or TIOCSETA. +func IoctlSetTermios(fd int, req int, value *Termios) error { + // TODO: if we get the chance, remove the req parameter. + return ioctlPtr(fd, req, unsafe.Pointer(value)) +} + +// IoctlGetInt performs an ioctl operation which gets an integer value +// from fd, using the specified request number. +// +// A few ioctl requests use the return value as an output parameter; +// for those, IoctlRetInt should be used instead of this function. +func IoctlGetInt(fd int, req int) (int, error) { + var value int + err := ioctlPtr(fd, req, unsafe.Pointer(&value)) + return value, err +} + +func IoctlGetWinsize(fd int, req int) (*Winsize, error) { + var value Winsize + err := ioctlPtr(fd, req, unsafe.Pointer(&value)) + return &value, err +} + +func IoctlGetTermios(fd int, req int) (*Termios, error) { + var value Termios + err := ioctlPtr(fd, req, unsafe.Pointer(&value)) + return &value, err +} diff --git a/vendor/golang.org/x/sys/unix/ioctl.go b/vendor/golang.org/x/sys/unix/ioctl_unsigned.go similarity index 92% rename from vendor/golang.org/x/sys/unix/ioctl.go rename to vendor/golang.org/x/sys/unix/ioctl_unsigned.go index 7ce8dd406f..649913d1ea 100644 --- a/vendor/golang.org/x/sys/unix/ioctl.go +++ b/vendor/golang.org/x/sys/unix/ioctl_unsigned.go @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build aix || darwin || dragonfly || freebsd || hurd || linux || netbsd || openbsd || solaris -// +build aix darwin dragonfly freebsd hurd linux netbsd openbsd solaris +//go:build darwin || dragonfly || freebsd || hurd || linux || netbsd || openbsd +// +build darwin dragonfly freebsd hurd linux netbsd openbsd package unix diff --git a/vendor/golang.org/x/sys/unix/ioctl_zos.go b/vendor/golang.org/x/sys/unix/ioctl_zos.go index 6532f09af2..cdc21bf76d 100644 --- a/vendor/golang.org/x/sys/unix/ioctl_zos.go +++ b/vendor/golang.org/x/sys/unix/ioctl_zos.go @@ -17,14 +17,14 @@ import ( // IoctlSetInt performs an ioctl operation which sets an integer value // on fd, using the specified request number. -func IoctlSetInt(fd int, req uint, value int) error { +func IoctlSetInt(fd int, req int, value int) error { return ioctl(fd, req, uintptr(value)) } // IoctlSetWinsize performs an ioctl on fd with a *Winsize argument. // // To change fd's window size, the req argument should be TIOCSWINSZ. -func IoctlSetWinsize(fd int, req uint, value *Winsize) error { +func IoctlSetWinsize(fd int, req int, value *Winsize) error { // TODO: if we get the chance, remove the req parameter and // hardcode TIOCSWINSZ. return ioctlPtr(fd, req, unsafe.Pointer(value)) @@ -33,7 +33,7 @@ func IoctlSetWinsize(fd int, req uint, value *Winsize) error { // IoctlSetTermios performs an ioctl on fd with a *Termios. // // The req value is expected to be TCSETS, TCSETSW, or TCSETSF -func IoctlSetTermios(fd int, req uint, value *Termios) error { +func IoctlSetTermios(fd int, req int, value *Termios) error { if (req != TCSETS) && (req != TCSETSW) && (req != TCSETSF) { return ENOSYS } @@ -47,13 +47,13 @@ func IoctlSetTermios(fd int, req uint, value *Termios) error { // // A few ioctl requests use the return value as an output parameter; // for those, IoctlRetInt should be used instead of this function. -func IoctlGetInt(fd int, req uint) (int, error) { +func IoctlGetInt(fd int, req int) (int, error) { var value int err := ioctlPtr(fd, req, unsafe.Pointer(&value)) return value, err } -func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { +func IoctlGetWinsize(fd int, req int) (*Winsize, error) { var value Winsize err := ioctlPtr(fd, req, unsafe.Pointer(&value)) return &value, err @@ -62,7 +62,7 @@ func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { // IoctlGetTermios performs an ioctl on fd with a *Termios. // // The req value is expected to be TCGETS -func IoctlGetTermios(fd int, req uint) (*Termios, error) { +func IoctlGetTermios(fd int, req int) (*Termios, error) { var value Termios if req != TCGETS { return &value, ENOSYS diff --git a/vendor/golang.org/x/sys/unix/mkerrors.sh b/vendor/golang.org/x/sys/unix/mkerrors.sh index 7456d9ddde..be0423e685 100644 --- a/vendor/golang.org/x/sys/unix/mkerrors.sh +++ b/vendor/golang.org/x/sys/unix/mkerrors.sh @@ -66,6 +66,7 @@ includes_Darwin=' #include #include #include +#include #include #include #include @@ -203,6 +204,7 @@ struct ltchars { #include #include #include +#include #include #include #include @@ -517,10 +519,11 @@ ccflags="$@" $2 ~ /^LOCK_(SH|EX|NB|UN)$/ || $2 ~ /^LO_(KEY|NAME)_SIZE$/ || $2 ~ /^LOOP_(CLR|CTL|GET|SET)_/ || - $2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL|TCPOPT)_/ || + $2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL|TCPOPT|UDP)_/ || $2 ~ /^NFC_(GENL|PROTO|COMM|RF|SE|DIRECTION|LLCP|SOCKPROTO)_/ || $2 ~ /^NFC_.*_(MAX)?SIZE$/ || $2 ~ /^RAW_PAYLOAD_/ || + $2 ~ /^[US]F_/ || $2 ~ /^TP_STATUS_/ || $2 ~ /^FALLOC_/ || $2 ~ /^ICMPV?6?_(FILTER|SEC)/ || diff --git a/vendor/golang.org/x/sys/unix/syscall_aix.go b/vendor/golang.org/x/sys/unix/syscall_aix.go index d9f5544ccf..c406ae00f4 100644 --- a/vendor/golang.org/x/sys/unix/syscall_aix.go +++ b/vendor/golang.org/x/sys/unix/syscall_aix.go @@ -408,8 +408,8 @@ func (w WaitStatus) CoreDump() bool { return w&0x80 == 0x80 } func (w WaitStatus) TrapCause() int { return -1 } -//sys ioctl(fd int, req uint, arg uintptr) (err error) -//sys ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = ioctl +//sys ioctl(fd int, req int, arg uintptr) (err error) +//sys ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) = ioctl // fcntl must never be called with cmd=F_DUP2FD because it doesn't work on AIX // There is no way to create a custom fcntl and to keep //sys fcntl easily, diff --git a/vendor/golang.org/x/sys/unix/syscall_aix_ppc.go b/vendor/golang.org/x/sys/unix/syscall_aix_ppc.go index e92a0be163..f2871fa953 100644 --- a/vendor/golang.org/x/sys/unix/syscall_aix_ppc.go +++ b/vendor/golang.org/x/sys/unix/syscall_aix_ppc.go @@ -8,7 +8,6 @@ package unix //sysnb Getrlimit(resource int, rlim *Rlimit) (err error) = getrlimit64 -//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) = setrlimit64 //sys Seek(fd int, offset int64, whence int) (off int64, err error) = lseek64 //sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go b/vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go index 16eed17098..75718ec0f1 100644 --- a/vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go +++ b/vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go @@ -8,7 +8,6 @@ package unix //sysnb Getrlimit(resource int, rlim *Rlimit) (err error) -//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) //sys Seek(fd int, offset int64, whence int) (off int64, err error) = lseek //sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) = mmap64 diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.go b/vendor/golang.org/x/sys/unix/syscall_darwin.go index 7064d6ebab..206921504c 100644 --- a/vendor/golang.org/x/sys/unix/syscall_darwin.go +++ b/vendor/golang.org/x/sys/unix/syscall_darwin.go @@ -613,6 +613,7 @@ func SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) { //sys Rmdir(path string) (err error) //sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK //sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) +//sys Setattrlist(path string, attrlist *Attrlist, attrBuf []byte, options int) (err error) //sys Setegid(egid int) (err error) //sysnb Seteuid(euid int) (err error) //sysnb Setgid(gid int) (err error) @@ -622,7 +623,6 @@ func SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) { //sys Setprivexec(flag int) (err error) //sysnb Setregid(rgid int, egid int) (err error) //sysnb Setreuid(ruid int, euid int) (err error) -//sysnb Setrlimit(which int, lim *Rlimit) (err error) //sysnb Setsid() (pid int, err error) //sysnb Settimeofday(tp *Timeval) (err error) //sysnb Setuid(uid int) (err error) @@ -676,7 +676,6 @@ func SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) { // Kqueue_from_portset_np // Kqueue_portset // Getattrlist -// Setattrlist // Getdirentriesattr // Searchfs // Delete diff --git a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go index 221efc26bc..d4ce988e72 100644 --- a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go +++ b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go @@ -326,7 +326,6 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e //sysnb Setreuid(ruid int, euid int) (err error) //sysnb Setresgid(rgid int, egid int, sgid int) (err error) //sysnb Setresuid(ruid int, euid int, suid int) (err error) -//sysnb Setrlimit(which int, lim *Rlimit) (err error) //sysnb Setsid() (pid int, err error) //sysnb Settimeofday(tp *Timeval) (err error) //sysnb Setuid(uid int) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd.go b/vendor/golang.org/x/sys/unix/syscall_freebsd.go index 5bdde03e4a..afb10106f6 100644 --- a/vendor/golang.org/x/sys/unix/syscall_freebsd.go +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd.go @@ -433,7 +433,6 @@ func Dup3(oldfd, newfd, flags int) error { //sysnb Setreuid(ruid int, euid int) (err error) //sysnb Setresgid(rgid int, egid int, sgid int) (err error) //sysnb Setresuid(ruid int, euid int, suid int) (err error) -//sysnb Setrlimit(which int, lim *Rlimit) (err error) //sysnb Setsid() (pid int, err error) //sysnb Settimeofday(tp *Timeval) (err error) //sysnb Setuid(uid int) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go index 9735331530..fbaeb5fff1 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux.go @@ -1873,7 +1873,6 @@ func Getpgrp() (pid int) { //sys OpenTree(dfd int, fileName string, flags uint) (r int, err error) //sys PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) //sys PivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT -//sysnb Prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) = SYS_PRLIMIT64 //sys Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) //sys Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) = SYS_PSELECT6 //sys read(fd int, p []byte) (n int, err error) @@ -1887,6 +1886,15 @@ func Getpgrp() (pid int) { //sysnb Settimeofday(tv *Timeval) (err error) //sys Setns(fd int, nstype int) (err error) +//go:linkname syscall_prlimit syscall.prlimit +func syscall_prlimit(pid, resource int, newlimit, old *syscall.Rlimit) error + +func Prlimit(pid, resource int, newlimit, old *Rlimit) error { + // Just call the syscall version, because as of Go 1.21 + // it will affect starting a new process. + return syscall_prlimit(pid, resource, (*syscall.Rlimit)(newlimit), (*syscall.Rlimit)(old)) +} + // PrctlRetInt performs a prctl operation specified by option and further // optional arguments arg2 through arg5 depending on option. It returns a // non-negative integer that is returned by the prctl syscall. diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_386.go b/vendor/golang.org/x/sys/unix/syscall_linux_386.go index ff5b5899d6..c7d9945ea1 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_386.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_386.go @@ -97,33 +97,6 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { return } -//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT - -func Setrlimit(resource int, rlim *Rlimit) (err error) { - err = Prlimit(0, resource, rlim, nil) - if err != ENOSYS { - return err - } - - rl := rlimit32{} - if rlim.Cur == rlimInf64 { - rl.Cur = rlimInf32 - } else if rlim.Cur < uint64(rlimInf32) { - rl.Cur = uint32(rlim.Cur) - } else { - return EINVAL - } - if rlim.Max == rlimInf64 { - rl.Max = rlimInf32 - } else if rlim.Max < uint64(rlimInf32) { - rl.Max = uint32(rlim.Max) - } else { - return EINVAL - } - - return setrlimit(resource, &rl) -} - func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { newoffset, errno := seek(fd, offset, whence) if errno != 0 { diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go index 9b27035329..5b21fcfd75 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go @@ -46,7 +46,6 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) //sys setfsgid(gid int) (prev int, err error) //sys setfsuid(uid int) (prev int, err error) -//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) //sys Shutdown(fd int, how int) (err error) //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm.go index 856ad1d635..da2986415a 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm.go @@ -171,33 +171,6 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { return } -//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT - -func Setrlimit(resource int, rlim *Rlimit) (err error) { - err = Prlimit(0, resource, rlim, nil) - if err != ENOSYS { - return err - } - - rl := rlimit32{} - if rlim.Cur == rlimInf64 { - rl.Cur = rlimInf32 - } else if rlim.Cur < uint64(rlimInf32) { - rl.Cur = uint32(rlim.Cur) - } else { - return EINVAL - } - if rlim.Max == rlimInf64 { - rl.Max = rlimInf32 - } else if rlim.Max < uint64(rlimInf32) { - rl.Max = uint32(rlim.Max) - } else { - return EINVAL - } - - return setrlimit(resource, &rl) -} - func (r *PtraceRegs) PC() uint64 { return uint64(r.Uregs[15]) } func (r *PtraceRegs) SetPC(pc uint64) { r.Uregs[15] = uint32(pc) } diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go index 6422704bc5..a81f5742b8 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go @@ -39,7 +39,6 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) //sys setfsgid(gid int) (prev int, err error) //sys setfsuid(uid int) (prev int, err error) -//sysnb setrlimit(resource int, rlim *Rlimit) (err error) //sys Shutdown(fd int, how int) (err error) //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) @@ -143,15 +142,6 @@ func Getrlimit(resource int, rlim *Rlimit) error { return getrlimit(resource, rlim) } -// Setrlimit prefers the prlimit64 system call. See issue 38604. -func Setrlimit(resource int, rlim *Rlimit) error { - err := Prlimit(0, resource, rlim, nil) - if err != ENOSYS { - return err - } - return setrlimit(resource, rlim) -} - func (r *PtraceRegs) PC() uint64 { return r.Pc } func (r *PtraceRegs) SetPC(pc uint64) { r.Pc = pc } diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go b/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go index 59dab510e9..69d2d7c3db 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go @@ -126,11 +126,6 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { return } -func Setrlimit(resource int, rlim *Rlimit) (err error) { - err = Prlimit(0, resource, rlim, nil) - return -} - func futimesat(dirfd int, path string, tv *[2]Timeval) (err error) { if tv == nil { return utimensat(dirfd, path, nil, 0) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go index bfef09a39e..76d564095e 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go @@ -37,7 +37,6 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) //sys setfsgid(gid int) (prev int, err error) //sys setfsuid(uid int) (prev int, err error) -//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) //sys Shutdown(fd int, how int) (err error) //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) //sys Statfs(path string, buf *Statfs_t) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go b/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go index ab30250966..aae7f0ffd3 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go @@ -151,33 +151,6 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { return } -//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT - -func Setrlimit(resource int, rlim *Rlimit) (err error) { - err = Prlimit(0, resource, rlim, nil) - if err != ENOSYS { - return err - } - - rl := rlimit32{} - if rlim.Cur == rlimInf64 { - rl.Cur = rlimInf32 - } else if rlim.Cur < uint64(rlimInf32) { - rl.Cur = uint32(rlim.Cur) - } else { - return EINVAL - } - if rlim.Max == rlimInf64 { - rl.Max = rlimInf32 - } else if rlim.Max < uint64(rlimInf32) { - rl.Max = uint32(rlim.Max) - } else { - return EINVAL - } - - return setrlimit(resource, &rl) -} - func (r *PtraceRegs) PC() uint64 { return r.Epc } func (r *PtraceRegs) SetPC(pc uint64) { r.Epc = pc } diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go b/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go index eac1cf1acc..66eff19a32 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go @@ -159,33 +159,6 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { return } -//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT - -func Setrlimit(resource int, rlim *Rlimit) (err error) { - err = Prlimit(0, resource, rlim, nil) - if err != ENOSYS { - return err - } - - rl := rlimit32{} - if rlim.Cur == rlimInf64 { - rl.Cur = rlimInf32 - } else if rlim.Cur < uint64(rlimInf32) { - rl.Cur = uint32(rlim.Cur) - } else { - return EINVAL - } - if rlim.Max == rlimInf64 { - rl.Max = rlimInf32 - } else if rlim.Max < uint64(rlimInf32) { - rl.Max = uint32(rlim.Max) - } else { - return EINVAL - } - - return setrlimit(resource, &rl) -} - func (r *PtraceRegs) PC() uint32 { return r.Nip } func (r *PtraceRegs) SetPC(pc uint32) { r.Nip = pc } diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go b/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go index 4df56616b8..806aa2574d 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go @@ -34,7 +34,6 @@ package unix //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) //sys setfsgid(gid int) (prev int, err error) //sys setfsuid(uid int) (prev int, err error) -//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) //sys Shutdown(fd int, how int) (err error) //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) //sys Stat(path string, stat *Stat_t) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go b/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go index 5f4243dea2..35851ef70b 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go @@ -38,7 +38,6 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) //sys setfsgid(gid int) (prev int, err error) //sys setfsuid(uid int) (prev int, err error) -//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) //sys Shutdown(fd int, how int) (err error) //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go index d0a7d40668..2f89e8f5de 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go @@ -34,7 +34,6 @@ import ( //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) //sys setfsgid(gid int) (prev int, err error) //sys setfsuid(uid int) (prev int, err error) -//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) //sys Stat(path string, stat *Stat_t) (err error) //sys Statfs(path string, buf *Statfs_t) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go b/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go index f5c793be26..7ca064ae76 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go @@ -31,7 +31,6 @@ package unix //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) //sys setfsgid(gid int) (prev int, err error) //sys setfsuid(uid int) (prev int, err error) -//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) //sys Shutdown(fd int, how int) (err error) //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) //sys Stat(path string, stat *Stat_t) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd.go b/vendor/golang.org/x/sys/unix/syscall_netbsd.go index e66865dccb..018d7d4782 100644 --- a/vendor/golang.org/x/sys/unix/syscall_netbsd.go +++ b/vendor/golang.org/x/sys/unix/syscall_netbsd.go @@ -340,7 +340,6 @@ func Statvfs(path string, buf *Statvfs_t) (err error) { //sys Setpriority(which int, who int, prio int) (err error) //sysnb Setregid(rgid int, egid int) (err error) //sysnb Setreuid(ruid int, euid int) (err error) -//sysnb Setrlimit(which int, lim *Rlimit) (err error) //sysnb Setsid() (pid int, err error) //sysnb Settimeofday(tp *Timeval) (err error) //sysnb Setuid(uid int) (err error) @@ -501,7 +500,6 @@ func Statvfs(path string, buf *Statvfs_t) (err error) { // compat_43_osendmsg // compat_43_osethostid // compat_43_osethostname -// compat_43_osetrlimit // compat_43_osigblock // compat_43_osigsetmask // compat_43_osigstack diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd.go b/vendor/golang.org/x/sys/unix/syscall_openbsd.go index 5e9de23ae3..f9c7a9663c 100644 --- a/vendor/golang.org/x/sys/unix/syscall_openbsd.go +++ b/vendor/golang.org/x/sys/unix/syscall_openbsd.go @@ -294,7 +294,6 @@ func Uname(uname *Utsname) error { //sysnb Setreuid(ruid int, euid int) (err error) //sysnb Setresgid(rgid int, egid int, sgid int) (err error) //sysnb Setresuid(ruid int, euid int, suid int) (err error) -//sysnb Setrlimit(which int, lim *Rlimit) (err error) //sysnb Setrtable(rtable int) (err error) //sysnb Setsid() (pid int, err error) //sysnb Settimeofday(tp *Timeval) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris.go b/vendor/golang.org/x/sys/unix/syscall_solaris.go index d3444b64d6..b600a289d3 100644 --- a/vendor/golang.org/x/sys/unix/syscall_solaris.go +++ b/vendor/golang.org/x/sys/unix/syscall_solaris.go @@ -545,24 +545,24 @@ func Minor(dev uint64) uint32 { * Expose the ioctl function */ -//sys ioctlRet(fd int, req uint, arg uintptr) (ret int, err error) = libc.ioctl -//sys ioctlPtrRet(fd int, req uint, arg unsafe.Pointer) (ret int, err error) = libc.ioctl +//sys ioctlRet(fd int, req int, arg uintptr) (ret int, err error) = libc.ioctl +//sys ioctlPtrRet(fd int, req int, arg unsafe.Pointer) (ret int, err error) = libc.ioctl -func ioctl(fd int, req uint, arg uintptr) (err error) { +func ioctl(fd int, req int, arg uintptr) (err error) { _, err = ioctlRet(fd, req, arg) return err } -func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { +func ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) { _, err = ioctlPtrRet(fd, req, arg) return err } -func IoctlSetTermio(fd int, req uint, value *Termio) error { +func IoctlSetTermio(fd int, req int, value *Termio) error { return ioctlPtr(fd, req, unsafe.Pointer(value)) } -func IoctlGetTermio(fd int, req uint) (*Termio, error) { +func IoctlGetTermio(fd int, req int) (*Termio, error) { var value Termio err := ioctlPtr(fd, req, unsafe.Pointer(&value)) return &value, err @@ -665,7 +665,6 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e //sys Setpriority(which int, who int, prio int) (err error) //sysnb Setregid(rgid int, egid int) (err error) //sysnb Setreuid(ruid int, euid int) (err error) -//sysnb Setrlimit(which int, lim *Rlimit) (err error) //sysnb Setsid() (pid int, err error) //sysnb Setuid(uid int) (err error) //sys Shutdown(s int, how int) (err error) = libsocket.shutdown @@ -1080,11 +1079,11 @@ func Getmsg(fd int, cl []byte, data []byte) (retCl []byte, retData []byte, flags return retCl, retData, flags, nil } -func IoctlSetIntRetInt(fd int, req uint, arg int) (int, error) { +func IoctlSetIntRetInt(fd int, req int, arg int) (int, error) { return ioctlRet(fd, req, uintptr(arg)) } -func IoctlSetString(fd int, req uint, val string) error { +func IoctlSetString(fd int, req int, val string) error { bs := make([]byte, len(val)+1) copy(bs[:len(bs)-1], val) err := ioctlPtr(fd, req, unsafe.Pointer(&bs[0])) @@ -1120,7 +1119,7 @@ func (l *Lifreq) GetLifruUint() uint { return *(*uint)(unsafe.Pointer(&l.Lifru[0])) } -func IoctlLifreq(fd int, req uint, l *Lifreq) error { +func IoctlLifreq(fd int, req int, l *Lifreq) error { return ioctlPtr(fd, req, unsafe.Pointer(l)) } @@ -1131,6 +1130,6 @@ func (s *Strioctl) SetInt(i int) { s.Dp = (*int8)(unsafe.Pointer(&i)) } -func IoctlSetStrioctlRetInt(fd int, req uint, s *Strioctl) (int, error) { +func IoctlSetStrioctlRetInt(fd int, req int, s *Strioctl) (int, error) { return ioctlPtrRet(fd, req, unsafe.Pointer(s)) } diff --git a/vendor/golang.org/x/sys/unix/syscall_unix.go b/vendor/golang.org/x/sys/unix/syscall_unix.go index 00f0aa3758..8e48c29ec3 100644 --- a/vendor/golang.org/x/sys/unix/syscall_unix.go +++ b/vendor/golang.org/x/sys/unix/syscall_unix.go @@ -587,3 +587,10 @@ func emptyIovecs(iov []Iovec) bool { } return true } + +// Setrlimit sets a resource limit. +func Setrlimit(resource int, rlim *Rlimit) error { + // Just call the syscall version, because as of Go 1.21 + // it will affect starting a new process. + return syscall.Setrlimit(resource, (*syscall.Rlimit)(rlim)) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go b/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go index b295497ae4..d3d49ec3ed 100644 --- a/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go +++ b/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go @@ -212,8 +212,8 @@ func (cmsg *Cmsghdr) SetLen(length int) { //sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) = SYS___SENDMSG_A //sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) = SYS_MMAP //sys munmap(addr uintptr, length uintptr) (err error) = SYS_MUNMAP -//sys ioctl(fd int, req uint, arg uintptr) (err error) = SYS_IOCTL -//sys ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = SYS_IOCTL +//sys ioctl(fd int, req int, arg uintptr) (err error) = SYS_IOCTL +//sys ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) = SYS_IOCTL //sys Access(path string, mode uint32) (err error) = SYS___ACCESS_A //sys Chdir(path string) (err error) = SYS___CHDIR_A diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go index 476a1c7e77..1430076271 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go @@ -1270,6 +1270,16 @@ const ( SEEK_END = 0x2 SEEK_HOLE = 0x3 SEEK_SET = 0x0 + SF_APPEND = 0x40000 + SF_ARCHIVED = 0x10000 + SF_DATALESS = 0x40000000 + SF_FIRMLINK = 0x800000 + SF_IMMUTABLE = 0x20000 + SF_NOUNLINK = 0x100000 + SF_RESTRICTED = 0x80000 + SF_SETTABLE = 0x3fff0000 + SF_SUPPORTED = 0x9f0000 + SF_SYNTHETIC = 0xc0000000 SHUT_RD = 0x0 SHUT_RDWR = 0x2 SHUT_WR = 0x1 @@ -1543,6 +1553,15 @@ const ( TIOCTIMESTAMP = 0x40107459 TIOCUCNTL = 0x80047466 TOSTOP = 0x400000 + UF_APPEND = 0x4 + UF_COMPRESSED = 0x20 + UF_DATAVAULT = 0x80 + UF_HIDDEN = 0x8000 + UF_IMMUTABLE = 0x2 + UF_NODUMP = 0x1 + UF_OPAQUE = 0x8 + UF_SETTABLE = 0xffff + UF_TRACKED = 0x40 VDISCARD = 0xf VDSUSP = 0xb VEOF = 0x0 diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go index e36f5178d6..ab044a7427 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go @@ -1270,6 +1270,16 @@ const ( SEEK_END = 0x2 SEEK_HOLE = 0x3 SEEK_SET = 0x0 + SF_APPEND = 0x40000 + SF_ARCHIVED = 0x10000 + SF_DATALESS = 0x40000000 + SF_FIRMLINK = 0x800000 + SF_IMMUTABLE = 0x20000 + SF_NOUNLINK = 0x100000 + SF_RESTRICTED = 0x80000 + SF_SETTABLE = 0x3fff0000 + SF_SUPPORTED = 0x9f0000 + SF_SYNTHETIC = 0xc0000000 SHUT_RD = 0x0 SHUT_RDWR = 0x2 SHUT_WR = 0x1 @@ -1543,6 +1553,15 @@ const ( TIOCTIMESTAMP = 0x40107459 TIOCUCNTL = 0x80047466 TOSTOP = 0x400000 + UF_APPEND = 0x4 + UF_COMPRESSED = 0x20 + UF_DATAVAULT = 0x80 + UF_HIDDEN = 0x8000 + UF_IMMUTABLE = 0x2 + UF_NODUMP = 0x1 + UF_OPAQUE = 0x8 + UF_SETTABLE = 0xffff + UF_TRACKED = 0x40 VDISCARD = 0xf VDSUSP = 0xb VEOF = 0x0 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux.go b/vendor/golang.org/x/sys/unix/zerrors_linux.go index 398c37e52d..de936b677b 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux.go @@ -2967,6 +2967,7 @@ const ( SOL_TCP = 0x6 SOL_TIPC = 0x10f SOL_TLS = 0x11a + SOL_UDP = 0x11 SOL_X25 = 0x106 SOL_XDP = 0x11b SOMAXCONN = 0x1000 @@ -3251,6 +3252,19 @@ const ( TRACEFS_MAGIC = 0x74726163 TS_COMM_LEN = 0x20 UDF_SUPER_MAGIC = 0x15013346 + UDP_CORK = 0x1 + UDP_ENCAP = 0x64 + UDP_ENCAP_ESPINUDP = 0x2 + UDP_ENCAP_ESPINUDP_NON_IKE = 0x1 + UDP_ENCAP_GTP0 = 0x4 + UDP_ENCAP_GTP1U = 0x5 + UDP_ENCAP_L2TPINUDP = 0x3 + UDP_GRO = 0x68 + UDP_NO_CHECK6_RX = 0x66 + UDP_NO_CHECK6_TX = 0x65 + UDP_SEGMENT = 0x67 + UDP_V4_FLOW = 0x2 + UDP_V6_FLOW = 0x6 UMOUNT_NOFOLLOW = 0x8 USBDEVICE_SUPER_MAGIC = 0x9fa2 UTIME_NOW = 0x3fffffff diff --git a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go index ef9dcd1bef..9a257219d7 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go @@ -124,7 +124,6 @@ int utime(uintptr_t, uintptr_t); unsigned long long getsystemcfg(int); int umount(uintptr_t); int getrlimit64(int, uintptr_t); -int setrlimit64(int, uintptr_t); long long lseek64(int, long long, int); uintptr_t mmap(uintptr_t, uintptr_t, int, int, int, long long); @@ -213,7 +212,7 @@ func wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func ioctl(fd int, req uint, arg uintptr) (err error) { +func ioctl(fd int, req int, arg uintptr) (err error) { r0, er := C.ioctl(C.int(fd), C.int(req), C.uintptr_t(arg)) if r0 == -1 && er != nil { err = er @@ -223,7 +222,7 @@ func ioctl(fd int, req uint, arg uintptr) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { +func ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) { r0, er := C.ioctl(C.int(fd), C.int(req), C.uintptr_t(uintptr(arg))) if r0 == -1 && er != nil { err = er @@ -1464,16 +1463,6 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(resource int, rlim *Rlimit) (err error) { - r0, er := C.setrlimit64(C.int(resource), C.uintptr_t(uintptr(unsafe.Pointer(rlim)))) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Seek(fd int, offset int64, whence int) (off int64, err error) { r0, er := C.lseek64(C.int(fd), C.longlong(offset), C.int(whence)) off = int64(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go index f86a945923..6de80c20cf 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go @@ -93,8 +93,8 @@ func wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func ioctl(fd int, req uint, arg uintptr) (err error) { - _, e1 := callioctl(fd, int(req), arg) +func ioctl(fd int, req int, arg uintptr) (err error) { + _, e1 := callioctl(fd, req, arg) if e1 != 0 { err = errnoErr(e1) } @@ -103,8 +103,8 @@ func ioctl(fd int, req uint, arg uintptr) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { - _, e1 := callioctl_ptr(fd, int(req), arg) +func ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) { + _, e1 := callioctl_ptr(fd, req, arg) if e1 != 0 { err = errnoErr(e1) } @@ -1422,16 +1422,6 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(resource int, rlim *Rlimit) (err error) { - _, e1 := callsetrlimit(resource, uintptr(unsafe.Pointer(rlim))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Seek(fd int, offset int64, whence int) (off int64, err error) { r0, e1 := calllseek(fd, offset, whence) off = int64(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go index d32a84cae2..c4d50ae500 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go @@ -124,7 +124,6 @@ import ( //go:cgo_import_dynamic libc_getsystemcfg getsystemcfg "libc.a/shr_64.o" //go:cgo_import_dynamic libc_umount umount "libc.a/shr_64.o" //go:cgo_import_dynamic libc_getrlimit getrlimit "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.a/shr_64.o" //go:cgo_import_dynamic libc_lseek lseek "libc.a/shr_64.o" //go:cgo_import_dynamic libc_mmap64 mmap64 "libc.a/shr_64.o" @@ -242,7 +241,6 @@ import ( //go:linkname libc_getsystemcfg libc_getsystemcfg //go:linkname libc_umount libc_umount //go:linkname libc_getrlimit libc_getrlimit -//go:linkname libc_setrlimit libc_setrlimit //go:linkname libc_lseek libc_lseek //go:linkname libc_mmap64 libc_mmap64 @@ -363,7 +361,6 @@ var ( libc_getsystemcfg, libc_umount, libc_getrlimit, - libc_setrlimit, libc_lseek, libc_mmap64 syscallFunc ) @@ -1179,13 +1176,6 @@ func callgetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func callsetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setrlimit)), 2, uintptr(resource), rlim, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func calllseek(fd int, offset int64, whence int) (r1 uintptr, e1 Errno) { r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_lseek)), 3, uintptr(fd), uintptr(offset), uintptr(whence), 0, 0, 0) return diff --git a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go index d7d8baf819..6903d3b09e 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go @@ -123,7 +123,6 @@ int utime(uintptr_t, uintptr_t); unsigned long long getsystemcfg(int); int umount(uintptr_t); int getrlimit(int, uintptr_t); -int setrlimit(int, uintptr_t); long long lseek(int, long long, int); uintptr_t mmap64(uintptr_t, uintptr_t, int, int, int, long long); @@ -131,6 +130,7 @@ uintptr_t mmap64(uintptr_t, uintptr_t, int, int, int, long long); import "C" import ( "syscall" + "unsafe" ) // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1055,14 +1055,6 @@ func callgetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func callsetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.setrlimit(C.int(resource), C.uintptr_t(rlim))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func calllseek(fd int, offset int64, whence int) (r1 uintptr, e1 Errno) { r1 = uintptr(C.lseek(C.int(fd), C.longlong(offset), C.int(whence))) e1 = syscall.GetErrno() diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go index a29ffdd566..4037ccf7a9 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go @@ -1992,6 +1992,31 @@ var libc_select_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Setattrlist(path string, attrlist *Attrlist, attrBuf []byte, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(attrBuf) > 0 { + _p1 = unsafe.Pointer(&attrBuf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + _, _, e1 := syscall_syscall6(libc_setattrlist_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(attrlist)), uintptr(_p1), uintptr(len(attrBuf)), uintptr(options), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_setattrlist_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setattrlist setattrlist "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Setegid(egid int) (err error) { _, _, e1 := syscall_syscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0) if e1 != 0 { @@ -2123,20 +2148,6 @@ var libc_setreuid_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setrlimit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setrlimit setrlimit "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setsid() (pid int, err error) { r0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0) pid = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s index 95fe4c0eb9..4baaed0bc1 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s @@ -705,6 +705,11 @@ TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_select_trampoline_addr(SB), RODATA, $8 DATA ·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB) +TEXT libc_setattrlist_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setattrlist(SB) +GLOBL ·libc_setattrlist_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setattrlist_trampoline_addr(SB)/8, $libc_setattrlist_trampoline<>(SB) + TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setegid(SB) @@ -759,12 +764,6 @@ TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_setreuid_trampoline_addr(SB), RODATA, $8 DATA ·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB) -TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setrlimit(SB) - -GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setrlimit_trampoline_addr(SB)/8, $libc_setrlimit_trampoline<>(SB) - TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setsid(SB) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go index 2fd4590bb7..51d6f3fb25 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go @@ -1992,6 +1992,31 @@ var libc_select_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Setattrlist(path string, attrlist *Attrlist, attrBuf []byte, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(attrBuf) > 0 { + _p1 = unsafe.Pointer(&attrBuf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + _, _, e1 := syscall_syscall6(libc_setattrlist_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(attrlist)), uintptr(_p1), uintptr(len(attrBuf)), uintptr(options), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_setattrlist_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setattrlist setattrlist "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Setegid(egid int) (err error) { _, _, e1 := syscall_syscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0) if e1 != 0 { @@ -2123,20 +2148,6 @@ var libc_setreuid_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setrlimit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setrlimit setrlimit "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setsid() (pid int, err error) { r0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0) pid = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s index efa5b4c987..c3b82c0379 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s @@ -705,6 +705,11 @@ TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_select_trampoline_addr(SB), RODATA, $8 DATA ·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB) +TEXT libc_setattrlist_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setattrlist(SB) +GLOBL ·libc_setattrlist_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setattrlist_trampoline_addr(SB)/8, $libc_setattrlist_trampoline<>(SB) + TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setegid(SB) @@ -759,12 +764,6 @@ TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_setreuid_trampoline_addr(SB), RODATA, $8 DATA ·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB) -TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setrlimit(SB) - -GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setrlimit_trampoline_addr(SB)/8, $libc_setrlimit_trampoline<>(SB) - TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setsid(SB) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go index 3b85134707..0eabac7ade 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go @@ -1410,16 +1410,6 @@ func Setresuid(ruid int, euid int, suid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setsid() (pid int, err error) { r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) pid = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go index 1129065624..ee313eb007 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go @@ -1645,16 +1645,6 @@ func Setresuid(ruid int, euid int, suid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setsid() (pid int, err error) { r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) pid = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go index 55f5abfe59..4c986e448e 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go @@ -1645,16 +1645,6 @@ func Setresuid(ruid int, euid int, suid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setsid() (pid int, err error) { r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) pid = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go index d39651c2b5..555216944a 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go @@ -1645,16 +1645,6 @@ func Setresuid(ruid int, euid int, suid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setsid() (pid int, err error) { r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) pid = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go index ddb7408680..67a226fbf5 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go @@ -1645,16 +1645,6 @@ func Setresuid(ruid int, euid int, suid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setsid() (pid int, err error) { r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) pid = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go index 09a53a616c..f0b9ddaaa2 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go @@ -1645,16 +1645,6 @@ func Setresuid(ruid int, euid int, suid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setsid() (pid int, err error) { r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) pid = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux.go b/vendor/golang.org/x/sys/unix/zsyscall_linux.go index 430cb24de7..da63d9d782 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux.go @@ -1346,16 +1346,6 @@ func PivotRoot(newroot string, putold string) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { - _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go index c81b0ad477..07b549cc25 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go @@ -411,16 +411,6 @@ func getrlimit(resource int, rlim *rlimit32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func setrlimit(resource int, rlim *rlimit32) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go index 2206bce7f4..5f481bf83f 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go @@ -334,16 +334,6 @@ func setfsuid(uid int) (prev int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Shutdown(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go index edf6b39f16..824cd52c7f 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go @@ -578,16 +578,6 @@ func getrlimit(resource int, rlim *rlimit32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func setrlimit(resource int, rlim *rlimit32) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func armSyncFileRange(fd int, flags int, off int64, n int64) (err error) { _, _, e1 := Syscall6(SYS_ARM_SYNC_FILE_RANGE, uintptr(fd), uintptr(flags), uintptr(off), uintptr(off>>32), uintptr(n), uintptr(n>>32)) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go index 190609f214..e77aecfe98 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go @@ -289,16 +289,6 @@ func setfsuid(uid int) (prev int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func setrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Shutdown(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go index 5f984cbb1c..961a3afb7b 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go @@ -644,16 +644,6 @@ func getrlimit(resource int, rlim *rlimit32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func setrlimit(resource int, rlim *rlimit32) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Alarm(seconds uint) (remaining uint, err error) { r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) remaining = uint(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go index 46fc380a40..ed05005e91 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go @@ -278,16 +278,6 @@ func setfsuid(uid int) (prev int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Shutdown(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go index cbd0d4dadb..d365b718f3 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go @@ -278,16 +278,6 @@ func setfsuid(uid int) (prev int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Shutdown(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go index 0c13d15f07..c3f1b8bbde 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go @@ -644,16 +644,6 @@ func getrlimit(resource int, rlim *rlimit32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func setrlimit(resource int, rlim *rlimit32) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Alarm(seconds uint) (remaining uint, err error) { r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) remaining = uint(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go index e01432aed5..a6574cf98b 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go @@ -624,16 +624,6 @@ func getrlimit(resource int, rlim *rlimit32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func setrlimit(resource int, rlim *rlimit32) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func syncFileRange2(fd int, flags int, off int64, n int64) (err error) { _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(flags), uintptr(off>>32), uintptr(off), uintptr(n>>32), uintptr(n)) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go index 13c7ee7baf..f40990264f 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go @@ -349,16 +349,6 @@ func setfsuid(uid int) (prev int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Shutdown(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go index 02d0c0fd61..9dfcc29974 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go @@ -349,16 +349,6 @@ func setfsuid(uid int) (prev int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Shutdown(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go index 9fee3b1d23..0b29239583 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go @@ -269,16 +269,6 @@ func setfsuid(uid int) (prev int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Shutdown(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go index 647bbfecd6..6cde32237d 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go @@ -319,16 +319,6 @@ func setfsuid(uid int) (prev int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) n = int64(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go index ada057f891..5253d65bf1 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go @@ -329,16 +329,6 @@ func setfsuid(uid int) (prev int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Shutdown(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go index 8e1d9c8f66..cdb2af5ae0 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go @@ -1607,16 +1607,6 @@ func Setreuid(ruid int, euid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setsid() (pid int, err error) { r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) pid = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go index 21c6950400..9d25f76b0b 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go @@ -1607,16 +1607,6 @@ func Setreuid(ruid int, euid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setsid() (pid int, err error) { r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) pid = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go index 298168f90a..d3f8035169 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go @@ -1607,16 +1607,6 @@ func Setreuid(ruid int, euid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setsid() (pid int, err error) { r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) pid = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go index 68b8bd492f..887188a529 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go @@ -1607,16 +1607,6 @@ func Setreuid(ruid int, euid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setsid() (pid int, err error) { r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) pid = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go index 0b0f910e1a..6699a783e1 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go @@ -1894,20 +1894,6 @@ var libc_setresuid_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setrlimit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setrtable(rtable int) (err error) { _, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s index 087444250c..04f0de34b2 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s @@ -573,11 +573,6 @@ TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_setresuid_trampoline_addr(SB), RODATA, $4 DATA ·libc_setresuid_trampoline_addr(SB)/4, $libc_setresuid_trampoline<>(SB) -TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setrlimit(SB) -GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $4 -DATA ·libc_setrlimit_trampoline_addr(SB)/4, $libc_setrlimit_trampoline<>(SB) - TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setrtable(SB) GLOBL ·libc_setrtable_trampoline_addr(SB), RODATA, $4 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go index 48ff5de75b..1e775fe057 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go @@ -1894,20 +1894,6 @@ var libc_setresuid_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setrlimit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setrtable(rtable int) (err error) { _, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s index 5782cd1084..27b6f4df74 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s @@ -573,11 +573,6 @@ TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_setresuid_trampoline_addr(SB), RODATA, $8 DATA ·libc_setresuid_trampoline_addr(SB)/8, $libc_setresuid_trampoline<>(SB) -TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setrlimit(SB) -GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setrlimit_trampoline_addr(SB)/8, $libc_setrlimit_trampoline<>(SB) - TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setrtable(SB) GLOBL ·libc_setrtable_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go index 2452a641da..7f6427899a 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go @@ -1894,20 +1894,6 @@ var libc_setresuid_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setrlimit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setrtable(rtable int) (err error) { _, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s index cf310420c9..b797045fd2 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s @@ -573,11 +573,6 @@ TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_setresuid_trampoline_addr(SB), RODATA, $4 DATA ·libc_setresuid_trampoline_addr(SB)/4, $libc_setresuid_trampoline<>(SB) -TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setrlimit(SB) -GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $4 -DATA ·libc_setrlimit_trampoline_addr(SB)/4, $libc_setrlimit_trampoline<>(SB) - TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setrtable(SB) GLOBL ·libc_setrtable_trampoline_addr(SB), RODATA, $4 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go index 5e35600a60..756ef7b173 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go @@ -1894,20 +1894,6 @@ var libc_setresuid_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setrlimit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setrtable(rtable int) (err error) { _, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s index 484bb42e0a..a871266221 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s @@ -573,11 +573,6 @@ TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_setresuid_trampoline_addr(SB), RODATA, $8 DATA ·libc_setresuid_trampoline_addr(SB)/8, $libc_setresuid_trampoline<>(SB) -TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setrlimit(SB) -GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setrlimit_trampoline_addr(SB)/8, $libc_setrlimit_trampoline<>(SB) - TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setrtable(SB) GLOBL ·libc_setrtable_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go index b04cef1a19..7bc2e24eb9 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go @@ -1894,20 +1894,6 @@ var libc_setresuid_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setrlimit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setrtable(rtable int) (err error) { _, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s index 55af27263a..05d4bffd79 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s @@ -573,11 +573,6 @@ TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_setresuid_trampoline_addr(SB), RODATA, $8 DATA ·libc_setresuid_trampoline_addr(SB)/8, $libc_setresuid_trampoline<>(SB) -TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setrlimit(SB) -GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setrlimit_trampoline_addr(SB)/8, $libc_setrlimit_trampoline<>(SB) - TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setrtable(SB) GLOBL ·libc_setrtable_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go index 47a07ee0c2..739be6217a 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go @@ -1894,20 +1894,6 @@ var libc_setresuid_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setrlimit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setrtable(rtable int) (err error) { _, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s index 4028255b0d..74a25f8d64 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s @@ -687,12 +687,6 @@ TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_setresuid_trampoline_addr(SB), RODATA, $8 DATA ·libc_setresuid_trampoline_addr(SB)/8, $libc_setresuid_trampoline<>(SB) -TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 - CALL libc_setrlimit(SB) - RET -GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setrlimit_trampoline_addr(SB)/8, $libc_setrlimit_trampoline<>(SB) - TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0 CALL libc_setrtable(SB) RET diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go index 573378fdb9..7d95a19780 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go @@ -1894,20 +1894,6 @@ var libc_setresuid_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setrlimit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setrtable(rtable int) (err error) { _, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s index e1fbd4dfa8..990be24574 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s @@ -573,11 +573,6 @@ TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_setresuid_trampoline_addr(SB), RODATA, $8 DATA ·libc_setresuid_trampoline_addr(SB)/8, $libc_setresuid_trampoline<>(SB) -TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setrlimit(SB) -GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setrlimit_trampoline_addr(SB)/8, $libc_setrlimit_trampoline<>(SB) - TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setrtable(SB) GLOBL ·libc_setrtable_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go index 4873a1e5d3..609d1c598a 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go @@ -110,7 +110,6 @@ import ( //go:cgo_import_dynamic libc_setpriority setpriority "libc.so" //go:cgo_import_dynamic libc_setregid setregid "libc.so" //go:cgo_import_dynamic libc_setreuid setreuid "libc.so" -//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" //go:cgo_import_dynamic libc_setsid setsid "libc.so" //go:cgo_import_dynamic libc_setuid setuid "libc.so" //go:cgo_import_dynamic libc_shutdown shutdown "libsocket.so" @@ -250,7 +249,6 @@ import ( //go:linkname procSetpriority libc_setpriority //go:linkname procSetregid libc_setregid //go:linkname procSetreuid libc_setreuid -//go:linkname procSetrlimit libc_setrlimit //go:linkname procSetsid libc_setsid //go:linkname procSetuid libc_setuid //go:linkname procshutdown libc_shutdown @@ -391,7 +389,6 @@ var ( procSetpriority, procSetregid, procSetreuid, - procSetrlimit, procSetsid, procSetuid, procshutdown, @@ -646,7 +643,7 @@ func __minor(version int, dev uint64) (val uint) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func ioctlRet(fd int, req uint, arg uintptr) (ret int, err error) { +func ioctlRet(fd int, req int, arg uintptr) (ret int, err error) { r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procioctl)), 3, uintptr(fd), uintptr(req), uintptr(arg), 0, 0, 0) ret = int(r0) if e1 != 0 { @@ -657,7 +654,7 @@ func ioctlRet(fd int, req uint, arg uintptr) (ret int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func ioctlPtrRet(fd int, req uint, arg unsafe.Pointer) (ret int, err error) { +func ioctlPtrRet(fd int, req int, arg unsafe.Pointer) (ret int, err error) { r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procioctl)), 3, uintptr(fd), uintptr(req), uintptr(arg), 0, 0, 0) ret = int(r0) if e1 != 0 { @@ -1650,16 +1647,6 @@ func Setreuid(ruid int, euid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetrlimit)), 2, uintptr(which), uintptr(unsafe.Pointer(lim)), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setsid() (pid int, err error) { r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetsid)), 0, 0, 0, 0, 0, 0, 0) pid = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go b/vendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go index 07bfe2ef9a..c31681743c 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go @@ -257,7 +257,7 @@ func munmap(addr uintptr, length uintptr) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func ioctl(fd int, req uint, arg uintptr) (err error) { +func ioctl(fd int, req int, arg uintptr) (err error) { _, _, e1 := syscall_syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { err = errnoErr(e1) @@ -267,7 +267,7 @@ func ioctl(fd int, req uint, arg uintptr) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { +func ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) { _, _, e1 := syscall_syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { err = errnoErr(e1) diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go index e2a64f0991..690cefc3d0 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go @@ -151,6 +151,16 @@ type Dirent struct { _ [3]byte } +type Attrlist struct { + Bitmapcount uint16 + Reserved uint16 + Commonattr uint32 + Volattr uint32 + Dirattr uint32 + Fileattr uint32 + Forkattr uint32 +} + const ( PathMax = 0x400 ) @@ -610,6 +620,7 @@ const ( AT_REMOVEDIR = 0x80 AT_SYMLINK_FOLLOW = 0x40 AT_SYMLINK_NOFOLLOW = 0x20 + AT_EACCESS = 0x10 ) type PollFd struct { diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go index 34aa775219..5bffc10eac 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go @@ -151,6 +151,16 @@ type Dirent struct { _ [3]byte } +type Attrlist struct { + Bitmapcount uint16 + Reserved uint16 + Commonattr uint32 + Volattr uint32 + Dirattr uint32 + Fileattr uint32 + Forkattr uint32 +} + const ( PathMax = 0x400 ) @@ -610,6 +620,7 @@ const ( AT_REMOVEDIR = 0x80 AT_SYMLINK_FOLLOW = 0x40 AT_SYMLINK_NOFOLLOW = 0x20 + AT_EACCESS = 0x10 ) type PollFd struct { diff --git a/vendor/golang.org/x/sys/windows/env_windows.go b/vendor/golang.org/x/sys/windows/env_windows.go index 92ac05ff4e..b8ad192506 100644 --- a/vendor/golang.org/x/sys/windows/env_windows.go +++ b/vendor/golang.org/x/sys/windows/env_windows.go @@ -37,14 +37,14 @@ func (token Token) Environ(inheritExisting bool) (env []string, err error) { return nil, err } defer DestroyEnvironmentBlock(block) - blockp := uintptr(unsafe.Pointer(block)) + blockp := unsafe.Pointer(block) for { - entry := UTF16PtrToString((*uint16)(unsafe.Pointer(blockp))) + entry := UTF16PtrToString((*uint16)(blockp)) if len(entry) == 0 { break } env = append(env, entry) - blockp += 2 * (uintptr(len(entry)) + 1) + blockp = unsafe.Add(blockp, 2*(len(entry)+1)) } return env, nil } diff --git a/vendor/golang.org/x/sys/windows/exec_windows.go b/vendor/golang.org/x/sys/windows/exec_windows.go index 75980fd44a..a52e0331d8 100644 --- a/vendor/golang.org/x/sys/windows/exec_windows.go +++ b/vendor/golang.org/x/sys/windows/exec_windows.go @@ -95,12 +95,17 @@ func ComposeCommandLine(args []string) string { // DecomposeCommandLine breaks apart its argument command line into unescaped parts using CommandLineToArgv, // as gathered from GetCommandLine, QUERY_SERVICE_CONFIG's BinaryPathName argument, or elsewhere that // command lines are passed around. +// DecomposeCommandLine returns error if commandLine contains NUL. func DecomposeCommandLine(commandLine string) ([]string, error) { if len(commandLine) == 0 { return []string{}, nil } + utf16CommandLine, err := UTF16FromString(commandLine) + if err != nil { + return nil, errorspkg.New("string with NUL passed to DecomposeCommandLine") + } var argc int32 - argv, err := CommandLineToArgv(StringToUTF16Ptr(commandLine), &argc) + argv, err := CommandLineToArgv(&utf16CommandLine[0], &argc) if err != nil { return nil, err } diff --git a/vendor/golang.org/x/sys/windows/service.go b/vendor/golang.org/x/sys/windows/service.go index f8deca8397..c964b6848d 100644 --- a/vendor/golang.org/x/sys/windows/service.go +++ b/vendor/golang.org/x/sys/windows/service.go @@ -141,6 +141,12 @@ const ( SERVICE_DYNAMIC_INFORMATION_LEVEL_START_REASON = 1 ) +type ENUM_SERVICE_STATUS struct { + ServiceName *uint16 + DisplayName *uint16 + ServiceStatus SERVICE_STATUS +} + type SERVICE_STATUS struct { ServiceType uint32 CurrentState uint32 @@ -245,3 +251,4 @@ type QUERY_SERVICE_LOCK_STATUS struct { //sys UnsubscribeServiceChangeNotifications(subscription uintptr) = sechost.UnsubscribeServiceChangeNotifications? //sys RegisterServiceCtrlHandlerEx(serviceName *uint16, handlerProc uintptr, context uintptr) (handle Handle, err error) = advapi32.RegisterServiceCtrlHandlerExW //sys QueryServiceDynamicInformation(service Handle, infoLevel uint32, dynamicInfo unsafe.Pointer) (err error) = advapi32.QueryServiceDynamicInformation? +//sys EnumDependentServices(service Handle, activityState uint32, services *ENUM_SERVICE_STATUS, buffSize uint32, bytesNeeded *uint32, servicesReturned *uint32) (err error) = advapi32.EnumDependentServicesW diff --git a/vendor/golang.org/x/sys/windows/types_windows.go b/vendor/golang.org/x/sys/windows/types_windows.go index 857acf1032..88e62a6385 100644 --- a/vendor/golang.org/x/sys/windows/types_windows.go +++ b/vendor/golang.org/x/sys/windows/types_windows.go @@ -2220,19 +2220,23 @@ type JOBOBJECT_BASIC_UI_RESTRICTIONS struct { } const ( - // JobObjectInformationClass + // JobObjectInformationClass for QueryInformationJobObject and SetInformationJobObject JobObjectAssociateCompletionPortInformation = 7 + JobObjectBasicAccountingInformation = 1 + JobObjectBasicAndIoAccountingInformation = 8 JobObjectBasicLimitInformation = 2 + JobObjectBasicProcessIdList = 3 JobObjectBasicUIRestrictions = 4 JobObjectCpuRateControlInformation = 15 JobObjectEndOfJobTimeInformation = 6 JobObjectExtendedLimitInformation = 9 JobObjectGroupInformation = 11 JobObjectGroupInformationEx = 14 - JobObjectLimitViolationInformation2 = 35 + JobObjectLimitViolationInformation = 13 + JobObjectLimitViolationInformation2 = 34 JobObjectNetRateControlInformation = 32 JobObjectNotificationLimitInformation = 12 - JobObjectNotificationLimitInformation2 = 34 + JobObjectNotificationLimitInformation2 = 33 JobObjectSecurityLimitInformation = 5 ) diff --git a/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/vendor/golang.org/x/sys/windows/zsyscall_windows.go index 6d2a268534..a81ea2c700 100644 --- a/vendor/golang.org/x/sys/windows/zsyscall_windows.go +++ b/vendor/golang.org/x/sys/windows/zsyscall_windows.go @@ -86,6 +86,7 @@ var ( procDeleteService = modadvapi32.NewProc("DeleteService") procDeregisterEventSource = modadvapi32.NewProc("DeregisterEventSource") procDuplicateTokenEx = modadvapi32.NewProc("DuplicateTokenEx") + procEnumDependentServicesW = modadvapi32.NewProc("EnumDependentServicesW") procEnumServicesStatusExW = modadvapi32.NewProc("EnumServicesStatusExW") procEqualSid = modadvapi32.NewProc("EqualSid") procFreeSid = modadvapi32.NewProc("FreeSid") @@ -734,6 +735,14 @@ func DuplicateTokenEx(existingToken Token, desiredAccess uint32, tokenAttributes return } +func EnumDependentServices(service Handle, activityState uint32, services *ENUM_SERVICE_STATUS, buffSize uint32, bytesNeeded *uint32, servicesReturned *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procEnumDependentServicesW.Addr(), 6, uintptr(service), uintptr(activityState), uintptr(unsafe.Pointer(services)), uintptr(buffSize), uintptr(unsafe.Pointer(bytesNeeded)), uintptr(unsafe.Pointer(servicesReturned))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + func EnumServicesStatusEx(mgr Handle, infoLevel uint32, serviceType uint32, serviceState uint32, services *byte, bufSize uint32, bytesNeeded *uint32, servicesReturned *uint32, resumeHandle *uint32, groupName *uint16) (err error) { r1, _, e1 := syscall.Syscall12(procEnumServicesStatusExW.Addr(), 10, uintptr(mgr), uintptr(infoLevel), uintptr(serviceType), uintptr(serviceState), uintptr(unsafe.Pointer(services)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded)), uintptr(unsafe.Pointer(servicesReturned)), uintptr(unsafe.Pointer(resumeHandle)), uintptr(unsafe.Pointer(groupName)), 0, 0) if r1 == 0 { diff --git a/vendor/google.golang.org/api/googleapi/googleapi.go b/vendor/google.golang.org/api/googleapi/googleapi.go index b328a7976a..b5e38c6628 100644 --- a/vendor/google.golang.org/api/googleapi/googleapi.go +++ b/vendor/google.golang.org/api/googleapi/googleapi.go @@ -11,7 +11,6 @@ import ( "encoding/json" "fmt" "io" - "io/ioutil" "net/http" "net/url" "strings" @@ -144,7 +143,7 @@ func CheckResponse(res *http.Response) error { if res.StatusCode >= 200 && res.StatusCode <= 299 { return nil } - slurp, err := ioutil.ReadAll(res.Body) + slurp, err := io.ReadAll(res.Body) if err == nil { jerr := new(errorReply) err = json.Unmarshal(slurp, jerr) @@ -184,7 +183,7 @@ func CheckMediaResponse(res *http.Response) error { if res.StatusCode >= 200 && res.StatusCode <= 299 { return nil } - slurp, _ := ioutil.ReadAll(io.LimitReader(res.Body, 1<<20)) + slurp, _ := io.ReadAll(io.LimitReader(res.Body, 1<<20)) return &Error{ Code: res.StatusCode, Body: string(slurp), diff --git a/vendor/google.golang.org/api/iamcredentials/v1/iamcredentials-gen.go b/vendor/google.golang.org/api/iamcredentials/v1/iamcredentials-gen.go index 29302a1e99..0a6304d51d 100644 --- a/vendor/google.golang.org/api/iamcredentials/v1/iamcredentials-gen.go +++ b/vendor/google.golang.org/api/iamcredentials/v1/iamcredentials-gen.go @@ -71,6 +71,7 @@ var _ = errors.New var _ = strings.Replace var _ = context.Canceled var _ = internaloption.WithDefaultEndpoint +var _ = internal.Version const apiId = "iamcredentials:v1" const apiName = "iamcredentials" diff --git a/vendor/google.golang.org/api/internal/cba.go b/vendor/google.golang.org/api/internal/cba.go new file mode 100644 index 0000000000..cecbb9ba11 --- /dev/null +++ b/vendor/google.golang.org/api/internal/cba.go @@ -0,0 +1,282 @@ +// Copyright 2020 Google LLC. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// cba.go (certificate-based access) contains utils for implementing Device Certificate +// Authentication according to https://google.aip.dev/auth/4114 and Default Credentials +// for Google Cloud Virtual Environments according to https://google.aip.dev/auth/4115. +// +// The overall logic for DCA is as follows: +// 1. If both endpoint override and client certificate are specified, use them as is. +// 2. If user does not specify client certificate, we will attempt to use default +// client certificate. +// 3. If user does not specify endpoint override, we will use defaultMtlsEndpoint if +// client certificate is available and defaultEndpoint otherwise. +// +// Implications of the above logic: +// 1. If the user specifies a non-mTLS endpoint override but client certificate is +// available, we will pass along the cert anyway and let the server decide what to do. +// 2. If the user specifies an mTLS endpoint override but client certificate is not +// available, we will not fail-fast, but let backend throw error when connecting. +// +// If running within Google's cloud environment, and client certificate is not specified +// and not available through DCA, we will try mTLS with credentials held by +// the Secure Session Agent, which is part of Google's cloud infrastructure. +// +// We would like to avoid introducing client-side logic that parses whether the +// endpoint override is an mTLS url, since the url pattern may change at anytime. +// +// This package is not intended for use by end developers. Use the +// google.golang.org/api/option package to configure API clients. + +// Package internal supports the options and transport packages. +package internal + +import ( + "context" + "crypto/tls" + "net" + "net/url" + "os" + "strings" + + "github.com/google/s2a-go" + "github.com/google/s2a-go/fallback" + "google.golang.org/api/internal/cert" + "google.golang.org/grpc/credentials" +) + +const ( + mTLSModeAlways = "always" + mTLSModeNever = "never" + mTLSModeAuto = "auto" + + // Experimental: if true, the code will try MTLS with S2A as the default for transport security. Default value is false. + googleAPIUseS2AEnv = "EXPERIMENTAL_GOOGLE_API_USE_S2A" +) + +// getClientCertificateSourceAndEndpoint is a convenience function that invokes +// getClientCertificateSource and getEndpoint sequentially and returns the client +// cert source and endpoint as a tuple. +func getClientCertificateSourceAndEndpoint(settings *DialSettings) (cert.Source, string, error) { + clientCertSource, err := getClientCertificateSource(settings) + if err != nil { + return nil, "", err + } + endpoint, err := getEndpoint(settings, clientCertSource) + if err != nil { + return nil, "", err + } + return clientCertSource, endpoint, nil +} + +type transportConfig struct { + clientCertSource cert.Source // The client certificate source. + endpoint string // The corresponding endpoint to use based on client certificate source. + s2aAddress string // The S2A address if it can be used, otherwise an empty string. + s2aMTLSEndpoint string // The MTLS endpoint to use with S2A. +} + +func getTransportConfig(settings *DialSettings) (*transportConfig, error) { + clientCertSource, endpoint, err := getClientCertificateSourceAndEndpoint(settings) + if err != nil { + return &transportConfig{ + clientCertSource: nil, endpoint: "", s2aAddress: "", s2aMTLSEndpoint: "", + }, err + } + defaultTransportConfig := transportConfig{ + clientCertSource: clientCertSource, + endpoint: endpoint, + s2aAddress: "", + s2aMTLSEndpoint: "", + } + + // Check the env to determine whether to use S2A. + if !isGoogleS2AEnabled() { + return &defaultTransportConfig, nil + } + + // If client cert is found, use that over S2A. + // If MTLS is not enabled for the endpoint, skip S2A. + if clientCertSource != nil || !mtlsEndpointEnabledForS2A() { + return &defaultTransportConfig, nil + } + s2aMTLSEndpoint := settings.DefaultMTLSEndpoint + // If there is endpoint override, honor it. + if settings.Endpoint != "" { + s2aMTLSEndpoint = endpoint + } + s2aAddress := GetS2AAddress() + if s2aAddress == "" { + return &defaultTransportConfig, nil + } + return &transportConfig{ + clientCertSource: clientCertSource, + endpoint: endpoint, + s2aAddress: s2aAddress, + s2aMTLSEndpoint: s2aMTLSEndpoint, + }, nil +} + +func isGoogleS2AEnabled() bool { + return strings.ToLower(os.Getenv(googleAPIUseS2AEnv)) == "true" +} + +// getClientCertificateSource returns a default client certificate source, if +// not provided by the user. +// +// A nil default source can be returned if the source does not exist. Any exceptions +// encountered while initializing the default source will be reported as client +// error (ex. corrupt metadata file). +// +// Important Note: For now, the environment variable GOOGLE_API_USE_CLIENT_CERTIFICATE +// must be set to "true" to allow certificate to be used (including user provided +// certificates). For details, see AIP-4114. +func getClientCertificateSource(settings *DialSettings) (cert.Source, error) { + if !isClientCertificateEnabled() { + return nil, nil + } else if settings.ClientCertSource != nil { + return settings.ClientCertSource, nil + } else { + return cert.DefaultSource() + } +} + +func isClientCertificateEnabled() bool { + useClientCert := os.Getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE") + // TODO(andyrzhao): Update default to return "true" after DCA feature is fully released. + return strings.ToLower(useClientCert) == "true" +} + +// getEndpoint returns the endpoint for the service, taking into account the +// user-provided endpoint override "settings.Endpoint". +// +// If no endpoint override is specified, we will either return the default endpoint or +// the default mTLS endpoint if a client certificate is available. +// +// You can override the default endpoint choice (mtls vs. regular) by setting the +// GOOGLE_API_USE_MTLS_ENDPOINT environment variable. +// +// If the endpoint override is an address (host:port) rather than full base +// URL (ex. https://...), then the user-provided address will be merged into +// the default endpoint. For example, WithEndpoint("myhost:8000") and +// WithDefaultEndpoint("https://foo.com/bar/baz") will return "https://myhost:8080/bar/baz" +func getEndpoint(settings *DialSettings, clientCertSource cert.Source) (string, error) { + if settings.Endpoint == "" { + mtlsMode := getMTLSMode() + if mtlsMode == mTLSModeAlways || (clientCertSource != nil && mtlsMode == mTLSModeAuto) { + return settings.DefaultMTLSEndpoint, nil + } + return settings.DefaultEndpoint, nil + } + if strings.Contains(settings.Endpoint, "://") { + // User passed in a full URL path, use it verbatim. + return settings.Endpoint, nil + } + if settings.DefaultEndpoint == "" { + // If DefaultEndpoint is not configured, use the user provided endpoint verbatim. + // This allows a naked "host[:port]" URL to be used with GRPC Direct Path. + return settings.Endpoint, nil + } + + // Assume user-provided endpoint is host[:port], merge it with the default endpoint. + return mergeEndpoints(settings.DefaultEndpoint, settings.Endpoint) +} + +func getMTLSMode() string { + mode := os.Getenv("GOOGLE_API_USE_MTLS_ENDPOINT") + if mode == "" { + mode = os.Getenv("GOOGLE_API_USE_MTLS") // Deprecated. + } + if mode == "" { + return mTLSModeAuto + } + return strings.ToLower(mode) +} + +func mergeEndpoints(baseURL, newHost string) (string, error) { + u, err := url.Parse(fixScheme(baseURL)) + if err != nil { + return "", err + } + return strings.Replace(baseURL, u.Host, newHost, 1), nil +} + +func fixScheme(baseURL string) string { + if !strings.Contains(baseURL, "://") { + return "https://" + baseURL + } + return baseURL +} + +// GetGRPCTransportConfigAndEndpoint returns an instance of credentials.TransportCredentials, and the +// corresponding endpoint to use for GRPC client. +func GetGRPCTransportConfigAndEndpoint(settings *DialSettings) (credentials.TransportCredentials, string, error) { + config, err := getTransportConfig(settings) + if err != nil { + return nil, "", err + } + + defaultTransportCreds := credentials.NewTLS(&tls.Config{ + GetClientCertificate: config.clientCertSource, + }) + if config.s2aAddress == "" { + return defaultTransportCreds, config.endpoint, nil + } + + var fallbackOpts *s2a.FallbackOptions + // In case of S2A failure, fall back to the endpoint that would've been used without S2A. + if fallbackHandshake, err := fallback.DefaultFallbackClientHandshakeFunc(config.endpoint); err == nil { + fallbackOpts = &s2a.FallbackOptions{ + FallbackClientHandshakeFunc: fallbackHandshake, + } + } + + s2aTransportCreds, err := s2a.NewClientCreds(&s2a.ClientOptions{ + S2AAddress: config.s2aAddress, + FallbackOpts: fallbackOpts, + }) + if err != nil { + // Use default if we cannot initialize S2A client transport credentials. + return defaultTransportCreds, config.endpoint, nil + } + return s2aTransportCreds, config.s2aMTLSEndpoint, nil +} + +// GetHTTPTransportConfigAndEndpoint returns a client certificate source, a function for dialing MTLS with S2A, +// and the endpoint to use for HTTP client. +func GetHTTPTransportConfigAndEndpoint(settings *DialSettings) (cert.Source, func(context.Context, string, string) (net.Conn, error), string, error) { + config, err := getTransportConfig(settings) + if err != nil { + return nil, nil, "", err + } + + if config.s2aAddress == "" { + return config.clientCertSource, nil, config.endpoint, nil + } + + var fallbackOpts *s2a.FallbackOptions + // In case of S2A failure, fall back to the endpoint that would've been used without S2A. + if fallbackURL, err := url.Parse(config.endpoint); err == nil { + if fallbackDialer, fallbackServerAddr, err := fallback.DefaultFallbackDialerAndAddress(fallbackURL.Hostname()); err == nil { + fallbackOpts = &s2a.FallbackOptions{ + FallbackDialer: &s2a.FallbackDialer{ + Dialer: fallbackDialer, + ServerAddr: fallbackServerAddr, + }, + } + } + } + + dialTLSContextFunc := s2a.NewS2ADialTLSContextFunc(&s2a.ClientOptions{ + S2AAddress: config.s2aAddress, + FallbackOpts: fallbackOpts, + }) + return nil, dialTLSContextFunc, config.s2aMTLSEndpoint, nil +} + +// mtlsEndpointEnabledForS2A checks if the endpoint is indeed MTLS-enabled, so that we can use S2A for MTLS connection. +var mtlsEndpointEnabledForS2A = func() bool { + // TODO(xmenxk): determine this via discovery config. + return true +} diff --git a/vendor/google.golang.org/api/transport/cert/default_cert.go b/vendor/google.golang.org/api/internal/cert/default_cert.go similarity index 100% rename from vendor/google.golang.org/api/transport/cert/default_cert.go rename to vendor/google.golang.org/api/internal/cert/default_cert.go diff --git a/vendor/google.golang.org/api/transport/cert/enterprise_cert.go b/vendor/google.golang.org/api/internal/cert/enterprise_cert.go similarity index 100% rename from vendor/google.golang.org/api/transport/cert/enterprise_cert.go rename to vendor/google.golang.org/api/internal/cert/enterprise_cert.go diff --git a/vendor/google.golang.org/api/transport/cert/secureconnect_cert.go b/vendor/google.golang.org/api/internal/cert/secureconnect_cert.go similarity index 98% rename from vendor/google.golang.org/api/transport/cert/secureconnect_cert.go rename to vendor/google.golang.org/api/internal/cert/secureconnect_cert.go index 5913cab801..afd79ffe2b 100644 --- a/vendor/google.golang.org/api/transport/cert/secureconnect_cert.go +++ b/vendor/google.golang.org/api/internal/cert/secureconnect_cert.go @@ -18,7 +18,6 @@ import ( "encoding/json" "errors" "fmt" - "io/ioutil" "os" "os/exec" "os/user" @@ -59,7 +58,7 @@ func NewSecureConnectSource(configFilePath string) (Source, error) { configFilePath = filepath.Join(user.HomeDir, metadataPath, metadataFile) } - file, err := ioutil.ReadFile(configFilePath) + file, err := os.ReadFile(configFilePath) if err != nil { if errors.Is(err, os.ErrNotExist) { // Config file missing means Secure Connect is not supported. diff --git a/vendor/google.golang.org/api/internal/creds.go b/vendor/google.golang.org/api/internal/creds.go index 32d52413b3..92b3acf6ed 100644 --- a/vendor/google.golang.org/api/internal/creds.go +++ b/vendor/google.golang.org/api/internal/creds.go @@ -6,10 +6,14 @@ package internal import ( "context" + "crypto/tls" "encoding/json" "errors" "fmt" - "io/ioutil" + "net" + "net/http" + "os" + "time" "golang.org/x/oauth2" "google.golang.org/api/internal/impersonate" @@ -17,6 +21,8 @@ import ( "golang.org/x/oauth2/google" ) +const quotaProjectEnvVar = "GOOGLE_CLOUD_QUOTA_PROJECT" + // Creds returns credential information obtained from DialSettings, or if none, then // it returns default credential information. func Creds(ctx context.Context, ds *DialSettings) (*google.Credentials, error) { @@ -41,7 +47,7 @@ func baseCreds(ctx context.Context, ds *DialSettings) (*google.Credentials, erro return credentialsFromJSON(ctx, ds.CredentialsJSON, ds) } if ds.CredentialsFile != "" { - data, err := ioutil.ReadFile(ds.CredentialsFile) + data, err := os.ReadFile(ds.CredentialsFile) if err != nil { return nil, fmt.Errorf("cannot read credentials file: %v", err) } @@ -80,8 +86,25 @@ const ( // - Otherwise, executes standard OAuth 2.0 flow // More details: google.aip.dev/auth/4111 func credentialsFromJSON(ctx context.Context, data []byte, ds *DialSettings) (*google.Credentials, error) { + var params google.CredentialsParams + params.Scopes = ds.GetScopes() + + // Determine configurations for the OAuth2 transport, which is separate from the API transport. + // The OAuth2 transport and endpoint will be configured for mTLS if applicable. + clientCertSource, oauth2Endpoint, err := getClientCertificateSourceAndEndpoint(oauth2DialSettings(ds)) + if err != nil { + return nil, err + } + params.TokenURL = oauth2Endpoint + if clientCertSource != nil { + tlsConfig := &tls.Config{ + GetClientCertificate: clientCertSource, + } + ctx = context.WithValue(ctx, oauth2.HTTPClient, customHTTPClient(tlsConfig)) + } + // By default, a standard OAuth 2.0 token source is created - cred, err := google.CredentialsFromJSON(ctx, data, ds.GetScopes()...) + cred, err := google.CredentialsFromJSONWithParams(ctx, data, params) if err != nil { return nil, err } @@ -131,14 +154,22 @@ func selfSignedJWTTokenSource(data []byte, ds *DialSettings) (oauth2.TokenSource } } -// QuotaProjectFromCreds returns the quota project from the JSON blob in the provided credentials. -// -// NOTE(cbro): consider promoting this to a field on google.Credentials. -func QuotaProjectFromCreds(cred *google.Credentials) string { +// GetQuotaProject retrieves quota project with precedence being: client option, +// environment variable, creds file. +func GetQuotaProject(creds *google.Credentials, clientOpt string) string { + if clientOpt != "" { + return clientOpt + } + if env := os.Getenv(quotaProjectEnvVar); env != "" { + return env + } + if creds == nil { + return "" + } var v struct { QuotaProject string `json:"quota_project_id"` } - if err := json.Unmarshal(cred.JSON, &v); err != nil { + if err := json.Unmarshal(creds.JSON, &v); err != nil { return "" } return v.QuotaProject @@ -157,3 +188,35 @@ func impersonateCredentials(ctx context.Context, creds *google.Credentials, ds * ProjectID: creds.ProjectID, }, nil } + +// oauth2DialSettings returns the settings to be used by the OAuth2 transport, which is separate from the API transport. +func oauth2DialSettings(ds *DialSettings) *DialSettings { + var ods DialSettings + ods.DefaultEndpoint = google.Endpoint.TokenURL + ods.DefaultMTLSEndpoint = google.MTLSTokenURL + ods.ClientCertSource = ds.ClientCertSource + return &ods +} + +// customHTTPClient constructs an HTTPClient using the provided tlsConfig, to support mTLS. +func customHTTPClient(tlsConfig *tls.Config) *http.Client { + trans := baseTransport() + trans.TLSClientConfig = tlsConfig + return &http.Client{Transport: trans} +} + +func baseTransport() *http.Transport { + return &http.Transport{ + Proxy: http.ProxyFromEnvironment, + DialContext: (&net.Dialer{ + Timeout: 30 * time.Second, + KeepAlive: 30 * time.Second, + DualStack: true, + }).DialContext, + MaxIdleConns: 100, + MaxIdleConnsPerHost: 100, + IdleConnTimeout: 90 * time.Second, + TLSHandshakeTimeout: 10 * time.Second, + ExpectContinueTimeout: 1 * time.Second, + } +} diff --git a/vendor/google.golang.org/api/internal/gensupport/media.go b/vendor/google.golang.org/api/internal/gensupport/media.go index 8356e7f27b..c048a57084 100644 --- a/vendor/google.golang.org/api/internal/gensupport/media.go +++ b/vendor/google.golang.org/api/internal/gensupport/media.go @@ -8,7 +8,6 @@ import ( "bytes" "fmt" "io" - "io/ioutil" "mime" "mime/multipart" "net/http" @@ -222,8 +221,8 @@ func (mi *MediaInfo) UploadRequest(reqHeaders http.Header, body io.Reader) (newB toCleanup = append(toCleanup, combined) if fb != nil && fm != nil { getBody = func() (io.ReadCloser, error) { - rb := ioutil.NopCloser(fb()) - rm := ioutil.NopCloser(fm()) + rb := io.NopCloser(fb()) + rm := io.NopCloser(fm()) var mimeBoundary string if _, params, err := mime.ParseMediaType(ctype); err == nil { mimeBoundary = params["boundary"] @@ -243,7 +242,7 @@ func (mi *MediaInfo) UploadRequest(reqHeaders http.Header, body io.Reader) (newB fb := readerFunc(body) if fb != nil { getBody = func() (io.ReadCloser, error) { - rb := ioutil.NopCloser(fb()) + rb := io.NopCloser(fb()) toCleanup = append(toCleanup, rb) return rb, nil } diff --git a/vendor/google.golang.org/api/internal/gensupport/resumable.go b/vendor/google.golang.org/api/internal/gensupport/resumable.go index f168ea6d2b..08e7aacefb 100644 --- a/vendor/google.golang.org/api/internal/gensupport/resumable.go +++ b/vendor/google.golang.org/api/internal/gensupport/resumable.go @@ -43,8 +43,8 @@ type ResumableUpload struct { // retries should happen. ChunkRetryDeadline time.Duration - // Track current request invocation ID and attempt count for retry metric - // headers. + // Track current request invocation ID and attempt count for retry metrics + // and idempotency headers. invocationID string attempts int } @@ -81,10 +81,15 @@ func (rx *ResumableUpload) doUploadRequest(ctx context.Context, data io.Reader, req.Header.Set("Content-Type", rx.MediaType) req.Header.Set("User-Agent", rx.UserAgent) + // TODO(b/274504690): Consider dropping gccl-invocation-id key since it + // duplicates the X-Goog-Gcs-Idempotency-Token header (added in v0.115.0). baseXGoogHeader := "gl-go/" + GoVersion() + " gdcl/" + internal.Version invocationHeader := fmt.Sprintf("gccl-invocation-id/%s gccl-attempt-count/%d", rx.invocationID, rx.attempts) req.Header.Set("X-Goog-Api-Client", strings.Join([]string{baseXGoogHeader, invocationHeader}, " ")) + // Set idempotency token header which is used by GCS uploads. + req.Header.Set("X-Goog-Gcs-Idempotency-Token", rx.invocationID) + // Google's upload endpoint uses status code 308 for a // different purpose than the "308 Permanent Redirect" // since-standardized in RFC 7238. Because of the conflict in diff --git a/vendor/google.golang.org/api/internal/gensupport/send.go b/vendor/google.golang.org/api/internal/gensupport/send.go index 85c7bcbfdf..693a1b1aba 100644 --- a/vendor/google.golang.org/api/internal/gensupport/send.go +++ b/vendor/google.golang.org/api/internal/gensupport/send.go @@ -138,9 +138,14 @@ func sendAndRetry(ctx context.Context, client *http.Client, req *http.Request, r } return resp, ctx.Err() } + + // Set retry metrics and idempotency headers for GCS. + // TODO(b/274504690): Consider dropping gccl-invocation-id key since it + // duplicates the X-Goog-Gcs-Idempotency-Token header (added in v0.115.0). invocationHeader := fmt.Sprintf("gccl-invocation-id/%s gccl-attempt-count/%d", invocationID, attempts) xGoogHeader := strings.Join([]string{invocationHeader, baseXGoogHeader}, " ") req.Header.Set("X-Goog-Api-Client", xGoogHeader) + req.Header.Set("X-Goog-Gcs-Idempotency-Token", invocationID) resp, err = client.Do(req.WithContext(ctx)) diff --git a/vendor/google.golang.org/api/internal/impersonate/impersonate.go b/vendor/google.golang.org/api/internal/impersonate/impersonate.go index b465bbcd12..4b2c775f21 100644 --- a/vendor/google.golang.org/api/internal/impersonate/impersonate.go +++ b/vendor/google.golang.org/api/internal/impersonate/impersonate.go @@ -11,7 +11,6 @@ import ( "encoding/json" "fmt" "io" - "io/ioutil" "net/http" "time" @@ -105,7 +104,7 @@ func (i impersonatedTokenSource) Token() (*oauth2.Token, error) { return nil, fmt.Errorf("impersonate: unable to generate access token: %v", err) } defer resp.Body.Close() - body, err := ioutil.ReadAll(io.LimitReader(resp.Body, 1<<20)) + body, err := io.ReadAll(io.LimitReader(resp.Body, 1<<20)) if err != nil { return nil, fmt.Errorf("impersonate: unable to read body: %v", err) } diff --git a/vendor/google.golang.org/api/internal/s2a.go b/vendor/google.golang.org/api/internal/s2a.go new file mode 100644 index 0000000000..c5b421f554 --- /dev/null +++ b/vendor/google.golang.org/api/internal/s2a.go @@ -0,0 +1,136 @@ +// Copyright 2023 Google LLC. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package internal + +import ( + "encoding/json" + "log" + "sync" + "time" + + "cloud.google.com/go/compute/metadata" +) + +const configEndpointSuffix = "googleAutoMtlsConfiguration" + +// The period an MTLS config can be reused before needing refresh. +var configExpiry = time.Hour + +// GetS2AAddress returns the S2A address to be reached via plaintext connection. +func GetS2AAddress() string { + c, err := getMetadataMTLSAutoConfig().Config() + if err != nil { + return "" + } + if !c.Valid() { + return "" + } + return c.S2A.PlaintextAddress +} + +type mtlsConfigSource interface { + Config() (*mtlsConfig, error) +} + +// mdsMTLSAutoConfigSource is an instance of reuseMTLSConfigSource, with metadataMTLSAutoConfig as its config source. +var ( + mdsMTLSAutoConfigSource mtlsConfigSource + once sync.Once +) + +// getMetadataMTLSAutoConfig returns mdsMTLSAutoConfigSource, which is backed by config from MDS with auto-refresh. +func getMetadataMTLSAutoConfig() mtlsConfigSource { + once.Do(func() { + mdsMTLSAutoConfigSource = &reuseMTLSConfigSource{ + src: &metadataMTLSAutoConfig{}, + } + }) + return mdsMTLSAutoConfigSource +} + +// reuseMTLSConfigSource caches a valid version of mtlsConfig, and uses `src` to refresh upon config expiry. +// It implements the mtlsConfigSource interface, so calling Config() on it returns an mtlsConfig. +type reuseMTLSConfigSource struct { + src mtlsConfigSource // src.Config() is called when config is expired + mu sync.Mutex // mutex guards config + config *mtlsConfig // cached config +} + +func (cs *reuseMTLSConfigSource) Config() (*mtlsConfig, error) { + cs.mu.Lock() + defer cs.mu.Unlock() + + if cs.config.Valid() { + return cs.config, nil + } + c, err := cs.src.Config() + if err != nil { + return nil, err + } + cs.config = c + return c, nil +} + +// metadataMTLSAutoConfig is an implementation of the interface mtlsConfigSource +// It has the logic to query MDS and return an mtlsConfig +type metadataMTLSAutoConfig struct{} + +var httpGetMetadataMTLSConfig = func() (string, error) { + return metadata.Get(configEndpointSuffix) +} + +func (cs *metadataMTLSAutoConfig) Config() (*mtlsConfig, error) { + resp, err := httpGetMetadataMTLSConfig() + if err != nil { + log.Printf("querying MTLS config from MDS endpoint failed: %v", err) + return defaultMTLSConfig(), nil + } + var config mtlsConfig + err = json.Unmarshal([]byte(resp), &config) + if err != nil { + log.Printf("unmarshalling MTLS config from MDS endpoint failed: %v", err) + return defaultMTLSConfig(), nil + } + + if config.S2A == nil { + log.Printf("returned MTLS config from MDS endpoint is invalid: %v", config) + return defaultMTLSConfig(), nil + } + + // set new expiry + config.Expiry = time.Now().Add(configExpiry) + return &config, nil +} + +func defaultMTLSConfig() *mtlsConfig { + return &mtlsConfig{ + S2A: &s2aAddresses{ + PlaintextAddress: "", + MTLSAddress: "", + }, + Expiry: time.Now().Add(configExpiry), + } +} + +// s2aAddresses contains the plaintext and/or MTLS S2A addresses. +type s2aAddresses struct { + // PlaintextAddress is the plaintext address to reach S2A + PlaintextAddress string `json:"plaintext_address"` + // MTLSAddress is the MTLS address to reach S2A + MTLSAddress string `json:"mtls_address"` +} + +// mtlsConfig contains the configuration for establishing MTLS connections with Google APIs. +type mtlsConfig struct { + S2A *s2aAddresses `json:"s2a"` + Expiry time.Time +} + +func (c *mtlsConfig) Valid() bool { + return c != nil && c.S2A != nil && !c.expired() +} +func (c *mtlsConfig) expired() bool { + return c.Expiry.Before(time.Now()) +} diff --git a/vendor/google.golang.org/api/internal/settings.go b/vendor/google.golang.org/api/internal/settings.go index 76efdb2277..3a3874df11 100644 --- a/vendor/google.golang.org/api/internal/settings.go +++ b/vendor/google.golang.org/api/internal/settings.go @@ -46,6 +46,7 @@ type DialSettings struct { SkipValidation bool ImpersonationConfig *impersonate.Config EnableDirectPath bool + EnableDirectPathXds bool AllowNonDefaultServiceAccount bool // Google API system parameters. For more information please read: diff --git a/vendor/google.golang.org/api/internal/version.go b/vendor/google.golang.org/api/internal/version.go index f135505662..46ad187ec1 100644 --- a/vendor/google.golang.org/api/internal/version.go +++ b/vendor/google.golang.org/api/internal/version.go @@ -5,4 +5,4 @@ package internal // Version is the current tagged release of the library. -const Version = "0.110.0" +const Version = "0.126.0" diff --git a/vendor/google.golang.org/api/option/internaloption/internaloption.go b/vendor/google.golang.org/api/option/internaloption/internaloption.go index cc7ebfe277..3b8461d1da 100644 --- a/vendor/google.golang.org/api/option/internaloption/internaloption.go +++ b/vendor/google.golang.org/api/option/internaloption/internaloption.go @@ -67,6 +67,21 @@ func (e enableDirectPath) Apply(o *internal.DialSettings) { o.EnableDirectPath = bool(e) } +// EnableDirectPathXds returns a ClientOption that overrides the default +// DirectPath type. It is only valid when DirectPath is enabled. +// +// It should only be used internally by generated clients. +// This is an EXPERIMENTAL API and may be changed or removed in the future. +func EnableDirectPathXds() option.ClientOption { + return enableDirectPathXds(true) +} + +type enableDirectPathXds bool + +func (x enableDirectPathXds) Apply(o *internal.DialSettings) { + o.EnableDirectPathXds = bool(x) +} + // AllowNonDefaultServiceAccount returns a ClientOption that overrides the default // requirement for using the default service account for DirectPath. // diff --git a/vendor/google.golang.org/api/storage/v1/storage-api.json b/vendor/google.golang.org/api/storage/v1/storage-api.json index bc1fca7439..edebc73ad4 100644 --- a/vendor/google.golang.org/api/storage/v1/storage-api.json +++ b/vendor/google.golang.org/api/storage/v1/storage-api.json @@ -26,7 +26,7 @@ "description": "Stores and retrieves potentially large, immutable data objects.", "discoveryVersion": "v1", "documentationLink": "https://developers.google.com/storage/docs/json_api/", - "etag": "\"3134363638303431303535363634343235383633\"", + "etag": "\"34333739363230323936363635393736363430\"", "icons": { "x16": "https://www.google.com/images/icons/product/cloud_storage-16.png", "x32": "https://www.google.com/images/icons/product/cloud_storage-32.png" @@ -2141,6 +2141,11 @@ "location": "query", "type": "boolean" }, + "matchGlob": { + "description": "Filter results to objects and prefixes that match this glob pattern.", + "location": "query", + "type": "string" + }, "maxResults": { "default": "1000", "description": "Maximum number of items plus prefixes to return in a single page of responses. As duplicate prefixes are omitted, fewer total results may be returned than requested. The service will use this parameter or 1,000 items, whichever is smaller.", @@ -3005,7 +3010,7 @@ } } }, - "revision": "20220705", + "revision": "20230301", "rootUrl": "https://storage.googleapis.com/", "schemas": { "Bucket": { diff --git a/vendor/google.golang.org/api/storage/v1/storage-gen.go b/vendor/google.golang.org/api/storage/v1/storage-gen.go index 8527d3fb1a..e11bf2e6d3 100644 --- a/vendor/google.golang.org/api/storage/v1/storage-gen.go +++ b/vendor/google.golang.org/api/storage/v1/storage-gen.go @@ -78,6 +78,7 @@ var _ = errors.New var _ = strings.Replace var _ = context.Canceled var _ = internaloption.WithDefaultEndpoint +var _ = internal.Version const apiId = "storage:v1" const apiName = "storage" @@ -10216,6 +10217,13 @@ func (c *ObjectsListCall) IncludeTrailingDelimiter(includeTrailingDelimiter bool return c } +// MatchGlob sets the optional parameter "matchGlob": Filter results to +// objects and prefixes that match this glob pattern. +func (c *ObjectsListCall) MatchGlob(matchGlob string) *ObjectsListCall { + c.urlParams_.Set("matchGlob", matchGlob) + return c +} + // MaxResults sets the optional parameter "maxResults": Maximum number // of items plus prefixes to return in a single page of responses. As // duplicate prefixes are omitted, fewer total results may be returned @@ -10404,6 +10412,11 @@ func (c *ObjectsListCall) Do(opts ...googleapi.CallOption) (*Objects, error) { // "location": "query", // "type": "boolean" // }, + // "matchGlob": { + // "description": "Filter results to objects and prefixes that match this glob pattern.", + // "location": "query", + // "type": "string" + // }, // "maxResults": { // "default": "1000", // "description": "Maximum number of items plus prefixes to return in a single page of responses. As duplicate prefixes are omitted, fewer total results may be returned than requested. The service will use this parameter or 1,000 items, whichever is smaller.", diff --git a/vendor/google.golang.org/api/transport/grpc/dial.go b/vendor/google.golang.org/api/transport/grpc/dial.go index efcc8e6c64..e1403e08ee 100644 --- a/vendor/google.golang.org/api/transport/grpc/dial.go +++ b/vendor/google.golang.org/api/transport/grpc/dial.go @@ -9,7 +9,6 @@ package grpc import ( "context" - "crypto/tls" "errors" "log" "net" @@ -21,9 +20,7 @@ import ( "golang.org/x/oauth2" "google.golang.org/api/internal" "google.golang.org/api/option" - "google.golang.org/api/transport/internal/dca" "google.golang.org/grpc" - "google.golang.org/grpc/credentials" grpcgoogle "google.golang.org/grpc/credentials/google" grpcinsecure "google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/credentials/oauth" @@ -123,18 +120,13 @@ func dial(ctx context.Context, insecure bool, o *internal.DialSettings) (*grpc.C if o.GRPCConn != nil { return o.GRPCConn, nil } - clientCertSource, endpoint, err := dca.GetClientCertificateSourceAndEndpoint(o) + transportCreds, endpoint, err := internal.GetGRPCTransportConfigAndEndpoint(o) if err != nil { return nil, err } - var transportCreds credentials.TransportCredentials if insecure { transportCreds = grpcinsecure.NewCredentials() - } else { - transportCreds = credentials.NewTLS(&tls.Config{ - GetClientCertificate: clientCertSource, - }) } // Initialize gRPC dial options with transport-level security options. @@ -155,14 +147,10 @@ func dial(ctx context.Context, insecure bool, o *internal.DialSettings) (*grpc.C return nil, err } - if o.QuotaProject == "" { - o.QuotaProject = internal.QuotaProjectFromCreds(creds) - } - grpcOpts = append(grpcOpts, grpc.WithPerRPCCredentials(grpcTokenSource{ TokenSource: oauth.TokenSource{creds.TokenSource}, - quotaProject: o.QuotaProject, + quotaProject: internal.GetQuotaProject(creds, o.QuotaProject), requestReason: o.RequestReason, }), ) @@ -176,7 +164,7 @@ func dial(ctx context.Context, insecure bool, o *internal.DialSettings) (*grpc.C grpcOpts = append(grpcOpts, timeoutDialerOption) } // Check if google-c2p resolver is enabled for DirectPath - if strings.EqualFold(os.Getenv(enableDirectPathXds), "true") { + if isDirectPathXdsUsed(o) { // google-c2p resolver target must not have a port number if addr, _, err := net.SplitHostPort(endpoint); err == nil { endpoint = "google-c2p:///" + addr @@ -263,6 +251,19 @@ func isDirectPathEnabled(endpoint string, o *internal.DialSettings) bool { return true } +func isDirectPathXdsUsed(o *internal.DialSettings) bool { + // Method 1: Enable DirectPath xDS by env; + if strings.EqualFold(os.Getenv(enableDirectPathXds), "true") { + return true + } + // Method 2: Enable DirectPath xDS by option; + if o.EnableDirectPathXds { + return true + } + return false + +} + func isTokenSourceDirectPathCompatible(ts oauth2.TokenSource, o *internal.DialSettings) bool { if ts == nil { return false diff --git a/vendor/google.golang.org/api/transport/http/dial.go b/vendor/google.golang.org/api/transport/http/dial.go index 47568a4061..eca0c3ba79 100644 --- a/vendor/google.golang.org/api/transport/http/dial.go +++ b/vendor/google.golang.org/api/transport/http/dial.go @@ -20,10 +20,9 @@ import ( "golang.org/x/oauth2" "google.golang.org/api/googleapi/transport" "google.golang.org/api/internal" + "google.golang.org/api/internal/cert" "google.golang.org/api/option" - "google.golang.org/api/transport/cert" "google.golang.org/api/transport/http/internal/propagation" - "google.golang.org/api/transport/internal/dca" ) // NewClient returns an HTTP client for use communicating with a Google cloud @@ -34,7 +33,7 @@ func NewClient(ctx context.Context, opts ...option.ClientOption) (*http.Client, if err != nil { return nil, "", err } - clientCertSource, endpoint, err := dca.GetClientCertificateSourceAndEndpoint(settings) + clientCertSource, dialTLSContext, endpoint, err := internal.GetHTTPTransportConfigAndEndpoint(settings) if err != nil { return nil, "", err } @@ -42,7 +41,8 @@ func NewClient(ctx context.Context, opts ...option.ClientOption) (*http.Client, if settings.HTTPClient != nil { return settings.HTTPClient, endpoint, nil } - trans, err := newTransport(ctx, defaultBaseTransport(ctx, clientCertSource), settings) + + trans, err := newTransport(ctx, defaultBaseTransport(ctx, clientCertSource, dialTLSContext), settings) if err != nil { return nil, "", err } @@ -66,7 +66,6 @@ func newTransport(ctx context.Context, base http.RoundTripper, settings *interna paramTransport := ¶meterTransport{ base: base, userAgent: settings.UserAgent, - quotaProject: settings.QuotaProject, requestReason: settings.RequestReason, } var trans http.RoundTripper = paramTransport @@ -75,6 +74,7 @@ func newTransport(ctx context.Context, base http.RoundTripper, settings *interna case settings.NoAuth: // Do nothing. case settings.APIKey != "": + paramTransport.quotaProject = internal.GetQuotaProject(nil, settings.QuotaProject) trans = &transport.APIKey{ Transport: trans, Key: settings.APIKey, @@ -84,10 +84,7 @@ func newTransport(ctx context.Context, base http.RoundTripper, settings *interna if err != nil { return nil, err } - if paramTransport.quotaProject == "" { - paramTransport.quotaProject = internal.QuotaProjectFromCreds(creds) - } - + paramTransport.quotaProject = internal.GetQuotaProject(creds, settings.QuotaProject) ts := creds.TokenSource if settings.ImpersonationConfig == nil && settings.TokenSource != nil { ts = settings.TokenSource @@ -156,7 +153,7 @@ var appengineUrlfetchHook func(context.Context) http.RoundTripper // Otherwise, use a default transport, taking most defaults from // http.DefaultTransport. // If TLSCertificate is available, set TLSClientConfig as well. -func defaultBaseTransport(ctx context.Context, clientCertSource cert.Source) http.RoundTripper { +func defaultBaseTransport(ctx context.Context, clientCertSource cert.Source, dialTLSContext func(context.Context, string, string) (net.Conn, error)) http.RoundTripper { if appengineUrlfetchHook != nil { return appengineUrlfetchHook(ctx) } @@ -175,6 +172,10 @@ func defaultBaseTransport(ctx context.Context, clientCertSource cert.Source) htt GetClientCertificate: clientCertSource, } } + if dialTLSContext != nil { + // If DialTLSContext is set, TLSClientConfig wil be ignored + trans.DialTLSContext = dialTLSContext + } configureHTTP2(trans) diff --git a/vendor/google.golang.org/api/transport/internal/dca/dca.go b/vendor/google.golang.org/api/transport/internal/dca/dca.go deleted file mode 100644 index 78004f0475..0000000000 --- a/vendor/google.golang.org/api/transport/internal/dca/dca.go +++ /dev/null @@ -1,143 +0,0 @@ -// Copyright 2020 Google LLC. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package dca contains utils for implementing Device Certificate -// Authentication according to https://google.aip.dev/auth/4114 -// -// The overall logic for DCA is as follows: -// 1. If both endpoint override and client certificate are specified, use them as is. -// 2. If user does not specify client certificate, we will attempt to use default -// client certificate. -// 3. If user does not specify endpoint override, we will use defaultMtlsEndpoint if -// client certificate is available and defaultEndpoint otherwise. -// -// Implications of the above logic: -// 1. If the user specifies a non-mTLS endpoint override but client certificate is -// available, we will pass along the cert anyway and let the server decide what to do. -// 2. If the user specifies an mTLS endpoint override but client certificate is not -// available, we will not fail-fast, but let backend throw error when connecting. -// -// We would like to avoid introducing client-side logic that parses whether the -// endpoint override is an mTLS url, since the url pattern may change at anytime. -// -// This package is not intended for use by end developers. Use the -// google.golang.org/api/option package to configure API clients. -package dca - -import ( - "net/url" - "os" - "strings" - - "google.golang.org/api/internal" - "google.golang.org/api/transport/cert" -) - -const ( - mTLSModeAlways = "always" - mTLSModeNever = "never" - mTLSModeAuto = "auto" -) - -// GetClientCertificateSourceAndEndpoint is a convenience function that invokes -// getClientCertificateSource and getEndpoint sequentially and returns the client -// cert source and endpoint as a tuple. -func GetClientCertificateSourceAndEndpoint(settings *internal.DialSettings) (cert.Source, string, error) { - clientCertSource, err := getClientCertificateSource(settings) - if err != nil { - return nil, "", err - } - endpoint, err := getEndpoint(settings, clientCertSource) - if err != nil { - return nil, "", err - } - return clientCertSource, endpoint, nil -} - -// getClientCertificateSource returns a default client certificate source, if -// not provided by the user. -// -// A nil default source can be returned if the source does not exist. Any exceptions -// encountered while initializing the default source will be reported as client -// error (ex. corrupt metadata file). -// -// Important Note: For now, the environment variable GOOGLE_API_USE_CLIENT_CERTIFICATE -// must be set to "true" to allow certificate to be used (including user provided -// certificates). For details, see AIP-4114. -func getClientCertificateSource(settings *internal.DialSettings) (cert.Source, error) { - if !isClientCertificateEnabled() { - return nil, nil - } else if settings.ClientCertSource != nil { - return settings.ClientCertSource, nil - } else { - return cert.DefaultSource() - } -} - -func isClientCertificateEnabled() bool { - useClientCert := os.Getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE") - // TODO(andyrzhao): Update default to return "true" after DCA feature is fully released. - return strings.ToLower(useClientCert) == "true" -} - -// getEndpoint returns the endpoint for the service, taking into account the -// user-provided endpoint override "settings.Endpoint". -// -// If no endpoint override is specified, we will either return the default endpoint or -// the default mTLS endpoint if a client certificate is available. -// -// You can override the default endpoint choice (mtls vs. regular) by setting the -// GOOGLE_API_USE_MTLS_ENDPOINT environment variable. -// -// If the endpoint override is an address (host:port) rather than full base -// URL (ex. https://...), then the user-provided address will be merged into -// the default endpoint. For example, WithEndpoint("myhost:8000") and -// WithDefaultEndpoint("https://foo.com/bar/baz") will return "https://myhost:8080/bar/baz" -func getEndpoint(settings *internal.DialSettings, clientCertSource cert.Source) (string, error) { - if settings.Endpoint == "" { - mtlsMode := getMTLSMode() - if mtlsMode == mTLSModeAlways || (clientCertSource != nil && mtlsMode == mTLSModeAuto) { - return settings.DefaultMTLSEndpoint, nil - } - return settings.DefaultEndpoint, nil - } - if strings.Contains(settings.Endpoint, "://") { - // User passed in a full URL path, use it verbatim. - return settings.Endpoint, nil - } - if settings.DefaultEndpoint == "" { - // If DefaultEndpoint is not configured, use the user provided endpoint verbatim. - // This allows a naked "host[:port]" URL to be used with GRPC Direct Path. - return settings.Endpoint, nil - } - - // Assume user-provided endpoint is host[:port], merge it with the default endpoint. - return mergeEndpoints(settings.DefaultEndpoint, settings.Endpoint) -} - -func getMTLSMode() string { - mode := os.Getenv("GOOGLE_API_USE_MTLS_ENDPOINT") - if mode == "" { - mode = os.Getenv("GOOGLE_API_USE_MTLS") // Deprecated. - } - if mode == "" { - return mTLSModeAuto - } - return strings.ToLower(mode) -} - -func mergeEndpoints(baseURL, newHost string) (string, error) { - u, err := url.Parse(fixScheme(baseURL)) - if err != nil { - return "", err - } - return strings.Replace(baseURL, u.Host, newHost, 1), nil -} - -func fixScheme(baseURL string) string { - if !strings.Contains(baseURL, "://") { - return "https://" + baseURL - } - return baseURL -} diff --git a/vendor/google.golang.org/genproto/googleapis/api/LICENSE b/vendor/google.golang.org/genproto/googleapis/api/LICENSE new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/api/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/vendor/google.golang.org/genproto/googleapis/api/annotations/client.pb.go b/vendor/google.golang.org/genproto/googleapis/api/annotations/client.pb.go index 4c91534d5a..83774fbcbe 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/annotations/client.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/annotations/client.pb.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2023 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.21.9 +// protoc v3.21.12 // source: google/api/client.proto package annotations @@ -53,6 +53,12 @@ const ( ClientLibraryOrganization_PHOTOS ClientLibraryOrganization = 3 // Street View Org. ClientLibraryOrganization_STREET_VIEW ClientLibraryOrganization = 4 + // Shopping Org. + ClientLibraryOrganization_SHOPPING ClientLibraryOrganization = 5 + // Geo Org. + ClientLibraryOrganization_GEO ClientLibraryOrganization = 6 + // Generative AI - https://developers.generativeai.google + ClientLibraryOrganization_GENERATIVE_AI ClientLibraryOrganization = 7 ) // Enum value maps for ClientLibraryOrganization. @@ -63,13 +69,19 @@ var ( 2: "ADS", 3: "PHOTOS", 4: "STREET_VIEW", + 5: "SHOPPING", + 6: "GEO", + 7: "GENERATIVE_AI", } ClientLibraryOrganization_value = map[string]int32{ "CLIENT_LIBRARY_ORGANIZATION_UNSPECIFIED": 0, - "CLOUD": 1, - "ADS": 2, - "PHOTOS": 3, - "STREET_VIEW": 4, + "CLOUD": 1, + "ADS": 2, + "PHOTOS": 3, + "STREET_VIEW": 4, + "SHOPPING": 5, + "GEO": 6, + "GENERATIVE_AI": 7, } ) @@ -223,7 +235,9 @@ type ClientLibrarySettings struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Version of the API to apply these settings to. + // Version of the API to apply these settings to. This is the full protobuf + // package for the API, ending in the version element. + // Examples: "google.cloud.speech.v1" and "google.spanner.admin.database.v1". Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` // Launch stage of this version of the API. LaunchStage api.LaunchStage `protobuf:"varint,2,opt,name=launch_stage,json=launchStage,proto3,enum=google.api.LaunchStage" json:"launch_stage,omitempty"` @@ -368,7 +382,7 @@ type Publishing struct { // A list of API method settings, e.g. the behavior for methods that use the // long-running operation pattern. MethodSettings []*MethodSettings `protobuf:"bytes,2,rep,name=method_settings,json=methodSettings,proto3" json:"method_settings,omitempty"` - // Link to a place that API users can report issues. Example: + // Link to a *public* URI where users can report issues. Example: // https://issuetracker.google.com/issues/new?component=190865&template=1161103 NewIssueUri string `protobuf:"bytes,101,opt,name=new_issue_uri,json=newIssueUri,proto3" json:"new_issue_uri,omitempty"` // Link to product home page. Example: @@ -392,6 +406,9 @@ type Publishing struct { // times in this list, then the last one wins. Settings from earlier // settings with the same version string are discarded. LibrarySettings []*ClientLibrarySettings `protobuf:"bytes,109,rep,name=library_settings,json=librarySettings,proto3" json:"library_settings,omitempty"` + // Optional link to proto reference documentation. Example: + // https://cloud.google.com/pubsub/lite/docs/reference/rpc + ProtoReferenceDocumentationUri string `protobuf:"bytes,110,opt,name=proto_reference_documentation_uri,json=protoReferenceDocumentationUri,proto3" json:"proto_reference_documentation_uri,omitempty"` } func (x *Publishing) Reset() { @@ -489,6 +506,13 @@ func (x *Publishing) GetLibrarySettings() []*ClientLibrarySettings { return nil } +func (x *Publishing) GetProtoReferenceDocumentationUri() string { + if x != nil { + return x.ProtoReferenceDocumentationUri + } + return "" +} + // Settings for Java client libraries. type JavaSettings struct { state protoimpl.MessageState @@ -783,6 +807,31 @@ type DotnetSettings struct { // Some settings. Common *CommonLanguageSettings `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + // Map from original service names to renamed versions. + // This is used when the default generated types + // would cause a naming conflict. (Neither name is + // fully-qualified.) + // Example: Subscriber to SubscriberServiceApi. + RenamedServices map[string]string `protobuf:"bytes,2,rep,name=renamed_services,json=renamedServices,proto3" json:"renamed_services,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Map from full resource types to the effective short name + // for the resource. This is used when otherwise resource + // named from different services would cause naming collisions. + // Example entry: + // "datalabeling.googleapis.com/Dataset": "DataLabelingDataset" + RenamedResources map[string]string `protobuf:"bytes,3,rep,name=renamed_resources,json=renamedResources,proto3" json:"renamed_resources,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // List of full resource types to ignore during generation. + // This is typically used for API-specific Location resources, + // which should be handled by the generator as if they were actually + // the common Location resources. + // Example entry: "documentai.googleapis.com/Location" + IgnoredResources []string `protobuf:"bytes,4,rep,name=ignored_resources,json=ignoredResources,proto3" json:"ignored_resources,omitempty"` + // Namespaces which must be aliased in snippets due to + // a known (but non-generator-predictable) naming collision + ForcedNamespaceAliases []string `protobuf:"bytes,5,rep,name=forced_namespace_aliases,json=forcedNamespaceAliases,proto3" json:"forced_namespace_aliases,omitempty"` + // Method signatures (in the form "service.method(signature)") + // which are provided separately, so shouldn't be generated. + // Snippets *calling* these methods are still generated, however. + HandwrittenSignatures []string `protobuf:"bytes,6,rep,name=handwritten_signatures,json=handwrittenSignatures,proto3" json:"handwritten_signatures,omitempty"` } func (x *DotnetSettings) Reset() { @@ -824,6 +873,41 @@ func (x *DotnetSettings) GetCommon() *CommonLanguageSettings { return nil } +func (x *DotnetSettings) GetRenamedServices() map[string]string { + if x != nil { + return x.RenamedServices + } + return nil +} + +func (x *DotnetSettings) GetRenamedResources() map[string]string { + if x != nil { + return x.RenamedResources + } + return nil +} + +func (x *DotnetSettings) GetIgnoredResources() []string { + if x != nil { + return x.IgnoredResources + } + return nil +} + +func (x *DotnetSettings) GetForcedNamespaceAliases() []string { + if x != nil { + return x.ForcedNamespaceAliases + } + return nil +} + +func (x *DotnetSettings) GetHandwrittenSignatures() []string { + if x != nil { + return x.HandwrittenSignatures + } + return nil +} + // Settings for Ruby client libraries. type RubySettings struct { state protoimpl.MessageState @@ -938,8 +1022,8 @@ type MethodSettings struct { // Example of a YAML configuration:: // // publishing: - // method_behavior: - // - selector: CreateAdDomain + // method_settings: + // - selector: google.cloud.speech.v2.Speech.BatchRecognize // long_running: // initial_poll_delay: // seconds: 60 # 1 minute @@ -1025,7 +1109,7 @@ type MethodSettings_LongRunning struct { func (x *MethodSettings_LongRunning) Reset() { *x = MethodSettings_LongRunning{} if protoimpl.UnsafeEnabled { - mi := &file_google_api_client_proto_msgTypes[13] + mi := &file_google_api_client_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1038,7 +1122,7 @@ func (x *MethodSettings_LongRunning) String() string { func (*MethodSettings_LongRunning) ProtoMessage() {} func (x *MethodSettings_LongRunning) ProtoReflect() protoreflect.Message { - mi := &file_google_api_client_proto_msgTypes[13] + mi := &file_google_api_client_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1252,7 +1336,7 @@ var file_google_api_client_proto_rawDesc = []byte{ 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x6f, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0a, 0x67, 0x6f, 0x53, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x22, 0xe0, 0x03, 0x0a, 0x0a, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x69, + 0x6e, 0x67, 0x73, 0x22, 0xab, 0x04, 0x0a, 0x0a, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x43, 0x0a, 0x0f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53, @@ -1282,118 +1366,155 @@ var file_google_api_client_proto_rawDesc = []byte{ 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0f, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x53, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x9a, 0x02, 0x0a, 0x0c, 0x4a, 0x61, 0x76, 0x61, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x6c, 0x69, 0x62, 0x72, 0x61, - 0x72, 0x79, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0e, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, - 0x12, 0x5f, 0x0a, 0x13, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, - 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4a, 0x61, 0x76, 0x61, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, - 0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, - 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x1a, 0x44, 0x0a, - 0x16, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x22, 0x49, 0x0a, 0x0b, 0x43, 0x70, 0x70, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x49, - 0x0a, 0x0b, 0x50, 0x68, 0x70, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x49, 0x0a, 0x21, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x5f, + 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, + 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x6e, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x1e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, + 0x69, 0x22, 0x9a, 0x02, 0x0a, 0x0c, 0x4a, 0x61, 0x76, 0x61, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x5f, 0x70, 0x61, + 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6c, 0x69, 0x62, + 0x72, 0x61, 0x72, 0x79, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x5f, 0x0a, 0x13, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4a, 0x61, 0x76, 0x61, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x4e, + 0x61, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x06, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x1a, 0x44, 0x0a, 0x16, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x49, + 0x0a, 0x0b, 0x43, 0x70, 0x70, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x4c, 0x0a, 0x0e, 0x50, 0x79, 0x74, - 0x68, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, - 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, - 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x4a, 0x0a, 0x0c, 0x4e, 0x6f, 0x64, 0x65, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e, 0x67, 0x75, - 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x22, 0x4c, 0x0a, 0x0e, 0x44, 0x6f, 0x74, 0x6e, 0x65, 0x74, 0x53, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, - 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x22, 0x4a, 0x0a, 0x0c, 0x52, 0x75, 0x62, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x49, 0x0a, 0x0b, 0x50, 0x68, 0x70, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e, 0x67, + 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x4c, 0x0a, 0x0e, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x53, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, + 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x22, 0x4a, 0x0a, 0x0c, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0xae, + 0x04, 0x0a, 0x0e, 0x44, 0x6f, 0x74, 0x6e, 0x65, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x48, 0x0a, - 0x0a, 0x47, 0x6f, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, - 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, - 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x8e, 0x03, 0x0a, 0x0e, 0x4d, 0x65, 0x74, 0x68, - 0x6f, 0x64, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x49, 0x0a, 0x0c, 0x6c, 0x6f, 0x6e, 0x67, 0x5f, 0x72, - 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, - 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x4c, 0x6f, 0x6e, 0x67, 0x52, 0x75, 0x6e, - 0x6e, 0x69, 0x6e, 0x67, 0x52, 0x0b, 0x6c, 0x6f, 0x6e, 0x67, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, - 0x67, 0x1a, 0x94, 0x02, 0x0a, 0x0b, 0x4c, 0x6f, 0x6e, 0x67, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, - 0x67, 0x12, 0x47, 0x0a, 0x12, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x6c, - 0x6c, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, - 0x6c, 0x50, 0x6f, 0x6c, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x6f, - 0x6c, 0x6c, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, - 0x69, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x70, 0x6f, 0x6c, 0x6c, 0x44, - 0x65, 0x6c, 0x61, 0x79, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x12, 0x3f, - 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x50, 0x6f, 0x6c, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, - 0x47, 0x0a, 0x12, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x5a, 0x0a, + 0x10, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x6f, 0x74, 0x6e, 0x65, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, + 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x5d, 0x0a, 0x11, 0x72, 0x65, 0x6e, + 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x44, 0x6f, 0x74, 0x6e, 0x65, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x69, 0x67, 0x6e, 0x6f, + 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x10, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x64, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, + 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x16, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x64, 0x4e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x12, + 0x35, 0x0a, 0x16, 0x68, 0x61, 0x6e, 0x64, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x5f, 0x73, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x15, 0x68, 0x61, 0x6e, 0x64, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x53, 0x69, 0x67, 0x6e, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x1a, 0x42, 0x0a, 0x14, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, + 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x43, 0x0a, 0x15, 0x52, 0x65, + 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0x4a, 0x0a, 0x0c, 0x52, 0x75, 0x62, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, + 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x48, 0x0a, 0x0a, 0x47, + 0x6f, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e, + 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x8e, 0x03, 0x0a, 0x0e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x12, 0x49, 0x0a, 0x0c, 0x6c, 0x6f, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6e, + 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x4c, 0x6f, 0x6e, 0x67, 0x52, 0x75, 0x6e, 0x6e, 0x69, + 0x6e, 0x67, 0x52, 0x0b, 0x6c, 0x6f, 0x6e, 0x67, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x1a, + 0x94, 0x02, 0x0a, 0x0b, 0x4c, 0x6f, 0x6e, 0x67, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x12, + 0x47, 0x0a, 0x12, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, + 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x6f, 0x6c, - 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x2a, 0x79, 0x0a, 0x19, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x27, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, - 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x4f, 0x52, 0x47, 0x41, 0x4e, 0x49, 0x5a, 0x41, - 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x4c, 0x4f, 0x55, 0x44, 0x10, 0x01, 0x12, 0x07, 0x0a, - 0x03, 0x41, 0x44, 0x53, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x48, 0x4f, 0x54, 0x4f, 0x53, - 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x54, 0x52, 0x45, 0x45, 0x54, 0x5f, 0x56, 0x49, 0x45, - 0x57, 0x10, 0x04, 0x2a, 0x67, 0x0a, 0x18, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x62, - 0x72, 0x61, 0x72, 0x79, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x2a, 0x0a, 0x26, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, - 0x59, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x49, 0x4e, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x47, - 0x49, 0x54, 0x48, 0x55, 0x42, 0x10, 0x0a, 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x41, 0x43, 0x4b, 0x41, - 0x47, 0x45, 0x5f, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, 0x52, 0x10, 0x14, 0x3a, 0x4a, 0x0a, 0x10, - 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x12, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x9b, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x3a, 0x43, 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x99, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x3a, 0x43, 0x0a, - 0x0c, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x1f, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x9a, - 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x53, 0x63, 0x6f, 0x70, - 0x65, 0x73, 0x42, 0x69, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x61, 0x70, 0x69, 0x42, 0x0b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x50, 0x01, 0x5a, 0x41, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, - 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xa2, 0x02, 0x04, 0x47, 0x41, 0x50, 0x49, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x50, + 0x6f, 0x6c, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x6f, 0x6c, 0x6c, + 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x70, 0x6f, 0x6c, 0x6c, 0x44, 0x65, 0x6c, + 0x61, 0x79, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x12, 0x3f, 0x0a, 0x0e, + 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x0c, 0x6d, 0x61, 0x78, 0x50, 0x6f, 0x6c, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x47, 0x0a, + 0x12, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x6f, 0x6c, 0x6c, 0x54, + 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x2a, 0xa3, 0x01, 0x0a, 0x19, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x27, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x4c, + 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x4f, 0x52, 0x47, 0x41, 0x4e, 0x49, 0x5a, 0x41, 0x54, + 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x4c, 0x4f, 0x55, 0x44, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, + 0x41, 0x44, 0x53, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x48, 0x4f, 0x54, 0x4f, 0x53, 0x10, + 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x54, 0x52, 0x45, 0x45, 0x54, 0x5f, 0x56, 0x49, 0x45, 0x57, + 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x48, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x05, + 0x12, 0x07, 0x0a, 0x03, 0x47, 0x45, 0x4f, 0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x47, 0x45, 0x4e, + 0x45, 0x52, 0x41, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x41, 0x49, 0x10, 0x07, 0x2a, 0x67, 0x0a, 0x18, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x44, 0x65, 0x73, + 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x26, 0x43, 0x4c, 0x49, 0x45, + 0x4e, 0x54, 0x5f, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x49, + 0x4e, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, + 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x47, 0x49, 0x54, 0x48, 0x55, 0x42, 0x10, 0x0a, + 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x41, 0x43, 0x4b, 0x41, 0x47, 0x45, 0x5f, 0x4d, 0x41, 0x4e, 0x41, + 0x47, 0x45, 0x52, 0x10, 0x14, 0x3a, 0x4a, 0x0a, 0x10, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, + 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, + 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x9b, 0x08, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x0f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x3a, 0x43, 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x68, 0x6f, 0x73, + 0x74, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x99, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x3a, 0x43, 0x0a, 0x0c, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x5f, + 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x9a, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x6f, 0x61, 0x75, 0x74, 0x68, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x42, 0x69, 0x0a, 0x0e, 0x63, + 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x0b, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x41, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, + 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, + 0x70, 0x69, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x3b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xa2, + 0x02, 0x04, 0x47, 0x41, 0x50, 0x49, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1409,7 +1530,7 @@ func file_google_api_client_proto_rawDescGZIP() []byte { } var file_google_api_client_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_google_api_client_proto_msgTypes = make([]protoimpl.MessageInfo, 14) +var file_google_api_client_proto_msgTypes = make([]protoimpl.MessageInfo, 16) var file_google_api_client_proto_goTypes = []interface{}{ (ClientLibraryOrganization)(0), // 0: google.api.ClientLibraryOrganization (ClientLibraryDestination)(0), // 1: google.api.ClientLibraryDestination @@ -1426,15 +1547,17 @@ var file_google_api_client_proto_goTypes = []interface{}{ (*GoSettings)(nil), // 12: google.api.GoSettings (*MethodSettings)(nil), // 13: google.api.MethodSettings nil, // 14: google.api.JavaSettings.ServiceClassNamesEntry - (*MethodSettings_LongRunning)(nil), // 15: google.api.MethodSettings.LongRunning - (api.LaunchStage)(0), // 16: google.api.LaunchStage - (*durationpb.Duration)(nil), // 17: google.protobuf.Duration - (*descriptorpb.MethodOptions)(nil), // 18: google.protobuf.MethodOptions - (*descriptorpb.ServiceOptions)(nil), // 19: google.protobuf.ServiceOptions + nil, // 15: google.api.DotnetSettings.RenamedServicesEntry + nil, // 16: google.api.DotnetSettings.RenamedResourcesEntry + (*MethodSettings_LongRunning)(nil), // 17: google.api.MethodSettings.LongRunning + (api.LaunchStage)(0), // 18: google.api.LaunchStage + (*durationpb.Duration)(nil), // 19: google.protobuf.Duration + (*descriptorpb.MethodOptions)(nil), // 20: google.protobuf.MethodOptions + (*descriptorpb.ServiceOptions)(nil), // 21: google.protobuf.ServiceOptions } var file_google_api_client_proto_depIdxs = []int32{ 1, // 0: google.api.CommonLanguageSettings.destinations:type_name -> google.api.ClientLibraryDestination - 16, // 1: google.api.ClientLibrarySettings.launch_stage:type_name -> google.api.LaunchStage + 18, // 1: google.api.ClientLibrarySettings.launch_stage:type_name -> google.api.LaunchStage 5, // 2: google.api.ClientLibrarySettings.java_settings:type_name -> google.api.JavaSettings 6, // 3: google.api.ClientLibrarySettings.cpp_settings:type_name -> google.api.CppSettings 7, // 4: google.api.ClientLibrarySettings.php_settings:type_name -> google.api.PhpSettings @@ -1453,20 +1576,22 @@ var file_google_api_client_proto_depIdxs = []int32{ 2, // 17: google.api.PythonSettings.common:type_name -> google.api.CommonLanguageSettings 2, // 18: google.api.NodeSettings.common:type_name -> google.api.CommonLanguageSettings 2, // 19: google.api.DotnetSettings.common:type_name -> google.api.CommonLanguageSettings - 2, // 20: google.api.RubySettings.common:type_name -> google.api.CommonLanguageSettings - 2, // 21: google.api.GoSettings.common:type_name -> google.api.CommonLanguageSettings - 15, // 22: google.api.MethodSettings.long_running:type_name -> google.api.MethodSettings.LongRunning - 17, // 23: google.api.MethodSettings.LongRunning.initial_poll_delay:type_name -> google.protobuf.Duration - 17, // 24: google.api.MethodSettings.LongRunning.max_poll_delay:type_name -> google.protobuf.Duration - 17, // 25: google.api.MethodSettings.LongRunning.total_poll_timeout:type_name -> google.protobuf.Duration - 18, // 26: google.api.method_signature:extendee -> google.protobuf.MethodOptions - 19, // 27: google.api.default_host:extendee -> google.protobuf.ServiceOptions - 19, // 28: google.api.oauth_scopes:extendee -> google.protobuf.ServiceOptions - 29, // [29:29] is the sub-list for method output_type - 29, // [29:29] is the sub-list for method input_type - 29, // [29:29] is the sub-list for extension type_name - 26, // [26:29] is the sub-list for extension extendee - 0, // [0:26] is the sub-list for field type_name + 15, // 20: google.api.DotnetSettings.renamed_services:type_name -> google.api.DotnetSettings.RenamedServicesEntry + 16, // 21: google.api.DotnetSettings.renamed_resources:type_name -> google.api.DotnetSettings.RenamedResourcesEntry + 2, // 22: google.api.RubySettings.common:type_name -> google.api.CommonLanguageSettings + 2, // 23: google.api.GoSettings.common:type_name -> google.api.CommonLanguageSettings + 17, // 24: google.api.MethodSettings.long_running:type_name -> google.api.MethodSettings.LongRunning + 19, // 25: google.api.MethodSettings.LongRunning.initial_poll_delay:type_name -> google.protobuf.Duration + 19, // 26: google.api.MethodSettings.LongRunning.max_poll_delay:type_name -> google.protobuf.Duration + 19, // 27: google.api.MethodSettings.LongRunning.total_poll_timeout:type_name -> google.protobuf.Duration + 20, // 28: google.api.method_signature:extendee -> google.protobuf.MethodOptions + 21, // 29: google.api.default_host:extendee -> google.protobuf.ServiceOptions + 21, // 30: google.api.oauth_scopes:extendee -> google.protobuf.ServiceOptions + 31, // [31:31] is the sub-list for method output_type + 31, // [31:31] is the sub-list for method input_type + 31, // [31:31] is the sub-list for extension type_name + 28, // [28:31] is the sub-list for extension extendee + 0, // [0:28] is the sub-list for field type_name } func init() { file_google_api_client_proto_init() } @@ -1619,7 +1744,7 @@ func file_google_api_client_proto_init() { return nil } } - file_google_api_client_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_google_api_client_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MethodSettings_LongRunning); i { case 0: return &v.state @@ -1638,7 +1763,7 @@ func file_google_api_client_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_google_api_client_proto_rawDesc, NumEnums: 2, - NumMessages: 14, + NumMessages: 16, NumExtensions: 3, NumServices: 0, }, diff --git a/vendor/google.golang.org/genproto/googleapis/api/annotations/field_behavior.pb.go b/vendor/google.golang.org/genproto/googleapis/api/annotations/field_behavior.pb.go index 164e0df0bf..dbe2e2d0c6 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/annotations/field_behavior.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/annotations/field_behavior.pb.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2023 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -14,8 +14,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.27.1 -// protoc v3.12.2 +// protoc-gen-go v1.26.0 +// protoc v3.21.9 // source: google/api/field_behavior.proto package annotations @@ -149,13 +149,13 @@ var ( // // Examples: // - // string name = 1 [(google.api.field_behavior) = REQUIRED]; - // State state = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; - // google.protobuf.Duration ttl = 1 - // [(google.api.field_behavior) = INPUT_ONLY]; - // google.protobuf.Timestamp expire_time = 1 - // [(google.api.field_behavior) = OUTPUT_ONLY, - // (google.api.field_behavior) = IMMUTABLE]; + // string name = 1 [(google.api.field_behavior) = REQUIRED]; + // State state = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; + // google.protobuf.Duration ttl = 1 + // [(google.api.field_behavior) = INPUT_ONLY]; + // google.protobuf.Timestamp expire_time = 1 + // [(google.api.field_behavior) = OUTPUT_ONLY, + // (google.api.field_behavior) = IMMUTABLE]; // // repeated google.api.FieldBehavior field_behavior = 1052; E_FieldBehavior = &file_google_api_field_behavior_proto_extTypes[0] diff --git a/vendor/google.golang.org/genproto/googleapis/api/annotations/http.pb.go b/vendor/google.golang.org/genproto/googleapis/api/annotations/http.pb.go index 6f11b7c500..8a0e1c345b 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/annotations/http.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/annotations/http.pb.go @@ -1,4 +1,4 @@ -// Copyright 2015 Google LLC +// Copyright 2023 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.12.2 +// protoc v3.21.9 // source: google/api/http.proto package annotations @@ -270,15 +270,18 @@ func (x *Http) GetFullyDecodeReservedExpansion() bool { // 1. Leaf request fields (recursive expansion nested messages in the request // message) are classified into three categories: // - Fields referred by the path template. They are passed via the URL path. -// - Fields referred by the [HttpRule.body][google.api.HttpRule.body]. They are passed via the HTTP +// - Fields referred by the [HttpRule.body][google.api.HttpRule.body]. They +// are passed via the HTTP // request body. // - All other fields are passed via the URL query parameters, and the // parameter name is the field path in the request message. A repeated // field can be represented as multiple query parameters under the same // name. -// 2. If [HttpRule.body][google.api.HttpRule.body] is "*", there is no URL query parameter, all fields +// 2. If [HttpRule.body][google.api.HttpRule.body] is "*", there is no URL +// query parameter, all fields // are passed via URL path and HTTP request body. -// 3. If [HttpRule.body][google.api.HttpRule.body] is omitted, there is no HTTP request body, all +// 3. If [HttpRule.body][google.api.HttpRule.body] is omitted, there is no HTTP +// request body, all // fields are passed via URL path and URL query parameters. // // ### Path template syntax @@ -377,13 +380,15 @@ type HttpRule struct { // Selects a method to which this rule applies. // - // Refer to [selector][google.api.DocumentationRule.selector] for syntax details. + // Refer to [selector][google.api.DocumentationRule.selector] for syntax + // details. Selector string `protobuf:"bytes,1,opt,name=selector,proto3" json:"selector,omitempty"` // Determines the URL pattern is matched by this rules. This pattern can be // used with any of the {get|put|post|delete|patch} methods. A custom method // can be defined using the 'custom' field. // // Types that are assignable to Pattern: + // // *HttpRule_Get // *HttpRule_Put // *HttpRule_Post diff --git a/vendor/google.golang.org/genproto/googleapis/api/annotations/resource.pb.go b/vendor/google.golang.org/genproto/googleapis/api/annotations/resource.pb.go index 13ea54b294..bbcc12d29c 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/annotations/resource.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/annotations/resource.pb.go @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2023 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.12.2 +// protoc v3.21.9 // source: google/api/resource.proto package annotations @@ -218,14 +218,14 @@ type ResourceDescriptor struct { // The path pattern must follow the syntax, which aligns with HTTP binding // syntax: // - // Template = Segment { "/" Segment } ; - // Segment = LITERAL | Variable ; - // Variable = "{" LITERAL "}" ; + // Template = Segment { "/" Segment } ; + // Segment = LITERAL | Variable ; + // Variable = "{" LITERAL "}" ; // // Examples: // - // - "projects/{project}/topics/{topic}" - // - "projects/{project}/knowledgeBases/{knowledge_base}" + // - "projects/{project}/topics/{topic}" + // - "projects/{project}/knowledgeBases/{knowledge_base}" // // The components in braces correspond to the IDs for each resource in the // hierarchy. It is expected that, if multiple patterns are provided, @@ -239,17 +239,17 @@ type ResourceDescriptor struct { // // Example: // - // // The InspectTemplate message originally only supported resource - // // names with organization, and project was added later. - // message InspectTemplate { - // option (google.api.resource) = { - // type: "dlp.googleapis.com/InspectTemplate" - // pattern: - // "organizations/{organization}/inspectTemplates/{inspect_template}" - // pattern: "projects/{project}/inspectTemplates/{inspect_template}" - // history: ORIGINALLY_SINGLE_PATTERN - // }; - // } + // // The InspectTemplate message originally only supported resource + // // names with organization, and project was added later. + // message InspectTemplate { + // option (google.api.resource) = { + // type: "dlp.googleapis.com/InspectTemplate" + // pattern: + // "organizations/{organization}/inspectTemplates/{inspect_template}" + // pattern: "projects/{project}/inspectTemplates/{inspect_template}" + // history: ORIGINALLY_SINGLE_PATTERN + // }; + // } History ResourceDescriptor_History `protobuf:"varint,4,opt,name=history,proto3,enum=google.api.ResourceDescriptor_History" json:"history,omitempty"` // The plural name used in the resource name and permission names, such as // 'projects' for the resource name of 'projects/{project}' and the permission @@ -362,22 +362,22 @@ type ResourceReference struct { // // Example: // - // message Subscription { - // string topic = 2 [(google.api.resource_reference) = { - // type: "pubsub.googleapis.com/Topic" - // }]; - // } + // message Subscription { + // string topic = 2 [(google.api.resource_reference) = { + // type: "pubsub.googleapis.com/Topic" + // }]; + // } // // Occasionally, a field may reference an arbitrary resource. In this case, // APIs use the special value * in their resource reference. // // Example: // - // message GetIamPolicyRequest { - // string resource = 2 [(google.api.resource_reference) = { - // type: "*" - // }]; - // } + // message GetIamPolicyRequest { + // string resource = 2 [(google.api.resource_reference) = { + // type: "*" + // }]; + // } Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` // The resource type of a child collection that the annotated field // references. This is useful for annotating the `parent` field that @@ -385,11 +385,11 @@ type ResourceReference struct { // // Example: // - // message ListLogEntriesRequest { - // string parent = 1 [(google.api.resource_reference) = { - // child_type: "logging.googleapis.com/LogEntry" - // }; - // } + // message ListLogEntriesRequest { + // string parent = 1 [(google.api.resource_reference) = { + // child_type: "logging.googleapis.com/LogEntry" + // }; + // } ChildType string `protobuf:"bytes,2,opt,name=child_type,json=childType,proto3" json:"child_type,omitempty"` } diff --git a/vendor/google.golang.org/genproto/googleapis/api/annotations/routing.pb.go b/vendor/google.golang.org/genproto/googleapis/api/annotations/routing.pb.go index 6707a7b1c1..9a9ae04c29 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/annotations/routing.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/annotations/routing.pb.go @@ -1,4 +1,4 @@ -// Copyright 2021 Google LLC +// Copyright 2023 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.12.2 +// protoc v3.21.9 // source: google/api/routing.proto package annotations @@ -468,46 +468,46 @@ type RoutingParameter struct { // // Example: // - // -- This is a field in the request message - // | that the header value will be extracted from. - // | - // | -- This is the key name in the - // | | routing header. - // V | - // field: "table_name" v - // path_template: "projects/*/{table_location=instances/*}/tables/*" - // ^ ^ - // | | - // In the {} brackets is the pattern that -- | - // specifies what to extract from the | - // field as a value to be sent. | - // | - // The string in the field must match the whole pattern -- - // before brackets, inside brackets, after brackets. + // -- This is a field in the request message + // | that the header value will be extracted from. + // | + // | -- This is the key name in the + // | | routing header. + // V | + // field: "table_name" v + // path_template: "projects/*/{table_location=instances/*}/tables/*" + // ^ ^ + // | | + // In the {} brackets is the pattern that -- | + // specifies what to extract from the | + // field as a value to be sent. | + // | + // The string in the field must match the whole pattern -- + // before brackets, inside brackets, after brackets. // // When looking at this specific example, we can see that: - // - A key-value pair with the key `table_location` - // and the value matching `instances/*` should be added - // to the x-goog-request-params routing header. - // - The value is extracted from the request message's `table_name` field - // if it matches the full pattern specified: - // `projects/*/instances/*/tables/*`. + // - A key-value pair with the key `table_location` + // and the value matching `instances/*` should be added + // to the x-goog-request-params routing header. + // - The value is extracted from the request message's `table_name` field + // if it matches the full pattern specified: + // `projects/*/instances/*/tables/*`. // // **NB:** If the `path_template` field is not provided, the key name is // equal to the field name, and the whole field should be sent as a value. // This makes the pattern for the field and the value functionally equivalent // to `**`, and the configuration // - // { - // field: "table_name" - // } + // { + // field: "table_name" + // } // // is a functionally equivalent shorthand to: // - // { - // field: "table_name" - // path_template: "{table_name=**}" - // } + // { + // field: "table_name" + // path_template: "{table_name=**}" + // } // // See Example 1 for more details. PathTemplate string `protobuf:"bytes,2,opt,name=path_template,json=pathTemplate,proto3" json:"path_template,omitempty"` diff --git a/vendor/google.golang.org/genproto/googleapis/api/launch_stage.pb.go b/vendor/google.golang.org/genproto/googleapis/api/launch_stage.pb.go index 7107531377..454948669d 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/launch_stage.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/launch_stage.pb.go @@ -1,4 +1,4 @@ -// Copyright 2015 Google LLC +// Copyright 2023 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.18.1 +// protoc v3.21.9 // source: google/api/launch_stage.proto package api diff --git a/vendor/google.golang.org/genproto/googleapis/api/tidyfix.go b/vendor/google.golang.org/genproto/googleapis/api/tidyfix.go new file mode 100644 index 0000000000..1d3f1b5b7e --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/api/tidyfix.go @@ -0,0 +1,23 @@ +// Copyright 2023 Google LLC +// +// 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. + +// This file, and the {{.RootMod}} import, won't actually become part of +// the resultant binary. +//go:build modhack +// +build modhack + +package api + +// Necessary for safely adding multi-module repo. See: https://github.com/golang/go/wiki/Modules#is-it-possible-to-add-a-module-to-a-multi-module-repository +import _ "google.golang.org/genproto/internal" diff --git a/vendor/google.golang.org/genproto/googleapis/iam/v1/alias.go b/vendor/google.golang.org/genproto/googleapis/iam/v1/alias.go deleted file mode 100644 index 9fb745926a..0000000000 --- a/vendor/google.golang.org/genproto/googleapis/iam/v1/alias.go +++ /dev/null @@ -1,208 +0,0 @@ -// Copyright 2022 Google LLC -// -// 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 aliasgen. DO NOT EDIT. - -// Package iam aliases all exported identifiers in package -// "cloud.google.com/go/iam/apiv1/iampb". -// -// Deprecated: Please use types in: cloud.google.com/go/iam/apiv1/iampb. -// Please read https://github.com/googleapis/google-cloud-go/blob/main/migration.md -// for more details. -package iam - -import ( - src "cloud.google.com/go/iam/apiv1/iampb" - grpc "google.golang.org/grpc" -) - -// Deprecated: Please use consts in: cloud.google.com/go/iam/apiv1/iampb -const ( - AuditConfigDelta_ACTION_UNSPECIFIED = src.AuditConfigDelta_ACTION_UNSPECIFIED - AuditConfigDelta_ADD = src.AuditConfigDelta_ADD - AuditConfigDelta_REMOVE = src.AuditConfigDelta_REMOVE - AuditLogConfig_ADMIN_READ = src.AuditLogConfig_ADMIN_READ - AuditLogConfig_DATA_READ = src.AuditLogConfig_DATA_READ - AuditLogConfig_DATA_WRITE = src.AuditLogConfig_DATA_WRITE - AuditLogConfig_LOG_TYPE_UNSPECIFIED = src.AuditLogConfig_LOG_TYPE_UNSPECIFIED - BindingDelta_ACTION_UNSPECIFIED = src.BindingDelta_ACTION_UNSPECIFIED - BindingDelta_ADD = src.BindingDelta_ADD - BindingDelta_REMOVE = src.BindingDelta_REMOVE -) - -// Deprecated: Please use vars in: cloud.google.com/go/iam/apiv1/iampb -var ( - AuditConfigDelta_Action_name = src.AuditConfigDelta_Action_name - AuditConfigDelta_Action_value = src.AuditConfigDelta_Action_value - AuditLogConfig_LogType_name = src.AuditLogConfig_LogType_name - AuditLogConfig_LogType_value = src.AuditLogConfig_LogType_value - BindingDelta_Action_name = src.BindingDelta_Action_name - BindingDelta_Action_value = src.BindingDelta_Action_value - File_google_iam_v1_iam_policy_proto = src.File_google_iam_v1_iam_policy_proto - File_google_iam_v1_options_proto = src.File_google_iam_v1_options_proto - File_google_iam_v1_policy_proto = src.File_google_iam_v1_policy_proto -) - -// Specifies the audit configuration for a service. The configuration -// determines which permission types are logged, and what identities, if any, -// are exempted from logging. An AuditConfig must have one or more -// AuditLogConfigs. If there are AuditConfigs for both `allServices` and a -// specific service, the union of the two AuditConfigs is used for that -// service: the log_types specified in each AuditConfig are enabled, and the -// exempted_members in each AuditLogConfig are exempted. Example Policy with -// multiple AuditConfigs: { "audit_configs": [ { "service": "allServices", -// "audit_log_configs": [ { "log_type": "DATA_READ", "exempted_members": [ -// "user:jose@example.com" ] }, { "log_type": "DATA_WRITE" }, { "log_type": -// "ADMIN_READ" } ] }, { "service": "sampleservice.googleapis.com", -// "audit_log_configs": [ { "log_type": "DATA_READ" }, { "log_type": -// "DATA_WRITE", "exempted_members": [ "user:aliya@example.com" ] } ] } ] } For -// sampleservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ -// logging. It also exempts jose@example.com from DATA_READ logging, and -// aliya@example.com from DATA_WRITE logging. -// -// Deprecated: Please use types in: cloud.google.com/go/iam/apiv1/iampb -type AuditConfig = src.AuditConfig - -// One delta entry for AuditConfig. Each individual change (only one -// exempted_member in each entry) to a AuditConfig will be a separate entry. -// -// Deprecated: Please use types in: cloud.google.com/go/iam/apiv1/iampb -type AuditConfigDelta = src.AuditConfigDelta - -// The type of action performed on an audit configuration in a policy. -// -// Deprecated: Please use types in: cloud.google.com/go/iam/apiv1/iampb -type AuditConfigDelta_Action = src.AuditConfigDelta_Action - -// Provides the configuration for logging a type of permissions. Example: { -// "audit_log_configs": [ { "log_type": "DATA_READ", "exempted_members": [ -// "user:jose@example.com" ] }, { "log_type": "DATA_WRITE" } ] } This enables -// 'DATA_READ' and 'DATA_WRITE' logging, while exempting jose@example.com from -// DATA_READ logging. -// -// Deprecated: Please use types in: cloud.google.com/go/iam/apiv1/iampb -type AuditLogConfig = src.AuditLogConfig - -// The list of valid permission types for which logging can be configured. -// Admin writes are always logged, and are not configurable. -// -// Deprecated: Please use types in: cloud.google.com/go/iam/apiv1/iampb -type AuditLogConfig_LogType = src.AuditLogConfig_LogType - -// Associates `members`, or principals, with a `role`. -// -// Deprecated: Please use types in: cloud.google.com/go/iam/apiv1/iampb -type Binding = src.Binding - -// One delta entry for Binding. Each individual change (only one member in -// each entry) to a binding will be a separate entry. -// -// Deprecated: Please use types in: cloud.google.com/go/iam/apiv1/iampb -type BindingDelta = src.BindingDelta - -// The type of action performed on a Binding in a policy. -// -// Deprecated: Please use types in: cloud.google.com/go/iam/apiv1/iampb -type BindingDelta_Action = src.BindingDelta_Action - -// Request message for `GetIamPolicy` method. -// -// Deprecated: Please use types in: cloud.google.com/go/iam/apiv1/iampb -type GetIamPolicyRequest = src.GetIamPolicyRequest - -// Encapsulates settings provided to GetIamPolicy. -// -// Deprecated: Please use types in: cloud.google.com/go/iam/apiv1/iampb -type GetPolicyOptions = src.GetPolicyOptions - -// IAMPolicyClient is the client API for IAMPolicy service. For semantics -// around ctx use and closing/ending streaming RPCs, please refer to -// https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -// -// Deprecated: Please use types in: cloud.google.com/go/iam/apiv1/iampb -type IAMPolicyClient = src.IAMPolicyClient - -// IAMPolicyServer is the server API for IAMPolicy service. -// -// Deprecated: Please use types in: cloud.google.com/go/iam/apiv1/iampb -type IAMPolicyServer = src.IAMPolicyServer - -// An Identity and Access Management (IAM) policy, which specifies access -// controls for Google Cloud resources. A `Policy` is a collection of -// `bindings`. A `binding` binds one or more `members`, or principals, to a -// single `role`. Principals can be user accounts, service accounts, Google -// groups, and domains (such as G Suite). A `role` is a named list of -// permissions; each `role` can be an IAM predefined role or a user-created -// custom role. For some types of Google Cloud resources, a `binding` can also -// specify a `condition`, which is a logical expression that allows access to a -// resource only if the expression evaluates to `true`. A condition can add -// constraints based on attributes of the request, the resource, or both. To -// learn which resources support conditions in their IAM policies, see the [IAM -// documentation](https://cloud.google.com/iam/help/conditions/resource-policies). -// **JSON example:** { "bindings": [ { "role": -// "roles/resourcemanager.organizationAdmin", "members": [ -// "user:mike@example.com", "group:admins@example.com", "domain:google.com", -// "serviceAccount:my-project-id@appspot.gserviceaccount.com" ] }, { "role": -// "roles/resourcemanager.organizationViewer", "members": [ -// "user:eve@example.com" ], "condition": { "title": "expirable access", -// "description": "Does not grant access after Sep 2020", "expression": -// "request.time < timestamp('2020-10-01T00:00:00.000Z')", } } ], "etag": -// "BwWWja0YfJA=", "version": 3 } **YAML example:** bindings: - members: - -// user:mike@example.com - group:admins@example.com - domain:google.com - -// serviceAccount:my-project-id@appspot.gserviceaccount.com role: -// roles/resourcemanager.organizationAdmin - members: - user:eve@example.com -// role: roles/resourcemanager.organizationViewer condition: title: expirable -// access description: Does not grant access after Sep 2020 expression: -// request.time < timestamp('2020-10-01T00:00:00.000Z') etag: BwWWja0YfJA= -// version: 3 For a description of IAM and its features, see the [IAM -// documentation](https://cloud.google.com/iam/docs/). -// -// Deprecated: Please use types in: cloud.google.com/go/iam/apiv1/iampb -type Policy = src.Policy - -// The difference delta between two policies. -// -// Deprecated: Please use types in: cloud.google.com/go/iam/apiv1/iampb -type PolicyDelta = src.PolicyDelta - -// Request message for `SetIamPolicy` method. -// -// Deprecated: Please use types in: cloud.google.com/go/iam/apiv1/iampb -type SetIamPolicyRequest = src.SetIamPolicyRequest - -// Request message for `TestIamPermissions` method. -// -// Deprecated: Please use types in: cloud.google.com/go/iam/apiv1/iampb -type TestIamPermissionsRequest = src.TestIamPermissionsRequest - -// Response message for `TestIamPermissions` method. -// -// Deprecated: Please use types in: cloud.google.com/go/iam/apiv1/iampb -type TestIamPermissionsResponse = src.TestIamPermissionsResponse - -// UnimplementedIAMPolicyServer can be embedded to have forward compatible -// implementations. -// -// Deprecated: Please use types in: cloud.google.com/go/iam/apiv1/iampb -type UnimplementedIAMPolicyServer = src.UnimplementedIAMPolicyServer - -// Deprecated: Please use funcs in: cloud.google.com/go/iam/apiv1/iampb -func NewIAMPolicyClient(cc grpc.ClientConnInterface) IAMPolicyClient { - return src.NewIAMPolicyClient(cc) -} - -// Deprecated: Please use funcs in: cloud.google.com/go/iam/apiv1/iampb -func RegisterIAMPolicyServer(s *grpc.Server, srv IAMPolicyServer) { - src.RegisterIAMPolicyServer(s, srv) -} diff --git a/vendor/google.golang.org/genproto/googleapis/rpc/LICENSE b/vendor/google.golang.org/genproto/googleapis/rpc/LICENSE new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/rpc/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/vendor/google.golang.org/genproto/internal/doc.go b/vendor/google.golang.org/genproto/internal/doc.go new file mode 100644 index 0000000000..90e89b4aa3 --- /dev/null +++ b/vendor/google.golang.org/genproto/internal/doc.go @@ -0,0 +1,17 @@ +// Copyright 2023 Google LLC +// +// 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. + +// This file makes internal an importable go package +// for use with backreferences from submodules. +package internal diff --git a/vendor/google.golang.org/grpc/CONTRIBUTING.md b/vendor/google.golang.org/grpc/CONTRIBUTING.md index 52338d004c..608aa6e1ac 100644 --- a/vendor/google.golang.org/grpc/CONTRIBUTING.md +++ b/vendor/google.golang.org/grpc/CONTRIBUTING.md @@ -20,6 +20,15 @@ How to get your contributions merged smoothly and quickly. both author's & review's time is wasted. Create more PRs to address different concerns and everyone will be happy. +- If you are searching for features to work on, issues labeled [Status: Help + Wanted](https://github.com/grpc/grpc-go/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22Status%3A+Help+Wanted%22) + is a great place to start. These issues are well-documented and usually can be + resolved with a single pull request. + +- If you are adding a new file, make sure it has the copyright message template + at the top as a comment. You can copy over the message from an existing file + and update the year. + - The grpc package should only depend on standard Go packages and a small number of exceptions. If your contribution introduces new dependencies which are NOT in the [list](https://godoc.org/google.golang.org/grpc?imports), you need a @@ -32,14 +41,18 @@ How to get your contributions merged smoothly and quickly. - Provide a good **PR description** as a record of **what** change is being made and **why** it was made. Link to a github issue if it exists. -- Don't fix code style and formatting unless you are already changing that line - to address an issue. PRs with irrelevant changes won't be merged. If you do - want to fix formatting or style, do that in a separate PR. +- If you want to fix formatting or style, consider whether your changes are an + obvious improvement or might be considered a personal preference. If a style + change is based on preference, it likely will not be accepted. If it corrects + widely agreed-upon anti-patterns, then please do create a PR and explain the + benefits of the change. - Unless your PR is trivial, you should expect there will be reviewer comments - that you'll need to address before merging. We expect you to be reasonably - responsive to those comments, otherwise the PR will be closed after 2-3 weeks - of inactivity. + that you'll need to address before merging. We'll mark it as `Status: Requires + Reporter Clarification` if we expect you to respond to these comments in a + timely manner. If the PR remains inactive for 6 days, it will be marked as + `stale` and automatically close 7 days after that if we don't hear back from + you. - Maintain **clean commit history** and use **meaningful commit messages**. PRs with messy commit history are difficult to review and won't be merged. Use diff --git a/vendor/google.golang.org/grpc/balancer/grpclb/grpc_lb_v1/load_balancer.pb.go b/vendor/google.golang.org/grpc/balancer/grpclb/grpc_lb_v1/load_balancer.pb.go index 1205aff23f..f070878bd9 100644 --- a/vendor/google.golang.org/grpc/balancer/grpclb/grpc_lb_v1/load_balancer.pb.go +++ b/vendor/google.golang.org/grpc/balancer/grpclb/grpc_lb_v1/load_balancer.pb.go @@ -19,8 +19,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.14.0 +// protoc-gen-go v1.30.0 +// protoc v4.22.0 // source: grpc/lb/v1/load_balancer.proto package grpc_lb_v1 diff --git a/vendor/google.golang.org/grpc/balancer/grpclb/grpc_lb_v1/load_balancer_grpc.pb.go b/vendor/google.golang.org/grpc/balancer/grpclb/grpc_lb_v1/load_balancer_grpc.pb.go index cf1034830d..00d0954b38 100644 --- a/vendor/google.golang.org/grpc/balancer/grpclb/grpc_lb_v1/load_balancer_grpc.pb.go +++ b/vendor/google.golang.org/grpc/balancer/grpclb/grpc_lb_v1/load_balancer_grpc.pb.go @@ -19,8 +19,8 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.2.0 -// - protoc v3.14.0 +// - protoc-gen-go-grpc v1.3.0 +// - protoc v4.22.0 // source: grpc/lb/v1/load_balancer.proto package grpc_lb_v1 @@ -37,6 +37,10 @@ import ( // Requires gRPC-Go v1.32.0 or later. const _ = grpc.SupportPackageIsVersion7 +const ( + LoadBalancer_BalanceLoad_FullMethodName = "/grpc.lb.v1.LoadBalancer/BalanceLoad" +) + // LoadBalancerClient is the client API for LoadBalancer 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. @@ -54,7 +58,7 @@ func NewLoadBalancerClient(cc grpc.ClientConnInterface) LoadBalancerClient { } func (c *loadBalancerClient) BalanceLoad(ctx context.Context, opts ...grpc.CallOption) (LoadBalancer_BalanceLoadClient, error) { - stream, err := c.cc.NewStream(ctx, &LoadBalancer_ServiceDesc.Streams[0], "/grpc.lb.v1.LoadBalancer/BalanceLoad", opts...) + stream, err := c.cc.NewStream(ctx, &LoadBalancer_ServiceDesc.Streams[0], LoadBalancer_BalanceLoad_FullMethodName, opts...) if err != nil { return nil, err } diff --git a/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go b/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go index 66d141fce7..ec2c2fa14d 100644 --- a/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go +++ b/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go @@ -18,8 +18,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.14.0 +// protoc-gen-go v1.30.0 +// protoc v4.22.0 // source: grpc/binlog/v1/binarylog.proto package grpc_binarylog_v1 diff --git a/vendor/google.golang.org/grpc/clientconn.go b/vendor/google.golang.org/grpc/clientconn.go index d607d4e9e2..3a76142424 100644 --- a/vendor/google.golang.org/grpc/clientconn.go +++ b/vendor/google.golang.org/grpc/clientconn.go @@ -146,8 +146,18 @@ func DialContext(ctx context.Context, target string, opts ...DialOption) (conn * cc.safeConfigSelector.UpdateConfigSelector(&defaultConfigSelector{nil}) cc.ctx, cc.cancel = context.WithCancel(context.Background()) - for _, opt := range extraDialOptions { - opt.apply(&cc.dopts) + disableGlobalOpts := false + for _, opt := range opts { + if _, ok := opt.(*disableGlobalDialOptions); ok { + disableGlobalOpts = true + break + } + } + + if !disableGlobalOpts { + for _, opt := range globalDialOptions { + opt.apply(&cc.dopts) + } } for _, opt := range opts { @@ -234,19 +244,6 @@ func DialContext(ctx context.Context, target string, opts ...DialOption) (conn * } }() - scSet := false - if cc.dopts.scChan != nil { - // Try to get an initial service config. - select { - case sc, ok := <-cc.dopts.scChan: - if ok { - cc.sc = &sc - cc.safeConfigSelector.UpdateConfigSelector(&defaultConfigSelector{&sc}) - scSet = true - } - default: - } - } if cc.dopts.bs == nil { cc.dopts.bs = backoff.DefaultExponential } @@ -262,7 +259,7 @@ func DialContext(ctx context.Context, target string, opts ...DialOption) (conn * } channelz.Infof(logger, cc.channelzID, "Channel authority set to %q", cc.authority) - if cc.dopts.scChan != nil && !scSet { + if cc.dopts.scChan != nil { // Blocking wait for the initial service config. select { case sc, ok := <-cc.dopts.scChan: @@ -1103,7 +1100,11 @@ func (ac *addrConn) updateConnectivityState(s connectivity.State, lastErr error) return } ac.state = s - channelz.Infof(logger, ac.channelzID, "Subchannel Connectivity change to %v", s) + if lastErr == nil { + channelz.Infof(logger, ac.channelzID, "Subchannel Connectivity change to %v", s) + } else { + channelz.Infof(logger, ac.channelzID, "Subchannel Connectivity change to %v, last error: %s", s, lastErr) + } ac.cc.handleSubConnStateChange(ac.acbw, s, lastErr) } @@ -1527,6 +1528,9 @@ func (c *channelzChannel) ChannelzMetric() *channelz.ChannelInternalMetric { // referenced by users. var ErrClientConnTimeout = errors.New("grpc: timed out when dialing") +// getResolver finds the scheme in the cc's resolvers or the global registry. +// scheme should always be lowercase (typically by virtue of url.Parse() +// performing proper RFC3986 behavior). func (cc *ClientConn) getResolver(scheme string) resolver.Builder { for _, rb := range cc.dopts.resolvers { if scheme == rb.Scheme() { diff --git a/vendor/google.golang.org/grpc/codes/code_string.go b/vendor/google.golang.org/grpc/codes/code_string.go index 0b206a5782..934fac2b09 100644 --- a/vendor/google.golang.org/grpc/codes/code_string.go +++ b/vendor/google.golang.org/grpc/codes/code_string.go @@ -18,7 +18,15 @@ package codes -import "strconv" +import ( + "strconv" + + "google.golang.org/grpc/internal" +) + +func init() { + internal.CanonicalString = canonicalString +} func (c Code) String() string { switch c { @@ -60,3 +68,44 @@ func (c Code) String() string { return "Code(" + strconv.FormatInt(int64(c), 10) + ")" } } + +func canonicalString(c Code) string { + switch c { + case OK: + return "OK" + case Canceled: + return "CANCELLED" + case Unknown: + return "UNKNOWN" + case InvalidArgument: + return "INVALID_ARGUMENT" + case DeadlineExceeded: + return "DEADLINE_EXCEEDED" + case NotFound: + return "NOT_FOUND" + case AlreadyExists: + return "ALREADY_EXISTS" + case PermissionDenied: + return "PERMISSION_DENIED" + case ResourceExhausted: + return "RESOURCE_EXHAUSTED" + case FailedPrecondition: + return "FAILED_PRECONDITION" + case Aborted: + return "ABORTED" + case OutOfRange: + return "OUT_OF_RANGE" + case Unimplemented: + return "UNIMPLEMENTED" + case Internal: + return "INTERNAL" + case Unavailable: + return "UNAVAILABLE" + case DataLoss: + return "DATA_LOSS" + case Unauthenticated: + return "UNAUTHENTICATED" + default: + return "CODE(" + strconv.FormatInt(int64(c), 10) + ")" + } +} diff --git a/vendor/google.golang.org/grpc/credentials/alts/internal/handshaker/handshaker.go b/vendor/google.golang.org/grpc/credentials/alts/internal/handshaker/handshaker.go index 7b953a520e..150ae55767 100644 --- a/vendor/google.golang.org/grpc/credentials/alts/internal/handshaker/handshaker.go +++ b/vendor/google.golang.org/grpc/credentials/alts/internal/handshaker/handshaker.go @@ -138,7 +138,7 @@ func DefaultServerHandshakerOptions() *ServerHandshakerOptions { // and server options (server options struct does not exist now. When // caller can provide endpoints, it should be created. -// altsHandshaker is used to complete a ALTS handshaking between client and +// altsHandshaker is used to complete an ALTS handshake between client and // server. This handshaker talks to the ALTS handshaker service in the metadata // server. type altsHandshaker struct { @@ -146,6 +146,8 @@ type altsHandshaker struct { stream altsgrpc.HandshakerService_DoHandshakeClient // the connection to the peer. conn net.Conn + // a virtual connection to the ALTS handshaker service. + clientConn *grpc.ClientConn // client handshake options. clientOpts *ClientHandshakerOptions // server handshake options. @@ -154,39 +156,33 @@ type altsHandshaker struct { side core.Side } -// NewClientHandshaker creates a ALTS handshaker for GCP which contains an RPC -// stub created using the passed conn and used to talk to the ALTS Handshaker +// NewClientHandshaker creates a core.Handshaker that performs a client-side +// ALTS handshake by acting as a proxy between the peer and the ALTS handshaker // service in the metadata server. func NewClientHandshaker(ctx context.Context, conn *grpc.ClientConn, c net.Conn, opts *ClientHandshakerOptions) (core.Handshaker, error) { - stream, err := altsgrpc.NewHandshakerServiceClient(conn).DoHandshake(ctx) - if err != nil { - return nil, err - } return &altsHandshaker{ - stream: stream, + stream: nil, conn: c, + clientConn: conn, clientOpts: opts, side: core.ClientSide, }, nil } -// NewServerHandshaker creates a ALTS handshaker for GCP which contains an RPC -// stub created using the passed conn and used to talk to the ALTS Handshaker +// NewServerHandshaker creates a core.Handshaker that performs a server-side +// ALTS handshake by acting as a proxy between the peer and the ALTS handshaker // service in the metadata server. func NewServerHandshaker(ctx context.Context, conn *grpc.ClientConn, c net.Conn, opts *ServerHandshakerOptions) (core.Handshaker, error) { - stream, err := altsgrpc.NewHandshakerServiceClient(conn).DoHandshake(ctx) - if err != nil { - return nil, err - } return &altsHandshaker{ - stream: stream, + stream: nil, conn: c, + clientConn: conn, serverOpts: opts, side: core.ServerSide, }, nil } -// ClientHandshake starts and completes a client ALTS handshaking for GCP. Once +// ClientHandshake starts and completes a client ALTS handshake for GCP. Once // done, ClientHandshake returns a secure connection. func (h *altsHandshaker) ClientHandshake(ctx context.Context) (net.Conn, credentials.AuthInfo, error) { if !acquire() { @@ -198,6 +194,16 @@ func (h *altsHandshaker) ClientHandshake(ctx context.Context) (net.Conn, credent return nil, nil, errors.New("only handshakers created using NewClientHandshaker can perform a client handshaker") } + // TODO(matthewstevenson88): Change unit tests to use public APIs so + // that h.stream can unconditionally be set based on h.clientConn. + if h.stream == nil { + stream, err := altsgrpc.NewHandshakerServiceClient(h.clientConn).DoHandshake(ctx) + if err != nil { + return nil, nil, fmt.Errorf("failed to establish stream to ALTS handshaker service: %v", err) + } + h.stream = stream + } + // Create target identities from service account list. targetIdentities := make([]*altspb.Identity, 0, len(h.clientOpts.TargetServiceAccounts)) for _, account := range h.clientOpts.TargetServiceAccounts { @@ -229,7 +235,7 @@ func (h *altsHandshaker) ClientHandshake(ctx context.Context) (net.Conn, credent return conn, authInfo, nil } -// ServerHandshake starts and completes a server ALTS handshaking for GCP. Once +// ServerHandshake starts and completes a server ALTS handshake for GCP. Once // done, ServerHandshake returns a secure connection. func (h *altsHandshaker) ServerHandshake(ctx context.Context) (net.Conn, credentials.AuthInfo, error) { if !acquire() { @@ -241,6 +247,16 @@ func (h *altsHandshaker) ServerHandshake(ctx context.Context) (net.Conn, credent return nil, nil, errors.New("only handshakers created using NewServerHandshaker can perform a server handshaker") } + // TODO(matthewstevenson88): Change unit tests to use public APIs so + // that h.stream can unconditionally be set based on h.clientConn. + if h.stream == nil { + stream, err := altsgrpc.NewHandshakerServiceClient(h.clientConn).DoHandshake(ctx) + if err != nil { + return nil, nil, fmt.Errorf("failed to establish stream to ALTS handshaker service: %v", err) + } + h.stream = stream + } + p := make([]byte, frameLimit) n, err := h.conn.Read(p) if err != nil { @@ -371,5 +387,7 @@ func (h *altsHandshaker) processUntilDone(resp *altspb.HandshakerResp, extra []b // Close terminates the Handshaker. It should be called when the caller obtains // the secure connection. func (h *altsHandshaker) Close() { - h.stream.CloseSend() + if h.stream != nil { + h.stream.CloseSend() + } } diff --git a/vendor/google.golang.org/grpc/credentials/alts/internal/handshaker/service/service.go b/vendor/google.golang.org/grpc/credentials/alts/internal/handshaker/service/service.go index 2de2c4affd..e1cdafb980 100644 --- a/vendor/google.golang.org/grpc/credentials/alts/internal/handshaker/service/service.go +++ b/vendor/google.golang.org/grpc/credentials/alts/internal/handshaker/service/service.go @@ -58,3 +58,21 @@ func Dial(hsAddress string) (*grpc.ClientConn, error) { } return hsConn, nil } + +// CloseForTesting closes all open connections to the handshaker service. +// +// For testing purposes only. +func CloseForTesting() error { + for _, hsConn := range hsConnMap { + if hsConn == nil { + continue + } + if err := hsConn.Close(); err != nil { + return err + } + } + + // Reset the connection map. + hsConnMap = make(map[string]*grpc.ClientConn) + return nil +} diff --git a/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/altscontext.pb.go b/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/altscontext.pb.go index 1a40e17e8d..83e3bae37b 100644 --- a/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/altscontext.pb.go +++ b/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/altscontext.pb.go @@ -17,8 +17,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.14.0 +// protoc-gen-go v1.30.0 +// protoc v4.22.0 // source: grpc/gcp/altscontext.proto package grpc_gcp diff --git a/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/handshaker.pb.go b/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/handshaker.pb.go index 50eefa5383..0b0093328b 100644 --- a/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/handshaker.pb.go +++ b/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/handshaker.pb.go @@ -17,8 +17,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.14.0 +// protoc-gen-go v1.30.0 +// protoc v4.22.0 // source: grpc/gcp/handshaker.proto package grpc_gcp diff --git a/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/handshaker_grpc.pb.go b/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/handshaker_grpc.pb.go index d3562c6d5e..39ecccf878 100644 --- a/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/handshaker_grpc.pb.go +++ b/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/handshaker_grpc.pb.go @@ -17,8 +17,8 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.2.0 -// - protoc v3.14.0 +// - protoc-gen-go-grpc v1.3.0 +// - protoc v4.22.0 // source: grpc/gcp/handshaker.proto package grpc_gcp @@ -35,6 +35,10 @@ import ( // Requires gRPC-Go v1.32.0 or later. const _ = grpc.SupportPackageIsVersion7 +const ( + HandshakerService_DoHandshake_FullMethodName = "/grpc.gcp.HandshakerService/DoHandshake" +) + // HandshakerServiceClient is the client API for HandshakerService 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. @@ -57,7 +61,7 @@ func NewHandshakerServiceClient(cc grpc.ClientConnInterface) HandshakerServiceCl } func (c *handshakerServiceClient) DoHandshake(ctx context.Context, opts ...grpc.CallOption) (HandshakerService_DoHandshakeClient, error) { - stream, err := c.cc.NewStream(ctx, &HandshakerService_ServiceDesc.Streams[0], "/grpc.gcp.HandshakerService/DoHandshake", opts...) + stream, err := c.cc.NewStream(ctx, &HandshakerService_ServiceDesc.Streams[0], HandshakerService_DoHandshake_FullMethodName, opts...) if err != nil { return nil, err } diff --git a/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/transport_security_common.pb.go b/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/transport_security_common.pb.go index b07412f185..c2e564c7de 100644 --- a/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/transport_security_common.pb.go +++ b/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/transport_security_common.pb.go @@ -17,8 +17,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.14.0 +// protoc-gen-go v1.30.0 +// protoc v4.22.0 // source: grpc/gcp/transport_security_common.proto package grpc_gcp diff --git a/vendor/google.golang.org/grpc/dialoptions.go b/vendor/google.golang.org/grpc/dialoptions.go index 4866da101c..cdc8263bda 100644 --- a/vendor/google.golang.org/grpc/dialoptions.go +++ b/vendor/google.golang.org/grpc/dialoptions.go @@ -38,13 +38,14 @@ import ( func init() { internal.AddGlobalDialOptions = func(opt ...DialOption) { - extraDialOptions = append(extraDialOptions, opt...) + globalDialOptions = append(globalDialOptions, opt...) } internal.ClearGlobalDialOptions = func() { - extraDialOptions = nil + globalDialOptions = nil } internal.WithBinaryLogger = withBinaryLogger internal.JoinDialOptions = newJoinDialOption + internal.DisableGlobalDialOptions = newDisableGlobalDialOptions } // dialOptions configure a Dial call. dialOptions are set by the DialOption @@ -83,7 +84,7 @@ type DialOption interface { apply(*dialOptions) } -var extraDialOptions []DialOption +var globalDialOptions []DialOption // EmptyDialOption does not alter the dial configuration. It can be embedded in // another structure to build custom dial options. @@ -96,6 +97,16 @@ type EmptyDialOption struct{} func (EmptyDialOption) apply(*dialOptions) {} +type disableGlobalDialOptions struct{} + +func (disableGlobalDialOptions) apply(*dialOptions) {} + +// newDisableGlobalDialOptions returns a DialOption that prevents the ClientConn +// from applying the global DialOptions (set via AddGlobalDialOptions). +func newDisableGlobalDialOptions() DialOption { + return &disableGlobalDialOptions{} +} + // funcDialOption wraps a function that modifies dialOptions into an // implementation of the DialOption interface. type funcDialOption struct { @@ -284,6 +295,9 @@ func withBackoff(bs internalbackoff.Strategy) DialOption { // WithBlock returns a DialOption which makes callers of Dial block until the // underlying connection is up. Without this, Dial returns immediately and // connecting the server happens in background. +// +// Use of this feature is not recommended. For more information, please see: +// https://github.com/grpc/grpc-go/blob/master/Documentation/anti-patterns.md func WithBlock() DialOption { return newFuncDialOption(func(o *dialOptions) { o.block = true @@ -295,6 +309,9 @@ func WithBlock() DialOption { // the context.DeadlineExceeded error. // Implies WithBlock() // +// Use of this feature is not recommended. For more information, please see: +// https://github.com/grpc/grpc-go/blob/master/Documentation/anti-patterns.md +// // # Experimental // // Notice: This API is EXPERIMENTAL and may be changed or removed in a @@ -437,6 +454,9 @@ func withBinaryLogger(bl binarylog.Logger) DialOption { // FailOnNonTempDialError only affects the initial dial, and does not do // anything useful unless you are also using WithBlock(). // +// Use of this feature is not recommended. For more information, please see: +// https://github.com/grpc/grpc-go/blob/master/Documentation/anti-patterns.md +// // # Experimental // // Notice: This API is EXPERIMENTAL and may be changed or removed in a diff --git a/vendor/google.golang.org/grpc/internal/binarylog/binarylog.go b/vendor/google.golang.org/grpc/internal/binarylog/binarylog.go index 809d73ccaf..af03a40d99 100644 --- a/vendor/google.golang.org/grpc/internal/binarylog/binarylog.go +++ b/vendor/google.golang.org/grpc/internal/binarylog/binarylog.go @@ -28,8 +28,10 @@ import ( "google.golang.org/grpc/internal/grpcutil" ) -// Logger is the global binary logger. It can be used to get binary logger for -// each method. +var grpclogLogger = grpclog.Component("binarylog") + +// Logger specifies MethodLoggers for method names with a Log call that +// takes a context. type Logger interface { GetMethodLogger(methodName string) MethodLogger } @@ -40,8 +42,6 @@ type Logger interface { // It is used to get a MethodLogger for each individual method. var binLogger Logger -var grpclogLogger = grpclog.Component("binarylog") - // SetLogger sets the binary logger. // // Only call this at init time. diff --git a/vendor/google.golang.org/grpc/internal/binarylog/method_logger.go b/vendor/google.golang.org/grpc/internal/binarylog/method_logger.go index d71e441778..56fcf008d3 100644 --- a/vendor/google.golang.org/grpc/internal/binarylog/method_logger.go +++ b/vendor/google.golang.org/grpc/internal/binarylog/method_logger.go @@ -19,6 +19,7 @@ package binarylog import ( + "context" "net" "strings" "sync/atomic" @@ -49,7 +50,7 @@ var idGen callIDGenerator // MethodLogger is the sub-logger for each method. type MethodLogger interface { - Log(LogEntryConfig) + Log(context.Context, LogEntryConfig) } // TruncatingMethodLogger is a method logger that truncates headers and messages @@ -98,7 +99,7 @@ func (ml *TruncatingMethodLogger) Build(c LogEntryConfig) *binlogpb.GrpcLogEntry } // Log creates a proto binary log entry, and logs it to the sink. -func (ml *TruncatingMethodLogger) Log(c LogEntryConfig) { +func (ml *TruncatingMethodLogger) Log(ctx context.Context, c LogEntryConfig) { ml.sink.Write(ml.Build(c)) } diff --git a/vendor/google.golang.org/grpc/internal/envconfig/xds.go b/vendor/google.golang.org/grpc/internal/envconfig/xds.go index 04136882c7..3b17705ba0 100644 --- a/vendor/google.golang.org/grpc/internal/envconfig/xds.go +++ b/vendor/google.golang.org/grpc/internal/envconfig/xds.go @@ -79,7 +79,7 @@ var ( // XDSFederation indicates whether federation support is enabled, which can // be enabled by setting the environment variable // "GRPC_EXPERIMENTAL_XDS_FEDERATION" to "true". - XDSFederation = boolFromEnv("GRPC_EXPERIMENTAL_XDS_FEDERATION", false) + XDSFederation = boolFromEnv("GRPC_EXPERIMENTAL_XDS_FEDERATION", true) // XDSRLS indicates whether processing of Cluster Specifier plugins and // support for the RLS CLuster Specifier is enabled, which can be enabled by diff --git a/vendor/google.golang.org/grpc/internal/grpclog/prefixLogger.go b/vendor/google.golang.org/grpc/internal/grpclog/prefixLogger.go index 82af70e96f..02224b42ca 100644 --- a/vendor/google.golang.org/grpc/internal/grpclog/prefixLogger.go +++ b/vendor/google.golang.org/grpc/internal/grpclog/prefixLogger.go @@ -63,6 +63,9 @@ func (pl *PrefixLogger) Errorf(format string, args ...interface{}) { // Debugf does info logging at verbose level 2. func (pl *PrefixLogger) Debugf(format string, args ...interface{}) { + // TODO(6044): Refactor interfaces LoggerV2 and DepthLogger, and maybe + // rewrite PrefixLogger a little to ensure that we don't use the global + // `Logger` here, and instead use the `logger` field. if !Logger.V(2) { return } @@ -73,6 +76,15 @@ func (pl *PrefixLogger) Debugf(format string, args ...interface{}) { return } InfoDepth(1, fmt.Sprintf(format, args...)) + +} + +// V reports whether verbosity level l is at least the requested verbose level. +func (pl *PrefixLogger) V(l int) bool { + // TODO(6044): Refactor interfaces LoggerV2 and DepthLogger, and maybe + // rewrite PrefixLogger a little to ensure that we don't use the global + // `Logger` here, and instead use the `logger` field. + return Logger.V(l) } // NewPrefixLogger creates a prefix logger with the given prefix. diff --git a/vendor/google.golang.org/grpc/internal/grpcsync/callback_serializer.go b/vendor/google.golang.org/grpc/internal/grpcsync/callback_serializer.go new file mode 100644 index 0000000000..79993d3437 --- /dev/null +++ b/vendor/google.golang.org/grpc/internal/grpcsync/callback_serializer.go @@ -0,0 +1,65 @@ +/* + * + * Copyright 2022 gRPC 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. + * + */ + +package grpcsync + +import ( + "context" + + "google.golang.org/grpc/internal/buffer" +) + +// CallbackSerializer provides a mechanism to schedule callbacks in a +// synchronized manner. It provides a FIFO guarantee on the order of execution +// of scheduled callbacks. New callbacks can be scheduled by invoking the +// Schedule() method. +// +// This type is safe for concurrent access. +type CallbackSerializer struct { + callbacks *buffer.Unbounded +} + +// NewCallbackSerializer returns a new CallbackSerializer instance. The provided +// context will be passed to the scheduled callbacks. Users should cancel the +// provided context to shutdown the CallbackSerializer. It is guaranteed that no +// callbacks will be executed once this context is canceled. +func NewCallbackSerializer(ctx context.Context) *CallbackSerializer { + t := &CallbackSerializer{callbacks: buffer.NewUnbounded()} + go t.run(ctx) + return t +} + +// Schedule adds a callback to be scheduled after existing callbacks are run. +// +// Callbacks are expected to honor the context when performing any blocking +// operations, and should return early when the context is canceled. +func (t *CallbackSerializer) Schedule(f func(ctx context.Context)) { + t.callbacks.Put(f) +} + +func (t *CallbackSerializer) run(ctx context.Context) { + for ctx.Err() == nil { + select { + case <-ctx.Done(): + return + case callback := <-t.callbacks.Get(): + t.callbacks.Load() + callback.(func(ctx context.Context))(ctx) + } + } +} diff --git a/vendor/google.golang.org/grpc/internal/internal.go b/vendor/google.golang.org/grpc/internal/internal.go index 0a76d9de6e..836b6a3b3e 100644 --- a/vendor/google.golang.org/grpc/internal/internal.go +++ b/vendor/google.golang.org/grpc/internal/internal.go @@ -58,6 +58,9 @@ var ( // gRPC server. An xDS-enabled server needs to know what type of credentials // is configured on the underlying gRPC server. This is set by server.go. GetServerCredentials interface{} // func (*grpc.Server) credentials.TransportCredentials + // CanonicalString returns the canonical string of the code defined here: + // https://github.com/grpc/grpc/blob/master/doc/statuscodes.md. + CanonicalString interface{} // func (codes.Code) string // DrainServerTransports initiates a graceful close of existing connections // on a gRPC server accepted on the provided listener address. An // xDS-enabled server invokes this method on a grpc.Server when a particular @@ -74,6 +77,10 @@ var ( // globally for newly created client channels. The priority will be: 1. // user-provided; 2. this method; 3. default values. AddGlobalDialOptions interface{} // func(opt ...DialOption) + // DisableGlobalDialOptions returns a DialOption that prevents the + // ClientConn from applying the global DialOptions (set via + // AddGlobalDialOptions). + DisableGlobalDialOptions interface{} // func() grpc.DialOption // ClearGlobalDialOptions clears the array of extra DialOption. This // method is useful in testing and benchmarking. ClearGlobalDialOptions func() @@ -130,6 +137,9 @@ var ( // // TODO: Remove this function once the RBAC env var is removed. UnregisterRBACHTTPFilterForTesting func() + + // ORCAAllowAnyMinReportingInterval is for examples/orca use ONLY. + ORCAAllowAnyMinReportingInterval interface{} // func(so *orca.ServiceOptions) ) // HealthChecker defines the signature of the client-side LB channel health checking function. diff --git a/vendor/google.golang.org/grpc/internal/metadata/metadata.go b/vendor/google.golang.org/grpc/internal/metadata/metadata.go index b2980f8ac4..c82e608e07 100644 --- a/vendor/google.golang.org/grpc/internal/metadata/metadata.go +++ b/vendor/google.golang.org/grpc/internal/metadata/metadata.go @@ -76,33 +76,11 @@ func Set(addr resolver.Address, md metadata.MD) resolver.Address { return addr } -// Validate returns an error if the input md contains invalid keys or values. -// -// If the header is not a pseudo-header, the following items are checked: -// - header names must contain one or more characters from this set [0-9 a-z _ - .]. -// - if the header-name ends with a "-bin" suffix, no validation of the header value is performed. -// - otherwise, the header value must contain one or more characters from the set [%x20-%x7E]. +// Validate validates every pair in md with ValidatePair. func Validate(md metadata.MD) error { for k, vals := range md { - // pseudo-header will be ignored - if k[0] == ':' { - continue - } - // check key, for i that saving a conversion if not using for range - for i := 0; i < len(k); i++ { - r := k[i] - if !(r >= 'a' && r <= 'z') && !(r >= '0' && r <= '9') && r != '.' && r != '-' && r != '_' { - return fmt.Errorf("header key %q contains illegal characters not in [0-9a-z-_.]", k) - } - } - if strings.HasSuffix(k, "-bin") { - continue - } - // check value - for _, val := range vals { - if hasNotPrintable(val) { - return fmt.Errorf("header key %q contains value with non-printable ASCII characters", k) - } + if err := ValidatePair(k, vals...); err != nil { + return err } } return nil @@ -118,3 +96,37 @@ func hasNotPrintable(msg string) bool { } return false } + +// ValidatePair validate a key-value pair with the following rules (the pseudo-header will be skipped) : +// +// - key must contain one or more characters. +// - the characters in the key must be contained in [0-9 a-z _ - .]. +// - if the key ends with a "-bin" suffix, no validation of the corresponding value is performed. +// - the characters in the every value must be printable (in [%x20-%x7E]). +func ValidatePair(key string, vals ...string) error { + // key should not be empty + if key == "" { + return fmt.Errorf("there is an empty key in the header") + } + // pseudo-header will be ignored + if key[0] == ':' { + return nil + } + // check key, for i that saving a conversion if not using for range + for i := 0; i < len(key); i++ { + r := key[i] + if !(r >= 'a' && r <= 'z') && !(r >= '0' && r <= '9') && r != '.' && r != '-' && r != '_' { + return fmt.Errorf("header key %q contains illegal characters not in [0-9a-z-_.]", key) + } + } + if strings.HasSuffix(key, "-bin") { + return nil + } + // check value + for _, val := range vals { + if hasNotPrintable(val) { + return fmt.Errorf("header key %q contains value with non-printable ASCII characters", key) + } + } + return nil +} diff --git a/vendor/google.golang.org/grpc/internal/transport/controlbuf.go b/vendor/google.golang.org/grpc/internal/transport/controlbuf.go index 9097385e1a..be5a9c81eb 100644 --- a/vendor/google.golang.org/grpc/internal/transport/controlbuf.go +++ b/vendor/google.golang.org/grpc/internal/transport/controlbuf.go @@ -22,6 +22,7 @@ import ( "bytes" "errors" "fmt" + "net" "runtime" "strconv" "sync" @@ -29,6 +30,7 @@ import ( "golang.org/x/net/http2" "golang.org/x/net/http2/hpack" + "google.golang.org/grpc/internal/grpclog" "google.golang.org/grpc/internal/grpcutil" "google.golang.org/grpc/status" ) @@ -486,12 +488,14 @@ type loopyWriter struct { hEnc *hpack.Encoder // HPACK encoder. bdpEst *bdpEstimator draining bool + conn net.Conn + logger *grpclog.PrefixLogger // Side-specific handlers ssGoAwayHandler func(*goAway) (bool, error) } -func newLoopyWriter(s side, fr *framer, cbuf *controlBuffer, bdpEst *bdpEstimator) *loopyWriter { +func newLoopyWriter(s side, fr *framer, cbuf *controlBuffer, bdpEst *bdpEstimator, conn net.Conn, logger *grpclog.PrefixLogger) *loopyWriter { var buf bytes.Buffer l := &loopyWriter{ side: s, @@ -504,6 +508,8 @@ func newLoopyWriter(s side, fr *framer, cbuf *controlBuffer, bdpEst *bdpEstimato hBuf: &buf, hEnc: hpack.NewEncoder(&buf), bdpEst: bdpEst, + conn: conn, + logger: logger, } return l } @@ -521,15 +527,27 @@ const minBatchSize = 1000 // 2. Stream level flow control quota available. // // In each iteration of run loop, other than processing the incoming control -// frame, loopy calls processData, which processes one node from the activeStreams linked-list. -// This results in writing of HTTP2 frames into an underlying write buffer. -// When there's no more control frames to read from controlBuf, loopy flushes the write buffer. -// As an optimization, to increase the batch size for each flush, loopy yields the processor, once -// if the batch size is too low to give stream goroutines a chance to fill it up. +// frame, loopy calls processData, which processes one node from the +// activeStreams linked-list. This results in writing of HTTP2 frames into an +// underlying write buffer. When there's no more control frames to read from +// controlBuf, loopy flushes the write buffer. As an optimization, to increase +// the batch size for each flush, loopy yields the processor, once if the batch +// size is too low to give stream goroutines a chance to fill it up. +// +// Upon exiting, if the error causing the exit is not an I/O error, run() +// flushes and closes the underlying connection. Otherwise, the connection is +// left open to allow the I/O error to be encountered by the reader instead. func (l *loopyWriter) run() (err error) { - // Always flush the writer before exiting in case there are pending frames - // to be sent. - defer l.framer.writer.Flush() + defer func() { + if l.logger.V(logLevel) { + l.logger.Infof("loopyWriter exiting with error: %v", err) + } + if !isIOError(err) { + l.framer.writer.Flush() + l.conn.Close() + } + l.cbuf.finish() + }() for { it, err := l.cbuf.get(true) if err != nil { @@ -581,11 +599,11 @@ func (l *loopyWriter) outgoingWindowUpdateHandler(w *outgoingWindowUpdate) error return l.framer.fr.WriteWindowUpdate(w.streamID, w.increment) } -func (l *loopyWriter) incomingWindowUpdateHandler(w *incomingWindowUpdate) error { +func (l *loopyWriter) incomingWindowUpdateHandler(w *incomingWindowUpdate) { // Otherwise update the quota. if w.streamID == 0 { l.sendQuota += w.increment - return nil + return } // Find the stream and update it. if str, ok := l.estdStreams[w.streamID]; ok { @@ -593,10 +611,9 @@ func (l *loopyWriter) incomingWindowUpdateHandler(w *incomingWindowUpdate) error if strQuota := int(l.oiws) - str.bytesOutStanding; strQuota > 0 && str.state == waitingOnStreamQuota { str.state = active l.activeStreams.enqueue(str) - return nil + return } } - return nil } func (l *loopyWriter) outgoingSettingsHandler(s *outgoingSettings) error { @@ -604,13 +621,11 @@ func (l *loopyWriter) outgoingSettingsHandler(s *outgoingSettings) error { } func (l *loopyWriter) incomingSettingsHandler(s *incomingSettings) error { - if err := l.applySettings(s.ss); err != nil { - return err - } + l.applySettings(s.ss) return l.framer.fr.WriteSettingsAck() } -func (l *loopyWriter) registerStreamHandler(h *registerStream) error { +func (l *loopyWriter) registerStreamHandler(h *registerStream) { str := &outStream{ id: h.streamID, state: empty, @@ -618,15 +633,14 @@ func (l *loopyWriter) registerStreamHandler(h *registerStream) error { wq: h.wq, } l.estdStreams[h.streamID] = str - return nil } func (l *loopyWriter) headerHandler(h *headerFrame) error { if l.side == serverSide { str, ok := l.estdStreams[h.streamID] if !ok { - if logger.V(logLevel) { - logger.Warningf("transport: loopy doesn't recognize the stream: %d", h.streamID) + if l.logger.V(logLevel) { + l.logger.Infof("Unrecognized streamID %d in loopyWriter", h.streamID) } return nil } @@ -681,8 +695,8 @@ func (l *loopyWriter) writeHeader(streamID uint32, endStream bool, hf []hpack.He l.hBuf.Reset() for _, f := range hf { if err := l.hEnc.WriteField(f); err != nil { - if logger.V(logLevel) { - logger.Warningf("transport: loopyWriter.writeHeader encountered error while encoding headers: %v", err) + if l.logger.V(logLevel) { + l.logger.Warningf("Encountered error while encoding headers: %v", err) } } } @@ -720,10 +734,10 @@ func (l *loopyWriter) writeHeader(streamID uint32, endStream bool, hf []hpack.He return nil } -func (l *loopyWriter) preprocessData(df *dataFrame) error { +func (l *loopyWriter) preprocessData(df *dataFrame) { str, ok := l.estdStreams[df.streamID] if !ok { - return nil + return } // If we got data for a stream it means that // stream was originated and the headers were sent out. @@ -732,7 +746,6 @@ func (l *loopyWriter) preprocessData(df *dataFrame) error { str.state = active l.activeStreams.enqueue(str) } - return nil } func (l *loopyWriter) pingHandler(p *ping) error { @@ -743,9 +756,8 @@ func (l *loopyWriter) pingHandler(p *ping) error { } -func (l *loopyWriter) outFlowControlSizeRequestHandler(o *outFlowControlSizeRequest) error { +func (l *loopyWriter) outFlowControlSizeRequestHandler(o *outFlowControlSizeRequest) { o.resp <- l.sendQuota - return nil } func (l *loopyWriter) cleanupStreamHandler(c *cleanupStream) error { @@ -763,6 +775,7 @@ func (l *loopyWriter) cleanupStreamHandler(c *cleanupStream) error { } } if l.draining && len(l.estdStreams) == 0 { + // Flush and close the connection; we are done with it. return errors.New("finished processing active streams while in draining mode") } return nil @@ -798,6 +811,7 @@ func (l *loopyWriter) incomingGoAwayHandler(*incomingGoAway) error { if l.side == clientSide { l.draining = true if len(l.estdStreams) == 0 { + // Flush and close the connection; we are done with it. return errors.New("received GOAWAY with no active streams") } } @@ -816,17 +830,10 @@ func (l *loopyWriter) goAwayHandler(g *goAway) error { return nil } -func (l *loopyWriter) closeConnectionHandler() error { - // Exit loopyWriter entirely by returning an error here. This will lead to - // the transport closing the connection, and, ultimately, transport - // closure. - return ErrConnClosing -} - func (l *loopyWriter) handle(i interface{}) error { switch i := i.(type) { case *incomingWindowUpdate: - return l.incomingWindowUpdateHandler(i) + l.incomingWindowUpdateHandler(i) case *outgoingWindowUpdate: return l.outgoingWindowUpdateHandler(i) case *incomingSettings: @@ -836,7 +843,7 @@ func (l *loopyWriter) handle(i interface{}) error { case *headerFrame: return l.headerHandler(i) case *registerStream: - return l.registerStreamHandler(i) + l.registerStreamHandler(i) case *cleanupStream: return l.cleanupStreamHandler(i) case *earlyAbortStream: @@ -844,21 +851,24 @@ func (l *loopyWriter) handle(i interface{}) error { case *incomingGoAway: return l.incomingGoAwayHandler(i) case *dataFrame: - return l.preprocessData(i) + l.preprocessData(i) case *ping: return l.pingHandler(i) case *goAway: return l.goAwayHandler(i) case *outFlowControlSizeRequest: - return l.outFlowControlSizeRequestHandler(i) + l.outFlowControlSizeRequestHandler(i) case closeConnection: - return l.closeConnectionHandler() + // Just return a non-I/O error and run() will flush and close the + // connection. + return ErrConnClosing default: return fmt.Errorf("transport: unknown control message type %T", i) } + return nil } -func (l *loopyWriter) applySettings(ss []http2.Setting) error { +func (l *loopyWriter) applySettings(ss []http2.Setting) { for _, s := range ss { switch s.ID { case http2.SettingInitialWindowSize: @@ -877,7 +887,6 @@ func (l *loopyWriter) applySettings(ss []http2.Setting) error { updateHeaderTblSize(l.hEnc, s.Val) } } - return nil } // processData removes the first stream from active streams, writes out at most 16KB @@ -911,7 +920,7 @@ func (l *loopyWriter) processData() (bool, error) { return false, err } if err := l.cleanupStreamHandler(trailer.cleanup); err != nil { - return false, nil + return false, err } } else { l.activeStreams.enqueue(str) diff --git a/vendor/google.golang.org/grpc/internal/transport/handler_server.go b/vendor/google.golang.org/grpc/internal/transport/handler_server.go index e6626bf96e..fbee581b86 100644 --- a/vendor/google.golang.org/grpc/internal/transport/handler_server.go +++ b/vendor/google.golang.org/grpc/internal/transport/handler_server.go @@ -39,6 +39,7 @@ import ( "golang.org/x/net/http2" "google.golang.org/grpc/codes" "google.golang.org/grpc/credentials" + "google.golang.org/grpc/internal/grpclog" "google.golang.org/grpc/internal/grpcutil" "google.golang.org/grpc/metadata" "google.golang.org/grpc/peer" @@ -83,6 +84,7 @@ func NewServerHandlerTransport(w http.ResponseWriter, r *http.Request, stats []s contentSubtype: contentSubtype, stats: stats, } + st.logger = prefixLoggerForServerHandlerTransport(st) if v := r.Header.Get("grpc-timeout"); v != "" { to, err := decodeTimeout(v) @@ -150,13 +152,14 @@ type serverHandlerTransport struct { // TODO make sure this is consistent across handler_server and http2_server contentSubtype string - stats []stats.Handler + stats []stats.Handler + logger *grpclog.PrefixLogger } func (ht *serverHandlerTransport) Close(err error) { ht.closeOnce.Do(func() { - if logger.V(logLevel) { - logger.Infof("Closing serverHandlerTransport: %v", err) + if ht.logger.V(logLevel) { + ht.logger.Infof("Closing: %v", err) } close(ht.closedCh) }) diff --git a/vendor/google.golang.org/grpc/internal/transport/http2_client.go b/vendor/google.golang.org/grpc/internal/transport/http2_client.go index 79ee8aea0a..5216998a88 100644 --- a/vendor/google.golang.org/grpc/internal/transport/http2_client.go +++ b/vendor/google.golang.org/grpc/internal/transport/http2_client.go @@ -38,6 +38,7 @@ import ( "google.golang.org/grpc/credentials" "google.golang.org/grpc/internal/channelz" icredentials "google.golang.org/grpc/internal/credentials" + "google.golang.org/grpc/internal/grpclog" "google.golang.org/grpc/internal/grpcsync" "google.golang.org/grpc/internal/grpcutil" imetadata "google.golang.org/grpc/internal/metadata" @@ -145,6 +146,7 @@ type http2Client struct { bufferPool *bufferPool connectionID uint64 + logger *grpclog.PrefixLogger } func dial(ctx context.Context, fn func(context.Context, string) (net.Conn, error), addr resolver.Address, useProxy bool, grpcUA string) (net.Conn, error) { @@ -244,7 +246,7 @@ func newHTTP2Client(connectCtx, ctx context.Context, addr resolver.Address, opts if err := connectCtx.Err(); err != nil { // connectCtx expired before exiting the function. Hard close the connection. if logger.V(logLevel) { - logger.Infof("newClientTransport: aborting due to connectCtx: %v", err) + logger.Infof("Aborting due to connect deadline expiring: %v", err) } conn.Close() } @@ -346,6 +348,7 @@ func newHTTP2Client(connectCtx, ctx context.Context, addr resolver.Address, opts bufferPool: newBufferPool(), onClose: onClose, } + t.logger = prefixLoggerForClientTransport(t) // Add peer information to the http2client context. t.ctx = peer.NewContext(t.ctx, t.getPeer()) @@ -444,15 +447,8 @@ func newHTTP2Client(connectCtx, ctx context.Context, addr resolver.Address, opts return nil, err } go func() { - t.loopy = newLoopyWriter(clientSide, t.framer, t.controlBuf, t.bdpEst) - err := t.loopy.run() - if logger.V(logLevel) { - logger.Infof("transport: loopyWriter exited. Closing connection. Err: %v", err) - } - // Do not close the transport. Let reader goroutine handle it since - // there might be data in the buffers. - t.conn.Close() - t.controlBuf.finish() + t.loopy = newLoopyWriter(clientSide, t.framer, t.controlBuf, t.bdpEst, t.conn, t.logger) + t.loopy.run() close(t.writerDone) }() return t, nil @@ -789,7 +785,7 @@ func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (*Stream, s.id = h.streamID s.fc = &inFlow{limit: uint32(t.initialWindowSize)} t.mu.Lock() - if t.activeStreams == nil { // Can be niled from Close(). + if t.state == draining || t.activeStreams == nil { // Can be niled from Close(). t.mu.Unlock() return false // Don't create a stream if the transport is already closed. } @@ -866,8 +862,8 @@ func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (*Stream, } } if transportDrainRequired { - if logger.V(logLevel) { - logger.Infof("transport: t.nextID > MaxStreamID. Draining") + if t.logger.V(logLevel) { + t.logger.Infof("Draining transport: t.nextID > MaxStreamID") } t.GracefulClose() } @@ -959,8 +955,8 @@ func (t *http2Client) Close(err error) { t.mu.Unlock() return } - if logger.V(logLevel) { - logger.Infof("transport: closing: %v", err) + if t.logger.V(logLevel) { + t.logger.Infof("Closing: %v", err) } // Call t.onClose ASAP to prevent the client from attempting to create new // streams. @@ -1016,8 +1012,8 @@ func (t *http2Client) GracefulClose() { t.mu.Unlock() return } - if logger.V(logLevel) { - logger.Infof("transport: GracefulClose called") + if t.logger.V(logLevel) { + t.logger.Infof("GracefulClose called") } t.onClose(GoAwayInvalid) t.state = draining @@ -1181,8 +1177,8 @@ func (t *http2Client) handleRSTStream(f *http2.RSTStreamFrame) { } statusCode, ok := http2ErrConvTab[f.ErrCode] if !ok { - if logger.V(logLevel) { - logger.Warningf("transport: http2Client.handleRSTStream found no mapped gRPC status for the received http2 error: %v", f.ErrCode) + if t.logger.V(logLevel) { + t.logger.Infof("Received a RST_STREAM frame with code %q, but found no mapped gRPC status", f.ErrCode) } statusCode = codes.Unknown } @@ -1264,10 +1260,12 @@ func (t *http2Client) handleGoAway(f *http2.GoAwayFrame) { t.mu.Unlock() return } - if f.ErrCode == http2.ErrCodeEnhanceYourCalm { - if logger.V(logLevel) { - logger.Infof("Client received GoAway with http2.ErrCodeEnhanceYourCalm.") - } + if f.ErrCode == http2.ErrCodeEnhanceYourCalm && string(f.DebugData()) == "too_many_pings" { + // When a client receives a GOAWAY with error code ENHANCE_YOUR_CALM and debug + // data equal to ASCII "too_many_pings", it should log the occurrence at a log level that is + // enabled by default and double the configure KEEPALIVE_TIME used for new connections + // on that channel. + logger.Errorf("Client received GoAway with error code ENHANCE_YOUR_CALM and debug data equal to ASCII \"too_many_pings\".") } id := f.LastStreamID if id > 0 && id%2 == 0 { diff --git a/vendor/google.golang.org/grpc/internal/transport/http2_server.go b/vendor/google.golang.org/grpc/internal/transport/http2_server.go index bc3da70672..4b406b8cb0 100644 --- a/vendor/google.golang.org/grpc/internal/transport/http2_server.go +++ b/vendor/google.golang.org/grpc/internal/transport/http2_server.go @@ -35,7 +35,9 @@ import ( "github.com/golang/protobuf/proto" "golang.org/x/net/http2" "golang.org/x/net/http2/hpack" + "google.golang.org/grpc/internal/grpclog" "google.golang.org/grpc/internal/grpcutil" + "google.golang.org/grpc/internal/pretty" "google.golang.org/grpc/internal/syscall" "google.golang.org/grpc/codes" @@ -129,6 +131,8 @@ type http2Server struct { // This lock may not be taken if mu is already held. maxStreamMu sync.Mutex maxStreamID uint32 // max stream ID ever seen + + logger *grpclog.PrefixLogger } // NewServerTransport creates a http2 transport with conn and configuration @@ -267,6 +271,7 @@ func NewServerTransport(conn net.Conn, config *ServerConfig) (_ ServerTransport, czData: new(channelzData), bufferPool: newBufferPool(), } + t.logger = prefixLoggerForServerTransport(t) // Add peer information to the http2server context. t.ctx = peer.NewContext(t.ctx, t.getPeer()) @@ -331,14 +336,9 @@ func NewServerTransport(conn net.Conn, config *ServerConfig) (_ ServerTransport, t.handleSettings(sf) go func() { - t.loopy = newLoopyWriter(serverSide, t.framer, t.controlBuf, t.bdpEst) + t.loopy = newLoopyWriter(serverSide, t.framer, t.controlBuf, t.bdpEst, t.conn, t.logger) t.loopy.ssGoAwayHandler = t.outgoingGoAwayHandler - err := t.loopy.run() - if logger.V(logLevel) { - logger.Infof("transport: loopyWriter exited. Closing connection. Err: %v", err) - } - t.conn.Close() - t.controlBuf.finish() + t.loopy.run() close(t.writerDone) }() go t.keepalive() @@ -383,7 +383,7 @@ func (t *http2Server) operateHeaders(frame *http2.MetaHeadersFrame, handle func( // if false, content-type was missing or invalid isGRPC = false contentType = "" - mdata = make(map[string][]string) + mdata = make(metadata.MD, len(frame.Fields)) httpMethod string // these are set if an error is encountered while parsing the headers protocolError bool @@ -404,6 +404,17 @@ func (t *http2Server) operateHeaders(frame *http2.MetaHeadersFrame, handle func( mdata[hf.Name] = append(mdata[hf.Name], hf.Value) s.contentSubtype = contentSubtype isGRPC = true + + case "grpc-accept-encoding": + mdata[hf.Name] = append(mdata[hf.Name], hf.Value) + if hf.Value == "" { + continue + } + compressors := hf.Value + if s.clientAdvertisedCompressors != "" { + compressors = s.clientAdvertisedCompressors + "," + compressors + } + s.clientAdvertisedCompressors = compressors case "grpc-encoding": s.recvCompress = hf.Value case ":method": @@ -419,8 +430,8 @@ func (t *http2Server) operateHeaders(frame *http2.MetaHeadersFrame, handle func( // "Transports must consider requests containing the Connection header // as malformed." - A41 case "connection": - if logger.V(logLevel) { - logger.Errorf("transport: http2Server.operateHeaders parsed a :connection header which makes a request malformed as per the HTTP/2 spec") + if t.logger.V(logLevel) { + t.logger.Infof("Received a HEADERS frame with a :connection header which makes the request malformed, as per the HTTP/2 spec") } protocolError = true default: @@ -430,7 +441,7 @@ func (t *http2Server) operateHeaders(frame *http2.MetaHeadersFrame, handle func( v, err := decodeMetadataHeader(hf.Name, hf.Value) if err != nil { headerError = status.Newf(codes.Internal, "malformed binary metadata %q in header %q: %v", hf.Value, hf.Name, err) - logger.Warningf("Failed to decode metadata header (%q, %q): %v", hf.Name, hf.Value, err) + t.logger.Warningf("Failed to decode metadata header (%q, %q): %v", hf.Name, hf.Value, err) break } mdata[hf.Name] = append(mdata[hf.Name], v) @@ -444,8 +455,8 @@ func (t *http2Server) operateHeaders(frame *http2.MetaHeadersFrame, handle func( // error, this takes precedence over a client not speaking gRPC. if len(mdata[":authority"]) > 1 || len(mdata["host"]) > 1 { errMsg := fmt.Sprintf("num values of :authority: %v, num values of host: %v, both must only have 1 value as per HTTP/2 spec", len(mdata[":authority"]), len(mdata["host"])) - if logger.V(logLevel) { - logger.Errorf("transport: %v", errMsg) + if t.logger.V(logLevel) { + t.logger.Infof("Aborting the stream early: %v", errMsg) } t.controlBuf.put(&earlyAbortStream{ httpStatus: http.StatusBadRequest, @@ -539,9 +550,9 @@ func (t *http2Server) operateHeaders(frame *http2.MetaHeadersFrame, handle func( } if httpMethod != http.MethodPost { t.mu.Unlock() - errMsg := fmt.Sprintf("http2Server.operateHeaders parsed a :method field: %v which should be POST", httpMethod) - if logger.V(logLevel) { - logger.Infof("transport: %v", errMsg) + errMsg := fmt.Sprintf("Received a HEADERS frame with :method %q which should be POST", httpMethod) + if t.logger.V(logLevel) { + t.logger.Infof("Aborting the stream early: %v", errMsg) } t.controlBuf.put(&earlyAbortStream{ httpStatus: 405, @@ -557,8 +568,8 @@ func (t *http2Server) operateHeaders(frame *http2.MetaHeadersFrame, handle func( var err error if s.ctx, err = t.inTapHandle(s.ctx, &tap.Info{FullMethodName: s.method}); err != nil { t.mu.Unlock() - if logger.V(logLevel) { - logger.Infof("transport: http2Server.operateHeaders got an error from InTapHandle: %v", err) + if t.logger.V(logLevel) { + t.logger.Infof("Aborting the stream early due to InTapHandle failure: %v", err) } stat, ok := status.FromError(err) if !ok { @@ -595,7 +606,7 @@ func (t *http2Server) operateHeaders(frame *http2.MetaHeadersFrame, handle func( LocalAddr: t.localAddr, Compression: s.recvCompress, WireLength: int(frame.Header().Length), - Header: metadata.MD(mdata).Copy(), + Header: mdata.Copy(), } sh.HandleRPC(s.ctx, inHeader) } @@ -632,8 +643,8 @@ func (t *http2Server) HandleStreams(handle func(*Stream), traceCtx func(context. atomic.StoreInt64(&t.lastRead, time.Now().UnixNano()) if err != nil { if se, ok := err.(http2.StreamError); ok { - if logger.V(logLevel) { - logger.Warningf("transport: http2Server.HandleStreams encountered http2.StreamError: %v", se) + if t.logger.V(logLevel) { + t.logger.Warningf("Encountered http2.StreamError: %v", se) } t.mu.Lock() s := t.activeStreams[se.StreamID] @@ -676,8 +687,8 @@ func (t *http2Server) HandleStreams(handle func(*Stream), traceCtx func(context. case *http2.GoAwayFrame: // TODO: Handle GoAway from the client appropriately. default: - if logger.V(logLevel) { - logger.Errorf("transport: http2Server.HandleStreams found unhandled frame type %v.", frame) + if t.logger.V(logLevel) { + t.logger.Infof("Received unsupported frame type %T", frame) } } } @@ -936,8 +947,8 @@ func (t *http2Server) checkForHeaderListSize(it interface{}) bool { var sz int64 for _, f := range hdrFrame.hf { if sz += int64(f.Size()); sz > int64(*t.maxSendHeaderListSize) { - if logger.V(logLevel) { - logger.Errorf("header list size to send violates the maximum size (%d bytes) set by client", *t.maxSendHeaderListSize) + if t.logger.V(logLevel) { + t.logger.Infof("Header list size to send violates the maximum size (%d bytes) set by client", *t.maxSendHeaderListSize) } return false } @@ -1050,7 +1061,7 @@ func (t *http2Server) WriteStatus(s *Stream, st *status.Status) error { stBytes, err := proto.Marshal(p) if err != nil { // TODO: return error instead, when callers are able to handle it. - logger.Errorf("transport: failed to marshal rpc status: %v, error: %v", p, err) + t.logger.Errorf("Failed to marshal rpc status: %s, error: %v", pretty.ToJSON(p), err) } else { headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-status-details-bin", Value: encodeBinHeader(stBytes)}) } @@ -1165,8 +1176,8 @@ func (t *http2Server) keepalive() { select { case <-ageTimer.C: // Close the connection after grace period. - if logger.V(logLevel) { - logger.Infof("transport: closing server transport due to maximum connection age.") + if t.logger.V(logLevel) { + t.logger.Infof("Closing server transport due to maximum connection age") } t.controlBuf.put(closeConnection{}) case <-t.done: @@ -1217,8 +1228,8 @@ func (t *http2Server) Close(err error) { t.mu.Unlock() return } - if logger.V(logLevel) { - logger.Infof("transport: closing: %v", err) + if t.logger.V(logLevel) { + t.logger.Infof("Closing: %v", err) } t.state = closing streams := t.activeStreams @@ -1226,8 +1237,8 @@ func (t *http2Server) Close(err error) { t.mu.Unlock() t.controlBuf.finish() close(t.done) - if err := t.conn.Close(); err != nil && logger.V(logLevel) { - logger.Infof("transport: error closing conn during Close: %v", err) + if err := t.conn.Close(); err != nil && t.logger.V(logLevel) { + t.logger.Infof("Error closing underlying net.Conn during Close: %v", err) } channelz.RemoveEntry(t.channelzID) // Cancel all active streams. @@ -1344,9 +1355,6 @@ func (t *http2Server) outgoingGoAwayHandler(g *goAway) (bool, error) { return false, err } if retErr != nil { - // Abruptly close the connection following the GoAway (via - // loopywriter). But flush out what's inside the buffer first. - t.framer.writer.Flush() return false, retErr } return true, nil diff --git a/vendor/google.golang.org/grpc/internal/transport/http_util.go b/vendor/google.golang.org/grpc/internal/transport/http_util.go index 2c601a864d..19cbb18f5a 100644 --- a/vendor/google.golang.org/grpc/internal/transport/http_util.go +++ b/vendor/google.golang.org/grpc/internal/transport/http_util.go @@ -21,6 +21,7 @@ package transport import ( "bufio" "encoding/base64" + "errors" "fmt" "io" "math" @@ -37,7 +38,6 @@ import ( "golang.org/x/net/http2/hpack" spb "google.golang.org/genproto/googleapis/rpc/status" "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" "google.golang.org/grpc/status" ) @@ -85,7 +85,6 @@ var ( // 504 Gateway timeout - UNAVAILABLE. http.StatusGatewayTimeout: codes.Unavailable, } - logger = grpclog.Component("transport") ) // isReservedHeader checks whether hdr belongs to HTTP2 headers @@ -330,7 +329,8 @@ func (w *bufWriter) Write(b []byte) (n int, err error) { return 0, w.err } if w.batchSize == 0 { // Buffer has been disabled. - return w.conn.Write(b) + n, err = w.conn.Write(b) + return n, toIOError(err) } for len(b) > 0 { nn := copy(w.buf[w.offset:], b) @@ -352,10 +352,30 @@ func (w *bufWriter) Flush() error { return nil } _, w.err = w.conn.Write(w.buf[:w.offset]) + w.err = toIOError(w.err) w.offset = 0 return w.err } +type ioError struct { + error +} + +func (i ioError) Unwrap() error { + return i.error +} + +func isIOError(err error) bool { + return errors.As(err, &ioError{}) +} + +func toIOError(err error) error { + if err == nil { + return nil + } + return ioError{error: err} +} + type framer struct { writer *bufWriter fr *http2.Framer diff --git a/vendor/google.golang.org/grpc/internal/transport/logging.go b/vendor/google.golang.org/grpc/internal/transport/logging.go new file mode 100644 index 0000000000..42ed2b07af --- /dev/null +++ b/vendor/google.golang.org/grpc/internal/transport/logging.go @@ -0,0 +1,40 @@ +/* + * + * Copyright 2023 gRPC 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. + * + */ + +package transport + +import ( + "fmt" + + "google.golang.org/grpc/grpclog" + internalgrpclog "google.golang.org/grpc/internal/grpclog" +) + +var logger = grpclog.Component("transport") + +func prefixLoggerForServerTransport(p *http2Server) *internalgrpclog.PrefixLogger { + return internalgrpclog.NewPrefixLogger(logger, fmt.Sprintf("[server-transport %p] ", p)) +} + +func prefixLoggerForServerHandlerTransport(p *serverHandlerTransport) *internalgrpclog.PrefixLogger { + return internalgrpclog.NewPrefixLogger(logger, fmt.Sprintf("[server-handler-transport %p] ", p)) +} + +func prefixLoggerForClientTransport(p *http2Client) *internalgrpclog.PrefixLogger { + return internalgrpclog.NewPrefixLogger(logger, fmt.Sprintf("[client-transport %p] ", p)) +} diff --git a/vendor/google.golang.org/grpc/internal/transport/transport.go b/vendor/google.golang.org/grpc/internal/transport/transport.go index 0ac77ea4f8..1b7d7fabc5 100644 --- a/vendor/google.golang.org/grpc/internal/transport/transport.go +++ b/vendor/google.golang.org/grpc/internal/transport/transport.go @@ -257,6 +257,9 @@ type Stream struct { fc *inFlow wq *writeQuota + // Holds compressor names passed in grpc-accept-encoding metadata from the + // client. This is empty for the client side stream. + clientAdvertisedCompressors string // Callback to state application's intentions to read data. This // is used to adjust flow control, if needed. requestRead func(int) @@ -345,8 +348,24 @@ func (s *Stream) RecvCompress() string { } // SetSendCompress sets the compression algorithm to the stream. -func (s *Stream) SetSendCompress(str string) { - s.sendCompress = str +func (s *Stream) SetSendCompress(name string) error { + if s.isHeaderSent() || s.getState() == streamDone { + return errors.New("transport: set send compressor called after headers sent or stream done") + } + + s.sendCompress = name + return nil +} + +// SendCompress returns the send compressor name. +func (s *Stream) SendCompress() string { + return s.sendCompress +} + +// ClientAdvertisedCompressors returns the compressor names advertised by the +// client via grpc-accept-encoding header. +func (s *Stream) ClientAdvertisedCompressors() string { + return s.clientAdvertisedCompressors } // Done returns a channel which is closed when it receives the final status diff --git a/vendor/google.golang.org/grpc/metadata/metadata.go b/vendor/google.golang.org/grpc/metadata/metadata.go index fb4a88f59b..a2cdcaf12a 100644 --- a/vendor/google.golang.org/grpc/metadata/metadata.go +++ b/vendor/google.golang.org/grpc/metadata/metadata.go @@ -91,7 +91,11 @@ func (md MD) Len() int { // Copy returns a copy of md. func (md MD) Copy() MD { - return Join(md) + out := make(MD, len(md)) + for k, v := range md { + out[k] = copyOf(v) + } + return out } // Get obtains the values for a given key. @@ -171,8 +175,11 @@ func AppendToOutgoingContext(ctx context.Context, kv ...string) context.Context md, _ := ctx.Value(mdOutgoingKey{}).(rawMD) added := make([][]string, len(md.added)+1) copy(added, md.added) - added[len(added)-1] = make([]string, len(kv)) - copy(added[len(added)-1], kv) + kvCopy := make([]string, 0, len(kv)) + for i := 0; i < len(kv); i += 2 { + kvCopy = append(kvCopy, strings.ToLower(kv[i]), kv[i+1]) + } + added[len(added)-1] = kvCopy return context.WithValue(ctx, mdOutgoingKey{}, rawMD{md: md.md, added: added}) } diff --git a/vendor/google.golang.org/grpc/resolver/resolver.go b/vendor/google.golang.org/grpc/resolver/resolver.go index 654e9ce69f..6215e5ef2b 100644 --- a/vendor/google.golang.org/grpc/resolver/resolver.go +++ b/vendor/google.golang.org/grpc/resolver/resolver.go @@ -41,8 +41,9 @@ var ( // TODO(bar) install dns resolver in init(){}. -// Register registers the resolver builder to the resolver map. b.Scheme will be -// used as the scheme registered with this builder. +// Register registers the resolver builder to the resolver map. b.Scheme will +// be used as the scheme registered with this builder. The registry is case +// sensitive, and schemes should not contain any uppercase characters. // // NOTE: this function must only be called during initialization time (i.e. in // an init() function), and is not thread-safe. If multiple Resolvers are @@ -203,6 +204,15 @@ type State struct { // gRPC to add new methods to this interface. type ClientConn interface { // UpdateState updates the state of the ClientConn appropriately. + // + // If an error is returned, the resolver should try to resolve the + // target again. The resolver should use a backoff timer to prevent + // overloading the server with requests. If a resolver is certain that + // reresolving will not change the result, e.g. because it is + // a watch-based resolver, returned errors can be ignored. + // + // If the resolved State is the same as the last reported one, calling + // UpdateState can be omitted. UpdateState(State) error // ReportError notifies the ClientConn that the Resolver encountered an // error. The ClientConn will notify the load balancer and begin calling @@ -280,8 +290,10 @@ type Builder interface { // gRPC dial calls Build synchronously, and fails if the returned error is // not nil. Build(target Target, cc ClientConn, opts BuildOptions) (Resolver, error) - // Scheme returns the scheme supported by this resolver. - // Scheme is defined at https://github.com/grpc/grpc/blob/master/doc/naming.md. + // Scheme returns the scheme supported by this resolver. Scheme is defined + // at https://github.com/grpc/grpc/blob/master/doc/naming.md. The returned + // string should not contain uppercase characters, as they will not match + // the parsed target's scheme as defined in RFC 3986. Scheme() string } diff --git a/vendor/google.golang.org/grpc/rpc_util.go b/vendor/google.golang.org/grpc/rpc_util.go index cb7020ebec..2030736a30 100644 --- a/vendor/google.golang.org/grpc/rpc_util.go +++ b/vendor/google.golang.org/grpc/rpc_util.go @@ -159,6 +159,7 @@ type callInfo struct { contentSubtype string codec baseCodec maxRetryRPCBufferSize int + onFinish []func(err error) } func defaultCallInfo() *callInfo { @@ -295,6 +296,41 @@ func (o FailFastCallOption) before(c *callInfo) error { } func (o FailFastCallOption) after(c *callInfo, attempt *csAttempt) {} +// OnFinish returns a CallOption that configures a callback to be called when +// the call completes. The error passed to the callback is the status of the +// RPC, and may be nil. The onFinish callback provided will only be called once +// by gRPC. This is mainly used to be used by streaming interceptors, to be +// notified when the RPC completes along with information about the status of +// the RPC. +// +// # Experimental +// +// Notice: This API is EXPERIMENTAL and may be changed or removed in a +// later release. +func OnFinish(onFinish func(err error)) CallOption { + return OnFinishCallOption{ + OnFinish: onFinish, + } +} + +// OnFinishCallOption is CallOption that indicates a callback to be called when +// the call completes. +// +// # Experimental +// +// Notice: This type is EXPERIMENTAL and may be changed or removed in a +// later release. +type OnFinishCallOption struct { + OnFinish func(error) +} + +func (o OnFinishCallOption) before(c *callInfo) error { + c.onFinish = append(c.onFinish, o.OnFinish) + return nil +} + +func (o OnFinishCallOption) after(c *callInfo, attempt *csAttempt) {} + // MaxCallRecvMsgSize returns a CallOption which sets the maximum message size // in bytes the client can receive. If this is not set, gRPC uses the default // 4MB. @@ -658,12 +694,13 @@ func msgHeader(data, compData []byte) (hdr []byte, payload []byte) { func outPayload(client bool, msg interface{}, data, payload []byte, t time.Time) *stats.OutPayload { return &stats.OutPayload{ - Client: client, - Payload: msg, - Data: data, - Length: len(data), - WireLength: len(payload) + headerLen, - SentTime: t, + Client: client, + Payload: msg, + Data: data, + Length: len(data), + WireLength: len(payload) + headerLen, + CompressedLength: len(payload), + SentTime: t, } } @@ -684,7 +721,7 @@ func checkRecvPayload(pf payloadFormat, recvCompress string, haveCompressor bool } type payloadInfo struct { - wireLength int // The compressed length got from wire. + compressedLength int // The compressed length got from wire. uncompressedBytes []byte } @@ -694,7 +731,7 @@ func recvAndDecompress(p *parser, s *transport.Stream, dc Decompressor, maxRecei return nil, err } if payInfo != nil { - payInfo.wireLength = len(d) + payInfo.compressedLength = len(d) } if st := checkRecvPayload(pf, s.RecvCompress(), compressor != nil || dc != nil); st != nil { diff --git a/vendor/google.golang.org/grpc/server.go b/vendor/google.golang.org/grpc/server.go index d5a6e78be4..76d152a69c 100644 --- a/vendor/google.golang.org/grpc/server.go +++ b/vendor/google.golang.org/grpc/server.go @@ -43,8 +43,8 @@ import ( "google.golang.org/grpc/internal" "google.golang.org/grpc/internal/binarylog" "google.golang.org/grpc/internal/channelz" - "google.golang.org/grpc/internal/grpcrand" "google.golang.org/grpc/internal/grpcsync" + "google.golang.org/grpc/internal/grpcutil" "google.golang.org/grpc/internal/transport" "google.golang.org/grpc/keepalive" "google.golang.org/grpc/metadata" @@ -74,10 +74,10 @@ func init() { srv.drainServerTransports(addr) } internal.AddGlobalServerOptions = func(opt ...ServerOption) { - extraServerOptions = append(extraServerOptions, opt...) + globalServerOptions = append(globalServerOptions, opt...) } internal.ClearGlobalServerOptions = func() { - extraServerOptions = nil + globalServerOptions = nil } internal.BinaryLogger = binaryLogger internal.JoinServerOptions = newJoinServerOption @@ -145,7 +145,7 @@ type Server struct { channelzID *channelz.Identifier czData *channelzData - serverWorkerChannels []chan *serverWorkerData + serverWorkerChannel chan *serverWorkerData } type serverOptions struct { @@ -183,7 +183,7 @@ var defaultServerOptions = serverOptions{ writeBufferSize: defaultWriteBufSize, readBufferSize: defaultReadBufSize, } -var extraServerOptions []ServerOption +var globalServerOptions []ServerOption // A ServerOption sets options such as credentials, codec and keepalive parameters, etc. type ServerOption interface { @@ -560,47 +560,45 @@ func NumStreamWorkers(numServerWorkers uint32) ServerOption { const serverWorkerResetThreshold = 1 << 16 // serverWorkers blocks on a *transport.Stream channel forever and waits for -// data to be fed by serveStreams. This allows different requests to be +// data to be fed by serveStreams. This allows multiple requests to be // processed by the same goroutine, removing the need for expensive stack // re-allocations (see the runtime.morestack problem [1]). // // [1] https://github.com/golang/go/issues/18138 -func (s *Server) serverWorker(ch chan *serverWorkerData) { - // To make sure all server workers don't reset at the same time, choose a - // random number of iterations before resetting. - threshold := serverWorkerResetThreshold + grpcrand.Intn(serverWorkerResetThreshold) - for completed := 0; completed < threshold; completed++ { - data, ok := <-ch +func (s *Server) serverWorker() { + for completed := 0; completed < serverWorkerResetThreshold; completed++ { + data, ok := <-s.serverWorkerChannel if !ok { return } - s.handleStream(data.st, data.stream, s.traceInfo(data.st, data.stream)) - data.wg.Done() + s.handleSingleStream(data) } - go s.serverWorker(ch) + go s.serverWorker() } -// initServerWorkers creates worker goroutines and channels to process incoming +func (s *Server) handleSingleStream(data *serverWorkerData) { + defer data.wg.Done() + s.handleStream(data.st, data.stream, s.traceInfo(data.st, data.stream)) +} + +// initServerWorkers creates worker goroutines and a channel to process incoming // connections to reduce the time spent overall on runtime.morestack. func (s *Server) initServerWorkers() { - s.serverWorkerChannels = make([]chan *serverWorkerData, s.opts.numServerWorkers) + s.serverWorkerChannel = make(chan *serverWorkerData) for i := uint32(0); i < s.opts.numServerWorkers; i++ { - s.serverWorkerChannels[i] = make(chan *serverWorkerData) - go s.serverWorker(s.serverWorkerChannels[i]) + go s.serverWorker() } } func (s *Server) stopServerWorkers() { - for i := uint32(0); i < s.opts.numServerWorkers; i++ { - close(s.serverWorkerChannels[i]) - } + close(s.serverWorkerChannel) } // NewServer creates a gRPC server which has no service registered and has not // started to accept requests yet. func NewServer(opt ...ServerOption) *Server { opts := defaultServerOptions - for _, o := range extraServerOptions { + for _, o := range globalServerOptions { o.apply(&opts) } for _, o := range opt { @@ -945,26 +943,21 @@ func (s *Server) serveStreams(st transport.ServerTransport) { defer st.Close(errors.New("finished serving streams for the server transport")) var wg sync.WaitGroup - var roundRobinCounter uint32 st.HandleStreams(func(stream *transport.Stream) { wg.Add(1) if s.opts.numServerWorkers > 0 { data := &serverWorkerData{st: st, wg: &wg, stream: stream} select { - case s.serverWorkerChannels[atomic.AddUint32(&roundRobinCounter, 1)%s.opts.numServerWorkers] <- data: + case s.serverWorkerChannel <- data: + return default: // If all stream workers are busy, fallback to the default code path. - go func() { - s.handleStream(st, stream, s.traceInfo(st, stream)) - wg.Done() - }() } - } else { - go func() { - defer wg.Done() - s.handleStream(st, stream, s.traceInfo(st, stream)) - }() } + go func() { + defer wg.Done() + s.handleStream(st, stream, s.traceInfo(st, stream)) + }() }, func(ctx context.Context, method string) context.Context { if !EnableTracing { return ctx @@ -1252,7 +1245,7 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. logEntry.PeerAddr = peer.Addr } for _, binlog := range binlogs { - binlog.Log(logEntry) + binlog.Log(ctx, logEntry) } } @@ -1263,6 +1256,7 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. var comp, decomp encoding.Compressor var cp Compressor var dc Decompressor + var sendCompressorName string // If dc is set and matches the stream's compression, use it. Otherwise, try // to find a matching registered compressor for decomp. @@ -1283,12 +1277,18 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. // NOTE: this needs to be ahead of all handling, https://github.com/grpc/grpc-go/issues/686. if s.opts.cp != nil { cp = s.opts.cp - stream.SetSendCompress(cp.Type()) + sendCompressorName = cp.Type() } else if rc := stream.RecvCompress(); rc != "" && rc != encoding.Identity { // Legacy compressor not specified; attempt to respond with same encoding. comp = encoding.GetCompressor(rc) if comp != nil { - stream.SetSendCompress(rc) + sendCompressorName = comp.Name() + } + } + + if sendCompressorName != "" { + if err := stream.SetSendCompress(sendCompressorName); err != nil { + return status.Errorf(codes.Internal, "grpc: failed to set send compressor: %v", err) } } @@ -1312,11 +1312,12 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. } for _, sh := range shs { sh.HandleRPC(stream.Context(), &stats.InPayload{ - RecvTime: time.Now(), - Payload: v, - WireLength: payInfo.wireLength + headerLen, - Data: d, - Length: len(d), + RecvTime: time.Now(), + Payload: v, + Length: len(d), + WireLength: payInfo.compressedLength + headerLen, + CompressedLength: payInfo.compressedLength, + Data: d, }) } if len(binlogs) != 0 { @@ -1324,7 +1325,7 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. Message: d, } for _, binlog := range binlogs { - binlog.Log(cm) + binlog.Log(stream.Context(), cm) } } if trInfo != nil { @@ -1357,7 +1358,7 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. Header: h, } for _, binlog := range binlogs { - binlog.Log(sh) + binlog.Log(stream.Context(), sh) } } st := &binarylog.ServerTrailer{ @@ -1365,7 +1366,7 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. Err: appErr, } for _, binlog := range binlogs { - binlog.Log(st) + binlog.Log(stream.Context(), st) } } return appErr @@ -1375,6 +1376,11 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. } opts := &transport.Options{Last: true} + // Server handler could have set new compressor by calling SetSendCompressor. + // In case it is set, we need to use it for compressing outbound message. + if stream.SendCompress() != sendCompressorName { + comp = encoding.GetCompressor(stream.SendCompress()) + } if err := s.sendResponse(t, stream, reply, cp, opts, comp); err != nil { if err == io.EOF { // The entire stream is done (for unary RPC only). @@ -1402,8 +1408,8 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. Err: appErr, } for _, binlog := range binlogs { - binlog.Log(sh) - binlog.Log(st) + binlog.Log(stream.Context(), sh) + binlog.Log(stream.Context(), st) } } return err @@ -1417,8 +1423,8 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. Message: reply, } for _, binlog := range binlogs { - binlog.Log(sh) - binlog.Log(sm) + binlog.Log(stream.Context(), sh) + binlog.Log(stream.Context(), sm) } } if channelz.IsOn() { @@ -1430,17 +1436,16 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. // TODO: Should we be logging if writing status failed here, like above? // Should the logging be in WriteStatus? Should we ignore the WriteStatus // error or allow the stats handler to see it? - err = t.WriteStatus(stream, statusOK) if len(binlogs) != 0 { st := &binarylog.ServerTrailer{ Trailer: stream.Trailer(), Err: appErr, } for _, binlog := range binlogs { - binlog.Log(st) + binlog.Log(stream.Context(), st) } } - return err + return t.WriteStatus(stream, statusOK) } // chainStreamServerInterceptors chains all stream server interceptors into one. @@ -1574,7 +1579,7 @@ func (s *Server) processStreamingRPC(t transport.ServerTransport, stream *transp logEntry.PeerAddr = peer.Addr } for _, binlog := range ss.binlogs { - binlog.Log(logEntry) + binlog.Log(stream.Context(), logEntry) } } @@ -1597,12 +1602,18 @@ func (s *Server) processStreamingRPC(t transport.ServerTransport, stream *transp // NOTE: this needs to be ahead of all handling, https://github.com/grpc/grpc-go/issues/686. if s.opts.cp != nil { ss.cp = s.opts.cp - stream.SetSendCompress(s.opts.cp.Type()) + ss.sendCompressorName = s.opts.cp.Type() } else if rc := stream.RecvCompress(); rc != "" && rc != encoding.Identity { // Legacy compressor not specified; attempt to respond with same encoding. ss.comp = encoding.GetCompressor(rc) if ss.comp != nil { - stream.SetSendCompress(rc) + ss.sendCompressorName = rc + } + } + + if ss.sendCompressorName != "" { + if err := stream.SetSendCompress(ss.sendCompressorName); err != nil { + return status.Errorf(codes.Internal, "grpc: failed to set send compressor: %v", err) } } @@ -1640,16 +1651,16 @@ func (s *Server) processStreamingRPC(t transport.ServerTransport, stream *transp ss.trInfo.tr.SetError() ss.mu.Unlock() } - t.WriteStatus(ss.s, appStatus) if len(ss.binlogs) != 0 { st := &binarylog.ServerTrailer{ Trailer: ss.s.Trailer(), Err: appErr, } for _, binlog := range ss.binlogs { - binlog.Log(st) + binlog.Log(stream.Context(), st) } } + t.WriteStatus(ss.s, appStatus) // TODO: Should we log an error from WriteStatus here and below? return appErr } @@ -1658,17 +1669,16 @@ func (s *Server) processStreamingRPC(t transport.ServerTransport, stream *transp ss.trInfo.tr.LazyLog(stringer("OK"), false) ss.mu.Unlock() } - err = t.WriteStatus(ss.s, statusOK) if len(ss.binlogs) != 0 { st := &binarylog.ServerTrailer{ Trailer: ss.s.Trailer(), Err: appErr, } for _, binlog := range ss.binlogs { - binlog.Log(st) + binlog.Log(stream.Context(), st) } } - return err + return t.WriteStatus(ss.s, statusOK) } func (s *Server) handleStream(t transport.ServerTransport, stream *transport.Stream, trInfo *traceInfo) { @@ -1935,6 +1945,60 @@ func SendHeader(ctx context.Context, md metadata.MD) error { return nil } +// SetSendCompressor sets a compressor for outbound messages from the server. +// It must not be called after any event that causes headers to be sent +// (see ServerStream.SetHeader for the complete list). Provided compressor is +// used when below conditions are met: +// +// - compressor is registered via encoding.RegisterCompressor +// - compressor name must exist in the client advertised compressor names +// sent in grpc-accept-encoding header. Use ClientSupportedCompressors to +// get client supported compressor names. +// +// The context provided must be the context passed to the server's handler. +// It must be noted that compressor name encoding.Identity disables the +// outbound compression. +// By default, server messages will be sent using the same compressor with +// which request messages were sent. +// +// It is not safe to call SetSendCompressor concurrently with SendHeader and +// SendMsg. +// +// # Experimental +// +// Notice: This function is EXPERIMENTAL and may be changed or removed in a +// later release. +func SetSendCompressor(ctx context.Context, name string) error { + stream, ok := ServerTransportStreamFromContext(ctx).(*transport.Stream) + if !ok || stream == nil { + return fmt.Errorf("failed to fetch the stream from the given context") + } + + if err := validateSendCompressor(name, stream.ClientAdvertisedCompressors()); err != nil { + return fmt.Errorf("unable to set send compressor: %w", err) + } + + return stream.SetSendCompress(name) +} + +// ClientSupportedCompressors returns compressor names advertised by the client +// via grpc-accept-encoding header. +// +// The context provided must be the context passed to the server's handler. +// +// # Experimental +// +// Notice: This function is EXPERIMENTAL and may be changed or removed in a +// later release. +func ClientSupportedCompressors(ctx context.Context) ([]string, error) { + stream, ok := ServerTransportStreamFromContext(ctx).(*transport.Stream) + if !ok || stream == nil { + return nil, fmt.Errorf("failed to fetch the stream from the given context %v", ctx) + } + + return strings.Split(stream.ClientAdvertisedCompressors(), ","), nil +} + // SetTrailer sets the trailer metadata that will be sent when an RPC returns. // When called more than once, all the provided metadata will be merged. // @@ -1969,3 +2033,22 @@ type channelzServer struct { func (c *channelzServer) ChannelzMetric() *channelz.ServerInternalMetric { return c.s.channelzMetric() } + +// validateSendCompressor returns an error when given compressor name cannot be +// handled by the server or the client based on the advertised compressors. +func validateSendCompressor(name, clientCompressors string) error { + if name == encoding.Identity { + return nil + } + + if !grpcutil.IsCompressorNameRegistered(name) { + return fmt.Errorf("compressor not registered %q", name) + } + + for _, c := range strings.Split(clientCompressors, ",") { + if c == name { + return nil // found match + } + } + return fmt.Errorf("client does not support compressor %q", name) +} diff --git a/vendor/google.golang.org/grpc/stats/stats.go b/vendor/google.golang.org/grpc/stats/stats.go index 0285dcc6a2..7a552a9b78 100644 --- a/vendor/google.golang.org/grpc/stats/stats.go +++ b/vendor/google.golang.org/grpc/stats/stats.go @@ -67,10 +67,18 @@ type InPayload struct { Payload interface{} // Data is the serialized message payload. Data []byte - // Length is the length of uncompressed data. + + // Length is the size of the uncompressed payload data. Does not include any + // framing (gRPC or HTTP/2). Length int - // WireLength is the length of data on wire (compressed, signed, encrypted). + // CompressedLength is the size of the compressed payload data. Does not + // include any framing (gRPC or HTTP/2). Same as Length if compression not + // enabled. + CompressedLength int + // WireLength is the size of the compressed payload data plus gRPC framing. + // Does not include HTTP/2 framing. WireLength int + // RecvTime is the time when the payload is received. RecvTime time.Time } @@ -129,9 +137,15 @@ type OutPayload struct { Payload interface{} // Data is the serialized message payload. Data []byte - // Length is the length of uncompressed data. + // Length is the size of the uncompressed payload data. Does not include any + // framing (gRPC or HTTP/2). Length int - // WireLength is the length of data on wire (compressed, signed, encrypted). + // CompressedLength is the size of the compressed payload data. Does not + // include any framing (gRPC or HTTP/2). Same as Length if compression not + // enabled. + CompressedLength int + // WireLength is the size of the compressed payload data plus gRPC framing. + // Does not include HTTP/2 framing. WireLength int // SentTime is the time when the payload is sent. SentTime time.Time diff --git a/vendor/google.golang.org/grpc/status/status.go b/vendor/google.golang.org/grpc/status/status.go index 623be39f26..53910fb7c9 100644 --- a/vendor/google.golang.org/grpc/status/status.go +++ b/vendor/google.golang.org/grpc/status/status.go @@ -77,7 +77,9 @@ func FromProto(s *spb.Status) *Status { // FromError returns a Status representation of err. // // - If err was produced by this package or implements the method `GRPCStatus() -// *Status`, the appropriate Status is returned. +// *Status`, or if err wraps a type satisfying this, the appropriate Status is +// returned. For wrapped errors, the message returned contains the entire +// err.Error() text and not just the wrapped status. // // - If err is nil, a Status is returned with codes.OK and no message. // @@ -88,10 +90,15 @@ func FromError(err error) (s *Status, ok bool) { if err == nil { return nil, true } - if se, ok := err.(interface { - GRPCStatus() *Status - }); ok { - return se.GRPCStatus(), true + type grpcstatus interface{ GRPCStatus() *Status } + if gs, ok := err.(grpcstatus); ok { + return gs.GRPCStatus(), true + } + var gs grpcstatus + if errors.As(err, &gs) { + p := gs.GRPCStatus().Proto() + p.Message = err.Error() + return status.FromProto(p), true } return New(codes.Unknown, err.Error()), false } @@ -103,19 +110,16 @@ func Convert(err error) *Status { return s } -// Code returns the Code of the error if it is a Status error, codes.OK if err -// is nil, or codes.Unknown otherwise. +// Code returns the Code of the error if it is a Status error or if it wraps a +// Status error. If that is not the case, it returns codes.OK if err is nil, or +// codes.Unknown otherwise. func Code(err error) codes.Code { // Don't use FromError to avoid allocation of OK status. if err == nil { return codes.OK } - if se, ok := err.(interface { - GRPCStatus() *Status - }); ok { - return se.GRPCStatus().Code() - } - return codes.Unknown + + return Convert(err).Code() } // FromContextError converts a context error or wrapped context error into a diff --git a/vendor/google.golang.org/grpc/stream.go b/vendor/google.golang.org/grpc/stream.go index 93231af2ac..d1226a4120 100644 --- a/vendor/google.golang.org/grpc/stream.go +++ b/vendor/google.golang.org/grpc/stream.go @@ -168,10 +168,19 @@ func NewClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, meth } func newClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, opts ...CallOption) (_ ClientStream, err error) { - if md, _, ok := metadata.FromOutgoingContextRaw(ctx); ok { + if md, added, ok := metadata.FromOutgoingContextRaw(ctx); ok { + // validate md if err := imetadata.Validate(md); err != nil { return nil, status.Error(codes.Internal, err.Error()) } + // validate added + for _, kvs := range added { + for i := 0; i < len(kvs); i += 2 { + if err := imetadata.ValidatePair(kvs[i], kvs[i+1]); err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + } + } } if channelz.IsOn() { cc.incrCallsStarted() @@ -352,7 +361,7 @@ func newClientStreamWithParams(ctx context.Context, desc *StreamDesc, cc *Client } } for _, binlog := range cs.binlogs { - binlog.Log(logEntry) + binlog.Log(cs.ctx, logEntry) } } @@ -800,7 +809,7 @@ func (cs *clientStream) Header() (metadata.MD, error) { } cs.serverHeaderBinlogged = true for _, binlog := range cs.binlogs { - binlog.Log(logEntry) + binlog.Log(cs.ctx, logEntry) } } return m, nil @@ -881,7 +890,7 @@ func (cs *clientStream) SendMsg(m interface{}) (err error) { Message: data, } for _, binlog := range cs.binlogs { - binlog.Log(cm) + binlog.Log(cs.ctx, cm) } } return err @@ -905,7 +914,7 @@ func (cs *clientStream) RecvMsg(m interface{}) error { Message: recvInfo.uncompressedBytes, } for _, binlog := range cs.binlogs { - binlog.Log(sm) + binlog.Log(cs.ctx, sm) } } if err != nil || !cs.desc.ServerStreams { @@ -926,7 +935,7 @@ func (cs *clientStream) RecvMsg(m interface{}) error { logEntry.PeerAddr = peer.Addr } for _, binlog := range cs.binlogs { - binlog.Log(logEntry) + binlog.Log(cs.ctx, logEntry) } } } @@ -953,7 +962,7 @@ func (cs *clientStream) CloseSend() error { OnClientSide: true, } for _, binlog := range cs.binlogs { - binlog.Log(chc) + binlog.Log(cs.ctx, chc) } } // We never returned an error here for reasons. @@ -971,6 +980,9 @@ func (cs *clientStream) finish(err error) { return } cs.finished = true + for _, onFinish := range cs.callInfo.onFinish { + onFinish(err) + } cs.commitAttemptLocked() if cs.attempt != nil { cs.attempt.finish(err) @@ -992,7 +1004,7 @@ func (cs *clientStream) finish(err error) { OnClientSide: true, } for _, binlog := range cs.binlogs { - binlog.Log(c) + binlog.Log(cs.ctx, c) } } if err == nil { @@ -1081,9 +1093,10 @@ func (a *csAttempt) recvMsg(m interface{}, payInfo *payloadInfo) (err error) { RecvTime: time.Now(), Payload: m, // TODO truncate large payload. - Data: payInfo.uncompressedBytes, - WireLength: payInfo.wireLength + headerLen, - Length: len(payInfo.uncompressedBytes), + Data: payInfo.uncompressedBytes, + WireLength: payInfo.compressedLength + headerLen, + CompressedLength: payInfo.compressedLength, + Length: len(payInfo.uncompressedBytes), }) } if channelz.IsOn() { @@ -1511,6 +1524,8 @@ type serverStream struct { comp encoding.Compressor decomp encoding.Compressor + sendCompressorName string + maxReceiveMessageSize int maxSendMessageSize int trInfo *traceInfo @@ -1558,7 +1573,7 @@ func (ss *serverStream) SendHeader(md metadata.MD) error { } ss.serverHeaderBinlogged = true for _, binlog := range ss.binlogs { - binlog.Log(sh) + binlog.Log(ss.ctx, sh) } } return err @@ -1603,6 +1618,13 @@ func (ss *serverStream) SendMsg(m interface{}) (err error) { } }() + // Server handler could have set new compressor by calling SetSendCompressor. + // In case it is set, we need to use it for compressing outbound message. + if sendCompressorsName := ss.s.SendCompress(); sendCompressorsName != ss.sendCompressorName { + ss.comp = encoding.GetCompressor(sendCompressorsName) + ss.sendCompressorName = sendCompressorsName + } + // load hdr, payload, data hdr, payload, data, err := prepareMsg(m, ss.codec, ss.cp, ss.comp) if err != nil { @@ -1624,14 +1646,14 @@ func (ss *serverStream) SendMsg(m interface{}) (err error) { } ss.serverHeaderBinlogged = true for _, binlog := range ss.binlogs { - binlog.Log(sh) + binlog.Log(ss.ctx, sh) } } sm := &binarylog.ServerMessage{ Message: data, } for _, binlog := range ss.binlogs { - binlog.Log(sm) + binlog.Log(ss.ctx, sm) } } if len(ss.statsHandler) != 0 { @@ -1679,7 +1701,7 @@ func (ss *serverStream) RecvMsg(m interface{}) (err error) { if len(ss.binlogs) != 0 { chc := &binarylog.ClientHalfClose{} for _, binlog := range ss.binlogs { - binlog.Log(chc) + binlog.Log(ss.ctx, chc) } } return err @@ -1695,9 +1717,10 @@ func (ss *serverStream) RecvMsg(m interface{}) (err error) { RecvTime: time.Now(), Payload: m, // TODO truncate large payload. - Data: payInfo.uncompressedBytes, - WireLength: payInfo.wireLength + headerLen, - Length: len(payInfo.uncompressedBytes), + Data: payInfo.uncompressedBytes, + Length: len(payInfo.uncompressedBytes), + WireLength: payInfo.compressedLength + headerLen, + CompressedLength: payInfo.compressedLength, }) } } @@ -1706,7 +1729,7 @@ func (ss *serverStream) RecvMsg(m interface{}) (err error) { Message: payInfo.uncompressedBytes, } for _, binlog := range ss.binlogs { - binlog.Log(cm) + binlog.Log(ss.ctx, cm) } } return nil diff --git a/vendor/google.golang.org/grpc/version.go b/vendor/google.golang.org/grpc/version.go index fe552c315b..853ce0e30f 100644 --- a/vendor/google.golang.org/grpc/version.go +++ b/vendor/google.golang.org/grpc/version.go @@ -19,4 +19,4 @@ package grpc // Version is the current grpc version. -const Version = "1.53.0" +const Version = "1.55.0" diff --git a/vendor/google.golang.org/grpc/vet.sh b/vendor/google.golang.org/grpc/vet.sh index 3728aed04f..a8e4732b3d 100644 --- a/vendor/google.golang.org/grpc/vet.sh +++ b/vendor/google.golang.org/grpc/vet.sh @@ -41,16 +41,8 @@ if [[ "$1" = "-install" ]]; then github.com/client9/misspell/cmd/misspell popd if [[ -z "${VET_SKIP_PROTO}" ]]; then - if [[ "${TRAVIS}" = "true" ]]; then - PROTOBUF_VERSION=3.14.0 - PROTOC_FILENAME=protoc-${PROTOBUF_VERSION}-linux-x86_64.zip - pushd /home/travis - wget https://github.com/google/protobuf/releases/download/v${PROTOBUF_VERSION}/${PROTOC_FILENAME} - unzip ${PROTOC_FILENAME} - bin/protoc --version - popd - elif [[ "${GITHUB_ACTIONS}" = "true" ]]; then - PROTOBUF_VERSION=3.14.0 + if [[ "${GITHUB_ACTIONS}" = "true" ]]; then + PROTOBUF_VERSION=22.0 # a.k.a v4.22.0 in pb.go files. PROTOC_FILENAME=protoc-${PROTOBUF_VERSION}-linux-x86_64.zip pushd /home/runner/go wget https://github.com/google/protobuf/releases/download/v${PROTOBUF_VERSION}/${PROTOC_FILENAME} @@ -68,8 +60,7 @@ fi # - Check that generated proto files are up to date. if [[ -z "${VET_SKIP_PROTO}" ]]; then - PATH="/home/travis/bin:${PATH}" make proto && \ - git status --porcelain 2>&1 | fail_on_output || \ + make proto && git status --porcelain 2>&1 | fail_on_output || \ (git status; git --no-pager diff; exit 1) fi diff --git a/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go b/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go index 3dc8e97878..45c81f0298 100644 --- a/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go +++ b/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go @@ -88,15 +88,15 @@ func parseNumber(input []byte) number { neg = true s = s[1:] size++ - if len(s) == 0 { - return number{} - } // Consume any whitespace or comments between the // negative sign and the rest of the number lenBefore := len(s) s = consume(s, 0) sep = lenBefore - len(s) size += sep + if len(s) == 0 { + return number{} + } } switch { diff --git a/vendor/google.golang.org/protobuf/internal/version/version.go b/vendor/google.golang.org/protobuf/internal/version/version.go index f6e0119fe9..f7014cd51c 100644 --- a/vendor/google.golang.org/protobuf/internal/version/version.go +++ b/vendor/google.golang.org/protobuf/internal/version/version.go @@ -51,7 +51,7 @@ import ( // 10. Send out the CL for review and submit it. const ( Major = 1 - Minor = 29 + Minor = 30 Patch = 0 PreRelease = "" ) diff --git a/vendor/modules.txt b/vendor/modules.txt index f22e3af6ae..1b906af33d 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1,25 +1,25 @@ -# cloud.google.com/go v0.110.0 +# cloud.google.com/go v0.110.2 ## explicit; go 1.19 cloud.google.com/go/internal cloud.google.com/go/internal/optional cloud.google.com/go/internal/trace cloud.google.com/go/internal/version -# cloud.google.com/go/compute v1.18.0 +# cloud.google.com/go/compute v1.19.3 ## explicit; go 1.19 cloud.google.com/go/compute/internal # cloud.google.com/go/compute/metadata v0.2.3 ## explicit; go 1.19 cloud.google.com/go/compute/metadata -# cloud.google.com/go/iam v0.12.0 +# cloud.google.com/go/iam v1.1.0 ## explicit; go 1.19 cloud.google.com/go/iam cloud.google.com/go/iam/apiv1/iampb -# cloud.google.com/go/storage v1.29.0 +# cloud.google.com/go/storage v1.31.0 ## explicit; go 1.19 cloud.google.com/go/storage cloud.google.com/go/storage/internal cloud.google.com/go/storage/internal/apiv2 -cloud.google.com/go/storage/internal/apiv2/stubs +cloud.google.com/go/storage/internal/apiv2/storagepb # github.com/Azure/azure-pipeline-go v0.2.3 ## explicit; go 1.14 github.com/Azure/azure-pipeline-go/pipeline @@ -565,6 +565,28 @@ github.com/google/go-github/github # github.com/google/go-querystring v1.1.0 ## explicit; go 1.10 github.com/google/go-querystring/query +# github.com/google/s2a-go v0.1.4 +## explicit; go 1.16 +github.com/google/s2a-go +github.com/google/s2a-go/fallback +github.com/google/s2a-go/internal/authinfo +github.com/google/s2a-go/internal/handshaker +github.com/google/s2a-go/internal/handshaker/service +github.com/google/s2a-go/internal/proto/common_go_proto +github.com/google/s2a-go/internal/proto/s2a_context_go_proto +github.com/google/s2a-go/internal/proto/s2a_go_proto +github.com/google/s2a-go/internal/proto/v2/common_go_proto +github.com/google/s2a-go/internal/proto/v2/s2a_context_go_proto +github.com/google/s2a-go/internal/proto/v2/s2a_go_proto +github.com/google/s2a-go/internal/record +github.com/google/s2a-go/internal/record/internal/aeadcrypter +github.com/google/s2a-go/internal/record/internal/halfconn +github.com/google/s2a-go/internal/tokenmanager +github.com/google/s2a-go/internal/v2 +github.com/google/s2a-go/internal/v2/certverifier +github.com/google/s2a-go/internal/v2/remotesigner +github.com/google/s2a-go/internal/v2/tlsconfigstore +github.com/google/s2a-go/stream # github.com/google/slowjam v1.0.0 ## explicit; go 1.14 github.com/google/slowjam/pkg/stacklog @@ -578,7 +600,7 @@ github.com/google/uuid ## explicit; go 1.19 github.com/googleapis/enterprise-certificate-proxy/client github.com/googleapis/enterprise-certificate-proxy/client/util -# github.com/googleapis/gax-go/v2 v2.7.0 +# github.com/googleapis/gax-go/v2 v2.11.0 ## explicit; go 1.19 github.com/googleapis/gax-go/v2 github.com/googleapis/gax-go/v2/apierror @@ -819,14 +841,18 @@ go.opencensus.io/trace/propagation go.opencensus.io/trace/tracestate # go.uber.org/goleak v1.2.1 ## explicit; go 1.18 -# golang.org/x/crypto v0.2.0 +# golang.org/x/crypto v0.9.0 ## explicit; go 1.17 golang.org/x/crypto/blowfish golang.org/x/crypto/cast5 golang.org/x/crypto/chacha20 +golang.org/x/crypto/chacha20poly1305 +golang.org/x/crypto/cryptobyte +golang.org/x/crypto/cryptobyte/asn1 golang.org/x/crypto/curve25519 golang.org/x/crypto/curve25519/internal/field golang.org/x/crypto/ed25519 +golang.org/x/crypto/hkdf golang.org/x/crypto/internal/alias golang.org/x/crypto/internal/poly1305 golang.org/x/crypto/pkcs12 @@ -838,7 +864,7 @@ golang.org/x/crypto/ssh/knownhosts # golang.org/x/mod v0.9.0 ## explicit; go 1.17 golang.org/x/mod/semver -# golang.org/x/net v0.8.0 +# golang.org/x/net v0.10.0 ## explicit; go 1.17 golang.org/x/net/context golang.org/x/net/http/httpguts @@ -850,7 +876,7 @@ golang.org/x/net/internal/socks golang.org/x/net/internal/timeseries golang.org/x/net/proxy golang.org/x/net/trace -# golang.org/x/oauth2 v0.6.0 +# golang.org/x/oauth2 v0.8.0 ## explicit; go 1.17 golang.org/x/oauth2 golang.org/x/oauth2/authhandler @@ -859,11 +885,11 @@ golang.org/x/oauth2/google/internal/externalaccount golang.org/x/oauth2/internal golang.org/x/oauth2/jws golang.org/x/oauth2/jwt -# golang.org/x/sync v0.1.0 +# golang.org/x/sync v0.2.0 ## explicit golang.org/x/sync/errgroup golang.org/x/sync/syncmap -# golang.org/x/sys v0.6.0 +# golang.org/x/sys v0.8.0 ## explicit; go 1.17 golang.org/x/sys/cpu golang.org/x/sys/execabs @@ -871,7 +897,7 @@ golang.org/x/sys/internal/unsafeheader golang.org/x/sys/unix golang.org/x/sys/windows golang.org/x/sys/windows/registry -# golang.org/x/text v0.8.0 +# golang.org/x/text v0.9.0 ## explicit; go 1.17 golang.org/x/text/runes golang.org/x/text/secure/bidirule @@ -903,12 +929,13 @@ golang.org/x/tools/internal/typesinternal ## explicit; go 1.17 golang.org/x/xerrors golang.org/x/xerrors/internal -# google.golang.org/api v0.110.0 +# google.golang.org/api v0.126.0 ## explicit; go 1.19 google.golang.org/api/googleapi google.golang.org/api/googleapi/transport google.golang.org/api/iamcredentials/v1 google.golang.org/api/internal +google.golang.org/api/internal/cert google.golang.org/api/internal/gensupport google.golang.org/api/internal/impersonate google.golang.org/api/internal/third_party/uritemplates @@ -917,11 +944,9 @@ google.golang.org/api/option google.golang.org/api/option/internaloption google.golang.org/api/storage/v1 google.golang.org/api/transport -google.golang.org/api/transport/cert google.golang.org/api/transport/grpc google.golang.org/api/transport/http google.golang.org/api/transport/http/internal/propagation -google.golang.org/api/transport/internal/dca # google.golang.org/appengine v1.6.7 ## explicit; go 1.11 google.golang.org/appengine @@ -936,17 +961,21 @@ google.golang.org/appengine/internal/socket google.golang.org/appengine/internal/urlfetch google.golang.org/appengine/socket google.golang.org/appengine/urlfetch -# google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 +# google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc +## explicit; go 1.19 +google.golang.org/genproto/googleapis/type/date +google.golang.org/genproto/googleapis/type/expr +google.golang.org/genproto/internal +# google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc ## explicit; go 1.19 google.golang.org/genproto/googleapis/api google.golang.org/genproto/googleapis/api/annotations -google.golang.org/genproto/googleapis/iam/v1 +# google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc +## explicit; go 1.19 google.golang.org/genproto/googleapis/rpc/code google.golang.org/genproto/googleapis/rpc/errdetails google.golang.org/genproto/googleapis/rpc/status -google.golang.org/genproto/googleapis/type/date -google.golang.org/genproto/googleapis/type/expr -# google.golang.org/grpc v1.53.0 +# google.golang.org/grpc v1.55.0 ## explicit; go 1.17 google.golang.org/grpc google.golang.org/grpc/attributes @@ -1008,7 +1037,7 @@ google.golang.org/grpc/serviceconfig google.golang.org/grpc/stats google.golang.org/grpc/status google.golang.org/grpc/tap -# google.golang.org/protobuf v1.29.0 +# google.golang.org/protobuf v1.30.0 ## explicit; go 1.11 google.golang.org/protobuf/encoding/protojson google.golang.org/protobuf/encoding/prototext