You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spark.apache.org by gu...@apache.org on 2024/07/03 10:19:31 UTC

(spark-connect-go) 02/02: Revert "[SPARK-48777][BUILD] Migrate build system to Bazel"

This is an automated email from the ASF dual-hosted git repository.

gurwls223 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/spark-connect-go.git

commit 8dc8fa486a624411af460a76c50fb5213fa4e893
Author: Hyukjin Kwon <gu...@apache.org>
AuthorDate: Wed Jul 3 19:19:20 2024 +0900

    Revert "[SPARK-48777][BUILD] Migrate build system to Bazel"
    
    This reverts commit 17d03a04d194e8d1430cd158bbbaffb098df0b75.
---
 .github/workflows/build.yml                        |   18 +-
 .gitignore                                         |    8 +-
 BUILD.bazel                                        |   38 -
 MODULE.bazel                                       |   31 -
 MODULE.bazel.lock                                  | 3069 ---------
 Makefile                                           |  110 +
 README.md                                          |   48 +-
 WORKSPACE                                          |    0
 .gitignore => buf.gen.yaml                         |   24 +-
 .gitignore => buf.work.yaml                        |   22 +-
 client/channel/BUILD.bazel                         |   28 -
 client/sparkerrors/BUILD.bazel                     |   15 -
 client/sql/BUILD.bazel                             |   56 -
 client/sql/dataframe.go                            |    2 +-
 client/sql/dataframe_test.go                       |    2 +-
 client/sql/dataframereader.go                      |    2 +-
 client/sql/dataframewriter.go                      |    2 +-
 client/sql/dataframewriter_test.go                 |    2 +-
 client/sql/executeplanclient.go                    |    2 +-
 client/sql/mocks_test.go                           |    2 +-
 client/sql/sparksession.go                         |    2 +-
 client/sql/sparksession_test.go                    |    2 +-
 .../BUILD.bazel                                    |   20 -
 cmd/spark-connect-example-raw-grpc-client/main.go  |    2 +-
 .../BUILD.bazel                                    |   15 -
 internal/generated/base.pb.go                      | 6822 +++++++++++++++++++
 internal/generated/base_grpc.pb.go                 |  507 ++
 internal/generated/catalog.pb.go                   | 2599 +++++++
 internal/generated/commands.pb.go                  | 3970 +++++++++++
 internal/generated/common.pb.go                    |  285 +
 internal/generated/example_plugins.pb.go           |  323 +
 internal/generated/expressions.pb.go               | 3498 ++++++++++
 internal/generated/relations.pb.go                 | 7158 ++++++++++++++++++++
 internal/generated/types.pb.go                     | 2502 +++++++
 34 files changed, 27832 insertions(+), 3354 deletions(-)

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index b67bf4b..b6b1c4c 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -38,17 +38,27 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - name: Checkout Repository
-        uses: actions/checkout@v4
+        uses: actions/checkout@v3
         with:
+          fetch-depth: 0
           submodules: recursive
+          ref: master
       - name: Install Golang
         run: |
           curl -LO https://go.dev/dl/go1.21.11.linux-amd64.tar.gz
           sudo tar -C /usr/local -xzf go1.21.11.linux-amd64.tar.gz
+      - name: Install Buf
+        run: |
+          # See more in "Installation" https://docs.buf.build/installation#tarball
+          curl -LO https://github.com/bufbuild/buf/releases/download/v1.18.0/buf-Linux-x86_64.tar.gz
+          mkdir -p $HOME/buf
+          tar -xvzf buf-Linux-x86_64.tar.gz -C $HOME/buf --strip-components 1
       - name: Run Build & Test
         run: |
+          export PATH=$PATH:$HOME/buf/bin
           export PATH=$PATH:/usr/local/go/bin
           pwd
-          ls
-          bazel build //...
-          bazel test //...
\ No newline at end of file
+          go mod download -x
+          make gen
+          make
+          make test
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 50b0fb3..e76d6f0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -26,10 +26,4 @@ coverage*
 
 # Ignore binaries
 cmd/spark-connect-example-raw-grpc-client/spark-connect-example-raw-grpc-client
-cmd/spark-connect-example-spark-session/spark-connect-example-spark-session
-
-# Bazel
-bazel-out
-bazel-bin
-bazel-spark-connect-go
-bazel-testlogs
\ No newline at end of file
+cmd/spark-connect-example-spark-session/spark-connect-example-spark-session
\ No newline at end of file
diff --git a/BUILD.bazel b/BUILD.bazel
deleted file mode 100644
index da5861e..0000000
--- a/BUILD.bazel
+++ /dev/null
@@ -1,38 +0,0 @@
-# Define the dependencies:
-load("@rules_proto//proto:defs.bzl", "proto_library")
-load("@gazelle//:def.bzl", "gazelle")
-load("@rules_proto_grpc_go//:defs.bzl", "go_grpc_compile", "go_grpc_library", "go_proto_compile", "go_proto_library")
-
-# gazelle:prefix github.com/apache/spark-connect-go/v1
-# gazelle:exclude spark
-gazelle(name = "gazelle")
-
-# This is the proto library definition that comes directly out of Spark.
-proto_library(
-    name = "spark_connect_protos",
-    srcs = glob(["spark/connector/connect/common/src/main/protobuf/**/*.proto"]),
-    import_prefix = "",
-    strip_import_prefix = "spark/connector/connect/common/src/main/protobuf/",
-    visibility = ["//visibility:public"],
-    deps = ["@protobuf//:any_proto"],
-)
-
-# Create the proto library directly.
-go_proto_library(
-    name = "spark_connect_proto",
-    importpath = "github.com/apache/spark-connect-go/v1/internal/generated/spark/connect",
-    protos = [
-        ":spark_connect_protos",
-    ],
-    visibility = ["//visibility:public"],
-)
-
-go_grpc_library(
-    name = "spark_connect_proto_grpc",
-    compilers = ["@io_bazel_rules_go//proto:go_grpc"],
-    importpath = "github.com/apache/spark-connect-go/v1/internal/generated/spark/connect",
-    protos = [
-        ":spark_connect_protos",
-    ],
-    visibility = ["//visibility:public"],
-)
diff --git a/MODULE.bazel b/MODULE.bazel
deleted file mode 100644
index 925072f..0000000
--- a/MODULE.bazel
+++ /dev/null
@@ -1,31 +0,0 @@
-module(name = "spark-connect-go", version = "1.0")
-
-
-bazel_dep(name = "rules_go", version = "0.44.2")
-bazel_dep(name = "gazelle", version = "0.35.0")
-bazel_dep(name = "protobuf", version = "27.2")
-bazel_dep(name = "rules_proto_grpc", version = "5.0.0-alpha2")
-bazel_dep(name = "rules_proto_grpc_go", version = "5.0.0-alpha2")
-
-
-go_deps = use_extension("@gazelle//:extensions.bzl", "go_deps")
-go_deps.from_file(go_mod = "//:go.mod")
-
-# Weirdness...
-go_deps.gazelle_override(
-    path="google.golang.org/protobuf",
-    directives=[
-        "gazelle:proto disable"
-    ]
-)
-
-# All *direct* Go dependencies of the module have to be listed explicitly.
-use_repo(
-    go_deps,
-    "com_github_apache_arrow_go_v12",
-    "com_github_google_uuid",
-    "org_golang_google_grpc",
-    "com_github_stretchr_testify",
-    "org_golang_google_protobuf",
-    "org_golang_x_oauth2",
-)
\ No newline at end of file
diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock
deleted file mode 100644
index 9276b86..0000000
--- a/MODULE.bazel.lock
+++ /dev/null
@@ -1,3069 +0,0 @@
-{
-  "lockFileVersion": 6,
-  "moduleFileHash": "7804db7a1826545b7203996fe1acff070a9a5dc202000d3db2c9df47fb2f463f",
-  "flags": {
-    "cmdRegistries": [
-      "https://bcr.bazel.build/"
-    ],
-    "cmdModuleOverrides": {},
-    "allowedYankedVersions": [],
-    "envVarAllowedYankedVersions": "",
-    "ignoreDevDependency": false,
-    "directDependenciesMode": "WARNING",
-    "compatibilityMode": "ERROR"
-  },
-  "localOverrideHashes": {
-    "bazel_tools": "1ae69322ac3823527337acf02016e8ee95813d8d356f47060255b8956fa642f0"
-  },
-  "moduleDepGraph": {
-    "<root>": {
-      "name": "spark-connect-go",
-      "version": "1.0",
-      "key": "<root>",
-      "repoName": "spark-connect-go",
-      "executionPlatformsToRegister": [],
-      "toolchainsToRegister": [],
-      "extensionUsages": [
-        {
-          "extensionBzlFile": "@gazelle//:extensions.bzl",
-          "extensionName": "go_deps",
-          "usingModule": "<root>",
-          "location": {
-            "file": "@@//:MODULE.bazel",
-            "line": 11,
-            "column": 24
-          },
-          "imports": {
-            "com_github_apache_arrow_go_v12": "com_github_apache_arrow_go_v12",
-            "com_github_google_uuid": "com_github_google_uuid",
-            "org_golang_google_grpc": "org_golang_google_grpc",
-            "com_github_stretchr_testify": "com_github_stretchr_testify",
-            "org_golang_google_protobuf": "org_golang_google_protobuf",
-            "org_golang_x_oauth2": "org_golang_x_oauth2"
-          },
-          "devImports": [],
-          "tags": [
-            {
-              "tagName": "from_file",
-              "attributeValues": {
-                "go_mod": "//:go.mod"
-              },
-              "devDependency": false,
-              "location": {
-                "file": "@@//:MODULE.bazel",
-                "line": 12,
-                "column": 18
-              }
-            },
-            {
-              "tagName": "gazelle_override",
-              "attributeValues": {
-                "path": "google.golang.org/protobuf",
-                "directives": [
-                  "gazelle:proto disable"
-                ]
-              },
-              "devDependency": false,
-              "location": {
-                "file": "@@//:MODULE.bazel",
-                "line": 15,
-                "column": 25
-              }
-            }
-          ],
-          "hasDevUseExtension": false,
-          "hasNonDevUseExtension": true
-        }
-      ],
-      "deps": {
-        "rules_go": "rules_go@0.44.2",
-        "gazelle": "gazelle@0.35.0",
-        "protobuf": "protobuf@27.2",
-        "rules_proto_grpc": "rules_proto_grpc@5.0.0-alpha2",
-        "rules_proto_grpc_go": "rules_proto_grpc_go@5.0.0-alpha2",
-        "bazel_tools": "bazel_tools@_",
-        "local_config_platform": "local_config_platform@_"
-      }
-    },
-    "rules_go@0.44.2": {
-      "name": "rules_go",
-      "version": "0.44.2",
-      "key": "rules_go@0.44.2",
-      "repoName": "io_bazel_rules_go",
-      "executionPlatformsToRegister": [],
-      "toolchainsToRegister": [
-        "@go_toolchains//:all"
-      ],
-      "extensionUsages": [
-        {
-          "extensionBzlFile": "@io_bazel_rules_go//go:extensions.bzl",
-          "extensionName": "go_sdk",
-          "usingModule": "rules_go@0.44.2",
-          "location": {
-            "file": "https://bcr.bazel.build/modules/rules_go/0.44.2/MODULE.bazel",
-            "line": 14,
-            "column": 23
-          },
-          "imports": {
-            "go_toolchains": "go_toolchains",
-            "io_bazel_rules_nogo": "io_bazel_rules_nogo"
-          },
-          "devImports": [],
-          "tags": [
-            {
-              "tagName": "download",
-              "attributeValues": {
-                "name": "go_default_sdk",
-                "version": "1.21.1"
-              },
-              "devDependency": false,
-              "location": {
-                "file": "https://bcr.bazel.build/modules/rules_go/0.44.2/MODULE.bazel",
-                "line": 15,
-                "column": 16
-              }
-            }
-          ],
-          "hasDevUseExtension": false,
-          "hasNonDevUseExtension": true
-        },
-        {
-          "extensionBzlFile": "@gazelle//:extensions.bzl",
-          "extensionName": "go_deps",
-          "usingModule": "rules_go@0.44.2",
-          "location": {
-            "file": "https://bcr.bazel.build/modules/rules_go/0.44.2/MODULE.bazel",
-            "line": 30,
-            "column": 24
-          },
-          "imports": {
-            "com_github_gogo_protobuf": "com_github_gogo_protobuf",
-            "com_github_golang_mock": "com_github_golang_mock",
-            "com_github_golang_protobuf": "com_github_golang_protobuf",
-            "org_golang_google_genproto": "org_golang_google_genproto",
-            "org_golang_google_grpc": "org_golang_google_grpc",
-            "org_golang_google_grpc_cmd_protoc_gen_go_grpc": "org_golang_google_grpc_cmd_protoc_gen_go_grpc",
-            "org_golang_google_protobuf": "org_golang_google_protobuf",
-            "org_golang_x_net": "org_golang_x_net",
-            "org_golang_x_tools": "org_golang_x_tools"
-          },
-          "devImports": [],
-          "tags": [
-            {
-              "tagName": "from_file",
-              "attributeValues": {
-                "go_mod": "//:go.mod"
-              },
-              "devDependency": false,
-              "location": {
-                "file": "https://bcr.bazel.build/modules/rules_go/0.44.2/MODULE.bazel",
-                "line": 31,
-                "column": 18
-              }
-            }
-          ],
-          "hasDevUseExtension": false,
-          "hasNonDevUseExtension": true
-        }
-      ],
-      "deps": {
-        "bazel_features": "bazel_features@1.1.1",
-        "bazel_skylib": "bazel_skylib@1.5.0",
-        "platforms": "platforms@0.0.8",
-        "rules_proto": "rules_proto@5.3.0-21.7",
-        "com_google_protobuf": "protobuf@27.2",
-        "gazelle": "gazelle@0.35.0",
-        "bazel_tools": "bazel_tools@_",
-        "local_config_platform": "local_config_platform@_"
-      },
-      "repoSpec": {
-        "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-        "ruleClassName": "http_archive",
-        "attributes": {
-          "urls": [
-            "https://github.com/bazelbuild/rules_go/releases/download/v0.44.2/rules_go-v0.44.2.zip"
-          ],
-          "integrity": "sha256-fHbWI2so/2laoozzX5XeMXqUcv0fsUrHl8m/aE8Js3w=",
-          "strip_prefix": "",
-          "remote_patches": {},
-          "remote_patch_strip": 0
-        }
-      }
-    },
-    "gazelle@0.35.0": {
-      "name": "gazelle",
-      "version": "0.35.0",
-      "key": "gazelle@0.35.0",
-      "repoName": "bazel_gazelle",
-      "executionPlatformsToRegister": [],
-      "toolchainsToRegister": [],
-      "extensionUsages": [
-        {
-          "extensionBzlFile": "@io_bazel_rules_go//go:extensions.bzl",
-          "extensionName": "go_sdk",
-          "usingModule": "gazelle@0.35.0",
-          "location": {
-            "file": "https://bcr.bazel.build/modules/gazelle/0.35.0/MODULE.bazel",
-            "line": 12,
-            "column": 23
-          },
-          "imports": {
-            "go_host_compatible_sdk_label": "go_host_compatible_sdk_label"
-          },
-          "devImports": [],
-          "tags": [],
-          "hasDevUseExtension": false,
-          "hasNonDevUseExtension": true
-        },
-        {
-          "extensionBzlFile": "@bazel_gazelle//internal/bzlmod:non_module_deps.bzl",
-          "extensionName": "non_module_deps",
-          "usingModule": "gazelle@0.35.0",
-          "location": {
-            "file": "https://bcr.bazel.build/modules/gazelle/0.35.0/MODULE.bazel",
-            "line": 20,
-            "column": 32
-          },
-          "imports": {
-            "bazel_gazelle_go_repository_cache": "bazel_gazelle_go_repository_cache",
-            "bazel_gazelle_go_repository_tools": "bazel_gazelle_go_repository_tools",
-            "bazel_gazelle_is_bazel_module": "bazel_gazelle_is_bazel_module"
-          },
-          "devImports": [],
-          "tags": [],
-          "hasDevUseExtension": false,
-          "hasNonDevUseExtension": true
-        },
-        {
-          "extensionBzlFile": "@bazel_gazelle//:extensions.bzl",
-          "extensionName": "go_deps",
-          "usingModule": "gazelle@0.35.0",
-          "location": {
-            "file": "https://bcr.bazel.build/modules/gazelle/0.35.0/MODULE.bazel",
-            "line": 28,
-            "column": 24
-          },
-          "imports": {
-            "com_github_bazelbuild_buildtools": "com_github_bazelbuild_buildtools",
-            "com_github_bmatcuk_doublestar_v4": "com_github_bmatcuk_doublestar_v4",
-            "com_github_fsnotify_fsnotify": "com_github_fsnotify_fsnotify",
-            "com_github_google_go_cmp": "com_github_google_go_cmp",
-            "com_github_pmezard_go_difflib": "com_github_pmezard_go_difflib",
-            "org_golang_x_mod": "org_golang_x_mod",
-            "org_golang_x_sync": "org_golang_x_sync",
-            "org_golang_x_tools": "org_golang_x_tools",
-            "org_golang_x_tools_go_vcs": "org_golang_x_tools_go_vcs",
-            "bazel_gazelle_go_repository_config": "bazel_gazelle_go_repository_config",
-            "com_github_golang_protobuf": "com_github_golang_protobuf",
-            "org_golang_google_protobuf": "org_golang_google_protobuf"
-          },
-          "devImports": [],
-          "tags": [
-            {
-              "tagName": "from_file",
-              "attributeValues": {
-                "go_mod": "//:go.mod"
-              },
-              "devDependency": false,
-              "location": {
-                "file": "https://bcr.bazel.build/modules/gazelle/0.35.0/MODULE.bazel",
-                "line": 29,
-                "column": 18
-              }
-            },
-            {
-              "tagName": "module",
-              "attributeValues": {
-                "path": "golang.org/x/tools",
-                "sum": "h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8=",
-                "version": "v0.15.0"
-              },
-              "devDependency": false,
-              "location": {
-                "file": "https://bcr.bazel.build/modules/gazelle/0.35.0/MODULE.bazel",
-                "line": 33,
-                "column": 15
-              }
-            }
-          ],
-          "hasDevUseExtension": false,
-          "hasNonDevUseExtension": true
-        }
-      ],
-      "deps": {
-        "bazel_skylib": "bazel_skylib@1.5.0",
-        "com_google_protobuf": "protobuf@27.2",
-        "io_bazel_rules_go": "rules_go@0.44.2",
-        "rules_proto": "rules_proto@5.3.0-21.7",
-        "bazel_tools": "bazel_tools@_",
-        "local_config_platform": "local_config_platform@_"
-      },
-      "repoSpec": {
-        "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-        "ruleClassName": "http_archive",
-        "attributes": {
-          "urls": [
-            "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.35.0/bazel-gazelle-v0.35.0.tar.gz"
-          ],
-          "integrity": "sha256-MpOL2hbmcABjA1R5Bj2dJMYO2o15/Uc5Vj9Q0zHLMgk=",
-          "strip_prefix": "",
-          "remote_patches": {},
-          "remote_patch_strip": 0
-        }
-      }
-    },
-    "protobuf@27.2": {
-      "name": "protobuf",
-      "version": "27.2",
-      "key": "protobuf@27.2",
-      "repoName": "com_google_protobuf",
-      "executionPlatformsToRegister": [],
-      "toolchainsToRegister": [],
-      "extensionUsages": [],
-      "deps": {
-        "com_google_absl": "abseil-cpp@20230802.0.bcr.1",
-        "bazel_skylib": "bazel_skylib@1.5.0",
-        "jsoncpp": "jsoncpp@1.9.5",
-        "rules_cc": "rules_cc@0.0.9",
-        "rules_java": "rules_java@7.4.0",
-        "rules_jvm_external": "rules_jvm_external@5.1",
-        "rules_pkg": "rules_pkg@0.7.0",
-        "rules_python": "rules_python@0.22.1",
-        "platforms": "platforms@0.0.8",
-        "zlib": "zlib@1.3",
-        "rules_proto": "rules_proto@5.3.0-21.7",
-        "bazel_tools": "bazel_tools@_",
-        "local_config_platform": "local_config_platform@_"
-      },
-      "repoSpec": {
-        "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-        "ruleClassName": "http_archive",
-        "attributes": {
-          "urls": [
-            "https://github.com/protocolbuffers/protobuf/releases/download/v27.2/protobuf-27.2.zip"
-          ],
-          "integrity": "sha256-e0VU9zCkH1xZXO81AgOKabiVTDDY7JxioWfV4evYwhA=",
-          "strip_prefix": "protobuf-27.2",
-          "remote_patches": {},
-          "remote_patch_strip": 0
-        }
-      }
-    },
-    "rules_proto_grpc@5.0.0-alpha2": {
-      "name": "rules_proto_grpc",
-      "version": "5.0.0-alpha2",
-      "key": "rules_proto_grpc@5.0.0-alpha2",
-      "repoName": "rules_proto_grpc",
-      "executionPlatformsToRegister": [],
-      "toolchainsToRegister": [
-        "//protoc:protoc_toolchain"
-      ],
-      "extensionUsages": [],
-      "deps": {
-        "bazel_skylib": "bazel_skylib@1.5.0",
-        "protobuf": "protobuf@27.2",
-        "rules_cc": "rules_cc@0.0.9",
-        "rules_proto": "rules_proto@5.3.0-21.7",
-        "bazel_tools": "bazel_tools@_",
-        "local_config_platform": "local_config_platform@_"
-      },
-      "repoSpec": {
-        "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-        "ruleClassName": "http_archive",
-        "attributes": {
-          "urls": [
-            "https://github.com/rules-proto-grpc/rules_proto_grpc/releases/download/5.0.0-alpha2/rules_proto_grpc-5.0.0-alpha2.tar.gz"
-          ],
-          "integrity": "sha256-S8TbEoY2mkpTH0oZmtpUMNP4Z1yo57CEDL0ltrMF5JU=",
-          "strip_prefix": "rules_proto_grpc-5.0.0-alpha2",
-          "remote_patches": {},
-          "remote_patch_strip": 0
-        }
-      }
-    },
-    "rules_proto_grpc_go@5.0.0-alpha2": {
-      "name": "rules_proto_grpc_go",
-      "version": "5.0.0-alpha2",
-      "key": "rules_proto_grpc_go@5.0.0-alpha2",
-      "repoName": "rules_proto_grpc_go",
-      "executionPlatformsToRegister": [],
-      "toolchainsToRegister": [],
-      "extensionUsages": [
-        {
-          "extensionBzlFile": "@gazelle//:extensions.bzl",
-          "extensionName": "go_deps",
-          "usingModule": "rules_proto_grpc_go@5.0.0-alpha2",
-          "location": {
-            "file": "https://bcr.bazel.build/modules/rules_proto_grpc_go/5.0.0-alpha2/MODULE.bazel",
-            "line": 11,
-            "column": 24
-          },
-          "imports": {
-            "org_golang_google_genproto_googleapis_rpc": "org_golang_google_genproto_googleapis_rpc",
-            "org_golang_google_grpc": "org_golang_google_grpc",
-            "org_golang_google_grpc_cmd_protoc_gen_go_grpc": "org_golang_google_grpc_cmd_protoc_gen_go_grpc",
-            "org_golang_google_protobuf": "org_golang_google_protobuf"
-          },
-          "devImports": [],
-          "tags": [
-            {
-              "tagName": "module",
-              "attributeValues": {
-                "path": "google.golang.org/protobuf",
-                "sum": "h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=",
-                "version": "v1.31.0"
-              },
-              "devDependency": false,
-              "location": {
-                "file": "https://bcr.bazel.build/modules/rules_proto_grpc_go/5.0.0-alpha2/MODULE.bazel",
-                "line": 12,
-                "column": 15
-              }
-            },
-            {
-              "tagName": "module",
-              "attributeValues": {
-                "path": "google.golang.org/grpc",
-                "sum": "h1:OL+Vz23DTtrrldqHK49FUOPHyY75rvFqJfXC84NYW58=",
-                "version": "v1.58.1"
-              },
-              "devDependency": false,
-              "location": {
-                "file": "https://bcr.bazel.build/modules/rules_proto_grpc_go/5.0.0-alpha2/MODULE.bazel",
-                "line": 17,
-                "column": 15
-              }
-            },
-            {
-              "tagName": "module",
-              "attributeValues": {
-                "path": "google.golang.org/grpc/cmd/protoc-gen-go-grpc",
-                "sum": "h1:rNBFJjBCOgVr9pWD7rs/knKL4FRTKgpZmsRfV214zcA=",
-                "version": "v1.3.0"
-              },
-              "devDependency": false,
-              "location": {
-                "file": "https://bcr.bazel.build/modules/rules_proto_grpc_go/5.0.0-alpha2/MODULE.bazel",
-                "line": 22,
-                "column": 15
-              }
-            },
-            {
-              "tagName": "module",
-              "attributeValues": {
-                "path": "google.golang.org/genproto/googleapis/rpc",
-                "sum": "h1:Jyp0Hsi0bmHXG6k9eATXoYtjd6e2UzZ1SCn/wIupY14=",
-                "version": "v0.0.0-20231106174013-bbf56f31fb17"
-              },
-              "devDependency": false,
-              "location": {
-                "file": "https://bcr.bazel.build/modules/rules_proto_grpc_go/5.0.0-alpha2/MODULE.bazel",
-                "line": 27,
-                "column": 15
-              }
-            }
-          ],
-          "hasDevUseExtension": false,
-          "hasNonDevUseExtension": true
-        }
-      ],
-      "deps": {
-        "gazelle": "gazelle@0.35.0",
-        "rules_go": "rules_go@0.44.2",
-        "rules_proto_grpc": "rules_proto_grpc@5.0.0-alpha2",
-        "bazel_tools": "bazel_tools@_",
-        "local_config_platform": "local_config_platform@_"
-      },
-      "repoSpec": {
-        "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-        "ruleClassName": "http_archive",
-        "attributes": {
-          "urls": [
-            "https://github.com/rules-proto-grpc/rules_proto_grpc/releases/download/5.0.0-alpha2/rules_proto_grpc_go-5.0.0-alpha2.tar.gz"
-          ],
-          "integrity": "sha256-F64ixJ4e9WLtgZzDAwo4qbwkr7i0vS6jSiF8Ez+/TNI=",
-          "strip_prefix": "rules_proto_grpc_go-5.0.0-alpha2",
-          "remote_patches": {},
-          "remote_patch_strip": 0
-        }
-      }
-    },
-    "bazel_tools@_": {
-      "name": "bazel_tools",
-      "version": "",
-      "key": "bazel_tools@_",
-      "repoName": "bazel_tools",
-      "executionPlatformsToRegister": [],
-      "toolchainsToRegister": [
-        "@local_config_cc_toolchains//:all",
-        "@local_config_sh//:local_sh_toolchain"
-      ],
-      "extensionUsages": [
-        {
-          "extensionBzlFile": "@bazel_tools//tools/cpp:cc_configure.bzl",
-          "extensionName": "cc_configure_extension",
-          "usingModule": "bazel_tools@_",
-          "location": {
-            "file": "@@bazel_tools//:MODULE.bazel",
-            "line": 18,
-            "column": 29
-          },
-          "imports": {
-            "local_config_cc": "local_config_cc",
-            "local_config_cc_toolchains": "local_config_cc_toolchains"
-          },
-          "devImports": [],
-          "tags": [],
-          "hasDevUseExtension": false,
-          "hasNonDevUseExtension": true
-        },
-        {
-          "extensionBzlFile": "@bazel_tools//tools/osx:xcode_configure.bzl",
-          "extensionName": "xcode_configure_extension",
-          "usingModule": "bazel_tools@_",
-          "location": {
-            "file": "@@bazel_tools//:MODULE.bazel",
-            "line": 22,
-            "column": 32
-          },
-          "imports": {
-            "local_config_xcode": "local_config_xcode"
-          },
-          "devImports": [],
-          "tags": [],
-          "hasDevUseExtension": false,
-          "hasNonDevUseExtension": true
-        },
-        {
-          "extensionBzlFile": "@rules_java//java:extensions.bzl",
-          "extensionName": "toolchains",
-          "usingModule": "bazel_tools@_",
-          "location": {
-            "file": "@@bazel_tools//:MODULE.bazel",
-            "line": 25,
-            "column": 32
-          },
-          "imports": {
-            "local_jdk": "local_jdk",
-            "remote_java_tools": "remote_java_tools",
-            "remote_java_tools_linux": "remote_java_tools_linux",
-            "remote_java_tools_windows": "remote_java_tools_windows",
-            "remote_java_tools_darwin_x86_64": "remote_java_tools_darwin_x86_64",
-            "remote_java_tools_darwin_arm64": "remote_java_tools_darwin_arm64"
-          },
-          "devImports": [],
-          "tags": [],
-          "hasDevUseExtension": false,
-          "hasNonDevUseExtension": true
-        },
-        {
-          "extensionBzlFile": "@bazel_tools//tools/sh:sh_configure.bzl",
-          "extensionName": "sh_configure_extension",
-          "usingModule": "bazel_tools@_",
-          "location": {
-            "file": "@@bazel_tools//:MODULE.bazel",
-            "line": 36,
-            "column": 39
-          },
-          "imports": {
-            "local_config_sh": "local_config_sh"
-          },
-          "devImports": [],
-          "tags": [],
-          "hasDevUseExtension": false,
-          "hasNonDevUseExtension": true
-        },
-        {
-          "extensionBzlFile": "@bazel_tools//tools/test:extensions.bzl",
-          "extensionName": "remote_coverage_tools_extension",
-          "usingModule": "bazel_tools@_",
-          "location": {
-            "file": "@@bazel_tools//:MODULE.bazel",
-            "line": 40,
-            "column": 48
-          },
-          "imports": {
-            "remote_coverage_tools": "remote_coverage_tools"
-          },
-          "devImports": [],
-          "tags": [],
-          "hasDevUseExtension": false,
-          "hasNonDevUseExtension": true
-        },
-        {
-          "extensionBzlFile": "@bazel_tools//tools/android:android_extensions.bzl",
-          "extensionName": "remote_android_tools_extensions",
-          "usingModule": "bazel_tools@_",
-          "location": {
-            "file": "@@bazel_tools//:MODULE.bazel",
-            "line": 43,
-            "column": 42
-          },
-          "imports": {
-            "android_gmaven_r8": "android_gmaven_r8",
-            "android_tools": "android_tools"
-          },
-          "devImports": [],
-          "tags": [],
-          "hasDevUseExtension": false,
-          "hasNonDevUseExtension": true
-        },
-        {
-          "extensionBzlFile": "@buildozer//:buildozer_binary.bzl",
-          "extensionName": "buildozer_binary",
-          "usingModule": "bazel_tools@_",
-          "location": {
-            "file": "@@bazel_tools//:MODULE.bazel",
-            "line": 47,
-            "column": 33
-          },
-          "imports": {
-            "buildozer_binary": "buildozer_binary"
-          },
-          "devImports": [],
-          "tags": [],
-          "hasDevUseExtension": false,
-          "hasNonDevUseExtension": true
-        }
-      ],
-      "deps": {
-        "rules_cc": "rules_cc@0.0.9",
-        "rules_java": "rules_java@7.4.0",
-        "rules_license": "rules_license@0.0.7",
-        "rules_proto": "rules_proto@5.3.0-21.7",
-        "rules_python": "rules_python@0.22.1",
-        "buildozer": "buildozer@6.4.0.2",
-        "platforms": "platforms@0.0.8",
-        "com_google_protobuf": "protobuf@27.2",
-        "zlib": "zlib@1.3",
-        "build_bazel_apple_support": "apple_support@1.5.0",
-        "local_config_platform": "local_config_platform@_"
-      }
-    },
-    "local_config_platform@_": {
-      "name": "local_config_platform",
-      "version": "",
-      "key": "local_config_platform@_",
-      "repoName": "local_config_platform",
-      "executionPlatformsToRegister": [],
-      "toolchainsToRegister": [],
-      "extensionUsages": [],
-      "deps": {
-        "platforms": "platforms@0.0.8",
-        "bazel_tools": "bazel_tools@_"
-      }
-    },
-    "bazel_features@1.1.1": {
-      "name": "bazel_features",
-      "version": "1.1.1",
-      "key": "bazel_features@1.1.1",
-      "repoName": "bazel_features",
-      "executionPlatformsToRegister": [],
-      "toolchainsToRegister": [],
-      "extensionUsages": [
-        {
-          "extensionBzlFile": "@bazel_features//private:extensions.bzl",
-          "extensionName": "version_extension",
-          "usingModule": "bazel_features@1.1.1",
-          "location": {
-            "file": "https://bcr.bazel.build/modules/bazel_features/1.1.1/MODULE.bazel",
-            "line": 6,
-            "column": 24
-          },
-          "imports": {
-            "bazel_features_globals": "bazel_features_globals",
-            "bazel_features_version": "bazel_features_version"
-          },
-          "devImports": [],
-          "tags": [],
-          "hasDevUseExtension": false,
-          "hasNonDevUseExtension": true
-        }
-      ],
-      "deps": {
-        "bazel_tools": "bazel_tools@_",
-        "local_config_platform": "local_config_platform@_"
-      },
-      "repoSpec": {
-        "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-        "ruleClassName": "http_archive",
-        "attributes": {
-          "urls": [
-            "https://github.com/bazel-contrib/bazel_features/releases/download/v1.1.1/bazel_features-v1.1.1.tar.gz"
-          ],
-          "integrity": "sha256-YsJuQn5cvHUQJERpJ2IuOYqdzfMsZDJSOIFXCdEcEag=",
-          "strip_prefix": "bazel_features-1.1.1",
-          "remote_patches": {
-            "https://bcr.bazel.build/modules/bazel_features/1.1.1/patches/module_dot_bazel_version.patch": "sha256-+56MAEsc7bYN/Pzhn252ZQUxiRzZg9bynXj1qpsmCYs="
-          },
-          "remote_patch_strip": 1
-        }
-      }
-    },
-    "bazel_skylib@1.5.0": {
-      "name": "bazel_skylib",
-      "version": "1.5.0",
-      "key": "bazel_skylib@1.5.0",
-      "repoName": "bazel_skylib",
-      "executionPlatformsToRegister": [],
-      "toolchainsToRegister": [
-        "//toolchains/unittest:cmd_toolchain",
-        "//toolchains/unittest:bash_toolchain"
-      ],
-      "extensionUsages": [],
-      "deps": {
-        "platforms": "platforms@0.0.8",
-        "bazel_tools": "bazel_tools@_",
-        "local_config_platform": "local_config_platform@_"
-      },
-      "repoSpec": {
-        "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-        "ruleClassName": "http_archive",
-        "attributes": {
-          "urls": [
-            "https://github.com/bazelbuild/bazel-skylib/releases/download/1.5.0/bazel-skylib-1.5.0.tar.gz"
-          ],
-          "integrity": "sha256-zVWgYudjuTSZIfD124w5MyiNyLpPdt2UFqrGis7jy5Q=",
-          "strip_prefix": "",
-          "remote_patches": {},
-          "remote_patch_strip": 0
-        }
-      }
-    },
-    "platforms@0.0.8": {
-      "name": "platforms",
-      "version": "0.0.8",
-      "key": "platforms@0.0.8",
-      "repoName": "platforms",
-      "executionPlatformsToRegister": [],
-      "toolchainsToRegister": [],
-      "extensionUsages": [],
-      "deps": {
-        "rules_license": "rules_license@0.0.7",
-        "bazel_tools": "bazel_tools@_",
-        "local_config_platform": "local_config_platform@_"
-      },
-      "repoSpec": {
-        "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-        "ruleClassName": "http_archive",
-        "attributes": {
-          "urls": [
-            "https://github.com/bazelbuild/platforms/releases/download/0.0.8/platforms-0.0.8.tar.gz"
-          ],
-          "integrity": "sha256-gVBAZgU4ns7LbaB8vLUJ1WN6OrmiS8abEQFTE2fYnXQ=",
-          "strip_prefix": "",
-          "remote_patches": {},
-          "remote_patch_strip": 0
-        }
-      }
-    },
-    "rules_proto@5.3.0-21.7": {
-      "name": "rules_proto",
-      "version": "5.3.0-21.7",
-      "key": "rules_proto@5.3.0-21.7",
-      "repoName": "rules_proto",
-      "executionPlatformsToRegister": [],
-      "toolchainsToRegister": [],
-      "extensionUsages": [],
-      "deps": {
-        "bazel_skylib": "bazel_skylib@1.5.0",
-        "com_google_protobuf": "protobuf@27.2",
-        "rules_cc": "rules_cc@0.0.9",
-        "bazel_tools": "bazel_tools@_",
-        "local_config_platform": "local_config_platform@_"
-      },
-      "repoSpec": {
-        "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-        "ruleClassName": "http_archive",
-        "attributes": {
-          "urls": [
-            "https://github.com/bazelbuild/rules_proto/archive/refs/tags/5.3.0-21.7.tar.gz"
-          ],
-          "integrity": "sha256-3D+yBqLLNEG0heseQjFlsjEjWh6psDG0Qzz3vB+kYN0=",
-          "strip_prefix": "rules_proto-5.3.0-21.7",
-          "remote_patches": {},
-          "remote_patch_strip": 0
-        }
-      }
-    },
-    "abseil-cpp@20230802.0.bcr.1": {
-      "name": "abseil-cpp",
-      "version": "20230802.0.bcr.1",
-      "key": "abseil-cpp@20230802.0.bcr.1",
-      "repoName": "abseil-cpp",
-      "executionPlatformsToRegister": [],
-      "toolchainsToRegister": [],
-      "extensionUsages": [],
-      "deps": {
-        "rules_cc": "rules_cc@0.0.9",
-        "platforms": "platforms@0.0.8",
-        "bazel_skylib": "bazel_skylib@1.5.0",
-        "com_google_googletest": "googletest@1.14.0",
-        "bazel_tools": "bazel_tools@_",
-        "local_config_platform": "local_config_platform@_"
-      },
-      "repoSpec": {
-        "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-        "ruleClassName": "http_archive",
-        "attributes": {
-          "urls": [
-            "https://github.com/abseil/abseil-cpp/archive/refs/tags/20230802.0.tar.gz"
-          ],
-          "integrity": "sha256-WdKXavnW7PABqBo1dJpuVRozW5SdNJGM+t4Hc3udk8U=",
-          "strip_prefix": "abseil-cpp-20230802.0",
-          "remote_patches": {
-            "https://bcr.bazel.build/modules/abseil-cpp/20230802.0.bcr.1/patches/module_dot_bazel.patch": "sha256-Ku6wJ7uNqANq3fVmW03ySSUddevratZDsJ67NqtXIEY="
-          },
-          "remote_patch_strip": 0
-        }
-      }
-    },
-    "jsoncpp@1.9.5": {
-      "name": "jsoncpp",
-      "version": "1.9.5",
-      "key": "jsoncpp@1.9.5",
-      "repoName": "jsoncpp",
-      "executionPlatformsToRegister": [],
-      "toolchainsToRegister": [],
-      "extensionUsages": [],
-      "deps": {
-        "bazel_tools": "bazel_tools@_",
-        "local_config_platform": "local_config_platform@_"
-      },
-      "repoSpec": {
-        "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-        "ruleClassName": "http_archive",
-        "attributes": {
-          "urls": [
-            "https://github.com/open-source-parsers/jsoncpp/archive/refs/tags/1.9.5.tar.gz"
-          ],
-          "integrity": "sha256-9AmFblkgwY0ML7hSduJO5gfSoJtefV8KNxNokDwnXaI=",
-          "strip_prefix": "jsoncpp-1.9.5",
-          "remote_patches": {
-            "https://bcr.bazel.build/modules/jsoncpp/1.9.5/patches/build_dot_bazel.patch": "sha256-Vj8diXSWps8I8h5cdEqBDYmKBA2ulvWxMZBEQlIgcpU=",
-            "https://bcr.bazel.build/modules/jsoncpp/1.9.5/patches/module_dot_bazel.patch": "sha256-7RC7fS8N11vcyeDEaUZ05yBqr0YY7OzuzqaWz5W2XDo="
-          },
-          "remote_patch_strip": 1
-        }
-      }
-    },
-    "rules_cc@0.0.9": {
-      "name": "rules_cc",
-      "version": "0.0.9",
-      "key": "rules_cc@0.0.9",
-      "repoName": "rules_cc",
-      "executionPlatformsToRegister": [],
-      "toolchainsToRegister": [
-        "@local_config_cc_toolchains//:all"
-      ],
-      "extensionUsages": [
-        {
-          "extensionBzlFile": "@bazel_tools//tools/cpp:cc_configure.bzl",
-          "extensionName": "cc_configure_extension",
-          "usingModule": "rules_cc@0.0.9",
-          "location": {
-            "file": "https://bcr.bazel.build/modules/rules_cc/0.0.9/MODULE.bazel",
-            "line": 9,
-            "column": 29
-          },
-          "imports": {
-            "local_config_cc_toolchains": "local_config_cc_toolchains"
-          },
-          "devImports": [],
-          "tags": [],
-          "hasDevUseExtension": false,
-          "hasNonDevUseExtension": true
-        }
-      ],
-      "deps": {
-        "platforms": "platforms@0.0.8",
-        "bazel_tools": "bazel_tools@_",
-        "local_config_platform": "local_config_platform@_"
-      },
-      "repoSpec": {
-        "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-        "ruleClassName": "http_archive",
-        "attributes": {
-          "urls": [
-            "https://github.com/bazelbuild/rules_cc/releases/download/0.0.9/rules_cc-0.0.9.tar.gz"
-          ],
-          "integrity": "sha256-IDeHW5pEVtzkp50RKorohbvEqtlo5lh9ym5k86CQDN8=",
-          "strip_prefix": "rules_cc-0.0.9",
-          "remote_patches": {
-            "https://bcr.bazel.build/modules/rules_cc/0.0.9/patches/module_dot_bazel_version.patch": "sha256-mM+qzOI0SgAdaJBlWOSMwMPKpaA9b7R37Hj/tp5bb4g="
-          },
-          "remote_patch_strip": 0
-        }
-      }
-    },
-    "rules_java@7.4.0": {
-      "name": "rules_java",
-      "version": "7.4.0",
-      "key": "rules_java@7.4.0",
-      "repoName": "rules_java",
-      "executionPlatformsToRegister": [],
-      "toolchainsToRegister": [
-        "//toolchains:all",
-        "@local_jdk//:runtime_toolchain_definition",
-        "@local_jdk//:bootstrap_runtime_toolchain_definition",
-        "@remotejdk11_linux_toolchain_config_repo//:all",
-        "@remotejdk11_linux_aarch64_toolchain_config_repo//:all",
-        "@remotejdk11_linux_ppc64le_toolchain_config_repo//:all",
-        "@remotejdk11_linux_s390x_toolchain_config_repo//:all",
-        "@remotejdk11_macos_toolchain_config_repo//:all",
-        "@remotejdk11_macos_aarch64_toolchain_config_repo//:all",
-        "@remotejdk11_win_toolchain_config_repo//:all",
-        "@remotejdk11_win_arm64_toolchain_config_repo//:all",
-        "@remotejdk17_linux_toolchain_config_repo//:all",
-        "@remotejdk17_linux_aarch64_toolchain_config_repo//:all",
-        "@remotejdk17_linux_ppc64le_toolchain_config_repo//:all",
-        "@remotejdk17_linux_s390x_toolchain_config_repo//:all",
-        "@remotejdk17_macos_toolchain_config_repo//:all",
-        "@remotejdk17_macos_aarch64_toolchain_config_repo//:all",
-        "@remotejdk17_win_toolchain_config_repo//:all",
-        "@remotejdk17_win_arm64_toolchain_config_repo//:all",
-        "@remotejdk21_linux_toolchain_config_repo//:all",
-        "@remotejdk21_linux_aarch64_toolchain_config_repo//:all",
-        "@remotejdk21_macos_toolchain_config_repo//:all",
-        "@remotejdk21_macos_aarch64_toolchain_config_repo//:all",
-        "@remotejdk21_win_toolchain_config_repo//:all"
-      ],
-      "extensionUsages": [
-        {
-          "extensionBzlFile": "@rules_java//java:extensions.bzl",
-          "extensionName": "toolchains",
-          "usingModule": "rules_java@7.4.0",
-          "location": {
-            "file": "https://bcr.bazel.build/modules/rules_java/7.4.0/MODULE.bazel",
-            "line": 19,
-            "column": 27
-          },
-          "imports": {
-            "remote_java_tools": "remote_java_tools",
-            "remote_java_tools_linux": "remote_java_tools_linux",
-            "remote_java_tools_windows": "remote_java_tools_windows",
-            "remote_java_tools_darwin_x86_64": "remote_java_tools_darwin_x86_64",
-            "remote_java_tools_darwin_arm64": "remote_java_tools_darwin_arm64",
-            "local_jdk": "local_jdk",
-            "remotejdk11_linux_toolchain_config_repo": "remotejdk11_linux_toolchain_config_repo",
-            "remotejdk11_linux_aarch64_toolchain_config_repo": "remotejdk11_linux_aarch64_toolchain_config_repo",
-            "remotejdk11_linux_ppc64le_toolchain_config_repo": "remotejdk11_linux_ppc64le_toolchain_config_repo",
-            "remotejdk11_linux_s390x_toolchain_config_repo": "remotejdk11_linux_s390x_toolchain_config_repo",
-            "remotejdk11_macos_toolchain_config_repo": "remotejdk11_macos_toolchain_config_repo",
-            "remotejdk11_macos_aarch64_toolchain_config_repo": "remotejdk11_macos_aarch64_toolchain_config_repo",
-            "remotejdk11_win_toolchain_config_repo": "remotejdk11_win_toolchain_config_repo",
-            "remotejdk11_win_arm64_toolchain_config_repo": "remotejdk11_win_arm64_toolchain_config_repo",
-            "remotejdk17_linux_toolchain_config_repo": "remotejdk17_linux_toolchain_config_repo",
-            "remotejdk17_linux_aarch64_toolchain_config_repo": "remotejdk17_linux_aarch64_toolchain_config_repo",
-            "remotejdk17_linux_ppc64le_toolchain_config_repo": "remotejdk17_linux_ppc64le_toolchain_config_repo",
-            "remotejdk17_linux_s390x_toolchain_config_repo": "remotejdk17_linux_s390x_toolchain_config_repo",
-            "remotejdk17_macos_toolchain_config_repo": "remotejdk17_macos_toolchain_config_repo",
-            "remotejdk17_macos_aarch64_toolchain_config_repo": "remotejdk17_macos_aarch64_toolchain_config_repo",
-            "remotejdk17_win_toolchain_config_repo": "remotejdk17_win_toolchain_config_repo",
-            "remotejdk17_win_arm64_toolchain_config_repo": "remotejdk17_win_arm64_toolchain_config_repo",
-            "remotejdk21_linux_toolchain_config_repo": "remotejdk21_linux_toolchain_config_repo",
-            "remotejdk21_linux_aarch64_toolchain_config_repo": "remotejdk21_linux_aarch64_toolchain_config_repo",
-            "remotejdk21_macos_toolchain_config_repo": "remotejdk21_macos_toolchain_config_repo",
-            "remotejdk21_macos_aarch64_toolchain_config_repo": "remotejdk21_macos_aarch64_toolchain_config_repo",
-            "remotejdk21_win_toolchain_config_repo": "remotejdk21_win_toolchain_config_repo"
-          },
-          "devImports": [],
-          "tags": [],
-          "hasDevUseExtension": false,
-          "hasNonDevUseExtension": true
-        }
-      ],
-      "deps": {
-        "platforms": "platforms@0.0.8",
-        "rules_cc": "rules_cc@0.0.9",
-        "bazel_skylib": "bazel_skylib@1.5.0",
-        "rules_proto": "rules_proto@5.3.0-21.7",
-        "rules_license": "rules_license@0.0.7",
-        "bazel_tools": "bazel_tools@_",
-        "local_config_platform": "local_config_platform@_"
-      },
-      "repoSpec": {
-        "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-        "ruleClassName": "http_archive",
-        "attributes": {
-          "urls": [
-            "https://github.com/bazelbuild/rules_java/releases/download/7.4.0/rules_java-7.4.0.tar.gz"
-          ],
-          "integrity": "sha256-l27wi0nJKXQfIBeQ5Z44B8cq2B9CjIvJU82+/1/tFes=",
-          "strip_prefix": "",
-          "remote_patches": {},
-          "remote_patch_strip": 0
-        }
-      }
-    },
-    "rules_jvm_external@5.1": {
-      "name": "rules_jvm_external",
-      "version": "5.1",
-      "key": "rules_jvm_external@5.1",
-      "repoName": "rules_jvm_external",
-      "executionPlatformsToRegister": [],
-      "toolchainsToRegister": [],
-      "extensionUsages": [
-        {
-          "extensionBzlFile": "@rules_jvm_external//:non-module-deps.bzl",
-          "extensionName": "non_module_deps",
-          "usingModule": "rules_jvm_external@5.1",
-          "location": {
-            "file": "https://bcr.bazel.build/modules/rules_jvm_external/5.1/MODULE.bazel",
-            "line": 9,
-            "column": 32
-          },
-          "imports": {
-            "io_bazel_rules_kotlin": "io_bazel_rules_kotlin"
-          },
-          "devImports": [],
-          "tags": [],
-          "hasDevUseExtension": false,
-          "hasNonDevUseExtension": true
-        },
-        {
-          "extensionBzlFile": "@rules_jvm_external//:extensions.bzl",
-          "extensionName": "maven",
-          "usingModule": "rules_jvm_external@5.1",
-          "location": {
-            "file": "https://bcr.bazel.build/modules/rules_jvm_external/5.1/MODULE.bazel",
-            "line": 16,
-            "column": 22
-          },
-          "imports": {
-            "rules_jvm_external_deps": "rules_jvm_external_deps"
-          },
-          "devImports": [],
-          "tags": [
-            {
-              "tagName": "install",
-              "attributeValues": {
-                "name": "rules_jvm_external_deps",
-                "artifacts": [
-                  "com.google.auth:google-auth-library-credentials:0.22.0",
-                  "com.google.auth:google-auth-library-oauth2-http:0.22.0",
-                  "com.google.cloud:google-cloud-core:1.93.10",
-                  "com.google.cloud:google-cloud-storage:1.113.4",
-                  "com.google.code.gson:gson:2.9.0",
-                  "com.google.googlejavaformat:google-java-format:1.15.0",
-                  "com.google.guava:guava:31.1-jre",
-                  "org.apache.maven:maven-artifact:3.8.6",
-                  "software.amazon.awssdk:s3:2.17.183"
-                ],
-                "lock_file": "@rules_jvm_external//:rules_jvm_external_deps_install.json"
-              },
-              "devDependency": false,
-              "location": {
-                "file": "https://bcr.bazel.build/modules/rules_jvm_external/5.1/MODULE.bazel",
-                "line": 18,
-                "column": 14
-              }
-            }
-          ],
-          "hasDevUseExtension": false,
-          "hasNonDevUseExtension": true
-        }
-      ],
-      "deps": {
-        "bazel_skylib": "bazel_skylib@1.5.0",
-        "io_bazel_stardoc": "stardoc@0.5.3",
-        "bazel_tools": "bazel_tools@_",
-        "local_config_platform": "local_config_platform@_"
-      },
-      "repoSpec": {
-        "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-        "ruleClassName": "http_archive",
-        "attributes": {
-          "urls": [
-            "https://github.com/bazelbuild/rules_jvm_external/releases/download/5.1/rules_jvm_external-5.1.tar.gz"
-          ],
-          "integrity": "sha256-jDsgdyLl+X8cgzEVgqbBHfmSJuZeJHEIbillYeV8yVQ=",
-          "strip_prefix": "rules_jvm_external-5.1",
-          "remote_patches": {},
-          "remote_patch_strip": 0
-        }
-      }
-    },
-    "rules_pkg@0.7.0": {
-      "name": "rules_pkg",
-      "version": "0.7.0",
-      "key": "rules_pkg@0.7.0",
-      "repoName": "rules_pkg",
-      "executionPlatformsToRegister": [],
-      "toolchainsToRegister": [],
-      "extensionUsages": [],
-      "deps": {
-        "rules_python": "rules_python@0.22.1",
-        "bazel_skylib": "bazel_skylib@1.5.0",
-        "rules_license": "rules_license@0.0.7",
-        "bazel_tools": "bazel_tools@_",
-        "local_config_platform": "local_config_platform@_"
-      },
-      "repoSpec": {
-        "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-        "ruleClassName": "http_archive",
-        "attributes": {
-          "urls": [
-            "https://github.com/bazelbuild/rules_pkg/releases/download/0.7.0/rules_pkg-0.7.0.tar.gz"
-          ],
-          "integrity": "sha256-iimOgydi7aGDBZfWT+fbWBeKqEzVkm121bdE1lWJQcI=",
-          "strip_prefix": "",
-          "remote_patches": {
-            "https://bcr.bazel.build/modules/rules_pkg/0.7.0/patches/module_dot_bazel.patch": "sha256-4OaEPZwYF6iC71ZTDg6MJ7LLqX7ZA0/kK4mT+4xKqiE="
-          },
-          "remote_patch_strip": 0
-        }
-      }
-    },
-    "rules_python@0.22.1": {
-      "name": "rules_python",
-      "version": "0.22.1",
-      "key": "rules_python@0.22.1",
-      "repoName": "rules_python",
-      "executionPlatformsToRegister": [],
-      "toolchainsToRegister": [
-        "@bazel_tools//tools/python:autodetecting_toolchain"
-      ],
-      "extensionUsages": [
-        {
-          "extensionBzlFile": "@rules_python//python/extensions/private:internal_deps.bzl",
-          "extensionName": "internal_deps",
-          "usingModule": "rules_python@0.22.1",
-          "location": {
-            "file": "https://bcr.bazel.build/modules/rules_python/0.22.1/MODULE.bazel",
-            "line": 14,
-            "column": 30
-          },
-          "imports": {
-            "pypi__build": "pypi__build",
-            "pypi__click": "pypi__click",
-            "pypi__colorama": "pypi__colorama",
-            "pypi__importlib_metadata": "pypi__importlib_metadata",
-            "pypi__installer": "pypi__installer",
-            "pypi__more_itertools": "pypi__more_itertools",
-            "pypi__packaging": "pypi__packaging",
-            "pypi__pep517": "pypi__pep517",
-            "pypi__pip": "pypi__pip",
-            "pypi__pip_tools": "pypi__pip_tools",
-            "pypi__setuptools": "pypi__setuptools",
-            "pypi__tomli": "pypi__tomli",
-            "pypi__wheel": "pypi__wheel",
-            "pypi__zipp": "pypi__zipp",
-            "pypi__coverage_cp310_aarch64-apple-darwin": "pypi__coverage_cp310_aarch64-apple-darwin",
-            "pypi__coverage_cp310_aarch64-unknown-linux-gnu": "pypi__coverage_cp310_aarch64-unknown-linux-gnu",
-            "pypi__coverage_cp310_x86_64-apple-darwin": "pypi__coverage_cp310_x86_64-apple-darwin",
-            "pypi__coverage_cp310_x86_64-unknown-linux-gnu": "pypi__coverage_cp310_x86_64-unknown-linux-gnu",
-            "pypi__coverage_cp311_aarch64-unknown-linux-gnu": "pypi__coverage_cp311_aarch64-unknown-linux-gnu",
-            "pypi__coverage_cp311_x86_64-apple-darwin": "pypi__coverage_cp311_x86_64-apple-darwin",
-            "pypi__coverage_cp311_x86_64-unknown-linux-gnu": "pypi__coverage_cp311_x86_64-unknown-linux-gnu",
-            "pypi__coverage_cp38_aarch64-apple-darwin": "pypi__coverage_cp38_aarch64-apple-darwin",
-            "pypi__coverage_cp38_aarch64-unknown-linux-gnu": "pypi__coverage_cp38_aarch64-unknown-linux-gnu",
-            "pypi__coverage_cp38_x86_64-apple-darwin": "pypi__coverage_cp38_x86_64-apple-darwin",
-            "pypi__coverage_cp38_x86_64-unknown-linux-gnu": "pypi__coverage_cp38_x86_64-unknown-linux-gnu",
-            "pypi__coverage_cp39_aarch64-apple-darwin": "pypi__coverage_cp39_aarch64-apple-darwin",
-            "pypi__coverage_cp39_aarch64-unknown-linux-gnu": "pypi__coverage_cp39_aarch64-unknown-linux-gnu",
-            "pypi__coverage_cp39_x86_64-apple-darwin": "pypi__coverage_cp39_x86_64-apple-darwin",
-            "pypi__coverage_cp39_x86_64-unknown-linux-gnu": "pypi__coverage_cp39_x86_64-unknown-linux-gnu"
-          },
-          "devImports": [],
-          "tags": [
-            {
-              "tagName": "install",
-              "attributeValues": {},
-              "devDependency": false,
-              "location": {
-                "file": "https://bcr.bazel.build/modules/rules_python/0.22.1/MODULE.bazel",
-                "line": 15,
-                "column": 22
-              }
-            }
-          ],
-          "hasDevUseExtension": false,
-          "hasNonDevUseExtension": true
-        },
-        {
-          "extensionBzlFile": "@rules_python//python/extensions:python.bzl",
-          "extensionName": "python",
-          "usingModule": "rules_python@0.22.1",
-          "location": {
-            "file": "https://bcr.bazel.build/modules/rules_python/0.22.1/MODULE.bazel",
-            "line": 50,
-            "column": 23
-          },
-          "imports": {
-            "pythons_hub": "pythons_hub"
-          },
-          "devImports": [],
-          "tags": [],
-          "hasDevUseExtension": false,
-          "hasNonDevUseExtension": true
-        }
-      ],
-      "deps": {
-        "platforms": "platforms@0.0.8",
-        "bazel_skylib": "bazel_skylib@1.5.0",
-        "rules_proto": "rules_proto@5.3.0-21.7",
-        "com_google_protobuf": "protobuf@27.2",
-        "bazel_tools": "bazel_tools@_",
-        "local_config_platform": "local_config_platform@_"
-      },
-      "repoSpec": {
-        "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-        "ruleClassName": "http_archive",
-        "attributes": {
-          "urls": [
-            "https://github.com/bazelbuild/rules_python/releases/download/0.22.1/rules_python-0.22.1.tar.gz"
-          ],
-          "integrity": "sha256-pWQP3dS+sD6MH95e1xYMC6a9R359BIZhwwwGk2om/WM=",
-          "strip_prefix": "rules_python-0.22.1",
-          "remote_patches": {
-            "https://bcr.bazel.build/modules/rules_python/0.22.1/patches/module_dot_bazel_version.patch": "sha256-3+VLDH9gYDzNI4eOW7mABC/LKxh1xqF6NhacLbNTucs="
-          },
-          "remote_patch_strip": 1
-        }
-      }
-    },
-    "zlib@1.3": {
-      "name": "zlib",
-      "version": "1.3",
-      "key": "zlib@1.3",
-      "repoName": "zlib",
-      "executionPlatformsToRegister": [],
-      "toolchainsToRegister": [],
-      "extensionUsages": [],
-      "deps": {
-        "platforms": "platforms@0.0.8",
-        "rules_cc": "rules_cc@0.0.9",
-        "bazel_tools": "bazel_tools@_",
-        "local_config_platform": "local_config_platform@_"
-      },
-      "repoSpec": {
-        "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-        "ruleClassName": "http_archive",
-        "attributes": {
-          "urls": [
-            "https://github.com/madler/zlib/releases/download/v1.3/zlib-1.3.tar.gz"
-          ],
-          "integrity": "sha256-/wukwpIBPbwnUws6geH5qBPNOd4Byl4Pi/NVcC76WT4=",
-          "strip_prefix": "zlib-1.3",
-          "remote_patches": {
-            "https://bcr.bazel.build/modules/zlib/1.3/patches/add_build_file.patch": "sha256-Ei+FYaaOo7A3jTKunMEodTI0Uw5NXQyZEcboMC8JskY=",
-            "https://bcr.bazel.build/modules/zlib/1.3/patches/module_dot_bazel.patch": "sha256-fPWLM+2xaF/kuy+kZc1YTfW6hNjrkG400Ho7gckuyJk="
-          },
-          "remote_patch_strip": 0
-        }
-      }
-    },
-    "rules_license@0.0.7": {
-      "name": "rules_license",
-      "version": "0.0.7",
-      "key": "rules_license@0.0.7",
-      "repoName": "rules_license",
-      "executionPlatformsToRegister": [],
-      "toolchainsToRegister": [],
-      "extensionUsages": [],
-      "deps": {
-        "bazel_tools": "bazel_tools@_",
-        "local_config_platform": "local_config_platform@_"
-      },
-      "repoSpec": {
-        "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-        "ruleClassName": "http_archive",
-        "attributes": {
-          "urls": [
-            "https://github.com/bazelbuild/rules_license/releases/download/0.0.7/rules_license-0.0.7.tar.gz"
-          ],
-          "integrity": "sha256-RTHezLkTY5ww5cdRKgVNXYdWmNrrddjPkPKEN1/nw2A=",
-          "strip_prefix": "",
-          "remote_patches": {},
-          "remote_patch_strip": 0
-        }
-      }
-    },
-    "buildozer@6.4.0.2": {
-      "name": "buildozer",
-      "version": "6.4.0.2",
-      "key": "buildozer@6.4.0.2",
-      "repoName": "buildozer",
-      "executionPlatformsToRegister": [],
-      "toolchainsToRegister": [],
-      "extensionUsages": [
-        {
-          "extensionBzlFile": "@buildozer//:buildozer_binary.bzl",
-          "extensionName": "buildozer_binary",
-          "usingModule": "buildozer@6.4.0.2",
-          "location": {
-            "file": "https://bcr.bazel.build/modules/buildozer/6.4.0.2/MODULE.bazel",
-            "line": 7,
-            "column": 33
-          },
-          "imports": {
-            "buildozer_binary": "buildozer_binary"
-          },
-          "devImports": [],
-          "tags": [
-            {
-              "tagName": "buildozer",
-              "attributeValues": {
-                "sha256": {
-                  "darwin-amd64": "d29e347ecd6b5673d72cb1a8de05bf1b06178dd229ff5eb67fad5100c840cc8e",
-                  "darwin-arm64": "9b9e71bdbec5e7223871e913b65d12f6d8fa026684daf991f00e52ed36a6978d",
-                  "linux-amd64": "8dfd6345da4e9042daa738d7fdf34f699c5dfce4632f7207956fceedd8494119",
-                  "linux-arm64": "6559558fded658c8fa7432a9d011f7c4dcbac6b738feae73d2d5c352e5f605fa",
-                  "windows-amd64": "e7f05bf847f7c3689dd28926460ce6e1097ae97380ac8e6ae7147b7b706ba19b"
-                },
-                "version": "6.4.0"
-              },
-              "devDependency": false,
-              "location": {
-                "file": "https://bcr.bazel.build/modules/buildozer/6.4.0.2/MODULE.bazel",
-                "line": 8,
-                "column": 27
-              }
-            }
-          ],
-          "hasDevUseExtension": false,
-          "hasNonDevUseExtension": true
-        }
-      ],
-      "deps": {
-        "bazel_tools": "bazel_tools@_",
-        "local_config_platform": "local_config_platform@_"
-      },
-      "repoSpec": {
-        "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-        "ruleClassName": "http_archive",
-        "attributes": {
-          "urls": [
-            "https://github.com/fmeum/buildozer/releases/download/v6.4.0.2/buildozer-v6.4.0.2.tar.gz"
-          ],
-          "integrity": "sha256-k7tFKQMR2AygxpmZfH0yEPnQmF3efFgD9rBPkj+Yz/8=",
-          "strip_prefix": "buildozer-6.4.0.2",
-          "remote_patches": {
-            "https://bcr.bazel.build/modules/buildozer/6.4.0.2/patches/module_dot_bazel_version.patch": "sha256-gKANF2HMilj7bWmuXs4lbBIAAansuWC4IhWGB/CerjU="
-          },
-          "remote_patch_strip": 1
-        }
-      }
-    },
-    "apple_support@1.5.0": {
-      "name": "apple_support",
-      "version": "1.5.0",
-      "key": "apple_support@1.5.0",
-      "repoName": "build_bazel_apple_support",
-      "executionPlatformsToRegister": [],
-      "toolchainsToRegister": [
-        "@local_config_apple_cc_toolchains//:all"
-      ],
-      "extensionUsages": [
-        {
-          "extensionBzlFile": "@build_bazel_apple_support//crosstool:setup.bzl",
-          "extensionName": "apple_cc_configure_extension",
-          "usingModule": "apple_support@1.5.0",
-          "location": {
-            "file": "https://bcr.bazel.build/modules/apple_support/1.5.0/MODULE.bazel",
-            "line": 17,
-            "column": 35
-          },
-          "imports": {
-            "local_config_apple_cc": "local_config_apple_cc",
-            "local_config_apple_cc_toolchains": "local_config_apple_cc_toolchains"
-          },
-          "devImports": [],
-          "tags": [],
-          "hasDevUseExtension": false,
-          "hasNonDevUseExtension": true
-        }
-      ],
-      "deps": {
-        "bazel_skylib": "bazel_skylib@1.5.0",
-        "platforms": "platforms@0.0.8",
-        "bazel_tools": "bazel_tools@_",
-        "local_config_platform": "local_config_platform@_"
-      },
-      "repoSpec": {
-        "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-        "ruleClassName": "http_archive",
-        "attributes": {
-          "urls": [
-            "https://github.com/bazelbuild/apple_support/releases/download/1.5.0/apple_support.1.5.0.tar.gz"
-          ],
-          "integrity": "sha256-miM41vja0yRPgj8txghKA+TQ+7J8qJLclw5okNW0gYQ=",
-          "strip_prefix": "",
-          "remote_patches": {},
-          "remote_patch_strip": 0
-        }
-      }
-    },
-    "googletest@1.14.0": {
-      "name": "googletest",
-      "version": "1.14.0",
-      "key": "googletest@1.14.0",
-      "repoName": "googletest",
-      "executionPlatformsToRegister": [],
-      "toolchainsToRegister": [],
-      "extensionUsages": [],
-      "deps": {
-        "com_google_absl": "abseil-cpp@20230802.0.bcr.1",
-        "platforms": "platforms@0.0.8",
-        "rules_cc": "rules_cc@0.0.9",
-        "bazel_tools": "bazel_tools@_",
-        "local_config_platform": "local_config_platform@_"
-      },
-      "repoSpec": {
-        "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-        "ruleClassName": "http_archive",
-        "attributes": {
-          "urls": [
-            "https://github.com/google/googletest/archive/refs/tags/v1.14.0.tar.gz"
-          ],
-          "integrity": "sha256-itWYxzrXluDYKAsILOvYKmMNc+c808cAV5OKZQG7pdc=",
-          "strip_prefix": "googletest-1.14.0",
-          "remote_patches": {
-            "https://bcr.bazel.build/modules/googletest/1.14.0/patches/module_dot_bazel.patch": "sha256-CSomzvti38LCuURDG5EEoa3O1tQF3cKKt/mknnP1qcc="
-          },
-          "remote_patch_strip": 0
-        }
-      }
-    },
-    "stardoc@0.5.3": {
-      "name": "stardoc",
-      "version": "0.5.3",
-      "key": "stardoc@0.5.3",
-      "repoName": "stardoc",
-      "executionPlatformsToRegister": [],
-      "toolchainsToRegister": [],
-      "extensionUsages": [],
-      "deps": {
-        "bazel_skylib": "bazel_skylib@1.5.0",
-        "rules_java": "rules_java@7.4.0",
-        "bazel_tools": "bazel_tools@_",
-        "local_config_platform": "local_config_platform@_"
-      },
-      "repoSpec": {
-        "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-        "ruleClassName": "http_archive",
-        "attributes": {
-          "urls": [
-            "https://github.com/bazelbuild/stardoc/releases/download/0.5.3/stardoc-0.5.3.tar.gz"
-          ],
-          "integrity": "sha256-P9j+xN3sPGcL2BCQTi4zFwvt/hL5Ct+UNQgYS+RYyLs=",
-          "strip_prefix": "",
-          "remote_patches": {
-            "https://bcr.bazel.build/modules/stardoc/0.5.3/patches/module_dot_bazel.patch": "sha256-Lgpy9OCr0zBWYuHoyM1rJJrgxn23X/bwgICEF7XiEug="
-          },
-          "remote_patch_strip": 0
-        }
-      }
-    }
-  },
-  "moduleExtensions": {
-    "@@apple_support~//crosstool:setup.bzl%apple_cc_configure_extension": {
-      "general": {
-        "bzlTransitiveDigest": "pMLFCYaRPkgXPQ8vtuNkMfiHfPmRBy6QJfnid4sWfv0=",
-        "recordedFileInputs": {},
-        "recordedDirentsInputs": {},
-        "envVariables": {},
-        "generatedRepoSpecs": {
-          "local_config_apple_cc": {
-            "bzlFile": "@@apple_support~//crosstool:setup.bzl",
-            "ruleClassName": "_apple_cc_autoconf",
-            "attributes": {}
-          },
-          "local_config_apple_cc_toolchains": {
-            "bzlFile": "@@apple_support~//crosstool:setup.bzl",
-            "ruleClassName": "_apple_cc_autoconf_toolchains",
-            "attributes": {}
-          }
-        },
-        "recordedRepoMappingEntries": [
-          [
-            "apple_support~",
-            "bazel_tools",
-            "bazel_tools"
-          ]
-        ]
-      }
-    },
-    "@@bazel_features~//private:extensions.bzl%version_extension": {
-      "general": {
-        "bzlTransitiveDigest": "xm7Skm1Las5saxzFWt2hbS+e68BWi+MXyt6+lKIhjPA=",
-        "recordedFileInputs": {},
-        "recordedDirentsInputs": {},
-        "envVariables": {},
-        "generatedRepoSpecs": {
-          "bazel_features_version": {
-            "bzlFile": "@@bazel_features~//private:version_repo.bzl",
-            "ruleClassName": "version_repo",
-            "attributes": {}
-          },
-          "bazel_features_globals": {
-            "bzlFile": "@@bazel_features~//private:globals_repo.bzl",
-            "ruleClassName": "globals_repo",
-            "attributes": {
-              "globals": {
-                "RunEnvironmentInfo": "5.3.0",
-                "DefaultInfo": "0.0.1",
-                "__TestingOnly_NeverAvailable": "1000000000.0.0"
-              }
-            }
-          }
-        },
-        "recordedRepoMappingEntries": []
-      }
-    },
-    "@@bazel_tools//tools/cpp:cc_configure.bzl%cc_configure_extension": {
-      "general": {
-        "bzlTransitiveDigest": "PHpT2yqMGms2U4L3E/aZ+WcQalmZWm+ILdP3yiLsDhA=",
-        "recordedFileInputs": {},
-        "recordedDirentsInputs": {},
-        "envVariables": {},
-        "generatedRepoSpecs": {
-          "local_config_cc": {
-            "bzlFile": "@@bazel_tools//tools/cpp:cc_configure.bzl",
-            "ruleClassName": "cc_autoconf",
-            "attributes": {}
-          },
-          "local_config_cc_toolchains": {
-            "bzlFile": "@@bazel_tools//tools/cpp:cc_configure.bzl",
-            "ruleClassName": "cc_autoconf_toolchains",
-            "attributes": {}
-          }
-        },
-        "recordedRepoMappingEntries": [
-          [
-            "bazel_tools",
-            "bazel_tools",
-            "bazel_tools"
-          ]
-        ]
-      }
-    },
-    "@@bazel_tools//tools/osx:xcode_configure.bzl%xcode_configure_extension": {
-      "general": {
-        "bzlTransitiveDigest": "Qh2bWTU6QW6wkrd87qrU4YeY+SG37Nvw3A0PR4Y0L2Y=",
-        "recordedFileInputs": {},
-        "recordedDirentsInputs": {},
-        "envVariables": {},
-        "generatedRepoSpecs": {
-          "local_config_xcode": {
-            "bzlFile": "@@bazel_tools//tools/osx:xcode_configure.bzl",
-            "ruleClassName": "xcode_autoconf",
-            "attributes": {
-              "xcode_locator": "@bazel_tools//tools/osx:xcode_locator.m",
-              "remote_xcode": ""
-            }
-          }
-        },
-        "recordedRepoMappingEntries": []
-      }
-    },
-    "@@bazel_tools//tools/sh:sh_configure.bzl%sh_configure_extension": {
-      "general": {
-        "bzlTransitiveDigest": "hp4NgmNjEg5+xgvzfh6L83bt9/aiiWETuNpwNuF1MSU=",
-        "recordedFileInputs": {},
-        "recordedDirentsInputs": {},
-        "envVariables": {},
-        "generatedRepoSpecs": {
-          "local_config_sh": {
-            "bzlFile": "@@bazel_tools//tools/sh:sh_configure.bzl",
-            "ruleClassName": "sh_config",
-            "attributes": {}
-          }
-        },
-        "recordedRepoMappingEntries": []
-      }
-    },
-    "@@gazelle~//:extensions.bzl%go_deps": {
-      "general": {
-        "bzlTransitiveDigest": "sH0ZfrlZyTTSTIpGNBfQJlEWK7fgxR4W5O3QYxF2pqQ=",
-        "recordedFileInputs": {
-          "@@//go.mod": "abc5a8099d706c7fbcdeea3162c89e59a155692760627e15fb1b0ad3390ce1b8",
-          "@@rules_go~//go.mod": "de22304b720f7f61350ec1c9739de6c0a1b1103fd22bfeb6e92c6c843ddc6d6e",
-          "@@gazelle~//go.sum": "7c4460e8ecb5dd8691a51d4fa2e9e4751108b933636497ce46db499fc2e7a88d",
-          "@@//go.sum": "55323de741b9c6ec4540ada81453c5156c974951335ef4935f6ce3f27e1f0f0c",
-          "@@rules_go~//go.sum": "d56fdb19b21a5f12bcf625c49432371ac39c2def0f564098fbda107f7c080f40",
-          "@@gazelle~//go.mod": "48dc6e771c3028ee1c18b9ffc81e596fd5f6d7e0016c5ef280e30f2821f60473"
-        },
-        "recordedDirentsInputs": {},
-        "envVariables": {},
-        "generatedRepoSpecs": {
-          "org_golang_x_tools_go_vcs": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "golang.org/x/tools/go/vcs",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:cOIJqWBl99H1dH5LWizPa+0ImeeJq3t3cJjaeOWUAL4=",
-              "replace": "",
-              "version": "v0.1.0-deprecated"
-            }
-          },
-          "com_github_klauspost_compress": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "github.com/klauspost/compress",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA=",
-              "replace": "",
-              "version": "v1.17.9"
-            }
-          },
-          "com_github_andybalholm_brotli": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "github.com/andybalholm/brotli",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M=",
-              "replace": "",
-              "version": "v1.1.0"
-            }
-          },
-          "com_github_fsnotify_fsnotify": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "github.com/fsnotify/fsnotify",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=",
-              "replace": "",
-              "version": "v1.7.0"
-            }
-          },
-          "org_golang_google_grpc_cmd_protoc_gen_go_grpc": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "google.golang.org/grpc/cmd/protoc-gen-go-grpc",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:rNBFJjBCOgVr9pWD7rs/knKL4FRTKgpZmsRfV214zcA=",
-              "replace": "",
-              "version": "v1.3.0"
-            }
-          },
-          "com_github_pmezard_go_difflib": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "github.com/pmezard/go-difflib",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=",
-              "replace": "",
-              "version": "v1.0.0"
-            }
-          },
-          "com_github_bmatcuk_doublestar_v4": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "github.com/bmatcuk/doublestar/v4",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:FH9SifrbvJhnlQpztAx++wlkk70QBf0iBWDwNy7PA4I=",
-              "replace": "",
-              "version": "v4.6.1"
-            }
-          },
-          "com_github_davecgh_go_spew": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "github.com/davecgh/go-spew",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=",
-              "replace": "",
-              "version": "v1.1.1"
-            }
-          },
-          "com_github_zeebo_xxh3": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "github.com/zeebo/xxh3",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0=",
-              "replace": "",
-              "version": "v1.0.2"
-            }
-          },
-          "org_golang_x_tools": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "golang.org/x/tools",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA=",
-              "replace": "",
-              "version": "v0.22.0"
-            }
-          },
-          "org_golang_x_net": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "golang.org/x/net",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ=",
-              "replace": "",
-              "version": "v0.26.0"
-            }
-          },
-          "com_github_bazelbuild_buildtools": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "github.com/bazelbuild/buildtools",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:2Gc2Q6hVR1SJ8bBI9Ybzoggp8u/ED2WkM4MfvEIn9+c=",
-              "replace": "",
-              "version": "v0.0.0-20231115204819-d4c9dccdfbb1"
-            }
-          },
-          "org_golang_google_genproto": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "google.golang.org/genproto",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:PksQg4dV6Sem3/HkBX+Ltq8T0ke0PKIRBNBatoDTVls=",
-              "replace": "",
-              "version": "v0.0.0-20240624140628-dc46fd24d27d"
-            }
-          },
-          "com_github_klauspost_asmfmt": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "github.com/klauspost/asmfmt",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:4Ri7ox3EwapiOjCki+hw14RyKk201CN4rzyCJRFLpK4=",
-              "replace": "",
-              "version": "v1.3.2"
-            }
-          },
-          "com_github_gogo_protobuf": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "github.com/gogo/protobuf",
-              "build_directives": [
-                "gazelle:proto disable"
-              ],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=",
-              "replace": "",
-              "version": "v1.3.2"
-            }
-          },
-          "com_github_stretchr_testify": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "github.com/stretchr/testify",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=",
-              "replace": "",
-              "version": "v1.9.0"
-            }
-          },
-          "org_golang_x_oauth2": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "golang.org/x/oauth2",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs=",
-              "replace": "",
-              "version": "v0.21.0"
-            }
-          },
-          "org_golang_x_sync": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "golang.org/x/sync",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=",
-              "replace": "",
-              "version": "v0.7.0"
-            }
-          },
-          "com_github_golang_mock": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "github.com/golang/mock",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:YojYx61/OLFsiv6Rw1Z96LpldJIy31o+UHmwAUMJ6/U=",
-              "replace": "",
-              "version": "v1.7.0-rc.1"
-            }
-          },
-          "org_golang_google_grpc": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "google.golang.org/grpc",
-              "build_directives": [
-                "gazelle:proto disable"
-              ],
-              "build_file_generation": "on",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY=",
-              "replace": "",
-              "version": "v1.64.0"
-            }
-          },
-          "com_github_minio_asm2plan9s": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "github.com/minio/asm2plan9s",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:AMFGa4R4MiIpspGNG7Z948v4n35fFGB3RR3G/ry4FWs=",
-              "replace": "",
-              "version": "v0.0.0-20200509001527-cdd76441f9d8"
-            }
-          },
-          "com_github_apache_arrow_go_v12": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "github.com/apache/arrow/go/v12",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:JsR2+hzYYjgSUkBSaahpqCetqZMr76djX80fF/DiJbg=",
-              "replace": "",
-              "version": "v12.0.1"
-            }
-          },
-          "org_golang_google_appengine": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "google.golang.org/appengine",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=",
-              "replace": "",
-              "version": "v1.6.8"
-            }
-          },
-          "org_golang_google_genproto_googleapis_rpc": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "google.golang.org/genproto/googleapis/rpc",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:BwIjyKYGsK9dMCBOorzRri8MQwmi7mT9rGHsCEinZkA=",
-              "replace": "",
-              "version": "v0.0.0-20240701130421-f6361c86f094"
-            }
-          },
-          "com_github_google_go_cmp": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "github.com/google/go-cmp",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=",
-              "replace": "",
-              "version": "v0.6.0"
-            }
-          },
-          "com_github_pierrec_lz4_v4": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "github.com/pierrec/lz4/v4",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ=",
-              "replace": "",
-              "version": "v4.1.21"
-            }
-          },
-          "org_golang_x_xerrors": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "golang.org/x/xerrors",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU=",
-              "replace": "",
-              "version": "v0.0.0-20231012003039-104605ab7028"
-            }
-          },
-          "org_golang_x_text": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "golang.org/x/text",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=",
-              "replace": "",
-              "version": "v0.16.0"
-            }
-          },
-          "com_github_kr_text": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "github.com/kr/text",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=",
-              "replace": "",
-              "version": "v0.2.0"
-            }
-          },
-          "com_github_google_uuid": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "github.com/google/uuid",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=",
-              "replace": "",
-              "version": "v1.6.0"
-            }
-          },
-          "org_golang_google_protobuf": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "google.golang.org/protobuf",
-              "build_directives": [
-                "gazelle:proto disable"
-              ],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=",
-              "replace": "",
-              "version": "v1.34.2"
-            }
-          },
-          "com_github_golang_snappy": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "github.com/golang/snappy",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=",
-              "replace": "",
-              "version": "v0.0.4"
-            }
-          },
-          "org_golang_x_mod": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "golang.org/x/mod",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0=",
-              "replace": "",
-              "version": "v0.18.0"
-            }
-          },
-          "com_google_cloud_go_compute_metadata": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "cloud.google.com/go/compute/metadata",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:vHzJCWaM4g8XIcm8kopr3XmDA4Gy/lblD3EhhSux05c=",
-              "replace": "",
-              "version": "v0.4.0"
-            }
-          },
-          "com_github_goccy_go_json": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "github.com/goccy/go-json",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA=",
-              "replace": "",
-              "version": "v0.10.3"
-            }
-          },
-          "in_gopkg_yaml_v3": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "gopkg.in/yaml.v3",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=",
-              "replace": "",
-              "version": "v3.0.1"
-            }
-          },
-          "com_github_google_flatbuffers": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "github.com/google/flatbuffers",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:CX395cjN9Kke9mmalRoL3d81AtFUxJM+yDthflgJGkI=",
-              "replace": "",
-              "version": "v24.3.25+incompatible"
-            }
-          },
-          "com_github_apache_thrift": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "github.com/apache/thrift",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:631+KvYbsBZxmuJjYwhezVsrfc/TbqtZV4QcxOX1fOI=",
-              "replace": "",
-              "version": "v0.20.0"
-            }
-          },
-          "com_github_klauspost_cpuid_v2": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "github.com/klauspost/cpuid/v2",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:+StwCXwm9PdpiEkPyzBXIy+M9KUb4ODm0Zarf1kS5BM=",
-              "replace": "",
-              "version": "v2.2.8"
-            }
-          },
-          "com_github_golang_protobuf": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "github.com/golang/protobuf",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=",
-              "replace": "",
-              "version": "v1.5.4"
-            }
-          },
-          "bazel_gazelle_go_repository_config": {
-            "bzlFile": "@@gazelle~//internal/bzlmod:go_deps.bzl",
-            "ruleClassName": "_go_repository_config",
-            "attributes": {
-              "importpaths": {
-                "com_github_apache_arrow_go_v12": "github.com/apache/arrow/go/v12",
-                "com_github_google_uuid": "github.com/google/uuid",
-                "com_github_stretchr_testify": "github.com/stretchr/testify",
-                "org_golang_google_grpc": "google.golang.org/grpc",
-                "org_golang_google_protobuf": "google.golang.org/protobuf",
-                "com_google_cloud_go_compute": "cloud.google.com/go/compute",
-                "com_google_cloud_go_compute_metadata": "cloud.google.com/go/compute/metadata",
-                "org_golang_x_sync": "golang.org/x/sync",
-                "org_golang_google_appengine": "google.golang.org/appengine",
-                "org_golang_google_genproto_googleapis_rpc": "google.golang.org/genproto/googleapis/rpc",
-                "com_github_andybalholm_brotli": "github.com/andybalholm/brotli",
-                "com_github_apache_thrift": "github.com/apache/thrift",
-                "com_github_davecgh_go_spew": "github.com/davecgh/go-spew",
-                "com_github_goccy_go_json": "github.com/goccy/go-json",
-                "com_github_golang_protobuf": "github.com/golang/protobuf",
-                "com_github_golang_snappy": "github.com/golang/snappy",
-                "com_github_google_flatbuffers": "github.com/google/flatbuffers",
-                "com_github_klauspost_asmfmt": "github.com/klauspost/asmfmt",
-                "com_github_klauspost_compress": "github.com/klauspost/compress",
-                "com_github_klauspost_cpuid_v2": "github.com/klauspost/cpuid/v2",
-                "com_github_kr_text": "github.com/kr/text",
-                "com_github_minio_asm2plan9s": "github.com/minio/asm2plan9s",
-                "com_github_minio_c2goasm": "github.com/minio/c2goasm",
-                "com_github_pierrec_lz4_v4": "github.com/pierrec/lz4/v4",
-                "com_github_pmezard_go_difflib": "github.com/pmezard/go-difflib",
-                "com_github_zeebo_xxh3": "github.com/zeebo/xxh3",
-                "org_golang_x_mod": "golang.org/x/mod",
-                "org_golang_x_net": "golang.org/x/net",
-                "org_golang_x_oauth2": "golang.org/x/oauth2",
-                "org_golang_x_sys": "golang.org/x/sys",
-                "org_golang_x_text": "golang.org/x/text",
-                "org_golang_x_tools": "golang.org/x/tools",
-                "org_golang_x_xerrors": "golang.org/x/xerrors",
-                "org_golang_google_genproto": "google.golang.org/genproto",
-                "in_gopkg_yaml_v3": "gopkg.in/yaml.v3",
-                "com_github_gogo_protobuf": "github.com/gogo/protobuf",
-                "com_github_golang_mock": "github.com/golang/mock",
-                "org_golang_google_grpc_cmd_protoc_gen_go_grpc": "google.golang.org/grpc/cmd/protoc-gen-go-grpc",
-                "com_github_bazelbuild_buildtools": "github.com/bazelbuild/buildtools",
-                "com_github_bmatcuk_doublestar_v4": "github.com/bmatcuk/doublestar/v4",
-                "com_github_fsnotify_fsnotify": "github.com/fsnotify/fsnotify",
-                "com_github_google_go_cmp": "github.com/google/go-cmp",
-                "org_golang_x_tools_go_vcs": "golang.org/x/tools/go/vcs",
-                "@rules_go~": "github.com/bazelbuild/rules_go",
-                "@gazelle~": "github.com/bazelbuild/bazel-gazelle"
-              },
-              "module_names": {
-                "@rules_go~": "rules_go",
-                "@gazelle~": "gazelle"
-              },
-              "build_naming_conventions": {}
-            }
-          },
-          "com_google_cloud_go_compute": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "cloud.google.com/go/compute",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:5cE5hdrwJV/92ravlwIFRGnyH9CpLGhh4N0ZDVTU+BA=",
-              "replace": "",
-              "version": "v1.27.2"
-            }
-          },
-          "com_github_minio_c2goasm": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "github.com/minio/c2goasm",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:+n/aFZefKZp7spd8DFdX7uMikMLXX4oubIzJF4kv/wI=",
-              "replace": "",
-              "version": "v0.0.0-20190812172519-36a3d3bbc4f3"
-            }
-          },
-          "org_golang_x_sys": {
-            "bzlFile": "@@gazelle~//internal:go_repository.bzl",
-            "ruleClassName": "go_repository",
-            "attributes": {
-              "importpath": "golang.org/x/sys",
-              "build_directives": [],
-              "build_file_generation": "auto",
-              "build_extra_args": [],
-              "patches": [],
-              "patch_args": [],
-              "sum": "h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws=",
-              "replace": "",
-              "version": "v0.21.0"
-            }
-          }
-        },
-        "moduleExtensionMetadata": {
-          "explicitRootModuleDirectDeps": [
-            "com_github_apache_arrow_go_v12",
-            "com_github_google_uuid",
-            "com_github_stretchr_testify",
-            "org_golang_google_grpc",
-            "org_golang_google_protobuf",
-            "org_golang_x_oauth2"
-          ],
-          "explicitRootModuleDirectDevDeps": [],
-          "useAllRepos": "NO",
-          "reproducible": false
-        },
-        "recordedRepoMappingEntries": [
-          [
-            "gazelle~",
-            "bazel_tools",
-            "bazel_tools"
-          ]
-        ]
-      }
-    },
-    "@@gazelle~//internal/bzlmod:non_module_deps.bzl%non_module_deps": {
-      "general": {
-        "bzlTransitiveDigest": "xNdST0Ab6CHJP2h2BsR70cR4mizNZN38jXc/Y2vtlzo=",
-        "recordedFileInputs": {},
-        "recordedDirentsInputs": {},
-        "envVariables": {},
-        "generatedRepoSpecs": {
-          "bazel_gazelle_is_bazel_module": {
-            "bzlFile": "@@gazelle~//internal:is_bazel_module.bzl",
-            "ruleClassName": "is_bazel_module",
-            "attributes": {
-              "is_bazel_module": true
-            }
-          },
-          "bazel_gazelle_go_repository_tools": {
-            "bzlFile": "@@gazelle~//internal:go_repository_tools.bzl",
-            "ruleClassName": "go_repository_tools",
-            "attributes": {
-              "go_cache": "@@gazelle~~non_module_deps~bazel_gazelle_go_repository_cache//:go.env"
-            }
-          },
-          "bazel_gazelle_go_repository_cache": {
-            "bzlFile": "@@gazelle~//internal:go_repository_cache.bzl",
-            "ruleClassName": "go_repository_cache",
-            "attributes": {
-              "go_sdk_name": "@rules_go~~go_sdk~go_default_sdk",
-              "go_env": {}
-            }
-          }
-        },
-        "recordedRepoMappingEntries": [
-          [
-            "gazelle~",
-            "bazel_gazelle_go_repository_cache",
-            "gazelle~~non_module_deps~bazel_gazelle_go_repository_cache"
-          ],
-          [
-            "gazelle~",
-            "go_host_compatible_sdk_label",
-            "rules_go~~go_sdk~go_host_compatible_sdk_label"
-          ],
-          [
-            "rules_go~~go_sdk~go_host_compatible_sdk_label",
-            "go_default_sdk",
-            "rules_go~~go_sdk~go_default_sdk"
-          ]
-        ]
-      }
-    },
-    "@@rules_go~//go:extensions.bzl%go_sdk": {
-      "os:osx,arch:aarch64": {
-        "bzlTransitiveDigest": "5Wukv57iJpRLNlBHsU74+be6lejZesHHh8A06QSWZYQ=",
-        "recordedFileInputs": {},
-        "recordedDirentsInputs": {},
-        "envVariables": {},
-        "generatedRepoSpecs": {
-          "io_bazel_rules_nogo": {
-            "bzlFile": "@@rules_go~//go/private:nogo.bzl",
-            "ruleClassName": "go_register_nogo",
-            "attributes": {
-              "nogo": "@io_bazel_rules_go//:default_nogo",
-              "includes": [
-                "'@@//:__subpackages__'"
-              ],
-              "excludes": []
-            }
-          },
-          "rules_go__download_0_windows_arm64": {
-            "bzlFile": "@@rules_go~//go/private:sdk.bzl",
-            "ruleClassName": "go_download_sdk_rule",
-            "attributes": {
-              "goos": "",
-              "goarch": "",
-              "sdks": {},
-              "urls": [
-                "https://dl.google.com/go/{}"
-              ],
-              "version": "1.21.1"
-            }
-          },
-          "rules_go__download_0_linux_arm64": {
-            "bzlFile": "@@rules_go~//go/private:sdk.bzl",
-            "ruleClassName": "go_download_sdk_rule",
-            "attributes": {
-              "goos": "",
-              "goarch": "",
-              "sdks": {},
-              "urls": [
-                "https://dl.google.com/go/{}"
-              ],
-              "version": "1.21.1"
-            }
-          },
-          "go_default_sdk": {
-            "bzlFile": "@@rules_go~//go/private:sdk.bzl",
-            "ruleClassName": "go_download_sdk_rule",
-            "attributes": {
-              "goos": "",
-              "goarch": "",
-              "sdks": {},
-              "experiments": [],
-              "patches": [],
-              "patch_strip": 0,
-              "urls": [
-                "https://dl.google.com/go/{}"
-              ],
-              "version": "1.21.1",
-              "strip_prefix": "go"
-            }
-          },
-          "go_host_compatible_sdk_label": {
-            "bzlFile": "@@rules_go~//go/private:extensions.bzl",
-            "ruleClassName": "host_compatible_toolchain",
-            "attributes": {
-              "toolchain": "@go_default_sdk//:ROOT"
-            }
-          },
-          "rules_go__download_0_linux_amd64": {
-            "bzlFile": "@@rules_go~//go/private:sdk.bzl",
-            "ruleClassName": "go_download_sdk_rule",
-            "attributes": {
-              "goos": "",
-              "goarch": "",
-              "sdks": {},
-              "urls": [
-                "https://dl.google.com/go/{}"
-              ],
-              "version": "1.21.1"
-            }
-          },
-          "rules_go__download_0_darwin_amd64": {
-            "bzlFile": "@@rules_go~//go/private:sdk.bzl",
-            "ruleClassName": "go_download_sdk_rule",
-            "attributes": {
-              "goos": "",
-              "goarch": "",
-              "sdks": {},
-              "urls": [
-                "https://dl.google.com/go/{}"
-              ],
-              "version": "1.21.1"
-            }
-          },
-          "go_toolchains": {
-            "bzlFile": "@@rules_go~//go/private:sdk.bzl",
-            "ruleClassName": "go_multiple_toolchains",
-            "attributes": {
-              "prefixes": [
-                "_0000_go_default_sdk_",
-                "_0001_rules_go__download_0_darwin_amd64_",
-                "_0002_rules_go__download_0_linux_amd64_",
-                "_0003_rules_go__download_0_linux_arm64_",
-                "_0004_rules_go__download_0_windows_amd64_",
-                "_0005_rules_go__download_0_windows_arm64_"
-              ],
-              "geese": [
-                "",
-                "darwin",
-                "linux",
-                "linux",
-                "windows",
-                "windows"
-              ],
-              "goarchs": [
-                "",
-                "amd64",
-                "amd64",
-                "arm64",
-                "amd64",
-                "arm64"
-              ],
-              "sdk_repos": [
-                "go_default_sdk",
-                "rules_go__download_0_darwin_amd64",
-                "rules_go__download_0_linux_amd64",
-                "rules_go__download_0_linux_arm64",
-                "rules_go__download_0_windows_amd64",
-                "rules_go__download_0_windows_arm64"
-              ],
-              "sdk_types": [
-                "remote",
-                "remote",
-                "remote",
-                "remote",
-                "remote",
-                "remote"
-              ],
-              "sdk_versions": [
-                "1.21.1",
-                "1.21.1",
-                "1.21.1",
-                "1.21.1",
-                "1.21.1",
-                "1.21.1"
-              ]
-            }
-          },
-          "rules_go__download_0_windows_amd64": {
-            "bzlFile": "@@rules_go~//go/private:sdk.bzl",
-            "ruleClassName": "go_download_sdk_rule",
-            "attributes": {
-              "goos": "",
-              "goarch": "",
-              "sdks": {},
-              "urls": [
-                "https://dl.google.com/go/{}"
-              ],
-              "version": "1.21.1"
-            }
-          }
-        },
-        "recordedRepoMappingEntries": [
-          [
-            "bazel_features~",
-            "bazel_features_globals",
-            "bazel_features~~version_extension~bazel_features_globals"
-          ],
-          [
-            "bazel_features~",
-            "bazel_features_version",
-            "bazel_features~~version_extension~bazel_features_version"
-          ],
-          [
-            "rules_go~",
-            "bazel_features",
-            "bazel_features~"
-          ],
-          [
-            "rules_go~",
-            "bazel_tools",
-            "bazel_tools"
-          ],
-          [
-            "rules_go~",
-            "io_bazel_rules_go",
-            "rules_go~"
-          ]
-        ]
-      }
-    },
-    "@@rules_java~//java:extensions.bzl%toolchains": {
-      "general": {
-        "bzlTransitiveDigest": "0N5b5J9fUzo0sgvH4F3kIEaeXunz4Wy2/UtSFV/eXUY=",
-        "recordedFileInputs": {},
-        "recordedDirentsInputs": {},
-        "envVariables": {},
-        "generatedRepoSpecs": {
-          "remotejdk21_linux_toolchain_config_repo": {
-            "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl",
-            "ruleClassName": "_toolchain_config",
-            "attributes": {
-              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_21\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"21\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"/ [...]
-            }
-          },
-          "remotejdk17_linux_s390x_toolchain_config_repo": {
-            "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl",
-            "ruleClassName": "_toolchain_config",
-            "attributes": {
-              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_17\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"17\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"/ [...]
-            }
-          },
-          "remotejdk17_macos_toolchain_config_repo": {
-            "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl",
-            "ruleClassName": "_toolchain_config",
-            "attributes": {
-              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_17\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"17\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"/ [...]
-            }
-          },
-          "remotejdk21_macos_aarch64_toolchain_config_repo": {
-            "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl",
-            "ruleClassName": "_toolchain_config",
-            "attributes": {
-              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_21\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"21\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"/ [...]
-            }
-          },
-          "remotejdk17_linux_aarch64_toolchain_config_repo": {
-            "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl",
-            "ruleClassName": "_toolchain_config",
-            "attributes": {
-              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_17\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"17\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"/ [...]
-            }
-          },
-          "remotejdk21_macos_aarch64": {
-            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-            "ruleClassName": "http_archive",
-            "attributes": {
-              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks ac [...]
-              "sha256": "e8260516de8b60661422a725f1df2c36ef888f6fb35393566b00e7325db3d04e",
-              "strip_prefix": "zulu21.32.17-ca-jdk21.0.2-macosx_aarch64",
-              "urls": [
-                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-macosx_aarch64.tar.gz",
-                "https://cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-macosx_aarch64.tar.gz"
-              ]
-            }
-          },
-          "remotejdk17_linux_toolchain_config_repo": {
-            "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl",
-            "ruleClassName": "_toolchain_config",
-            "attributes": {
-              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_17\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"17\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"/ [...]
-            }
-          },
-          "remotejdk17_macos_aarch64": {
-            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-            "ruleClassName": "http_archive",
-            "attributes": {
-              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks ac [...]
-              "sha256": "314b04568ec0ae9b36ba03c9cbd42adc9e1265f74678923b19297d66eb84dcca",
-              "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-macosx_aarch64",
-              "urls": [
-                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-macosx_aarch64.tar.gz",
-                "https://cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-macosx_aarch64.tar.gz"
-              ]
-            }
-          },
-          "remote_java_tools_windows": {
-            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-            "ruleClassName": "http_archive",
-            "attributes": {
-              "sha256": "fe2f88169696d6c6fc6e90ba61bb46be7d0ae3693cbafdf336041bf56679e8d1",
-              "urls": [
-                "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.4/java_tools_windows-v13.4.zip",
-                "https://github.com/bazelbuild/java_tools/releases/download/java_v13.4/java_tools_windows-v13.4.zip"
-              ]
-            }
-          },
-          "remotejdk11_win": {
-            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-            "ruleClassName": "http_archive",
-            "attributes": {
-              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks ac [...]
-              "sha256": "43408193ce2fa0862819495b5ae8541085b95660153f2adcf91a52d3a1710e83",
-              "strip_prefix": "zulu11.66.15-ca-jdk11.0.20-win_x64",
-              "urls": [
-                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-win_x64.zip",
-                "https://cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-win_x64.zip"
-              ]
-            }
-          },
-          "remotejdk11_win_toolchain_config_repo": {
-            "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl",
-            "ruleClassName": "_toolchain_config",
-            "attributes": {
-              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_11\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"11\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"/ [...]
-            }
-          },
-          "remotejdk11_linux_aarch64": {
-            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-            "ruleClassName": "http_archive",
-            "attributes": {
-              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks ac [...]
-              "sha256": "54174439f2b3fddd11f1048c397fe7bb45d4c9d66d452d6889b013d04d21c4de",
-              "strip_prefix": "zulu11.66.15-ca-jdk11.0.20-linux_aarch64",
-              "urls": [
-                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-linux_aarch64.tar.gz",
-                "https://cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-linux_aarch64.tar.gz"
-              ]
-            }
-          },
-          "remotejdk17_linux": {
-            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-            "ruleClassName": "http_archive",
-            "attributes": {
-              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks ac [...]
-              "sha256": "b9482f2304a1a68a614dfacddcf29569a72f0fac32e6c74f83dc1b9a157b8340",
-              "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-linux_x64",
-              "urls": [
-                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-linux_x64.tar.gz",
-                "https://cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-linux_x64.tar.gz"
-              ]
-            }
-          },
-          "remotejdk11_linux_s390x_toolchain_config_repo": {
-            "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl",
-            "ruleClassName": "_toolchain_config",
-            "attributes": {
-              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_11\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"11\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"/ [...]
-            }
-          },
-          "remotejdk11_linux_toolchain_config_repo": {
-            "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl",
-            "ruleClassName": "_toolchain_config",
-            "attributes": {
-              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_11\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"11\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"/ [...]
-            }
-          },
-          "remotejdk11_macos": {
-            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-            "ruleClassName": "http_archive",
-            "attributes": {
-              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks ac [...]
-              "sha256": "bcaab11cfe586fae7583c6d9d311c64384354fb2638eb9a012eca4c3f1a1d9fd",
-              "strip_prefix": "zulu11.66.15-ca-jdk11.0.20-macosx_x64",
-              "urls": [
-                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-macosx_x64.tar.gz",
-                "https://cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-macosx_x64.tar.gz"
-              ]
-            }
-          },
-          "remotejdk11_win_arm64": {
-            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-            "ruleClassName": "http_archive",
-            "attributes": {
-              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks ac [...]
-              "sha256": "b8a28e6e767d90acf793ea6f5bed0bb595ba0ba5ebdf8b99f395266161e53ec2",
-              "strip_prefix": "jdk-11.0.13+8",
-              "urls": [
-                "https://mirror.bazel.build/aka.ms/download-jdk/microsoft-jdk-11.0.13.8.1-windows-aarch64.zip"
-              ]
-            }
-          },
-          "remotejdk17_macos": {
-            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-            "ruleClassName": "http_archive",
-            "attributes": {
-              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks ac [...]
-              "sha256": "640453e8afe8ffe0fb4dceb4535fb50db9c283c64665eebb0ba68b19e65f4b1f",
-              "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-macosx_x64",
-              "urls": [
-                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-macosx_x64.tar.gz",
-                "https://cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-macosx_x64.tar.gz"
-              ]
-            }
-          },
-          "remotejdk21_macos": {
-            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-            "ruleClassName": "http_archive",
-            "attributes": {
-              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks ac [...]
-              "sha256": "3ad8fe288eb57d975c2786ae453a036aa46e47ab2ac3d81538ebae2a54d3c025",
-              "strip_prefix": "zulu21.32.17-ca-jdk21.0.2-macosx_x64",
-              "urls": [
-                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-macosx_x64.tar.gz",
-                "https://cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-macosx_x64.tar.gz"
-              ]
-            }
-          },
-          "remotejdk21_macos_toolchain_config_repo": {
-            "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl",
-            "ruleClassName": "_toolchain_config",
-            "attributes": {
-              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_21\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"21\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"/ [...]
-            }
-          },
-          "remotejdk17_macos_aarch64_toolchain_config_repo": {
-            "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl",
-            "ruleClassName": "_toolchain_config",
-            "attributes": {
-              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_17\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"17\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"/ [...]
-            }
-          },
-          "remotejdk17_win": {
-            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-            "ruleClassName": "http_archive",
-            "attributes": {
-              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks ac [...]
-              "sha256": "192f2afca57701de6ec496234f7e45d971bf623ff66b8ee4a5c81582054e5637",
-              "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-win_x64",
-              "urls": [
-                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-win_x64.zip",
-                "https://cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-win_x64.zip"
-              ]
-            }
-          },
-          "remotejdk11_macos_aarch64_toolchain_config_repo": {
-            "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl",
-            "ruleClassName": "_toolchain_config",
-            "attributes": {
-              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_11\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"11\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"/ [...]
-            }
-          },
-          "remotejdk11_linux_ppc64le_toolchain_config_repo": {
-            "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl",
-            "ruleClassName": "_toolchain_config",
-            "attributes": {
-              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_11\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"11\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"/ [...]
-            }
-          },
-          "remotejdk21_linux": {
-            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-            "ruleClassName": "http_archive",
-            "attributes": {
-              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks ac [...]
-              "sha256": "5ad730fbee6bb49bfff10bf39e84392e728d89103d3474a7e5def0fd134b300a",
-              "strip_prefix": "zulu21.32.17-ca-jdk21.0.2-linux_x64",
-              "urls": [
-                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-linux_x64.tar.gz",
-                "https://cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-linux_x64.tar.gz"
-              ]
-            }
-          },
-          "remote_java_tools_linux": {
-            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-            "ruleClassName": "http_archive",
-            "attributes": {
-              "sha256": "ba10f09a138cf185d04cbc807d67a3da42ab13d618c5d1ce20d776e199c33a39",
-              "urls": [
-                "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.4/java_tools_linux-v13.4.zip",
-                "https://github.com/bazelbuild/java_tools/releases/download/java_v13.4/java_tools_linux-v13.4.zip"
-              ]
-            }
-          },
-          "remotejdk21_win": {
-            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-            "ruleClassName": "http_archive",
-            "attributes": {
-              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks ac [...]
-              "sha256": "f7cc15ca17295e69c907402dfe8db240db446e75d3b150da7bf67243cded93de",
-              "strip_prefix": "zulu21.32.17-ca-jdk21.0.2-win_x64",
-              "urls": [
-                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-win_x64.zip",
-                "https://cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-win_x64.zip"
-              ]
-            }
-          },
-          "remotejdk21_linux_aarch64": {
-            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-            "ruleClassName": "http_archive",
-            "attributes": {
-              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks ac [...]
-              "sha256": "ce7df1af5d44a9f455617c4b8891443fbe3e4b269c777d8b82ed66f77167cfe0",
-              "strip_prefix": "zulu21.32.17-ca-jdk21.0.2-linux_aarch64",
-              "urls": [
-                "https://cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-linux_aarch64.tar.gz",
-                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-linux_aarch64.tar.gz"
-              ]
-            }
-          },
-          "remotejdk11_linux_aarch64_toolchain_config_repo": {
-            "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl",
-            "ruleClassName": "_toolchain_config",
-            "attributes": {
-              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_11\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"11\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"/ [...]
-            }
-          },
-          "remotejdk11_linux_s390x": {
-            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-            "ruleClassName": "http_archive",
-            "attributes": {
-              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks ac [...]
-              "sha256": "a58fc0361966af0a5d5a31a2d8a208e3c9bb0f54f345596fd80b99ea9a39788b",
-              "strip_prefix": "jdk-11.0.15+10",
-              "urls": [
-                "https://mirror.bazel.build/github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.15_10.tar.gz",
-                "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.15_10.tar.gz"
-              ]
-            }
-          },
-          "remotejdk17_linux_aarch64": {
-            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-            "ruleClassName": "http_archive",
-            "attributes": {
-              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks ac [...]
-              "sha256": "6531cef61e416d5a7b691555c8cf2bdff689201b8a001ff45ab6740062b44313",
-              "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-linux_aarch64",
-              "urls": [
-                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-linux_aarch64.tar.gz",
-                "https://cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-linux_aarch64.tar.gz"
-              ]
-            }
-          },
-          "remotejdk17_win_arm64_toolchain_config_repo": {
-            "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl",
-            "ruleClassName": "_toolchain_config",
-            "attributes": {
-              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_17\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"17\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"/ [...]
-            }
-          },
-          "remotejdk11_linux": {
-            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-            "ruleClassName": "http_archive",
-            "attributes": {
-              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks ac [...]
-              "sha256": "a34b404f87a08a61148b38e1416d837189e1df7a040d949e743633daf4695a3c",
-              "strip_prefix": "zulu11.66.15-ca-jdk11.0.20-linux_x64",
-              "urls": [
-                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-linux_x64.tar.gz",
-                "https://cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-linux_x64.tar.gz"
-              ]
-            }
-          },
-          "remotejdk11_macos_toolchain_config_repo": {
-            "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl",
-            "ruleClassName": "_toolchain_config",
-            "attributes": {
-              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_11\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"11\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"/ [...]
-            }
-          },
-          "remotejdk17_linux_ppc64le_toolchain_config_repo": {
-            "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl",
-            "ruleClassName": "_toolchain_config",
-            "attributes": {
-              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_17\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"17\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"/ [...]
-            }
-          },
-          "remotejdk17_win_arm64": {
-            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-            "ruleClassName": "http_archive",
-            "attributes": {
-              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks ac [...]
-              "sha256": "6802c99eae0d788e21f52d03cab2e2b3bf42bc334ca03cbf19f71eb70ee19f85",
-              "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-win_aarch64",
-              "urls": [
-                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-win_aarch64.zip",
-                "https://cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-win_aarch64.zip"
-              ]
-            }
-          },
-          "remote_java_tools_darwin_arm64": {
-            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-            "ruleClassName": "http_archive",
-            "attributes": {
-              "sha256": "076a7e198ad077f8c7d997986ef5102427fae6bbfce7a7852d2e080ed8767528",
-              "urls": [
-                "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.4/java_tools_darwin_arm64-v13.4.zip",
-                "https://github.com/bazelbuild/java_tools/releases/download/java_v13.4/java_tools_darwin_arm64-v13.4.zip"
-              ]
-            }
-          },
-          "remotejdk17_linux_ppc64le": {
-            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-            "ruleClassName": "http_archive",
-            "attributes": {
-              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks ac [...]
-              "sha256": "00a4c07603d0218cd678461b5b3b7e25b3253102da4022d31fc35907f21a2efd",
-              "strip_prefix": "jdk-17.0.8.1+1",
-              "urls": [
-                "https://mirror.bazel.build/github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.8.1%2B1/OpenJDK17U-jdk_ppc64le_linux_hotspot_17.0.8.1_1.tar.gz",
-                "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.8.1%2B1/OpenJDK17U-jdk_ppc64le_linux_hotspot_17.0.8.1_1.tar.gz"
-              ]
-            }
-          },
-          "remotejdk21_linux_aarch64_toolchain_config_repo": {
-            "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl",
-            "ruleClassName": "_toolchain_config",
-            "attributes": {
-              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_21\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"21\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"/ [...]
-            }
-          },
-          "remotejdk11_win_arm64_toolchain_config_repo": {
-            "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl",
-            "ruleClassName": "_toolchain_config",
-            "attributes": {
-              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_11\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"11\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"/ [...]
-            }
-          },
-          "local_jdk": {
-            "bzlFile": "@@rules_java~//toolchains:local_java_repository.bzl",
-            "ruleClassName": "_local_java_repository_rule",
-            "attributes": {
-              "java_home": "",
-              "version": "",
-              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks ac [...]
-            }
-          },
-          "remote_java_tools_darwin_x86_64": {
-            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-            "ruleClassName": "http_archive",
-            "attributes": {
-              "sha256": "4523aec4d09c587091a2dae6f5c9bc6922c220f3b6030e5aba9c8f015913cc65",
-              "urls": [
-                "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.4/java_tools_darwin_x86_64-v13.4.zip",
-                "https://github.com/bazelbuild/java_tools/releases/download/java_v13.4/java_tools_darwin_x86_64-v13.4.zip"
-              ]
-            }
-          },
-          "remote_java_tools": {
-            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-            "ruleClassName": "http_archive",
-            "attributes": {
-              "sha256": "e025fd260ac39b47c111f5212d64ec0d00d85dec16e49368aae82fc626a940cf",
-              "urls": [
-                "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.4/java_tools-v13.4.zip",
-                "https://github.com/bazelbuild/java_tools/releases/download/java_v13.4/java_tools-v13.4.zip"
-              ]
-            }
-          },
-          "remotejdk17_linux_s390x": {
-            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-            "ruleClassName": "http_archive",
-            "attributes": {
-              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks ac [...]
-              "sha256": "ffacba69c6843d7ca70d572489d6cc7ab7ae52c60f0852cedf4cf0d248b6fc37",
-              "strip_prefix": "jdk-17.0.8.1+1",
-              "urls": [
-                "https://mirror.bazel.build/github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.8.1%2B1/OpenJDK17U-jdk_s390x_linux_hotspot_17.0.8.1_1.tar.gz",
-                "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.8.1%2B1/OpenJDK17U-jdk_s390x_linux_hotspot_17.0.8.1_1.tar.gz"
-              ]
-            }
-          },
-          "remotejdk17_win_toolchain_config_repo": {
-            "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl",
-            "ruleClassName": "_toolchain_config",
-            "attributes": {
-              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_17\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"17\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"/ [...]
-            }
-          },
-          "remotejdk11_linux_ppc64le": {
-            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-            "ruleClassName": "http_archive",
-            "attributes": {
-              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks ac [...]
-              "sha256": "a8fba686f6eb8ae1d1a9566821dbd5a85a1108b96ad857fdbac5c1e4649fc56f",
-              "strip_prefix": "jdk-11.0.15+10",
-              "urls": [
-                "https://mirror.bazel.build/github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.15_10.tar.gz",
-                "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.15_10.tar.gz"
-              ]
-            }
-          },
-          "remotejdk11_macos_aarch64": {
-            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
-            "ruleClassName": "http_archive",
-            "attributes": {
-              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks ac [...]
-              "sha256": "7632bc29f8a4b7d492b93f3bc75a7b61630894db85d136456035ab2a24d38885",
-              "strip_prefix": "zulu11.66.15-ca-jdk11.0.20-macosx_aarch64",
-              "urls": [
-                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-macosx_aarch64.tar.gz",
-                "https://cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-macosx_aarch64.tar.gz"
-              ]
-            }
-          },
-          "remotejdk21_win_toolchain_config_repo": {
-            "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl",
-            "ruleClassName": "_toolchain_config",
-            "attributes": {
-              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_21\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"21\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"/ [...]
-            }
-          }
-        },
-        "recordedRepoMappingEntries": [
-          [
-            "rules_java~",
-            "bazel_tools",
-            "bazel_tools"
-          ],
-          [
-            "rules_java~",
-            "remote_java_tools",
-            "rules_java~~toolchains~remote_java_tools"
-          ]
-        ]
-      }
-    }
-  }
-}
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..d4d158a
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,110 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+#
+
+FIRST_GOPATH              := $(firstword $(subst :, ,$(GOPATH)))
+PKGS                      := $(shell go list ./... | grep -v /tests | grep -v /xcpb | grep -v /gpb)
+GOFILES_NOVENDOR          := $(shell find . -name vendor -prune -o -type f -name '*.go' -not -name '*.pb.go' -print)
+GOFILES_BUILD             := $(shell find . -type f -name '*.go' -not -name '*_test.go')
+PROTOFILES                := $(shell find . -name vendor -prune -o -type f -name '*.proto' -print)
+
+ALLGOFILES				  			:= $(shell find . -type f -name '*.go')
+DATE                      := $(shell date -u -d "@$(SOURCE_DATE_EPOCH)" '+%FT%T%z' 2>/dev/null || date -u '+%FT%T%z')
+
+BUILDFLAGS_NOPIE		  :=
+#BUILDFLAGS_NOPIE          := -trimpath -ldflags="-s -w -X main.version=$(GOPASS_VERSION) -X main.commit=$(GOPASS_REVISION) -X main.date=$(DATE)" -gcflags="-trimpath=$(GOPATH)" -asmflags="-trimpath=$(GOPATH)"
+BUILDFLAGS                ?= $(BUILDFLAGS_NOPIE) -buildmode=pie
+TESTFLAGS                 ?=
+PWD                       := $(shell pwd)
+PREFIX                    ?= $(GOPATH)
+BINDIR                    ?= $(PREFIX)/bin
+GO                        := GO111MODULE=on go
+GOOS                      ?= $(shell go version | cut -d' ' -f4 | cut -d'/' -f1)
+GOARCH                    ?= $(shell go version | cut -d' ' -f4 | cut -d'/' -f2)
+TAGS                      ?= netgo
+SHELL = bash
+
+BINARIES				  := cmd/spark-connect-example-spark-session cmd/spark-connect-example-raw-grpc-client
+
+# Define the location of SPARK_HOME because we need that to depend on the build paths
+MAKEFILE_DIR:=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
+
+PROTO_SRC = $(shell find internal/generated -type f -name *.proto )
+
+
+OK := $(shell tput setaf 6; echo ' [OK]'; tput sgr0;)
+
+all: build
+
+build: $(BUILD_OUTPUT) $(BINARIES) internal/generated.out
+
+cmd/spark-connect-example-raw-grpc-client: $(GOFILES_BUILD)
+	@echo ">> BUILD, output = $@"
+	@cd $@ && $(GO) build -o $(notdir $@) $(BUILDFLAGS)
+	@printf '%s\n' '$(OK)'
+
+cmd/spark-connect-example-spark-session: $(GOFILES_BUILD)
+	@echo ">> BUILD, output = $@"
+	@cd $@ && $(GO) build -o $(notdir $@) $(BUILDFLAGS)
+	@printf '%s\n' '$(OK)'
+
+internal/generated.out:
+	@echo -n ">> BUILD, output = $@"
+	buf generate --debug -vvv
+	@touch internal/generated.out
+	@printf '%s\n' '$(OK)'
+
+gen: internal/generated.out
+
+$(GOFILES_BUILD): gen
+
+$(BUILD_OUTPUT): $(GOFILES_BUILD)
+	@echo -n ">> BUILD, output = $@"
+	@$(GO) build -o $@ $(BUILDFLAGS)
+	@printf '%s\n' '$(OK)'
+
+lint: $(BUILD_OUTPUT)
+	@golangci-lint run
+
+fmt:
+	@gofumpt -extra -w $(ALLGOFILES)
+
+test: $(BUILD_OUTPUT)
+	@echo ">> TEST, \"verbose\""
+	@$(foreach pkg, $(PKGS),\
+	    @echo -n "     ";\
+		$(GO) test -v -run '(Test|Example)' $(BUILDFLAGS) $(TESTFLAGS) $(pkg) || exit 1)
+
+fulltest: $(BUILD_OUTPUT)
+	@echo ">> TEST, \"coverage\""
+	@echo "mode: atomic" > coverage-all.out
+	@$(foreach pkg, $(PKGS),\
+	    echo -n "     ";\
+		go test -run '(Test|Example)' $(BUILDFLAGS) $(TESTFLAGS) -coverprofile=coverage.out -covermode=atomic $(pkg) || exit 1;\
+		tail -n +2 coverage.out >> coverage-all.out;)
+	@$(GO) tool cover -html=coverage-all.out -o coverage-all.html
+
+
+clean:
+	@echo -n ">> CLEAN"
+	@$(GO) clean -i ./...
+	@rm -rf ./internal/generated
+	@rm  -f ./internal/generated.out
+	@rm -f ./coverage-all.html
+	@rm -f ./coverage-all.out
+	@rm -f ./coverage.out
+	@find . -type f -name "coverage.out" -delete
+	@printf '%s\n' '$(OK)'
diff --git a/README.md b/README.md
index 9a2bc09..7832edb 100644
--- a/README.md
+++ b/README.md
@@ -17,7 +17,7 @@ This section explains how to run Spark Connect Go locally.
 
 Step 1: Install Golang: https://go.dev/doc/install.
 
-Step 2: Install [bazel](https://bazel.build/install) to build the code.
+Step 2: Ensure you have installed `buf CLI` installed, [more info here](https://buf.build/docs/installation/)
 
 Step 3: Run the following commands to setup the Spark Connect client.
 
@@ -25,17 +25,17 @@ Step 3: Run the following commands to setup the Spark Connect client.
 git clone https://github.com/apache/spark-connect-go.git
 git submodule update --init --recursive
 
-bazel test //...
+make gen && make test
 ```
 
 Step 4: Setup the Spark Driver on localhost.
 
-1. [Download Spark distribution](https://spark.apache.org/downloads.html) (3.5.1), unzip the package.
+1. [Download Spark distribution](https://spark.apache.org/downloads.html) (3.4.0+), unzip the package.
 
 2. Start the Spark Connect server with the following command (make sure to use a package version that matches your Spark distribution):
 
 ```
-sbin/start-connect-server.sh --packages org.apache.spark:spark-connect_2.12:3.5.1
+sbin/start-connect-server.sh --packages org.apache.spark:spark-connect_2.12:3.4.0
 ```
 
 Step 5: Run the example Go application.
@@ -53,26 +53,26 @@ See [Quick Start Guide](quick-start.md)
 Following [diagram](https://textik.com/#ac299c8f32c4c342) shows main code in current prototype:
 
 ```
-    +-------------------+
-    |                   |
-    |   dataFrameImpl   |
-    |                   |
-    +-------------------+
-              |
-              |
-              +
-    +-------------------+
-    |                   |
-    | sparkSessionImpl  |
-    |                   |
-    +-------------------+
-              |
-              |
-              +
-+---------------------------+               +----------------+
-|                           |               |                |
-| SparkConnectServiceClient |--------------+|  Spark Driver  |
-|                           |               |                |
+    +-------------------+                                                                              
+    |                   |                                                                              
+    |   dataFrameImpl   |                                                                              
+    |                   |                                                                              
+    +-------------------+                                                                              
+              |                                                                                        
+              |                                                                                        
+              +                                                                                        
+    +-------------------+                                                                              
+    |                   |                                                                              
+    | sparkSessionImpl  |                                                                              
+    |                   |                                                                              
+    +-------------------+                                                                              
+              |                                                                                        
+              |                                                                                        
+              +                                                                                        
++---------------------------+               +----------------+                                         
+|                           |               |                |                                         
+| SparkConnectServiceClient |--------------+|  Spark Driver  |                                         
+|                           |               |                |                                         
 +---------------------------+               +----------------+
 ```
 
diff --git a/WORKSPACE b/WORKSPACE
deleted file mode 100644
index e69de29..0000000
diff --git a/.gitignore b/buf.gen.yaml
similarity index 69%
copy from .gitignore
copy to buf.gen.yaml
index 50b0fb3..3f4d4bf 100644
--- a/.gitignore
+++ b/buf.gen.yaml
@@ -14,22 +14,10 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
+version: v1
+plugins:
+  - plugin: buf.build/protocolbuffers/go:v1.30.0
+    out: .
+  - plugin: buf.build/grpc/go:v1.3.0
+    out: .
 
-# All generated files
-internal/generated.out
-
-# Ignore Coverage Files
-coverage*
-
-# Ignore IDE files
-.idea/
-
-# Ignore binaries
-cmd/spark-connect-example-raw-grpc-client/spark-connect-example-raw-grpc-client
-cmd/spark-connect-example-spark-session/spark-connect-example-spark-session
-
-# Bazel
-bazel-out
-bazel-bin
-bazel-spark-connect-go
-bazel-testlogs
\ No newline at end of file
diff --git a/.gitignore b/buf.work.yaml
similarity index 69%
copy from .gitignore
copy to buf.work.yaml
index 50b0fb3..d4ea6f3 100644
--- a/.gitignore
+++ b/buf.work.yaml
@@ -14,22 +14,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-
-# All generated files
-internal/generated.out
-
-# Ignore Coverage Files
-coverage*
-
-# Ignore IDE files
-.idea/
-
-# Ignore binaries
-cmd/spark-connect-example-raw-grpc-client/spark-connect-example-raw-grpc-client
-cmd/spark-connect-example-spark-session/spark-connect-example-spark-session
-
-# Bazel
-bazel-out
-bazel-bin
-bazel-spark-connect-go
-bazel-testlogs
\ No newline at end of file
+version: v1
+directories:
+  - spark/connector/connect/common/src/main/protobuf
diff --git a/client/channel/BUILD.bazel b/client/channel/BUILD.bazel
deleted file mode 100644
index f467eb2..0000000
--- a/client/channel/BUILD.bazel
+++ /dev/null
@@ -1,28 +0,0 @@
-load("@rules_go//go:def.bzl", "go_library", "go_test")
-
-go_library(
-    name = "channel",
-    srcs = [
-        "channel.go",
-        "compat.go",
-    ],
-    importpath = "github.com/apache/spark-connect-go/v1/client/channel",
-    visibility = ["//visibility:public"],
-    deps = [
-        "//client/sparkerrors",
-        "@org_golang_google_grpc//:go_default_library",
-        "@org_golang_google_grpc//credentials",
-        "@org_golang_google_grpc//credentials/oauth",
-        "@org_golang_x_oauth2//:oauth2",
-    ],
-)
-
-go_test(
-    name = "channel_test",
-    srcs = ["channel_test.go"],
-    deps = [
-        ":channel",
-        "//client/sparkerrors",
-        "@com_github_stretchr_testify//assert",
-    ],
-)
diff --git a/client/sparkerrors/BUILD.bazel b/client/sparkerrors/BUILD.bazel
deleted file mode 100644
index d12d220..0000000
--- a/client/sparkerrors/BUILD.bazel
+++ /dev/null
@@ -1,15 +0,0 @@
-load("@rules_go//go:def.bzl", "go_library", "go_test")
-
-go_library(
-    name = "sparkerrors",
-    srcs = ["errors.go"],
-    importpath = "github.com/apache/spark-connect-go/v1/client/sparkerrors",
-    visibility = ["//visibility:public"],
-)
-
-go_test(
-    name = "sparkerrors_test",
-    srcs = ["errors_test.go"],
-    embed = [":sparkerrors"],
-    deps = ["@com_github_stretchr_testify//assert"],
-)
diff --git a/client/sql/BUILD.bazel b/client/sql/BUILD.bazel
deleted file mode 100644
index 921f528..0000000
--- a/client/sql/BUILD.bazel
+++ /dev/null
@@ -1,56 +0,0 @@
-load("@rules_go//go:def.bzl", "go_library", "go_test")
-
-go_library(
-    name = "sql",
-    srcs = [
-        "dataframe.go",
-        "dataframereader.go",
-        "dataframewriter.go",
-        "datatype.go",
-        "executeplanclient.go",
-        "plan.go",
-        "row.go",
-        "sparksession.go",
-        "structtype.go",
-    ],
-    importpath = "github.com/apache/spark-connect-go/v1/client/sql",
-    visibility = ["//visibility:public"],
-    deps = [
-        "//client/channel",
-        "//client/sparkerrors",
-        "//:spark_connect_proto_grpc",
-        "@com_github_apache_arrow_go_v12//arrow",
-        "@com_github_apache_arrow_go_v12//arrow/array",
-        "@com_github_apache_arrow_go_v12//arrow/ipc",
-        "@com_github_google_uuid//:uuid",
-        "@org_golang_google_grpc//metadata",
-    ],
-)
-
-go_test(
-    name = "sql_test",
-    srcs = [
-        "dataframe_test.go",
-        "dataframereader_test.go",
-        "dataframewriter_test.go",
-        "mocks_test.go",
-        "plan_test.go",
-        "row_test.go",
-        "sparksession_test.go",
-    ],
-    embed = [":sql"],
-    deps = [
-        "//client/sparkerrors",
-        "@com_github_apache_arrow_go_v12//arrow",
-        "@com_github_apache_arrow_go_v12//arrow/array",
-        "@com_github_apache_arrow_go_v12//arrow/decimal128",
-        "@com_github_apache_arrow_go_v12//arrow/decimal256",
-        "@com_github_apache_arrow_go_v12//arrow/float16",
-        "@com_github_apache_arrow_go_v12//arrow/ipc",
-        "@com_github_apache_arrow_go_v12//arrow/memory",
-        "@com_github_stretchr_testify//assert",
-        "@com_github_stretchr_testify//require",
-        "@org_golang_google_grpc//:go_default_library",
-        "@org_golang_google_grpc//metadata",
-    ],
-)
diff --git a/client/sql/dataframe.go b/client/sql/dataframe.go
index 789550f..a7f5f51 100644
--- a/client/sql/dataframe.go
+++ b/client/sql/dataframe.go
@@ -27,7 +27,7 @@ import (
 	"github.com/apache/arrow/go/v12/arrow/array"
 	"github.com/apache/arrow/go/v12/arrow/ipc"
 	"github.com/apache/spark-connect-go/v1/client/sparkerrors"
-	proto "github.com/apache/spark-connect-go/v1/internal/generated/spark/connect"
+	proto "github.com/apache/spark-connect-go/v1/internal/generated"
 )
 
 // ResultCollector receives a stream of result rows
diff --git a/client/sql/dataframe_test.go b/client/sql/dataframe_test.go
index d2492d7..98675fd 100644
--- a/client/sql/dataframe_test.go
+++ b/client/sql/dataframe_test.go
@@ -28,7 +28,7 @@ import (
 	"github.com/apache/arrow/go/v12/arrow/float16"
 	"github.com/apache/arrow/go/v12/arrow/ipc"
 	"github.com/apache/arrow/go/v12/arrow/memory"
-	proto "github.com/apache/spark-connect-go/v1/internal/generated/spark/connect"
+	proto "github.com/apache/spark-connect-go/v1/internal/generated"
 	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/require"
 )
diff --git a/client/sql/dataframereader.go b/client/sql/dataframereader.go
index 4edbe04..59f21ff 100644
--- a/client/sql/dataframereader.go
+++ b/client/sql/dataframereader.go
@@ -1,6 +1,6 @@
 package sql
 
-import proto "github.com/apache/spark-connect-go/v1/internal/generated/spark/connect"
+import proto "github.com/apache/spark-connect-go/v1/internal/generated"
 
 // DataFrameReader supports reading data from storage and returning a data frame.
 // TODO needs to implement other methods like Option(), Schema(), and also "strong typed"
diff --git a/client/sql/dataframewriter.go b/client/sql/dataframewriter.go
index 7316f07..dee74e8 100644
--- a/client/sql/dataframewriter.go
+++ b/client/sql/dataframewriter.go
@@ -6,7 +6,7 @@ import (
 	"strings"
 
 	"github.com/apache/spark-connect-go/v1/client/sparkerrors"
-	proto "github.com/apache/spark-connect-go/v1/internal/generated/spark/connect"
+	proto "github.com/apache/spark-connect-go/v1/internal/generated"
 )
 
 // DataFrameWriter supports writing data frame to storage.
diff --git a/client/sql/dataframewriter_test.go b/client/sql/dataframewriter_test.go
index e5ddc81..649e013 100644
--- a/client/sql/dataframewriter_test.go
+++ b/client/sql/dataframewriter_test.go
@@ -5,7 +5,7 @@ import (
 	"io"
 	"testing"
 
-	proto "github.com/apache/spark-connect-go/v1/internal/generated/spark/connect"
+	proto "github.com/apache/spark-connect-go/v1/internal/generated"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/client/sql/executeplanclient.go b/client/sql/executeplanclient.go
index b56494f..ece0a20 100644
--- a/client/sql/executeplanclient.go
+++ b/client/sql/executeplanclient.go
@@ -6,7 +6,7 @@ import (
 	"io"
 
 	"github.com/apache/spark-connect-go/v1/client/sparkerrors"
-	proto "github.com/apache/spark-connect-go/v1/internal/generated/spark/connect"
+	proto "github.com/apache/spark-connect-go/v1/internal/generated"
 )
 
 type executePlanClient struct {
diff --git a/client/sql/mocks_test.go b/client/sql/mocks_test.go
index 25da527..9d87d50 100644
--- a/client/sql/mocks_test.go
+++ b/client/sql/mocks_test.go
@@ -4,7 +4,7 @@ import (
 	"context"
 	"testing"
 
-	proto "github.com/apache/spark-connect-go/v1/internal/generated/spark/connect"
+	proto "github.com/apache/spark-connect-go/v1/internal/generated"
 	"github.com/stretchr/testify/assert"
 	"google.golang.org/grpc"
 	"google.golang.org/grpc/metadata"
diff --git a/client/sql/sparksession.go b/client/sql/sparksession.go
index 9949076..e1ecef8 100644
--- a/client/sql/sparksession.go
+++ b/client/sql/sparksession.go
@@ -22,7 +22,7 @@ import (
 
 	"github.com/apache/spark-connect-go/v1/client/channel"
 	"github.com/apache/spark-connect-go/v1/client/sparkerrors"
-	proto "github.com/apache/spark-connect-go/v1/internal/generated/spark/connect"
+	proto "github.com/apache/spark-connect-go/v1/internal/generated"
 	"github.com/google/uuid"
 	"google.golang.org/grpc/metadata"
 )
diff --git a/client/sql/sparksession_test.go b/client/sql/sparksession_test.go
index 1e26e83..0a3b105 100644
--- a/client/sql/sparksession_test.go
+++ b/client/sql/sparksession_test.go
@@ -5,7 +5,7 @@ import (
 	"testing"
 
 	"github.com/apache/spark-connect-go/v1/client/sparkerrors"
-	proto "github.com/apache/spark-connect-go/v1/internal/generated/spark/connect"
+	proto "github.com/apache/spark-connect-go/v1/internal/generated"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/cmd/spark-connect-example-raw-grpc-client/BUILD.bazel b/cmd/spark-connect-example-raw-grpc-client/BUILD.bazel
deleted file mode 100644
index a786831..0000000
--- a/cmd/spark-connect-example-raw-grpc-client/BUILD.bazel
+++ /dev/null
@@ -1,20 +0,0 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
-
-go_library(
-    name = "spark-connect-example-raw-grpc-client_lib",
-    srcs = ["main.go"],
-    importpath = "github.com/apache/spark-connect-go/v1/cmd/spark-connect-example-raw-grpc-client",
-    visibility = ["//visibility:private"],
-    deps = [
-        "//:spark_connect_proto_grpc",
-        "@com_github_google_uuid//:uuid",
-        "@org_golang_google_grpc//:go_default_library",
-        "@org_golang_google_grpc//credentials/insecure",
-    ],
-)
-
-go_binary(
-    name = "spark-connect-example-raw-grpc-client",
-    embed = [":spark-connect-example-raw-grpc-client_lib"],
-    visibility = ["//visibility:public"],
-)
diff --git a/cmd/spark-connect-example-raw-grpc-client/main.go b/cmd/spark-connect-example-raw-grpc-client/main.go
index 3831dc4..25e48d9 100644
--- a/cmd/spark-connect-example-raw-grpc-client/main.go
+++ b/cmd/spark-connect-example-raw-grpc-client/main.go
@@ -22,7 +22,7 @@ import (
 	"log"
 	"time"
 
-	proto "github.com/apache/spark-connect-go/v1/internal/generated/spark/connect"
+	proto "github.com/apache/spark-connect-go/v1/internal/generated"
 	"github.com/google/uuid"
 	"google.golang.org/grpc"
 	"google.golang.org/grpc/credentials/insecure"
diff --git a/cmd/spark-connect-example-spark-session/BUILD.bazel b/cmd/spark-connect-example-spark-session/BUILD.bazel
deleted file mode 100644
index e851e25..0000000
--- a/cmd/spark-connect-example-spark-session/BUILD.bazel
+++ /dev/null
@@ -1,15 +0,0 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
-
-go_library(
-    name = "spark-connect-example-spark-session_lib",
-    srcs = ["main.go"],
-    importpath = "github.com/apache/spark-connect-go/v1/cmd/spark-connect-example-spark-session",
-    visibility = ["//visibility:private"],
-    deps = ["//client/sql"],
-)
-
-go_binary(
-    name = "spark-connect-example-spark-session",
-    embed = [":spark-connect-example-spark-session_lib"],
-    visibility = ["//visibility:public"],
-)
diff --git a/internal/generated/base.pb.go b/internal/generated/base.pb.go
new file mode 100644
index 0000000..acf50e6
--- /dev/null
+++ b/internal/generated/base.pb.go
@@ -0,0 +1,6822 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.30.0
+// 	protoc        (unknown)
+// source: spark/connect/base.proto
+
+package generated
+
+import (
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	anypb "google.golang.org/protobuf/types/known/anypb"
+	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)
+)
+
+// Plan explanation mode.
+type AnalyzePlanRequest_Explain_ExplainMode int32
+
+const (
+	AnalyzePlanRequest_Explain_EXPLAIN_MODE_UNSPECIFIED AnalyzePlanRequest_Explain_ExplainMode = 0
+	// Generates only physical plan.
+	AnalyzePlanRequest_Explain_EXPLAIN_MODE_SIMPLE AnalyzePlanRequest_Explain_ExplainMode = 1
+	// Generates parsed logical plan, analyzed logical plan, optimized logical plan and physical plan.
+	// Parsed Logical plan is a unresolved plan that extracted from the query. Analyzed logical plans
+	// transforms which translates unresolvedAttribute and unresolvedRelation into fully typed objects.
+	// The optimized logical plan transforms through a set of optimization rules, resulting in the
+	// physical plan.
+	AnalyzePlanRequest_Explain_EXPLAIN_MODE_EXTENDED AnalyzePlanRequest_Explain_ExplainMode = 2
+	// Generates code for the statement, if any and a physical plan.
+	AnalyzePlanRequest_Explain_EXPLAIN_MODE_CODEGEN AnalyzePlanRequest_Explain_ExplainMode = 3
+	// If plan node statistics are available, generates a logical plan and also the statistics.
+	AnalyzePlanRequest_Explain_EXPLAIN_MODE_COST AnalyzePlanRequest_Explain_ExplainMode = 4
+	// Generates a physical plan outline and also node details.
+	AnalyzePlanRequest_Explain_EXPLAIN_MODE_FORMATTED AnalyzePlanRequest_Explain_ExplainMode = 5
+)
+
+// Enum value maps for AnalyzePlanRequest_Explain_ExplainMode.
+var (
+	AnalyzePlanRequest_Explain_ExplainMode_name = map[int32]string{
+		0: "EXPLAIN_MODE_UNSPECIFIED",
+		1: "EXPLAIN_MODE_SIMPLE",
+		2: "EXPLAIN_MODE_EXTENDED",
+		3: "EXPLAIN_MODE_CODEGEN",
+		4: "EXPLAIN_MODE_COST",
+		5: "EXPLAIN_MODE_FORMATTED",
+	}
+	AnalyzePlanRequest_Explain_ExplainMode_value = map[string]int32{
+		"EXPLAIN_MODE_UNSPECIFIED": 0,
+		"EXPLAIN_MODE_SIMPLE":      1,
+		"EXPLAIN_MODE_EXTENDED":    2,
+		"EXPLAIN_MODE_CODEGEN":     3,
+		"EXPLAIN_MODE_COST":        4,
+		"EXPLAIN_MODE_FORMATTED":   5,
+	}
+)
+
+func (x AnalyzePlanRequest_Explain_ExplainMode) Enum() *AnalyzePlanRequest_Explain_ExplainMode {
+	p := new(AnalyzePlanRequest_Explain_ExplainMode)
+	*p = x
+	return p
+}
+
+func (x AnalyzePlanRequest_Explain_ExplainMode) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (AnalyzePlanRequest_Explain_ExplainMode) Descriptor() protoreflect.EnumDescriptor {
+	return file_spark_connect_base_proto_enumTypes[0].Descriptor()
+}
+
+func (AnalyzePlanRequest_Explain_ExplainMode) Type() protoreflect.EnumType {
+	return &file_spark_connect_base_proto_enumTypes[0]
+}
+
+func (x AnalyzePlanRequest_Explain_ExplainMode) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use AnalyzePlanRequest_Explain_ExplainMode.Descriptor instead.
+func (AnalyzePlanRequest_Explain_ExplainMode) EnumDescriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{2, 1, 0}
+}
+
+type InterruptRequest_InterruptType int32
+
+const (
+	InterruptRequest_INTERRUPT_TYPE_UNSPECIFIED InterruptRequest_InterruptType = 0
+	// Interrupt all running executions within the session with the provided session_id.
+	InterruptRequest_INTERRUPT_TYPE_ALL InterruptRequest_InterruptType = 1
+	// Interrupt all running executions within the session with the provided operation_tag.
+	InterruptRequest_INTERRUPT_TYPE_TAG InterruptRequest_InterruptType = 2
+	// Interrupt the running execution within the session with the provided operation_id.
+	InterruptRequest_INTERRUPT_TYPE_OPERATION_ID InterruptRequest_InterruptType = 3
+)
+
+// Enum value maps for InterruptRequest_InterruptType.
+var (
+	InterruptRequest_InterruptType_name = map[int32]string{
+		0: "INTERRUPT_TYPE_UNSPECIFIED",
+		1: "INTERRUPT_TYPE_ALL",
+		2: "INTERRUPT_TYPE_TAG",
+		3: "INTERRUPT_TYPE_OPERATION_ID",
+	}
+	InterruptRequest_InterruptType_value = map[string]int32{
+		"INTERRUPT_TYPE_UNSPECIFIED":  0,
+		"INTERRUPT_TYPE_ALL":          1,
+		"INTERRUPT_TYPE_TAG":          2,
+		"INTERRUPT_TYPE_OPERATION_ID": 3,
+	}
+)
+
+func (x InterruptRequest_InterruptType) Enum() *InterruptRequest_InterruptType {
+	p := new(InterruptRequest_InterruptType)
+	*p = x
+	return p
+}
+
+func (x InterruptRequest_InterruptType) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (InterruptRequest_InterruptType) Descriptor() protoreflect.EnumDescriptor {
+	return file_spark_connect_base_proto_enumTypes[1].Descriptor()
+}
+
+func (InterruptRequest_InterruptType) Type() protoreflect.EnumType {
+	return &file_spark_connect_base_proto_enumTypes[1]
+}
+
+func (x InterruptRequest_InterruptType) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use InterruptRequest_InterruptType.Descriptor instead.
+func (InterruptRequest_InterruptType) EnumDescriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{13, 0}
+}
+
+// A [[Plan]] is the structure that carries the runtime information for the execution from the
+// client to the server. A [[Plan]] can either be of the type [[Relation]] which is a reference
+// to the underlying logical plan or it can be of the [[Command]] type that is used to execute
+// commands on the server.
+type Plan struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Types that are assignable to OpType:
+	//
+	//	*Plan_Root
+	//	*Plan_Command
+	OpType isPlan_OpType `protobuf_oneof:"op_type"`
+}
+
+func (x *Plan) Reset() {
+	*x = Plan{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Plan) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Plan) ProtoMessage() {}
+
+func (x *Plan) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_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 Plan.ProtoReflect.Descriptor instead.
+func (*Plan) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{0}
+}
+
+func (m *Plan) GetOpType() isPlan_OpType {
+	if m != nil {
+		return m.OpType
+	}
+	return nil
+}
+
+func (x *Plan) GetRoot() *Relation {
+	if x, ok := x.GetOpType().(*Plan_Root); ok {
+		return x.Root
+	}
+	return nil
+}
+
+func (x *Plan) GetCommand() *Command {
+	if x, ok := x.GetOpType().(*Plan_Command); ok {
+		return x.Command
+	}
+	return nil
+}
+
+type isPlan_OpType interface {
+	isPlan_OpType()
+}
+
+type Plan_Root struct {
+	Root *Relation `protobuf:"bytes,1,opt,name=root,proto3,oneof"`
+}
+
+type Plan_Command struct {
+	Command *Command `protobuf:"bytes,2,opt,name=command,proto3,oneof"`
+}
+
+func (*Plan_Root) isPlan_OpType() {}
+
+func (*Plan_Command) isPlan_OpType() {}
+
+// User Context is used to refer to one particular user session that is executing
+// queries in the backend.
+type UserContext struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	UserId   string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
+	UserName string `protobuf:"bytes,2,opt,name=user_name,json=userName,proto3" json:"user_name,omitempty"`
+	// To extend the existing user context message that is used to identify incoming requests,
+	// Spark Connect leverages the Any protobuf type that can be used to inject arbitrary other
+	// messages into this message. Extensions are stored as a `repeated` type to be able to
+	// handle multiple active extensions.
+	Extensions []*anypb.Any `protobuf:"bytes,999,rep,name=extensions,proto3" json:"extensions,omitempty"`
+}
+
+func (x *UserContext) Reset() {
+	*x = UserContext{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *UserContext) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*UserContext) ProtoMessage() {}
+
+func (x *UserContext) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_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 UserContext.ProtoReflect.Descriptor instead.
+func (*UserContext) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *UserContext) GetUserId() string {
+	if x != nil {
+		return x.UserId
+	}
+	return ""
+}
+
+func (x *UserContext) GetUserName() string {
+	if x != nil {
+		return x.UserName
+	}
+	return ""
+}
+
+func (x *UserContext) GetExtensions() []*anypb.Any {
+	if x != nil {
+		return x.Extensions
+	}
+	return nil
+}
+
+// Request to perform plan analyze, optionally to explain the plan.
+type AnalyzePlanRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// (Required)
+	//
+	// The session_id specifies a spark session for a user id (which is specified
+	// by user_context.user_id). The session_id is set by the client to be able to
+	// collate streaming responses from different queries within the dedicated session.
+	// The id should be an UUID string of the format `00112233-4455-6677-8899-aabbccddeeff`
+	SessionId string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"`
+	// (Required) User context
+	UserContext *UserContext `protobuf:"bytes,2,opt,name=user_context,json=userContext,proto3" json:"user_context,omitempty"`
+	// Provides optional information about the client sending the request. This field
+	// can be used for language or version specific information and is only intended for
+	// logging purposes and will not be interpreted by the server.
+	ClientType *string `protobuf:"bytes,3,opt,name=client_type,json=clientType,proto3,oneof" json:"client_type,omitempty"`
+	// Types that are assignable to Analyze:
+	//
+	//	*AnalyzePlanRequest_Schema_
+	//	*AnalyzePlanRequest_Explain_
+	//	*AnalyzePlanRequest_TreeString_
+	//	*AnalyzePlanRequest_IsLocal_
+	//	*AnalyzePlanRequest_IsStreaming_
+	//	*AnalyzePlanRequest_InputFiles_
+	//	*AnalyzePlanRequest_SparkVersion_
+	//	*AnalyzePlanRequest_DdlParse
+	//	*AnalyzePlanRequest_SameSemantics_
+	//	*AnalyzePlanRequest_SemanticHash_
+	//	*AnalyzePlanRequest_Persist_
+	//	*AnalyzePlanRequest_Unpersist_
+	//	*AnalyzePlanRequest_GetStorageLevel_
+	Analyze isAnalyzePlanRequest_Analyze `protobuf_oneof:"analyze"`
+}
+
+func (x *AnalyzePlanRequest) Reset() {
+	*x = AnalyzePlanRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AnalyzePlanRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AnalyzePlanRequest) ProtoMessage() {}
+
+func (x *AnalyzePlanRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_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 AnalyzePlanRequest.ProtoReflect.Descriptor instead.
+func (*AnalyzePlanRequest) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *AnalyzePlanRequest) GetSessionId() string {
+	if x != nil {
+		return x.SessionId
+	}
+	return ""
+}
+
+func (x *AnalyzePlanRequest) GetUserContext() *UserContext {
+	if x != nil {
+		return x.UserContext
+	}
+	return nil
+}
+
+func (x *AnalyzePlanRequest) GetClientType() string {
+	if x != nil && x.ClientType != nil {
+		return *x.ClientType
+	}
+	return ""
+}
+
+func (m *AnalyzePlanRequest) GetAnalyze() isAnalyzePlanRequest_Analyze {
+	if m != nil {
+		return m.Analyze
+	}
+	return nil
+}
+
+func (x *AnalyzePlanRequest) GetSchema() *AnalyzePlanRequest_Schema {
+	if x, ok := x.GetAnalyze().(*AnalyzePlanRequest_Schema_); ok {
+		return x.Schema
+	}
+	return nil
+}
+
+func (x *AnalyzePlanRequest) GetExplain() *AnalyzePlanRequest_Explain {
+	if x, ok := x.GetAnalyze().(*AnalyzePlanRequest_Explain_); ok {
+		return x.Explain
+	}
+	return nil
+}
+
+func (x *AnalyzePlanRequest) GetTreeString() *AnalyzePlanRequest_TreeString {
+	if x, ok := x.GetAnalyze().(*AnalyzePlanRequest_TreeString_); ok {
+		return x.TreeString
+	}
+	return nil
+}
+
+func (x *AnalyzePlanRequest) GetIsLocal() *AnalyzePlanRequest_IsLocal {
+	if x, ok := x.GetAnalyze().(*AnalyzePlanRequest_IsLocal_); ok {
+		return x.IsLocal
+	}
+	return nil
+}
+
+func (x *AnalyzePlanRequest) GetIsStreaming() *AnalyzePlanRequest_IsStreaming {
+	if x, ok := x.GetAnalyze().(*AnalyzePlanRequest_IsStreaming_); ok {
+		return x.IsStreaming
+	}
+	return nil
+}
+
+func (x *AnalyzePlanRequest) GetInputFiles() *AnalyzePlanRequest_InputFiles {
+	if x, ok := x.GetAnalyze().(*AnalyzePlanRequest_InputFiles_); ok {
+		return x.InputFiles
+	}
+	return nil
+}
+
+func (x *AnalyzePlanRequest) GetSparkVersion() *AnalyzePlanRequest_SparkVersion {
+	if x, ok := x.GetAnalyze().(*AnalyzePlanRequest_SparkVersion_); ok {
+		return x.SparkVersion
+	}
+	return nil
+}
+
+func (x *AnalyzePlanRequest) GetDdlParse() *AnalyzePlanRequest_DDLParse {
+	if x, ok := x.GetAnalyze().(*AnalyzePlanRequest_DdlParse); ok {
+		return x.DdlParse
+	}
+	return nil
+}
+
+func (x *AnalyzePlanRequest) GetSameSemantics() *AnalyzePlanRequest_SameSemantics {
+	if x, ok := x.GetAnalyze().(*AnalyzePlanRequest_SameSemantics_); ok {
+		return x.SameSemantics
+	}
+	return nil
+}
+
+func (x *AnalyzePlanRequest) GetSemanticHash() *AnalyzePlanRequest_SemanticHash {
+	if x, ok := x.GetAnalyze().(*AnalyzePlanRequest_SemanticHash_); ok {
+		return x.SemanticHash
+	}
+	return nil
+}
+
+func (x *AnalyzePlanRequest) GetPersist() *AnalyzePlanRequest_Persist {
+	if x, ok := x.GetAnalyze().(*AnalyzePlanRequest_Persist_); ok {
+		return x.Persist
+	}
+	return nil
+}
+
+func (x *AnalyzePlanRequest) GetUnpersist() *AnalyzePlanRequest_Unpersist {
+	if x, ok := x.GetAnalyze().(*AnalyzePlanRequest_Unpersist_); ok {
+		return x.Unpersist
+	}
+	return nil
+}
+
+func (x *AnalyzePlanRequest) GetGetStorageLevel() *AnalyzePlanRequest_GetStorageLevel {
+	if x, ok := x.GetAnalyze().(*AnalyzePlanRequest_GetStorageLevel_); ok {
+		return x.GetStorageLevel
+	}
+	return nil
+}
+
+type isAnalyzePlanRequest_Analyze interface {
+	isAnalyzePlanRequest_Analyze()
+}
+
+type AnalyzePlanRequest_Schema_ struct {
+	Schema *AnalyzePlanRequest_Schema `protobuf:"bytes,4,opt,name=schema,proto3,oneof"`
+}
+
+type AnalyzePlanRequest_Explain_ struct {
+	Explain *AnalyzePlanRequest_Explain `protobuf:"bytes,5,opt,name=explain,proto3,oneof"`
+}
+
+type AnalyzePlanRequest_TreeString_ struct {
+	TreeString *AnalyzePlanRequest_TreeString `protobuf:"bytes,6,opt,name=tree_string,json=treeString,proto3,oneof"`
+}
+
+type AnalyzePlanRequest_IsLocal_ struct {
+	IsLocal *AnalyzePlanRequest_IsLocal `protobuf:"bytes,7,opt,name=is_local,json=isLocal,proto3,oneof"`
+}
+
+type AnalyzePlanRequest_IsStreaming_ struct {
+	IsStreaming *AnalyzePlanRequest_IsStreaming `protobuf:"bytes,8,opt,name=is_streaming,json=isStreaming,proto3,oneof"`
+}
+
+type AnalyzePlanRequest_InputFiles_ struct {
+	InputFiles *AnalyzePlanRequest_InputFiles `protobuf:"bytes,9,opt,name=input_files,json=inputFiles,proto3,oneof"`
+}
+
+type AnalyzePlanRequest_SparkVersion_ struct {
+	SparkVersion *AnalyzePlanRequest_SparkVersion `protobuf:"bytes,10,opt,name=spark_version,json=sparkVersion,proto3,oneof"`
+}
+
+type AnalyzePlanRequest_DdlParse struct {
+	DdlParse *AnalyzePlanRequest_DDLParse `protobuf:"bytes,11,opt,name=ddl_parse,json=ddlParse,proto3,oneof"`
+}
+
+type AnalyzePlanRequest_SameSemantics_ struct {
+	SameSemantics *AnalyzePlanRequest_SameSemantics `protobuf:"bytes,12,opt,name=same_semantics,json=sameSemantics,proto3,oneof"`
+}
+
+type AnalyzePlanRequest_SemanticHash_ struct {
+	SemanticHash *AnalyzePlanRequest_SemanticHash `protobuf:"bytes,13,opt,name=semantic_hash,json=semanticHash,proto3,oneof"`
+}
+
+type AnalyzePlanRequest_Persist_ struct {
+	Persist *AnalyzePlanRequest_Persist `protobuf:"bytes,14,opt,name=persist,proto3,oneof"`
+}
+
+type AnalyzePlanRequest_Unpersist_ struct {
+	Unpersist *AnalyzePlanRequest_Unpersist `protobuf:"bytes,15,opt,name=unpersist,proto3,oneof"`
+}
+
+type AnalyzePlanRequest_GetStorageLevel_ struct {
+	GetStorageLevel *AnalyzePlanRequest_GetStorageLevel `protobuf:"bytes,16,opt,name=get_storage_level,json=getStorageLevel,proto3,oneof"`
+}
+
+func (*AnalyzePlanRequest_Schema_) isAnalyzePlanRequest_Analyze() {}
+
+func (*AnalyzePlanRequest_Explain_) isAnalyzePlanRequest_Analyze() {}
+
+func (*AnalyzePlanRequest_TreeString_) isAnalyzePlanRequest_Analyze() {}
+
+func (*AnalyzePlanRequest_IsLocal_) isAnalyzePlanRequest_Analyze() {}
+
+func (*AnalyzePlanRequest_IsStreaming_) isAnalyzePlanRequest_Analyze() {}
+
+func (*AnalyzePlanRequest_InputFiles_) isAnalyzePlanRequest_Analyze() {}
+
+func (*AnalyzePlanRequest_SparkVersion_) isAnalyzePlanRequest_Analyze() {}
+
+func (*AnalyzePlanRequest_DdlParse) isAnalyzePlanRequest_Analyze() {}
+
+func (*AnalyzePlanRequest_SameSemantics_) isAnalyzePlanRequest_Analyze() {}
+
+func (*AnalyzePlanRequest_SemanticHash_) isAnalyzePlanRequest_Analyze() {}
+
+func (*AnalyzePlanRequest_Persist_) isAnalyzePlanRequest_Analyze() {}
+
+func (*AnalyzePlanRequest_Unpersist_) isAnalyzePlanRequest_Analyze() {}
+
+func (*AnalyzePlanRequest_GetStorageLevel_) isAnalyzePlanRequest_Analyze() {}
+
+// Response to performing analysis of the query. Contains relevant metadata to be able to
+// reason about the performance.
+type AnalyzePlanResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	SessionId string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"`
+	// Types that are assignable to Result:
+	//
+	//	*AnalyzePlanResponse_Schema_
+	//	*AnalyzePlanResponse_Explain_
+	//	*AnalyzePlanResponse_TreeString_
+	//	*AnalyzePlanResponse_IsLocal_
+	//	*AnalyzePlanResponse_IsStreaming_
+	//	*AnalyzePlanResponse_InputFiles_
+	//	*AnalyzePlanResponse_SparkVersion_
+	//	*AnalyzePlanResponse_DdlParse
+	//	*AnalyzePlanResponse_SameSemantics_
+	//	*AnalyzePlanResponse_SemanticHash_
+	//	*AnalyzePlanResponse_Persist_
+	//	*AnalyzePlanResponse_Unpersist_
+	//	*AnalyzePlanResponse_GetStorageLevel_
+	Result isAnalyzePlanResponse_Result `protobuf_oneof:"result"`
+}
+
+func (x *AnalyzePlanResponse) Reset() {
+	*x = AnalyzePlanResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AnalyzePlanResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AnalyzePlanResponse) ProtoMessage() {}
+
+func (x *AnalyzePlanResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_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 AnalyzePlanResponse.ProtoReflect.Descriptor instead.
+func (*AnalyzePlanResponse) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *AnalyzePlanResponse) GetSessionId() string {
+	if x != nil {
+		return x.SessionId
+	}
+	return ""
+}
+
+func (m *AnalyzePlanResponse) GetResult() isAnalyzePlanResponse_Result {
+	if m != nil {
+		return m.Result
+	}
+	return nil
+}
+
+func (x *AnalyzePlanResponse) GetSchema() *AnalyzePlanResponse_Schema {
+	if x, ok := x.GetResult().(*AnalyzePlanResponse_Schema_); ok {
+		return x.Schema
+	}
+	return nil
+}
+
+func (x *AnalyzePlanResponse) GetExplain() *AnalyzePlanResponse_Explain {
+	if x, ok := x.GetResult().(*AnalyzePlanResponse_Explain_); ok {
+		return x.Explain
+	}
+	return nil
+}
+
+func (x *AnalyzePlanResponse) GetTreeString() *AnalyzePlanResponse_TreeString {
+	if x, ok := x.GetResult().(*AnalyzePlanResponse_TreeString_); ok {
+		return x.TreeString
+	}
+	return nil
+}
+
+func (x *AnalyzePlanResponse) GetIsLocal() *AnalyzePlanResponse_IsLocal {
+	if x, ok := x.GetResult().(*AnalyzePlanResponse_IsLocal_); ok {
+		return x.IsLocal
+	}
+	return nil
+}
+
+func (x *AnalyzePlanResponse) GetIsStreaming() *AnalyzePlanResponse_IsStreaming {
+	if x, ok := x.GetResult().(*AnalyzePlanResponse_IsStreaming_); ok {
+		return x.IsStreaming
+	}
+	return nil
+}
+
+func (x *AnalyzePlanResponse) GetInputFiles() *AnalyzePlanResponse_InputFiles {
+	if x, ok := x.GetResult().(*AnalyzePlanResponse_InputFiles_); ok {
+		return x.InputFiles
+	}
+	return nil
+}
+
+func (x *AnalyzePlanResponse) GetSparkVersion() *AnalyzePlanResponse_SparkVersion {
+	if x, ok := x.GetResult().(*AnalyzePlanResponse_SparkVersion_); ok {
+		return x.SparkVersion
+	}
+	return nil
+}
+
+func (x *AnalyzePlanResponse) GetDdlParse() *AnalyzePlanResponse_DDLParse {
+	if x, ok := x.GetResult().(*AnalyzePlanResponse_DdlParse); ok {
+		return x.DdlParse
+	}
+	return nil
+}
+
+func (x *AnalyzePlanResponse) GetSameSemantics() *AnalyzePlanResponse_SameSemantics {
+	if x, ok := x.GetResult().(*AnalyzePlanResponse_SameSemantics_); ok {
+		return x.SameSemantics
+	}
+	return nil
+}
+
+func (x *AnalyzePlanResponse) GetSemanticHash() *AnalyzePlanResponse_SemanticHash {
+	if x, ok := x.GetResult().(*AnalyzePlanResponse_SemanticHash_); ok {
+		return x.SemanticHash
+	}
+	return nil
+}
+
+func (x *AnalyzePlanResponse) GetPersist() *AnalyzePlanResponse_Persist {
+	if x, ok := x.GetResult().(*AnalyzePlanResponse_Persist_); ok {
+		return x.Persist
+	}
+	return nil
+}
+
+func (x *AnalyzePlanResponse) GetUnpersist() *AnalyzePlanResponse_Unpersist {
+	if x, ok := x.GetResult().(*AnalyzePlanResponse_Unpersist_); ok {
+		return x.Unpersist
+	}
+	return nil
+}
+
+func (x *AnalyzePlanResponse) GetGetStorageLevel() *AnalyzePlanResponse_GetStorageLevel {
+	if x, ok := x.GetResult().(*AnalyzePlanResponse_GetStorageLevel_); ok {
+		return x.GetStorageLevel
+	}
+	return nil
+}
+
+type isAnalyzePlanResponse_Result interface {
+	isAnalyzePlanResponse_Result()
+}
+
+type AnalyzePlanResponse_Schema_ struct {
+	Schema *AnalyzePlanResponse_Schema `protobuf:"bytes,2,opt,name=schema,proto3,oneof"`
+}
+
+type AnalyzePlanResponse_Explain_ struct {
+	Explain *AnalyzePlanResponse_Explain `protobuf:"bytes,3,opt,name=explain,proto3,oneof"`
+}
+
+type AnalyzePlanResponse_TreeString_ struct {
+	TreeString *AnalyzePlanResponse_TreeString `protobuf:"bytes,4,opt,name=tree_string,json=treeString,proto3,oneof"`
+}
+
+type AnalyzePlanResponse_IsLocal_ struct {
+	IsLocal *AnalyzePlanResponse_IsLocal `protobuf:"bytes,5,opt,name=is_local,json=isLocal,proto3,oneof"`
+}
+
+type AnalyzePlanResponse_IsStreaming_ struct {
+	IsStreaming *AnalyzePlanResponse_IsStreaming `protobuf:"bytes,6,opt,name=is_streaming,json=isStreaming,proto3,oneof"`
+}
+
+type AnalyzePlanResponse_InputFiles_ struct {
+	InputFiles *AnalyzePlanResponse_InputFiles `protobuf:"bytes,7,opt,name=input_files,json=inputFiles,proto3,oneof"`
+}
+
+type AnalyzePlanResponse_SparkVersion_ struct {
+	SparkVersion *AnalyzePlanResponse_SparkVersion `protobuf:"bytes,8,opt,name=spark_version,json=sparkVersion,proto3,oneof"`
+}
+
+type AnalyzePlanResponse_DdlParse struct {
+	DdlParse *AnalyzePlanResponse_DDLParse `protobuf:"bytes,9,opt,name=ddl_parse,json=ddlParse,proto3,oneof"`
+}
+
+type AnalyzePlanResponse_SameSemantics_ struct {
+	SameSemantics *AnalyzePlanResponse_SameSemantics `protobuf:"bytes,10,opt,name=same_semantics,json=sameSemantics,proto3,oneof"`
+}
+
+type AnalyzePlanResponse_SemanticHash_ struct {
+	SemanticHash *AnalyzePlanResponse_SemanticHash `protobuf:"bytes,11,opt,name=semantic_hash,json=semanticHash,proto3,oneof"`
+}
+
+type AnalyzePlanResponse_Persist_ struct {
+	Persist *AnalyzePlanResponse_Persist `protobuf:"bytes,12,opt,name=persist,proto3,oneof"`
+}
+
+type AnalyzePlanResponse_Unpersist_ struct {
+	Unpersist *AnalyzePlanResponse_Unpersist `protobuf:"bytes,13,opt,name=unpersist,proto3,oneof"`
+}
+
+type AnalyzePlanResponse_GetStorageLevel_ struct {
+	GetStorageLevel *AnalyzePlanResponse_GetStorageLevel `protobuf:"bytes,14,opt,name=get_storage_level,json=getStorageLevel,proto3,oneof"`
+}
+
+func (*AnalyzePlanResponse_Schema_) isAnalyzePlanResponse_Result() {}
+
+func (*AnalyzePlanResponse_Explain_) isAnalyzePlanResponse_Result() {}
+
+func (*AnalyzePlanResponse_TreeString_) isAnalyzePlanResponse_Result() {}
+
+func (*AnalyzePlanResponse_IsLocal_) isAnalyzePlanResponse_Result() {}
+
+func (*AnalyzePlanResponse_IsStreaming_) isAnalyzePlanResponse_Result() {}
+
+func (*AnalyzePlanResponse_InputFiles_) isAnalyzePlanResponse_Result() {}
+
+func (*AnalyzePlanResponse_SparkVersion_) isAnalyzePlanResponse_Result() {}
+
+func (*AnalyzePlanResponse_DdlParse) isAnalyzePlanResponse_Result() {}
+
+func (*AnalyzePlanResponse_SameSemantics_) isAnalyzePlanResponse_Result() {}
+
+func (*AnalyzePlanResponse_SemanticHash_) isAnalyzePlanResponse_Result() {}
+
+func (*AnalyzePlanResponse_Persist_) isAnalyzePlanResponse_Result() {}
+
+func (*AnalyzePlanResponse_Unpersist_) isAnalyzePlanResponse_Result() {}
+
+func (*AnalyzePlanResponse_GetStorageLevel_) isAnalyzePlanResponse_Result() {}
+
+// A request to be executed by the service.
+type ExecutePlanRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// (Required)
+	//
+	// The session_id specifies a spark session for a user id (which is specified
+	// by user_context.user_id). The session_id is set by the client to be able to
+	// collate streaming responses from different queries within the dedicated session.
+	// The id should be an UUID string of the format `00112233-4455-6677-8899-aabbccddeeff`
+	SessionId string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"`
+	// (Required) User context
+	//
+	// user_context.user_id and session+id both identify a unique remote spark session on the
+	// server side.
+	UserContext *UserContext `protobuf:"bytes,2,opt,name=user_context,json=userContext,proto3" json:"user_context,omitempty"`
+	// (Optional)
+	// Provide an id for this request. If not provided, it will be generated by the server.
+	// It is returned in every ExecutePlanResponse.operation_id of the ExecutePlan response stream.
+	// The id must be an UUID string of the format `00112233-4455-6677-8899-aabbccddeeff`
+	OperationId *string `protobuf:"bytes,6,opt,name=operation_id,json=operationId,proto3,oneof" json:"operation_id,omitempty"`
+	// (Required) The logical plan to be executed / analyzed.
+	Plan *Plan `protobuf:"bytes,3,opt,name=plan,proto3" json:"plan,omitempty"`
+	// Provides optional information about the client sending the request. This field
+	// can be used for language or version specific information and is only intended for
+	// logging purposes and will not be interpreted by the server.
+	ClientType *string `protobuf:"bytes,4,opt,name=client_type,json=clientType,proto3,oneof" json:"client_type,omitempty"`
+	// Repeated element for options that can be passed to the request. This element is currently
+	// unused but allows to pass in an extension value used for arbitrary options.
+	RequestOptions []*ExecutePlanRequest_RequestOption `protobuf:"bytes,5,rep,name=request_options,json=requestOptions,proto3" json:"request_options,omitempty"`
+	// Tags to tag the given execution with.
+	// Tags cannot contain ',' character and cannot be empty strings.
+	// Used by Interrupt with interrupt.tag.
+	Tags []string `protobuf:"bytes,7,rep,name=tags,proto3" json:"tags,omitempty"`
+}
+
+func (x *ExecutePlanRequest) Reset() {
+	*x = ExecutePlanRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ExecutePlanRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ExecutePlanRequest) ProtoMessage() {}
+
+func (x *ExecutePlanRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_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 ExecutePlanRequest.ProtoReflect.Descriptor instead.
+func (*ExecutePlanRequest) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *ExecutePlanRequest) GetSessionId() string {
+	if x != nil {
+		return x.SessionId
+	}
+	return ""
+}
+
+func (x *ExecutePlanRequest) GetUserContext() *UserContext {
+	if x != nil {
+		return x.UserContext
+	}
+	return nil
+}
+
+func (x *ExecutePlanRequest) GetOperationId() string {
+	if x != nil && x.OperationId != nil {
+		return *x.OperationId
+	}
+	return ""
+}
+
+func (x *ExecutePlanRequest) GetPlan() *Plan {
+	if x != nil {
+		return x.Plan
+	}
+	return nil
+}
+
+func (x *ExecutePlanRequest) GetClientType() string {
+	if x != nil && x.ClientType != nil {
+		return *x.ClientType
+	}
+	return ""
+}
+
+func (x *ExecutePlanRequest) GetRequestOptions() []*ExecutePlanRequest_RequestOption {
+	if x != nil {
+		return x.RequestOptions
+	}
+	return nil
+}
+
+func (x *ExecutePlanRequest) GetTags() []string {
+	if x != nil {
+		return x.Tags
+	}
+	return nil
+}
+
+// The response of a query, can be one or more for each request. Responses belonging to the
+// same input query, carry the same `session_id`.
+type ExecutePlanResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	SessionId string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"`
+	// Identifies the ExecutePlan execution.
+	// If set by the client in ExecutePlanRequest.operationId, that value is returned.
+	// Otherwise generated by the server.
+	// It is an UUID string of the format `00112233-4455-6677-8899-aabbccddeeff`
+	OperationId string `protobuf:"bytes,12,opt,name=operation_id,json=operationId,proto3" json:"operation_id,omitempty"`
+	// Identified the response in the stream.
+	// The id is an UUID string of the format `00112233-4455-6677-8899-aabbccddeeff`
+	ResponseId string `protobuf:"bytes,13,opt,name=response_id,json=responseId,proto3" json:"response_id,omitempty"`
+	// Union type for the different response messages.
+	//
+	// Types that are assignable to ResponseType:
+	//
+	//	*ExecutePlanResponse_ArrowBatch_
+	//	*ExecutePlanResponse_SqlCommandResult_
+	//	*ExecutePlanResponse_WriteStreamOperationStartResult
+	//	*ExecutePlanResponse_StreamingQueryCommandResult
+	//	*ExecutePlanResponse_GetResourcesCommandResult
+	//	*ExecutePlanResponse_StreamingQueryManagerCommandResult
+	//	*ExecutePlanResponse_ResultComplete_
+	//	*ExecutePlanResponse_Extension
+	ResponseType isExecutePlanResponse_ResponseType `protobuf_oneof:"response_type"`
+	// Metrics for the query execution. Typically, this field is only present in the last
+	// batch of results and then represent the overall state of the query execution.
+	Metrics *ExecutePlanResponse_Metrics `protobuf:"bytes,4,opt,name=metrics,proto3" json:"metrics,omitempty"`
+	// The metrics observed during the execution of the query plan.
+	ObservedMetrics []*ExecutePlanResponse_ObservedMetrics `protobuf:"bytes,6,rep,name=observed_metrics,json=observedMetrics,proto3" json:"observed_metrics,omitempty"`
+	// (Optional) The Spark schema. This field is available when `collect` is called.
+	Schema *DataType `protobuf:"bytes,7,opt,name=schema,proto3" json:"schema,omitempty"`
+}
+
+func (x *ExecutePlanResponse) Reset() {
+	*x = ExecutePlanResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ExecutePlanResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ExecutePlanResponse) ProtoMessage() {}
+
+func (x *ExecutePlanResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_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 ExecutePlanResponse.ProtoReflect.Descriptor instead.
+func (*ExecutePlanResponse) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *ExecutePlanResponse) GetSessionId() string {
+	if x != nil {
+		return x.SessionId
+	}
+	return ""
+}
+
+func (x *ExecutePlanResponse) GetOperationId() string {
+	if x != nil {
+		return x.OperationId
+	}
+	return ""
+}
+
+func (x *ExecutePlanResponse) GetResponseId() string {
+	if x != nil {
+		return x.ResponseId
+	}
+	return ""
+}
+
+func (m *ExecutePlanResponse) GetResponseType() isExecutePlanResponse_ResponseType {
+	if m != nil {
+		return m.ResponseType
+	}
+	return nil
+}
+
+func (x *ExecutePlanResponse) GetArrowBatch() *ExecutePlanResponse_ArrowBatch {
+	if x, ok := x.GetResponseType().(*ExecutePlanResponse_ArrowBatch_); ok {
+		return x.ArrowBatch
+	}
+	return nil
+}
+
+func (x *ExecutePlanResponse) GetSqlCommandResult() *ExecutePlanResponse_SqlCommandResult {
+	if x, ok := x.GetResponseType().(*ExecutePlanResponse_SqlCommandResult_); ok {
+		return x.SqlCommandResult
+	}
+	return nil
+}
+
+func (x *ExecutePlanResponse) GetWriteStreamOperationStartResult() *WriteStreamOperationStartResult {
+	if x, ok := x.GetResponseType().(*ExecutePlanResponse_WriteStreamOperationStartResult); ok {
+		return x.WriteStreamOperationStartResult
+	}
+	return nil
+}
+
+func (x *ExecutePlanResponse) GetStreamingQueryCommandResult() *StreamingQueryCommandResult {
+	if x, ok := x.GetResponseType().(*ExecutePlanResponse_StreamingQueryCommandResult); ok {
+		return x.StreamingQueryCommandResult
+	}
+	return nil
+}
+
+func (x *ExecutePlanResponse) GetGetResourcesCommandResult() *GetResourcesCommandResult {
+	if x, ok := x.GetResponseType().(*ExecutePlanResponse_GetResourcesCommandResult); ok {
+		return x.GetResourcesCommandResult
+	}
+	return nil
+}
+
+func (x *ExecutePlanResponse) GetStreamingQueryManagerCommandResult() *StreamingQueryManagerCommandResult {
+	if x, ok := x.GetResponseType().(*ExecutePlanResponse_StreamingQueryManagerCommandResult); ok {
+		return x.StreamingQueryManagerCommandResult
+	}
+	return nil
+}
+
+func (x *ExecutePlanResponse) GetResultComplete() *ExecutePlanResponse_ResultComplete {
+	if x, ok := x.GetResponseType().(*ExecutePlanResponse_ResultComplete_); ok {
+		return x.ResultComplete
+	}
+	return nil
+}
+
+func (x *ExecutePlanResponse) GetExtension() *anypb.Any {
+	if x, ok := x.GetResponseType().(*ExecutePlanResponse_Extension); ok {
+		return x.Extension
+	}
+	return nil
+}
+
+func (x *ExecutePlanResponse) GetMetrics() *ExecutePlanResponse_Metrics {
+	if x != nil {
+		return x.Metrics
+	}
+	return nil
+}
+
+func (x *ExecutePlanResponse) GetObservedMetrics() []*ExecutePlanResponse_ObservedMetrics {
+	if x != nil {
+		return x.ObservedMetrics
+	}
+	return nil
+}
+
+func (x *ExecutePlanResponse) GetSchema() *DataType {
+	if x != nil {
+		return x.Schema
+	}
+	return nil
+}
+
+type isExecutePlanResponse_ResponseType interface {
+	isExecutePlanResponse_ResponseType()
+}
+
+type ExecutePlanResponse_ArrowBatch_ struct {
+	ArrowBatch *ExecutePlanResponse_ArrowBatch `protobuf:"bytes,2,opt,name=arrow_batch,json=arrowBatch,proto3,oneof"`
+}
+
+type ExecutePlanResponse_SqlCommandResult_ struct {
+	// Special case for executing SQL commands.
+	SqlCommandResult *ExecutePlanResponse_SqlCommandResult `protobuf:"bytes,5,opt,name=sql_command_result,json=sqlCommandResult,proto3,oneof"`
+}
+
+type ExecutePlanResponse_WriteStreamOperationStartResult struct {
+	// Response for a streaming query.
+	WriteStreamOperationStartResult *WriteStreamOperationStartResult `protobuf:"bytes,8,opt,name=write_stream_operation_start_result,json=writeStreamOperationStartResult,proto3,oneof"`
+}
+
+type ExecutePlanResponse_StreamingQueryCommandResult struct {
+	// Response for commands on a streaming query.
+	StreamingQueryCommandResult *StreamingQueryCommandResult `protobuf:"bytes,9,opt,name=streaming_query_command_result,json=streamingQueryCommandResult,proto3,oneof"`
+}
+
+type ExecutePlanResponse_GetResourcesCommandResult struct {
+	// Response for 'SparkContext.resources'.
+	GetResourcesCommandResult *GetResourcesCommandResult `protobuf:"bytes,10,opt,name=get_resources_command_result,json=getResourcesCommandResult,proto3,oneof"`
+}
+
+type ExecutePlanResponse_StreamingQueryManagerCommandResult struct {
+	// Response for commands on the streaming query manager.
+	StreamingQueryManagerCommandResult *StreamingQueryManagerCommandResult `protobuf:"bytes,11,opt,name=streaming_query_manager_command_result,json=streamingQueryManagerCommandResult,proto3,oneof"`
+}
+
+type ExecutePlanResponse_ResultComplete_ struct {
+	// Response type informing if the stream is complete in reattachable execution.
+	ResultComplete *ExecutePlanResponse_ResultComplete `protobuf:"bytes,14,opt,name=result_complete,json=resultComplete,proto3,oneof"`
+}
+
+type ExecutePlanResponse_Extension struct {
+	// Support arbitrary result objects.
+	Extension *anypb.Any `protobuf:"bytes,999,opt,name=extension,proto3,oneof"`
+}
+
+func (*ExecutePlanResponse_ArrowBatch_) isExecutePlanResponse_ResponseType() {}
+
+func (*ExecutePlanResponse_SqlCommandResult_) isExecutePlanResponse_ResponseType() {}
+
+func (*ExecutePlanResponse_WriteStreamOperationStartResult) isExecutePlanResponse_ResponseType() {}
+
+func (*ExecutePlanResponse_StreamingQueryCommandResult) isExecutePlanResponse_ResponseType() {}
+
+func (*ExecutePlanResponse_GetResourcesCommandResult) isExecutePlanResponse_ResponseType() {}
+
+func (*ExecutePlanResponse_StreamingQueryManagerCommandResult) isExecutePlanResponse_ResponseType() {}
+
+func (*ExecutePlanResponse_ResultComplete_) isExecutePlanResponse_ResponseType() {}
+
+func (*ExecutePlanResponse_Extension) isExecutePlanResponse_ResponseType() {}
+
+// The key-value pair for the config request and response.
+type KeyValue struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// (Required) The key.
+	Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
+	// (Optional) The value.
+	Value *string `protobuf:"bytes,2,opt,name=value,proto3,oneof" json:"value,omitempty"`
+}
+
+func (x *KeyValue) Reset() {
+	*x = KeyValue{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *KeyValue) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*KeyValue) ProtoMessage() {}
+
+func (x *KeyValue) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_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 KeyValue.ProtoReflect.Descriptor instead.
+func (*KeyValue) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *KeyValue) GetKey() string {
+	if x != nil {
+		return x.Key
+	}
+	return ""
+}
+
+func (x *KeyValue) GetValue() string {
+	if x != nil && x.Value != nil {
+		return *x.Value
+	}
+	return ""
+}
+
+// Request to update or fetch the configurations.
+type ConfigRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// (Required)
+	//
+	// The session_id specifies a spark session for a user id (which is specified
+	// by user_context.user_id). The session_id is set by the client to be able to
+	// collate streaming responses from different queries within the dedicated session.
+	// The id should be an UUID string of the format `00112233-4455-6677-8899-aabbccddeeff`
+	SessionId string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"`
+	// (Required) User context
+	UserContext *UserContext `protobuf:"bytes,2,opt,name=user_context,json=userContext,proto3" json:"user_context,omitempty"`
+	// (Required) The operation for the config.
+	Operation *ConfigRequest_Operation `protobuf:"bytes,3,opt,name=operation,proto3" json:"operation,omitempty"`
+	// Provides optional information about the client sending the request. This field
+	// can be used for language or version specific information and is only intended for
+	// logging purposes and will not be interpreted by the server.
+	ClientType *string `protobuf:"bytes,4,opt,name=client_type,json=clientType,proto3,oneof" json:"client_type,omitempty"`
+}
+
+func (x *ConfigRequest) Reset() {
+	*x = ConfigRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ConfigRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ConfigRequest) ProtoMessage() {}
+
+func (x *ConfigRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_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 ConfigRequest.ProtoReflect.Descriptor instead.
+func (*ConfigRequest) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *ConfigRequest) GetSessionId() string {
+	if x != nil {
+		return x.SessionId
+	}
+	return ""
+}
+
+func (x *ConfigRequest) GetUserContext() *UserContext {
+	if x != nil {
+		return x.UserContext
+	}
+	return nil
+}
+
+func (x *ConfigRequest) GetOperation() *ConfigRequest_Operation {
+	if x != nil {
+		return x.Operation
+	}
+	return nil
+}
+
+func (x *ConfigRequest) GetClientType() string {
+	if x != nil && x.ClientType != nil {
+		return *x.ClientType
+	}
+	return ""
+}
+
+// Response to the config request.
+type ConfigResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	SessionId string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"`
+	// (Optional) The result key-value pairs.
+	//
+	// Available when the operation is 'Get', 'GetWithDefault', 'GetOption', 'GetAll'.
+	// Also available for the operation 'IsModifiable' with boolean string "true" and "false".
+	Pairs []*KeyValue `protobuf:"bytes,2,rep,name=pairs,proto3" json:"pairs,omitempty"`
+	// (Optional)
+	//
+	// Warning messages for deprecated or unsupported configurations.
+	Warnings []string `protobuf:"bytes,3,rep,name=warnings,proto3" json:"warnings,omitempty"`
+}
+
+func (x *ConfigResponse) Reset() {
+	*x = ConfigResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[8]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ConfigResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ConfigResponse) ProtoMessage() {}
+
+func (x *ConfigResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_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 ConfigResponse.ProtoReflect.Descriptor instead.
+func (*ConfigResponse) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{8}
+}
+
+func (x *ConfigResponse) GetSessionId() string {
+	if x != nil {
+		return x.SessionId
+	}
+	return ""
+}
+
+func (x *ConfigResponse) GetPairs() []*KeyValue {
+	if x != nil {
+		return x.Pairs
+	}
+	return nil
+}
+
+func (x *ConfigResponse) GetWarnings() []string {
+	if x != nil {
+		return x.Warnings
+	}
+	return nil
+}
+
+// Request to transfer client-local artifacts.
+type AddArtifactsRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// (Required)
+	//
+	// The session_id specifies a spark session for a user id (which is specified
+	// by user_context.user_id). The session_id is set by the client to be able to
+	// collate streaming responses from different queries within the dedicated session.
+	// The id should be an UUID string of the format `00112233-4455-6677-8899-aabbccddeeff`
+	SessionId string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"`
+	// User context
+	UserContext *UserContext `protobuf:"bytes,2,opt,name=user_context,json=userContext,proto3" json:"user_context,omitempty"`
+	// Provides optional information about the client sending the request. This field
+	// can be used for language or version specific information and is only intended for
+	// logging purposes and will not be interpreted by the server.
+	ClientType *string `protobuf:"bytes,6,opt,name=client_type,json=clientType,proto3,oneof" json:"client_type,omitempty"`
+	// The payload is either a batch of artifacts or a partial chunk of a large artifact.
+	//
+	// Types that are assignable to Payload:
+	//
+	//	*AddArtifactsRequest_Batch_
+	//	*AddArtifactsRequest_BeginChunk
+	//	*AddArtifactsRequest_Chunk
+	Payload isAddArtifactsRequest_Payload `protobuf_oneof:"payload"`
+}
+
+func (x *AddArtifactsRequest) Reset() {
+	*x = AddArtifactsRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[9]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AddArtifactsRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AddArtifactsRequest) ProtoMessage() {}
+
+func (x *AddArtifactsRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_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 AddArtifactsRequest.ProtoReflect.Descriptor instead.
+func (*AddArtifactsRequest) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{9}
+}
+
+func (x *AddArtifactsRequest) GetSessionId() string {
+	if x != nil {
+		return x.SessionId
+	}
+	return ""
+}
+
+func (x *AddArtifactsRequest) GetUserContext() *UserContext {
+	if x != nil {
+		return x.UserContext
+	}
+	return nil
+}
+
+func (x *AddArtifactsRequest) GetClientType() string {
+	if x != nil && x.ClientType != nil {
+		return *x.ClientType
+	}
+	return ""
+}
+
+func (m *AddArtifactsRequest) GetPayload() isAddArtifactsRequest_Payload {
+	if m != nil {
+		return m.Payload
+	}
+	return nil
+}
+
+func (x *AddArtifactsRequest) GetBatch() *AddArtifactsRequest_Batch {
+	if x, ok := x.GetPayload().(*AddArtifactsRequest_Batch_); ok {
+		return x.Batch
+	}
+	return nil
+}
+
+func (x *AddArtifactsRequest) GetBeginChunk() *AddArtifactsRequest_BeginChunkedArtifact {
+	if x, ok := x.GetPayload().(*AddArtifactsRequest_BeginChunk); ok {
+		return x.BeginChunk
+	}
+	return nil
+}
+
+func (x *AddArtifactsRequest) GetChunk() *AddArtifactsRequest_ArtifactChunk {
+	if x, ok := x.GetPayload().(*AddArtifactsRequest_Chunk); ok {
+		return x.Chunk
+	}
+	return nil
+}
+
+type isAddArtifactsRequest_Payload interface {
+	isAddArtifactsRequest_Payload()
+}
+
+type AddArtifactsRequest_Batch_ struct {
+	Batch *AddArtifactsRequest_Batch `protobuf:"bytes,3,opt,name=batch,proto3,oneof"`
+}
+
+type AddArtifactsRequest_BeginChunk struct {
+	// The metadata and the initial chunk of a large artifact chunked into multiple requests.
+	// The server side is notified about the total size of the large artifact as well as the
+	// number of chunks to expect.
+	BeginChunk *AddArtifactsRequest_BeginChunkedArtifact `protobuf:"bytes,4,opt,name=begin_chunk,json=beginChunk,proto3,oneof"`
+}
+
+type AddArtifactsRequest_Chunk struct {
+	// A chunk of an artifact excluding metadata. This can be any chunk of a large artifact
+	// excluding the first chunk (which is included in `BeginChunkedArtifact`).
+	Chunk *AddArtifactsRequest_ArtifactChunk `protobuf:"bytes,5,opt,name=chunk,proto3,oneof"`
+}
+
+func (*AddArtifactsRequest_Batch_) isAddArtifactsRequest_Payload() {}
+
+func (*AddArtifactsRequest_BeginChunk) isAddArtifactsRequest_Payload() {}
+
+func (*AddArtifactsRequest_Chunk) isAddArtifactsRequest_Payload() {}
+
+// Response to adding an artifact. Contains relevant metadata to verify successful transfer of
+// artifact(s).
+type AddArtifactsResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The list of artifact(s) seen by the server.
+	Artifacts []*AddArtifactsResponse_ArtifactSummary `protobuf:"bytes,1,rep,name=artifacts,proto3" json:"artifacts,omitempty"`
+}
+
+func (x *AddArtifactsResponse) Reset() {
+	*x = AddArtifactsResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[10]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AddArtifactsResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AddArtifactsResponse) ProtoMessage() {}
+
+func (x *AddArtifactsResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_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 AddArtifactsResponse.ProtoReflect.Descriptor instead.
+func (*AddArtifactsResponse) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{10}
+}
+
+func (x *AddArtifactsResponse) GetArtifacts() []*AddArtifactsResponse_ArtifactSummary {
+	if x != nil {
+		return x.Artifacts
+	}
+	return nil
+}
+
+// Request to get current statuses of artifacts at the server side.
+type ArtifactStatusesRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// (Required)
+	//
+	// The session_id specifies a spark session for a user id (which is specified
+	// by user_context.user_id). The session_id is set by the client to be able to
+	// collate streaming responses from different queries within the dedicated session.
+	// The id should be an UUID string of the format `00112233-4455-6677-8899-aabbccddeeff`
+	SessionId string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"`
+	// User context
+	UserContext *UserContext `protobuf:"bytes,2,opt,name=user_context,json=userContext,proto3" json:"user_context,omitempty"`
+	// Provides optional information about the client sending the request. This field
+	// can be used for language or version specific information and is only intended for
+	// logging purposes and will not be interpreted by the server.
+	ClientType *string `protobuf:"bytes,3,opt,name=client_type,json=clientType,proto3,oneof" json:"client_type,omitempty"`
+	// The name of the artifact is expected in the form of a "Relative Path" that is made up of a
+	// sequence of directories and the final file element.
+	// Examples of "Relative Path"s: "jars/test.jar", "classes/xyz.class", "abc.xyz", "a/b/X.jar".
+	// The server is expected to maintain the hierarchy of files as defined by their name. (i.e
+	// The relative path of the file on the server's filesystem will be the same as the name of
+	// the provided artifact)
+	Names []string `protobuf:"bytes,4,rep,name=names,proto3" json:"names,omitempty"`
+}
+
+func (x *ArtifactStatusesRequest) Reset() {
+	*x = ArtifactStatusesRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[11]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ArtifactStatusesRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ArtifactStatusesRequest) ProtoMessage() {}
+
+func (x *ArtifactStatusesRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_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 ArtifactStatusesRequest.ProtoReflect.Descriptor instead.
+func (*ArtifactStatusesRequest) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{11}
+}
+
+func (x *ArtifactStatusesRequest) GetSessionId() string {
+	if x != nil {
+		return x.SessionId
+	}
+	return ""
+}
+
+func (x *ArtifactStatusesRequest) GetUserContext() *UserContext {
+	if x != nil {
+		return x.UserContext
+	}
+	return nil
+}
+
+func (x *ArtifactStatusesRequest) GetClientType() string {
+	if x != nil && x.ClientType != nil {
+		return *x.ClientType
+	}
+	return ""
+}
+
+func (x *ArtifactStatusesRequest) GetNames() []string {
+	if x != nil {
+		return x.Names
+	}
+	return nil
+}
+
+// Response to checking artifact statuses.
+type ArtifactStatusesResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// A map of artifact names to their statuses.
+	Statuses map[string]*ArtifactStatusesResponse_ArtifactStatus `protobuf:"bytes,1,rep,name=statuses,proto3" json:"statuses,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+}
+
+func (x *ArtifactStatusesResponse) Reset() {
+	*x = ArtifactStatusesResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[12]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ArtifactStatusesResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ArtifactStatusesResponse) ProtoMessage() {}
+
+func (x *ArtifactStatusesResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_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 ArtifactStatusesResponse.ProtoReflect.Descriptor instead.
+func (*ArtifactStatusesResponse) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{12}
+}
+
+func (x *ArtifactStatusesResponse) GetStatuses() map[string]*ArtifactStatusesResponse_ArtifactStatus {
+	if x != nil {
+		return x.Statuses
+	}
+	return nil
+}
+
+type InterruptRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// (Required)
+	//
+	// The session_id specifies a spark session for a user id (which is specified
+	// by user_context.user_id). The session_id is set by the client to be able to
+	// collate streaming responses from different queries within the dedicated session.
+	// The id should be an UUID string of the format `00112233-4455-6677-8899-aabbccddeeff`
+	SessionId string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"`
+	// (Required) User context
+	UserContext *UserContext `protobuf:"bytes,2,opt,name=user_context,json=userContext,proto3" json:"user_context,omitempty"`
+	// Provides optional information about the client sending the request. This field
+	// can be used for language or version specific information and is only intended for
+	// logging purposes and will not be interpreted by the server.
+	ClientType *string `protobuf:"bytes,3,opt,name=client_type,json=clientType,proto3,oneof" json:"client_type,omitempty"`
+	// (Required) The type of interrupt to execute.
+	InterruptType InterruptRequest_InterruptType `protobuf:"varint,4,opt,name=interrupt_type,json=interruptType,proto3,enum=spark.connect.InterruptRequest_InterruptType" json:"interrupt_type,omitempty"`
+	// Types that are assignable to Interrupt:
+	//
+	//	*InterruptRequest_OperationTag
+	//	*InterruptRequest_OperationId
+	Interrupt isInterruptRequest_Interrupt `protobuf_oneof:"interrupt"`
+}
+
+func (x *InterruptRequest) Reset() {
+	*x = InterruptRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[13]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *InterruptRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*InterruptRequest) ProtoMessage() {}
+
+func (x *InterruptRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_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 InterruptRequest.ProtoReflect.Descriptor instead.
+func (*InterruptRequest) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{13}
+}
+
+func (x *InterruptRequest) GetSessionId() string {
+	if x != nil {
+		return x.SessionId
+	}
+	return ""
+}
+
+func (x *InterruptRequest) GetUserContext() *UserContext {
+	if x != nil {
+		return x.UserContext
+	}
+	return nil
+}
+
+func (x *InterruptRequest) GetClientType() string {
+	if x != nil && x.ClientType != nil {
+		return *x.ClientType
+	}
+	return ""
+}
+
+func (x *InterruptRequest) GetInterruptType() InterruptRequest_InterruptType {
+	if x != nil {
+		return x.InterruptType
+	}
+	return InterruptRequest_INTERRUPT_TYPE_UNSPECIFIED
+}
+
+func (m *InterruptRequest) GetInterrupt() isInterruptRequest_Interrupt {
+	if m != nil {
+		return m.Interrupt
+	}
+	return nil
+}
+
+func (x *InterruptRequest) GetOperationTag() string {
+	if x, ok := x.GetInterrupt().(*InterruptRequest_OperationTag); ok {
+		return x.OperationTag
+	}
+	return ""
+}
+
+func (x *InterruptRequest) GetOperationId() string {
+	if x, ok := x.GetInterrupt().(*InterruptRequest_OperationId); ok {
+		return x.OperationId
+	}
+	return ""
+}
+
+type isInterruptRequest_Interrupt interface {
+	isInterruptRequest_Interrupt()
+}
+
+type InterruptRequest_OperationTag struct {
+	// if interrupt_tag == INTERRUPT_TYPE_TAG, interrupt operation with this tag.
+	OperationTag string `protobuf:"bytes,5,opt,name=operation_tag,json=operationTag,proto3,oneof"`
+}
+
+type InterruptRequest_OperationId struct {
+	// if interrupt_tag == INTERRUPT_TYPE_OPERATION_ID, interrupt operation with this operation_id.
+	OperationId string `protobuf:"bytes,6,opt,name=operation_id,json=operationId,proto3,oneof"`
+}
+
+func (*InterruptRequest_OperationTag) isInterruptRequest_Interrupt() {}
+
+func (*InterruptRequest_OperationId) isInterruptRequest_Interrupt() {}
+
+type InterruptResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Session id in which the interrupt was running.
+	SessionId string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"`
+	// Operation ids of the executions which were interrupted.
+	InterruptedIds []string `protobuf:"bytes,2,rep,name=interrupted_ids,json=interruptedIds,proto3" json:"interrupted_ids,omitempty"`
+}
+
+func (x *InterruptResponse) Reset() {
+	*x = InterruptResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[14]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *InterruptResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*InterruptResponse) ProtoMessage() {}
+
+func (x *InterruptResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_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 InterruptResponse.ProtoReflect.Descriptor instead.
+func (*InterruptResponse) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{14}
+}
+
+func (x *InterruptResponse) GetSessionId() string {
+	if x != nil {
+		return x.SessionId
+	}
+	return ""
+}
+
+func (x *InterruptResponse) GetInterruptedIds() []string {
+	if x != nil {
+		return x.InterruptedIds
+	}
+	return nil
+}
+
+type ReattachOptions struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// If true, the request can be reattached to using ReattachExecute.
+	// ReattachExecute can be used either if the stream broke with a GRPC network error,
+	// or if the server closed the stream without sending a response with StreamStatus.complete=true.
+	// The server will keep a buffer of responses in case a response is lost, and
+	// ReattachExecute needs to back-track.
+	//
+	// If false, the execution response stream will will not be reattachable, and all responses are
+	// immediately released by the server after being sent.
+	Reattachable bool `protobuf:"varint,1,opt,name=reattachable,proto3" json:"reattachable,omitempty"`
+}
+
+func (x *ReattachOptions) Reset() {
+	*x = ReattachOptions{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[15]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ReattachOptions) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ReattachOptions) ProtoMessage() {}
+
+func (x *ReattachOptions) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_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 ReattachOptions.ProtoReflect.Descriptor instead.
+func (*ReattachOptions) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{15}
+}
+
+func (x *ReattachOptions) GetReattachable() bool {
+	if x != nil {
+		return x.Reattachable
+	}
+	return false
+}
+
+type ReattachExecuteRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// (Required)
+	//
+	// The session_id of the request to reattach to.
+	// This must be an id of existing session.
+	SessionId string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"`
+	// (Required) User context
+	//
+	// user_context.user_id and session+id both identify a unique remote spark session on the
+	// server side.
+	UserContext *UserContext `protobuf:"bytes,2,opt,name=user_context,json=userContext,proto3" json:"user_context,omitempty"`
+	// (Required)
+	// Provide an id of the request to reattach to.
+	// This must be an id of existing operation.
+	OperationId string `protobuf:"bytes,3,opt,name=operation_id,json=operationId,proto3" json:"operation_id,omitempty"`
+	// Provides optional information about the client sending the request. This field
+	// can be used for language or version specific information and is only intended for
+	// logging purposes and will not be interpreted by the server.
+	ClientType *string `protobuf:"bytes,4,opt,name=client_type,json=clientType,proto3,oneof" json:"client_type,omitempty"`
+	// (Optional)
+	// Last already processed response id from the response stream.
+	// After reattach, server will resume the response stream after that response.
+	// If not specified, server will restart the stream from the start.
+	//
+	// Note: server controls the amount of responses that it buffers and it may drop responses,
+	// that are far behind the latest returned response, so this can't be used to arbitrarily
+	// scroll back the cursor. If the response is no longer available, this will result in an error.
+	LastResponseId *string `protobuf:"bytes,5,opt,name=last_response_id,json=lastResponseId,proto3,oneof" json:"last_response_id,omitempty"`
+}
+
+func (x *ReattachExecuteRequest) Reset() {
+	*x = ReattachExecuteRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[16]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ReattachExecuteRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ReattachExecuteRequest) ProtoMessage() {}
+
+func (x *ReattachExecuteRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_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 ReattachExecuteRequest.ProtoReflect.Descriptor instead.
+func (*ReattachExecuteRequest) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{16}
+}
+
+func (x *ReattachExecuteRequest) GetSessionId() string {
+	if x != nil {
+		return x.SessionId
+	}
+	return ""
+}
+
+func (x *ReattachExecuteRequest) GetUserContext() *UserContext {
+	if x != nil {
+		return x.UserContext
+	}
+	return nil
+}
+
+func (x *ReattachExecuteRequest) GetOperationId() string {
+	if x != nil {
+		return x.OperationId
+	}
+	return ""
+}
+
+func (x *ReattachExecuteRequest) GetClientType() string {
+	if x != nil && x.ClientType != nil {
+		return *x.ClientType
+	}
+	return ""
+}
+
+func (x *ReattachExecuteRequest) GetLastResponseId() string {
+	if x != nil && x.LastResponseId != nil {
+		return *x.LastResponseId
+	}
+	return ""
+}
+
+type ReleaseExecuteRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// (Required)
+	//
+	// The session_id of the request to reattach to.
+	// This must be an id of existing session.
+	SessionId string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"`
+	// (Required) User context
+	//
+	// user_context.user_id and session+id both identify a unique remote spark session on the
+	// server side.
+	UserContext *UserContext `protobuf:"bytes,2,opt,name=user_context,json=userContext,proto3" json:"user_context,omitempty"`
+	// (Required)
+	// Provide an id of the request to reattach to.
+	// This must be an id of existing operation.
+	OperationId string `protobuf:"bytes,3,opt,name=operation_id,json=operationId,proto3" json:"operation_id,omitempty"`
+	// Provides optional information about the client sending the request. This field
+	// can be used for language or version specific information and is only intended for
+	// logging purposes and will not be interpreted by the server.
+	ClientType *string `protobuf:"bytes,4,opt,name=client_type,json=clientType,proto3,oneof" json:"client_type,omitempty"`
+	// Types that are assignable to Release:
+	//
+	//	*ReleaseExecuteRequest_ReleaseAll_
+	//	*ReleaseExecuteRequest_ReleaseUntil_
+	Release isReleaseExecuteRequest_Release `protobuf_oneof:"release"`
+}
+
+func (x *ReleaseExecuteRequest) Reset() {
+	*x = ReleaseExecuteRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[17]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ReleaseExecuteRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ReleaseExecuteRequest) ProtoMessage() {}
+
+func (x *ReleaseExecuteRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[17]
+	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 ReleaseExecuteRequest.ProtoReflect.Descriptor instead.
+func (*ReleaseExecuteRequest) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{17}
+}
+
+func (x *ReleaseExecuteRequest) GetSessionId() string {
+	if x != nil {
+		return x.SessionId
+	}
+	return ""
+}
+
+func (x *ReleaseExecuteRequest) GetUserContext() *UserContext {
+	if x != nil {
+		return x.UserContext
+	}
+	return nil
+}
+
+func (x *ReleaseExecuteRequest) GetOperationId() string {
+	if x != nil {
+		return x.OperationId
+	}
+	return ""
+}
+
+func (x *ReleaseExecuteRequest) GetClientType() string {
+	if x != nil && x.ClientType != nil {
+		return *x.ClientType
+	}
+	return ""
+}
+
+func (m *ReleaseExecuteRequest) GetRelease() isReleaseExecuteRequest_Release {
+	if m != nil {
+		return m.Release
+	}
+	return nil
+}
+
+func (x *ReleaseExecuteRequest) GetReleaseAll() *ReleaseExecuteRequest_ReleaseAll {
+	if x, ok := x.GetRelease().(*ReleaseExecuteRequest_ReleaseAll_); ok {
+		return x.ReleaseAll
+	}
+	return nil
+}
+
+func (x *ReleaseExecuteRequest) GetReleaseUntil() *ReleaseExecuteRequest_ReleaseUntil {
+	if x, ok := x.GetRelease().(*ReleaseExecuteRequest_ReleaseUntil_); ok {
+		return x.ReleaseUntil
+	}
+	return nil
+}
+
+type isReleaseExecuteRequest_Release interface {
+	isReleaseExecuteRequest_Release()
+}
+
+type ReleaseExecuteRequest_ReleaseAll_ struct {
+	ReleaseAll *ReleaseExecuteRequest_ReleaseAll `protobuf:"bytes,5,opt,name=release_all,json=releaseAll,proto3,oneof"`
+}
+
+type ReleaseExecuteRequest_ReleaseUntil_ struct {
+	ReleaseUntil *ReleaseExecuteRequest_ReleaseUntil `protobuf:"bytes,6,opt,name=release_until,json=releaseUntil,proto3,oneof"`
+}
+
+func (*ReleaseExecuteRequest_ReleaseAll_) isReleaseExecuteRequest_Release() {}
+
+func (*ReleaseExecuteRequest_ReleaseUntil_) isReleaseExecuteRequest_Release() {}
+
+type ReleaseExecuteResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Session id in which the release was running.
+	SessionId string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"`
+	// Operation id of the operation on which the release executed.
+	// If the operation couldn't be found (because e.g. it was concurrently released), will be unset.
+	// Otherwise, it will be equal to the operation_id from request.
+	OperationId *string `protobuf:"bytes,2,opt,name=operation_id,json=operationId,proto3,oneof" json:"operation_id,omitempty"`
+}
+
+func (x *ReleaseExecuteResponse) Reset() {
+	*x = ReleaseExecuteResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[18]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ReleaseExecuteResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ReleaseExecuteResponse) ProtoMessage() {}
+
+func (x *ReleaseExecuteResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[18]
+	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 ReleaseExecuteResponse.ProtoReflect.Descriptor instead.
+func (*ReleaseExecuteResponse) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{18}
+}
+
+func (x *ReleaseExecuteResponse) GetSessionId() string {
+	if x != nil {
+		return x.SessionId
+	}
+	return ""
+}
+
+func (x *ReleaseExecuteResponse) GetOperationId() string {
+	if x != nil && x.OperationId != nil {
+		return *x.OperationId
+	}
+	return ""
+}
+
+type AnalyzePlanRequest_Schema struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// (Required) The logical plan to be analyzed.
+	Plan *Plan `protobuf:"bytes,1,opt,name=plan,proto3" json:"plan,omitempty"`
+}
+
+func (x *AnalyzePlanRequest_Schema) Reset() {
+	*x = AnalyzePlanRequest_Schema{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[19]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AnalyzePlanRequest_Schema) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AnalyzePlanRequest_Schema) ProtoMessage() {}
+
+func (x *AnalyzePlanRequest_Schema) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[19]
+	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 AnalyzePlanRequest_Schema.ProtoReflect.Descriptor instead.
+func (*AnalyzePlanRequest_Schema) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{2, 0}
+}
+
+func (x *AnalyzePlanRequest_Schema) GetPlan() *Plan {
+	if x != nil {
+		return x.Plan
+	}
+	return nil
+}
+
+// Explains the input plan based on a configurable mode.
+type AnalyzePlanRequest_Explain struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// (Required) The logical plan to be analyzed.
+	Plan *Plan `protobuf:"bytes,1,opt,name=plan,proto3" json:"plan,omitempty"`
+	// (Required) For analyzePlan rpc calls, configure the mode to explain plan in strings.
+	ExplainMode AnalyzePlanRequest_Explain_ExplainMode `protobuf:"varint,2,opt,name=explain_mode,json=explainMode,proto3,enum=spark.connect.AnalyzePlanRequest_Explain_ExplainMode" json:"explain_mode,omitempty"`
+}
+
+func (x *AnalyzePlanRequest_Explain) Reset() {
+	*x = AnalyzePlanRequest_Explain{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[20]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AnalyzePlanRequest_Explain) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AnalyzePlanRequest_Explain) ProtoMessage() {}
+
+func (x *AnalyzePlanRequest_Explain) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[20]
+	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 AnalyzePlanRequest_Explain.ProtoReflect.Descriptor instead.
+func (*AnalyzePlanRequest_Explain) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{2, 1}
+}
+
+func (x *AnalyzePlanRequest_Explain) GetPlan() *Plan {
+	if x != nil {
+		return x.Plan
+	}
+	return nil
+}
+
+func (x *AnalyzePlanRequest_Explain) GetExplainMode() AnalyzePlanRequest_Explain_ExplainMode {
+	if x != nil {
+		return x.ExplainMode
+	}
+	return AnalyzePlanRequest_Explain_EXPLAIN_MODE_UNSPECIFIED
+}
+
+type AnalyzePlanRequest_TreeString struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// (Required) The logical plan to be analyzed.
+	Plan *Plan `protobuf:"bytes,1,opt,name=plan,proto3" json:"plan,omitempty"`
+	// (Optional) Max level of the schema.
+	Level *int32 `protobuf:"varint,2,opt,name=level,proto3,oneof" json:"level,omitempty"`
+}
+
+func (x *AnalyzePlanRequest_TreeString) Reset() {
+	*x = AnalyzePlanRequest_TreeString{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[21]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AnalyzePlanRequest_TreeString) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AnalyzePlanRequest_TreeString) ProtoMessage() {}
+
+func (x *AnalyzePlanRequest_TreeString) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[21]
+	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 AnalyzePlanRequest_TreeString.ProtoReflect.Descriptor instead.
+func (*AnalyzePlanRequest_TreeString) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{2, 2}
+}
+
+func (x *AnalyzePlanRequest_TreeString) GetPlan() *Plan {
+	if x != nil {
+		return x.Plan
+	}
+	return nil
+}
+
+func (x *AnalyzePlanRequest_TreeString) GetLevel() int32 {
+	if x != nil && x.Level != nil {
+		return *x.Level
+	}
+	return 0
+}
+
+type AnalyzePlanRequest_IsLocal struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// (Required) The logical plan to be analyzed.
+	Plan *Plan `protobuf:"bytes,1,opt,name=plan,proto3" json:"plan,omitempty"`
+}
+
+func (x *AnalyzePlanRequest_IsLocal) Reset() {
+	*x = AnalyzePlanRequest_IsLocal{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[22]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AnalyzePlanRequest_IsLocal) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AnalyzePlanRequest_IsLocal) ProtoMessage() {}
+
+func (x *AnalyzePlanRequest_IsLocal) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[22]
+	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 AnalyzePlanRequest_IsLocal.ProtoReflect.Descriptor instead.
+func (*AnalyzePlanRequest_IsLocal) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{2, 3}
+}
+
+func (x *AnalyzePlanRequest_IsLocal) GetPlan() *Plan {
+	if x != nil {
+		return x.Plan
+	}
+	return nil
+}
+
+type AnalyzePlanRequest_IsStreaming struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// (Required) The logical plan to be analyzed.
+	Plan *Plan `protobuf:"bytes,1,opt,name=plan,proto3" json:"plan,omitempty"`
+}
+
+func (x *AnalyzePlanRequest_IsStreaming) Reset() {
+	*x = AnalyzePlanRequest_IsStreaming{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[23]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AnalyzePlanRequest_IsStreaming) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AnalyzePlanRequest_IsStreaming) ProtoMessage() {}
+
+func (x *AnalyzePlanRequest_IsStreaming) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[23]
+	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 AnalyzePlanRequest_IsStreaming.ProtoReflect.Descriptor instead.
+func (*AnalyzePlanRequest_IsStreaming) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{2, 4}
+}
+
+func (x *AnalyzePlanRequest_IsStreaming) GetPlan() *Plan {
+	if x != nil {
+		return x.Plan
+	}
+	return nil
+}
+
+type AnalyzePlanRequest_InputFiles struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// (Required) The logical plan to be analyzed.
+	Plan *Plan `protobuf:"bytes,1,opt,name=plan,proto3" json:"plan,omitempty"`
+}
+
+func (x *AnalyzePlanRequest_InputFiles) Reset() {
+	*x = AnalyzePlanRequest_InputFiles{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[24]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AnalyzePlanRequest_InputFiles) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AnalyzePlanRequest_InputFiles) ProtoMessage() {}
+
+func (x *AnalyzePlanRequest_InputFiles) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[24]
+	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 AnalyzePlanRequest_InputFiles.ProtoReflect.Descriptor instead.
+func (*AnalyzePlanRequest_InputFiles) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{2, 5}
+}
+
+func (x *AnalyzePlanRequest_InputFiles) GetPlan() *Plan {
+	if x != nil {
+		return x.Plan
+	}
+	return nil
+}
+
+type AnalyzePlanRequest_SparkVersion struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *AnalyzePlanRequest_SparkVersion) Reset() {
+	*x = AnalyzePlanRequest_SparkVersion{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[25]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AnalyzePlanRequest_SparkVersion) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AnalyzePlanRequest_SparkVersion) ProtoMessage() {}
+
+func (x *AnalyzePlanRequest_SparkVersion) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[25]
+	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 AnalyzePlanRequest_SparkVersion.ProtoReflect.Descriptor instead.
+func (*AnalyzePlanRequest_SparkVersion) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{2, 6}
+}
+
+type AnalyzePlanRequest_DDLParse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// (Required) The DDL formatted string to be parsed.
+	DdlString string `protobuf:"bytes,1,opt,name=ddl_string,json=ddlString,proto3" json:"ddl_string,omitempty"`
+}
+
+func (x *AnalyzePlanRequest_DDLParse) Reset() {
+	*x = AnalyzePlanRequest_DDLParse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[26]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AnalyzePlanRequest_DDLParse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AnalyzePlanRequest_DDLParse) ProtoMessage() {}
+
+func (x *AnalyzePlanRequest_DDLParse) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[26]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use AnalyzePlanRequest_DDLParse.ProtoReflect.Descriptor instead.
+func (*AnalyzePlanRequest_DDLParse) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{2, 7}
+}
+
+func (x *AnalyzePlanRequest_DDLParse) GetDdlString() string {
+	if x != nil {
+		return x.DdlString
+	}
+	return ""
+}
+
+// Returns `true` when the logical query plans  are equal and therefore return same results.
+type AnalyzePlanRequest_SameSemantics struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// (Required) The plan to be compared.
+	TargetPlan *Plan `protobuf:"bytes,1,opt,name=target_plan,json=targetPlan,proto3" json:"target_plan,omitempty"`
+	// (Required) The other plan to be compared.
+	OtherPlan *Plan `protobuf:"bytes,2,opt,name=other_plan,json=otherPlan,proto3" json:"other_plan,omitempty"`
+}
+
+func (x *AnalyzePlanRequest_SameSemantics) Reset() {
+	*x = AnalyzePlanRequest_SameSemantics{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[27]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AnalyzePlanRequest_SameSemantics) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AnalyzePlanRequest_SameSemantics) ProtoMessage() {}
+
+func (x *AnalyzePlanRequest_SameSemantics) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[27]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use AnalyzePlanRequest_SameSemantics.ProtoReflect.Descriptor instead.
+func (*AnalyzePlanRequest_SameSemantics) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{2, 8}
+}
+
+func (x *AnalyzePlanRequest_SameSemantics) GetTargetPlan() *Plan {
+	if x != nil {
+		return x.TargetPlan
+	}
+	return nil
+}
+
+func (x *AnalyzePlanRequest_SameSemantics) GetOtherPlan() *Plan {
+	if x != nil {
+		return x.OtherPlan
+	}
+	return nil
+}
+
+type AnalyzePlanRequest_SemanticHash struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// (Required) The logical plan to get a hashCode.
+	Plan *Plan `protobuf:"bytes,1,opt,name=plan,proto3" json:"plan,omitempty"`
+}
+
+func (x *AnalyzePlanRequest_SemanticHash) Reset() {
+	*x = AnalyzePlanRequest_SemanticHash{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[28]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AnalyzePlanRequest_SemanticHash) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AnalyzePlanRequest_SemanticHash) ProtoMessage() {}
+
+func (x *AnalyzePlanRequest_SemanticHash) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[28]
+	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 AnalyzePlanRequest_SemanticHash.ProtoReflect.Descriptor instead.
+func (*AnalyzePlanRequest_SemanticHash) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{2, 9}
+}
+
+func (x *AnalyzePlanRequest_SemanticHash) GetPlan() *Plan {
+	if x != nil {
+		return x.Plan
+	}
+	return nil
+}
+
+type AnalyzePlanRequest_Persist struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// (Required) The logical plan to persist.
+	Relation *Relation `protobuf:"bytes,1,opt,name=relation,proto3" json:"relation,omitempty"`
+	// (Optional) The storage level.
+	StorageLevel *StorageLevel `protobuf:"bytes,2,opt,name=storage_level,json=storageLevel,proto3,oneof" json:"storage_level,omitempty"`
+}
+
+func (x *AnalyzePlanRequest_Persist) Reset() {
+	*x = AnalyzePlanRequest_Persist{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[29]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AnalyzePlanRequest_Persist) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AnalyzePlanRequest_Persist) ProtoMessage() {}
+
+func (x *AnalyzePlanRequest_Persist) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[29]
+	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 AnalyzePlanRequest_Persist.ProtoReflect.Descriptor instead.
+func (*AnalyzePlanRequest_Persist) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{2, 10}
+}
+
+func (x *AnalyzePlanRequest_Persist) GetRelation() *Relation {
+	if x != nil {
+		return x.Relation
+	}
+	return nil
+}
+
+func (x *AnalyzePlanRequest_Persist) GetStorageLevel() *StorageLevel {
+	if x != nil {
+		return x.StorageLevel
+	}
+	return nil
+}
+
+type AnalyzePlanRequest_Unpersist struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// (Required) The logical plan to unpersist.
+	Relation *Relation `protobuf:"bytes,1,opt,name=relation,proto3" json:"relation,omitempty"`
+	// (Optional) Whether to block until all blocks are deleted.
+	Blocking *bool `protobuf:"varint,2,opt,name=blocking,proto3,oneof" json:"blocking,omitempty"`
+}
+
+func (x *AnalyzePlanRequest_Unpersist) Reset() {
+	*x = AnalyzePlanRequest_Unpersist{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[30]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AnalyzePlanRequest_Unpersist) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AnalyzePlanRequest_Unpersist) ProtoMessage() {}
+
+func (x *AnalyzePlanRequest_Unpersist) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[30]
+	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 AnalyzePlanRequest_Unpersist.ProtoReflect.Descriptor instead.
+func (*AnalyzePlanRequest_Unpersist) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{2, 11}
+}
+
+func (x *AnalyzePlanRequest_Unpersist) GetRelation() *Relation {
+	if x != nil {
+		return x.Relation
+	}
+	return nil
+}
+
+func (x *AnalyzePlanRequest_Unpersist) GetBlocking() bool {
+	if x != nil && x.Blocking != nil {
+		return *x.Blocking
+	}
+	return false
+}
+
+type AnalyzePlanRequest_GetStorageLevel struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// (Required) The logical plan to get the storage level.
+	Relation *Relation `protobuf:"bytes,1,opt,name=relation,proto3" json:"relation,omitempty"`
+}
+
+func (x *AnalyzePlanRequest_GetStorageLevel) Reset() {
+	*x = AnalyzePlanRequest_GetStorageLevel{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[31]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AnalyzePlanRequest_GetStorageLevel) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AnalyzePlanRequest_GetStorageLevel) ProtoMessage() {}
+
+func (x *AnalyzePlanRequest_GetStorageLevel) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[31]
+	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 AnalyzePlanRequest_GetStorageLevel.ProtoReflect.Descriptor instead.
+func (*AnalyzePlanRequest_GetStorageLevel) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{2, 12}
+}
+
+func (x *AnalyzePlanRequest_GetStorageLevel) GetRelation() *Relation {
+	if x != nil {
+		return x.Relation
+	}
+	return nil
+}
+
+type AnalyzePlanResponse_Schema struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Schema *DataType `protobuf:"bytes,1,opt,name=schema,proto3" json:"schema,omitempty"`
+}
+
+func (x *AnalyzePlanResponse_Schema) Reset() {
+	*x = AnalyzePlanResponse_Schema{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[32]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AnalyzePlanResponse_Schema) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AnalyzePlanResponse_Schema) ProtoMessage() {}
+
+func (x *AnalyzePlanResponse_Schema) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[32]
+	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 AnalyzePlanResponse_Schema.ProtoReflect.Descriptor instead.
+func (*AnalyzePlanResponse_Schema) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{3, 0}
+}
+
+func (x *AnalyzePlanResponse_Schema) GetSchema() *DataType {
+	if x != nil {
+		return x.Schema
+	}
+	return nil
+}
+
+type AnalyzePlanResponse_Explain struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ExplainString string `protobuf:"bytes,1,opt,name=explain_string,json=explainString,proto3" json:"explain_string,omitempty"`
+}
+
+func (x *AnalyzePlanResponse_Explain) Reset() {
+	*x = AnalyzePlanResponse_Explain{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[33]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AnalyzePlanResponse_Explain) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AnalyzePlanResponse_Explain) ProtoMessage() {}
+
+func (x *AnalyzePlanResponse_Explain) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[33]
+	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 AnalyzePlanResponse_Explain.ProtoReflect.Descriptor instead.
+func (*AnalyzePlanResponse_Explain) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{3, 1}
+}
+
+func (x *AnalyzePlanResponse_Explain) GetExplainString() string {
+	if x != nil {
+		return x.ExplainString
+	}
+	return ""
+}
+
+type AnalyzePlanResponse_TreeString struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	TreeString string `protobuf:"bytes,1,opt,name=tree_string,json=treeString,proto3" json:"tree_string,omitempty"`
+}
+
+func (x *AnalyzePlanResponse_TreeString) Reset() {
+	*x = AnalyzePlanResponse_TreeString{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[34]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AnalyzePlanResponse_TreeString) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AnalyzePlanResponse_TreeString) ProtoMessage() {}
+
+func (x *AnalyzePlanResponse_TreeString) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[34]
+	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 AnalyzePlanResponse_TreeString.ProtoReflect.Descriptor instead.
+func (*AnalyzePlanResponse_TreeString) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{3, 2}
+}
+
+func (x *AnalyzePlanResponse_TreeString) GetTreeString() string {
+	if x != nil {
+		return x.TreeString
+	}
+	return ""
+}
+
+type AnalyzePlanResponse_IsLocal struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	IsLocal bool `protobuf:"varint,1,opt,name=is_local,json=isLocal,proto3" json:"is_local,omitempty"`
+}
+
+func (x *AnalyzePlanResponse_IsLocal) Reset() {
+	*x = AnalyzePlanResponse_IsLocal{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[35]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AnalyzePlanResponse_IsLocal) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AnalyzePlanResponse_IsLocal) ProtoMessage() {}
+
+func (x *AnalyzePlanResponse_IsLocal) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[35]
+	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 AnalyzePlanResponse_IsLocal.ProtoReflect.Descriptor instead.
+func (*AnalyzePlanResponse_IsLocal) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{3, 3}
+}
+
+func (x *AnalyzePlanResponse_IsLocal) GetIsLocal() bool {
+	if x != nil {
+		return x.IsLocal
+	}
+	return false
+}
+
+type AnalyzePlanResponse_IsStreaming struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	IsStreaming bool `protobuf:"varint,1,opt,name=is_streaming,json=isStreaming,proto3" json:"is_streaming,omitempty"`
+}
+
+func (x *AnalyzePlanResponse_IsStreaming) Reset() {
+	*x = AnalyzePlanResponse_IsStreaming{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[36]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AnalyzePlanResponse_IsStreaming) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AnalyzePlanResponse_IsStreaming) ProtoMessage() {}
+
+func (x *AnalyzePlanResponse_IsStreaming) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[36]
+	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 AnalyzePlanResponse_IsStreaming.ProtoReflect.Descriptor instead.
+func (*AnalyzePlanResponse_IsStreaming) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{3, 4}
+}
+
+func (x *AnalyzePlanResponse_IsStreaming) GetIsStreaming() bool {
+	if x != nil {
+		return x.IsStreaming
+	}
+	return false
+}
+
+type AnalyzePlanResponse_InputFiles struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// A best-effort snapshot of the files that compose this Dataset
+	Files []string `protobuf:"bytes,1,rep,name=files,proto3" json:"files,omitempty"`
+}
+
+func (x *AnalyzePlanResponse_InputFiles) Reset() {
+	*x = AnalyzePlanResponse_InputFiles{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[37]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AnalyzePlanResponse_InputFiles) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AnalyzePlanResponse_InputFiles) ProtoMessage() {}
+
+func (x *AnalyzePlanResponse_InputFiles) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[37]
+	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 AnalyzePlanResponse_InputFiles.ProtoReflect.Descriptor instead.
+func (*AnalyzePlanResponse_InputFiles) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{3, 5}
+}
+
+func (x *AnalyzePlanResponse_InputFiles) GetFiles() []string {
+	if x != nil {
+		return x.Files
+	}
+	return nil
+}
+
+type AnalyzePlanResponse_SparkVersion struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"`
+}
+
+func (x *AnalyzePlanResponse_SparkVersion) Reset() {
+	*x = AnalyzePlanResponse_SparkVersion{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[38]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AnalyzePlanResponse_SparkVersion) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AnalyzePlanResponse_SparkVersion) ProtoMessage() {}
+
+func (x *AnalyzePlanResponse_SparkVersion) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[38]
+	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 AnalyzePlanResponse_SparkVersion.ProtoReflect.Descriptor instead.
+func (*AnalyzePlanResponse_SparkVersion) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{3, 6}
+}
+
+func (x *AnalyzePlanResponse_SparkVersion) GetVersion() string {
+	if x != nil {
+		return x.Version
+	}
+	return ""
+}
+
+type AnalyzePlanResponse_DDLParse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Parsed *DataType `protobuf:"bytes,1,opt,name=parsed,proto3" json:"parsed,omitempty"`
+}
+
+func (x *AnalyzePlanResponse_DDLParse) Reset() {
+	*x = AnalyzePlanResponse_DDLParse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[39]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AnalyzePlanResponse_DDLParse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AnalyzePlanResponse_DDLParse) ProtoMessage() {}
+
+func (x *AnalyzePlanResponse_DDLParse) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[39]
+	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 AnalyzePlanResponse_DDLParse.ProtoReflect.Descriptor instead.
+func (*AnalyzePlanResponse_DDLParse) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{3, 7}
+}
+
+func (x *AnalyzePlanResponse_DDLParse) GetParsed() *DataType {
+	if x != nil {
+		return x.Parsed
+	}
+	return nil
+}
+
+type AnalyzePlanResponse_SameSemantics struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Result bool `protobuf:"varint,1,opt,name=result,proto3" json:"result,omitempty"`
+}
+
+func (x *AnalyzePlanResponse_SameSemantics) Reset() {
+	*x = AnalyzePlanResponse_SameSemantics{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[40]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AnalyzePlanResponse_SameSemantics) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AnalyzePlanResponse_SameSemantics) ProtoMessage() {}
+
+func (x *AnalyzePlanResponse_SameSemantics) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[40]
+	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 AnalyzePlanResponse_SameSemantics.ProtoReflect.Descriptor instead.
+func (*AnalyzePlanResponse_SameSemantics) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{3, 8}
+}
+
+func (x *AnalyzePlanResponse_SameSemantics) GetResult() bool {
+	if x != nil {
+		return x.Result
+	}
+	return false
+}
+
+type AnalyzePlanResponse_SemanticHash struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Result int32 `protobuf:"varint,1,opt,name=result,proto3" json:"result,omitempty"`
+}
+
+func (x *AnalyzePlanResponse_SemanticHash) Reset() {
+	*x = AnalyzePlanResponse_SemanticHash{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[41]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AnalyzePlanResponse_SemanticHash) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AnalyzePlanResponse_SemanticHash) ProtoMessage() {}
+
+func (x *AnalyzePlanResponse_SemanticHash) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[41]
+	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 AnalyzePlanResponse_SemanticHash.ProtoReflect.Descriptor instead.
+func (*AnalyzePlanResponse_SemanticHash) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{3, 9}
+}
+
+func (x *AnalyzePlanResponse_SemanticHash) GetResult() int32 {
+	if x != nil {
+		return x.Result
+	}
+	return 0
+}
+
+type AnalyzePlanResponse_Persist struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *AnalyzePlanResponse_Persist) Reset() {
+	*x = AnalyzePlanResponse_Persist{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[42]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AnalyzePlanResponse_Persist) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AnalyzePlanResponse_Persist) ProtoMessage() {}
+
+func (x *AnalyzePlanResponse_Persist) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[42]
+	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 AnalyzePlanResponse_Persist.ProtoReflect.Descriptor instead.
+func (*AnalyzePlanResponse_Persist) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{3, 10}
+}
+
+type AnalyzePlanResponse_Unpersist struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *AnalyzePlanResponse_Unpersist) Reset() {
+	*x = AnalyzePlanResponse_Unpersist{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[43]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AnalyzePlanResponse_Unpersist) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AnalyzePlanResponse_Unpersist) ProtoMessage() {}
+
+func (x *AnalyzePlanResponse_Unpersist) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[43]
+	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 AnalyzePlanResponse_Unpersist.ProtoReflect.Descriptor instead.
+func (*AnalyzePlanResponse_Unpersist) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{3, 11}
+}
+
+type AnalyzePlanResponse_GetStorageLevel struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// (Required) The StorageLevel as a result of get_storage_level request.
+	StorageLevel *StorageLevel `protobuf:"bytes,1,opt,name=storage_level,json=storageLevel,proto3" json:"storage_level,omitempty"`
+}
+
+func (x *AnalyzePlanResponse_GetStorageLevel) Reset() {
+	*x = AnalyzePlanResponse_GetStorageLevel{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[44]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AnalyzePlanResponse_GetStorageLevel) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AnalyzePlanResponse_GetStorageLevel) ProtoMessage() {}
+
+func (x *AnalyzePlanResponse_GetStorageLevel) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[44]
+	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 AnalyzePlanResponse_GetStorageLevel.ProtoReflect.Descriptor instead.
+func (*AnalyzePlanResponse_GetStorageLevel) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{3, 12}
+}
+
+func (x *AnalyzePlanResponse_GetStorageLevel) GetStorageLevel() *StorageLevel {
+	if x != nil {
+		return x.StorageLevel
+	}
+	return nil
+}
+
+type ExecutePlanRequest_RequestOption struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Types that are assignable to RequestOption:
+	//
+	//	*ExecutePlanRequest_RequestOption_ReattachOptions
+	//	*ExecutePlanRequest_RequestOption_Extension
+	RequestOption isExecutePlanRequest_RequestOption_RequestOption `protobuf_oneof:"request_option"`
+}
+
+func (x *ExecutePlanRequest_RequestOption) Reset() {
+	*x = ExecutePlanRequest_RequestOption{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[45]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ExecutePlanRequest_RequestOption) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ExecutePlanRequest_RequestOption) ProtoMessage() {}
+
+func (x *ExecutePlanRequest_RequestOption) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[45]
+	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 ExecutePlanRequest_RequestOption.ProtoReflect.Descriptor instead.
+func (*ExecutePlanRequest_RequestOption) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{4, 0}
+}
+
+func (m *ExecutePlanRequest_RequestOption) GetRequestOption() isExecutePlanRequest_RequestOption_RequestOption {
+	if m != nil {
+		return m.RequestOption
+	}
+	return nil
+}
+
+func (x *ExecutePlanRequest_RequestOption) GetReattachOptions() *ReattachOptions {
+	if x, ok := x.GetRequestOption().(*ExecutePlanRequest_RequestOption_ReattachOptions); ok {
+		return x.ReattachOptions
+	}
+	return nil
+}
+
+func (x *ExecutePlanRequest_RequestOption) GetExtension() *anypb.Any {
+	if x, ok := x.GetRequestOption().(*ExecutePlanRequest_RequestOption_Extension); ok {
+		return x.Extension
+	}
+	return nil
+}
+
+type isExecutePlanRequest_RequestOption_RequestOption interface {
+	isExecutePlanRequest_RequestOption_RequestOption()
+}
+
+type ExecutePlanRequest_RequestOption_ReattachOptions struct {
+	ReattachOptions *ReattachOptions `protobuf:"bytes,1,opt,name=reattach_options,json=reattachOptions,proto3,oneof"`
+}
+
+type ExecutePlanRequest_RequestOption_Extension struct {
+	// Extension type for request options
+	Extension *anypb.Any `protobuf:"bytes,999,opt,name=extension,proto3,oneof"`
+}
+
+func (*ExecutePlanRequest_RequestOption_ReattachOptions) isExecutePlanRequest_RequestOption_RequestOption() {
+}
+
+func (*ExecutePlanRequest_RequestOption_Extension) isExecutePlanRequest_RequestOption_RequestOption() {
+}
+
+// A SQL command returns an opaque Relation that can be directly used as input for the next
+// call.
+type ExecutePlanResponse_SqlCommandResult struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Relation *Relation `protobuf:"bytes,1,opt,name=relation,proto3" json:"relation,omitempty"`
+}
+
+func (x *ExecutePlanResponse_SqlCommandResult) Reset() {
+	*x = ExecutePlanResponse_SqlCommandResult{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[46]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ExecutePlanResponse_SqlCommandResult) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ExecutePlanResponse_SqlCommandResult) ProtoMessage() {}
+
+func (x *ExecutePlanResponse_SqlCommandResult) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[46]
+	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 ExecutePlanResponse_SqlCommandResult.ProtoReflect.Descriptor instead.
+func (*ExecutePlanResponse_SqlCommandResult) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{5, 0}
+}
+
+func (x *ExecutePlanResponse_SqlCommandResult) GetRelation() *Relation {
+	if x != nil {
+		return x.Relation
+	}
+	return nil
+}
+
+// Batch results of metrics.
+type ExecutePlanResponse_ArrowBatch struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	RowCount int64  `protobuf:"varint,1,opt,name=row_count,json=rowCount,proto3" json:"row_count,omitempty"`
+	Data     []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
+}
+
+func (x *ExecutePlanResponse_ArrowBatch) Reset() {
+	*x = ExecutePlanResponse_ArrowBatch{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[47]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ExecutePlanResponse_ArrowBatch) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ExecutePlanResponse_ArrowBatch) ProtoMessage() {}
+
+func (x *ExecutePlanResponse_ArrowBatch) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[47]
+	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 ExecutePlanResponse_ArrowBatch.ProtoReflect.Descriptor instead.
+func (*ExecutePlanResponse_ArrowBatch) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{5, 1}
+}
+
+func (x *ExecutePlanResponse_ArrowBatch) GetRowCount() int64 {
+	if x != nil {
+		return x.RowCount
+	}
+	return 0
+}
+
+func (x *ExecutePlanResponse_ArrowBatch) GetData() []byte {
+	if x != nil {
+		return x.Data
+	}
+	return nil
+}
+
+type ExecutePlanResponse_Metrics struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Metrics []*ExecutePlanResponse_Metrics_MetricObject `protobuf:"bytes,1,rep,name=metrics,proto3" json:"metrics,omitempty"`
+}
+
+func (x *ExecutePlanResponse_Metrics) Reset() {
+	*x = ExecutePlanResponse_Metrics{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[48]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ExecutePlanResponse_Metrics) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ExecutePlanResponse_Metrics) ProtoMessage() {}
+
+func (x *ExecutePlanResponse_Metrics) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[48]
+	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 ExecutePlanResponse_Metrics.ProtoReflect.Descriptor instead.
+func (*ExecutePlanResponse_Metrics) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{5, 2}
+}
+
+func (x *ExecutePlanResponse_Metrics) GetMetrics() []*ExecutePlanResponse_Metrics_MetricObject {
+	if x != nil {
+		return x.Metrics
+	}
+	return nil
+}
+
+type ExecutePlanResponse_ObservedMetrics struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Name   string                `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	Values []*Expression_Literal `protobuf:"bytes,2,rep,name=values,proto3" json:"values,omitempty"`
+}
+
+func (x *ExecutePlanResponse_ObservedMetrics) Reset() {
+	*x = ExecutePlanResponse_ObservedMetrics{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[49]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ExecutePlanResponse_ObservedMetrics) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ExecutePlanResponse_ObservedMetrics) ProtoMessage() {}
+
+func (x *ExecutePlanResponse_ObservedMetrics) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[49]
+	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 ExecutePlanResponse_ObservedMetrics.ProtoReflect.Descriptor instead.
+func (*ExecutePlanResponse_ObservedMetrics) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{5, 3}
+}
+
+func (x *ExecutePlanResponse_ObservedMetrics) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *ExecutePlanResponse_ObservedMetrics) GetValues() []*Expression_Literal {
+	if x != nil {
+		return x.Values
+	}
+	return nil
+}
+
+type ExecutePlanResponse_ResultComplete struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *ExecutePlanResponse_ResultComplete) Reset() {
+	*x = ExecutePlanResponse_ResultComplete{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[50]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ExecutePlanResponse_ResultComplete) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ExecutePlanResponse_ResultComplete) ProtoMessage() {}
+
+func (x *ExecutePlanResponse_ResultComplete) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[50]
+	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 ExecutePlanResponse_ResultComplete.ProtoReflect.Descriptor instead.
+func (*ExecutePlanResponse_ResultComplete) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{5, 4}
+}
+
+type ExecutePlanResponse_Metrics_MetricObject struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Name             string                                              `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	PlanId           int64                                               `protobuf:"varint,2,opt,name=plan_id,json=planId,proto3" json:"plan_id,omitempty"`
+	Parent           int64                                               `protobuf:"varint,3,opt,name=parent,proto3" json:"parent,omitempty"`
+	ExecutionMetrics map[string]*ExecutePlanResponse_Metrics_MetricValue `protobuf:"bytes,4,rep,name=execution_metrics,json=executionMetrics,proto3" json:"execution_metrics,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+}
+
+func (x *ExecutePlanResponse_Metrics_MetricObject) Reset() {
+	*x = ExecutePlanResponse_Metrics_MetricObject{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[51]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ExecutePlanResponse_Metrics_MetricObject) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ExecutePlanResponse_Metrics_MetricObject) ProtoMessage() {}
+
+func (x *ExecutePlanResponse_Metrics_MetricObject) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[51]
+	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 ExecutePlanResponse_Metrics_MetricObject.ProtoReflect.Descriptor instead.
+func (*ExecutePlanResponse_Metrics_MetricObject) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{5, 2, 0}
+}
+
+func (x *ExecutePlanResponse_Metrics_MetricObject) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *ExecutePlanResponse_Metrics_MetricObject) GetPlanId() int64 {
+	if x != nil {
+		return x.PlanId
+	}
+	return 0
+}
+
+func (x *ExecutePlanResponse_Metrics_MetricObject) GetParent() int64 {
+	if x != nil {
+		return x.Parent
+	}
+	return 0
+}
+
+func (x *ExecutePlanResponse_Metrics_MetricObject) GetExecutionMetrics() map[string]*ExecutePlanResponse_Metrics_MetricValue {
+	if x != nil {
+		return x.ExecutionMetrics
+	}
+	return nil
+}
+
+type ExecutePlanResponse_Metrics_MetricValue struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Name       string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	Value      int64  `protobuf:"varint,2,opt,name=value,proto3" json:"value,omitempty"`
+	MetricType string `protobuf:"bytes,3,opt,name=metric_type,json=metricType,proto3" json:"metric_type,omitempty"`
+}
+
+func (x *ExecutePlanResponse_Metrics_MetricValue) Reset() {
+	*x = ExecutePlanResponse_Metrics_MetricValue{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[52]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ExecutePlanResponse_Metrics_MetricValue) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ExecutePlanResponse_Metrics_MetricValue) ProtoMessage() {}
+
+func (x *ExecutePlanResponse_Metrics_MetricValue) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[52]
+	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 ExecutePlanResponse_Metrics_MetricValue.ProtoReflect.Descriptor instead.
+func (*ExecutePlanResponse_Metrics_MetricValue) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{5, 2, 1}
+}
+
+func (x *ExecutePlanResponse_Metrics_MetricValue) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *ExecutePlanResponse_Metrics_MetricValue) GetValue() int64 {
+	if x != nil {
+		return x.Value
+	}
+	return 0
+}
+
+func (x *ExecutePlanResponse_Metrics_MetricValue) GetMetricType() string {
+	if x != nil {
+		return x.MetricType
+	}
+	return ""
+}
+
+type ConfigRequest_Operation struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Types that are assignable to OpType:
+	//
+	//	*ConfigRequest_Operation_Set
+	//	*ConfigRequest_Operation_Get
+	//	*ConfigRequest_Operation_GetWithDefault
+	//	*ConfigRequest_Operation_GetOption
+	//	*ConfigRequest_Operation_GetAll
+	//	*ConfigRequest_Operation_Unset
+	//	*ConfigRequest_Operation_IsModifiable
+	OpType isConfigRequest_Operation_OpType `protobuf_oneof:"op_type"`
+}
+
+func (x *ConfigRequest_Operation) Reset() {
+	*x = ConfigRequest_Operation{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[54]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ConfigRequest_Operation) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ConfigRequest_Operation) ProtoMessage() {}
+
+func (x *ConfigRequest_Operation) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[54]
+	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 ConfigRequest_Operation.ProtoReflect.Descriptor instead.
+func (*ConfigRequest_Operation) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{7, 0}
+}
+
+func (m *ConfigRequest_Operation) GetOpType() isConfigRequest_Operation_OpType {
+	if m != nil {
+		return m.OpType
+	}
+	return nil
+}
+
+func (x *ConfigRequest_Operation) GetSet() *ConfigRequest_Set {
+	if x, ok := x.GetOpType().(*ConfigRequest_Operation_Set); ok {
+		return x.Set
+	}
+	return nil
+}
+
+func (x *ConfigRequest_Operation) GetGet() *ConfigRequest_Get {
+	if x, ok := x.GetOpType().(*ConfigRequest_Operation_Get); ok {
+		return x.Get
+	}
+	return nil
+}
+
+func (x *ConfigRequest_Operation) GetGetWithDefault() *ConfigRequest_GetWithDefault {
+	if x, ok := x.GetOpType().(*ConfigRequest_Operation_GetWithDefault); ok {
+		return x.GetWithDefault
+	}
+	return nil
+}
+
+func (x *ConfigRequest_Operation) GetGetOption() *ConfigRequest_GetOption {
+	if x, ok := x.GetOpType().(*ConfigRequest_Operation_GetOption); ok {
+		return x.GetOption
+	}
+	return nil
+}
+
+func (x *ConfigRequest_Operation) GetGetAll() *ConfigRequest_GetAll {
+	if x, ok := x.GetOpType().(*ConfigRequest_Operation_GetAll); ok {
+		return x.GetAll
+	}
+	return nil
+}
+
+func (x *ConfigRequest_Operation) GetUnset() *ConfigRequest_Unset {
+	if x, ok := x.GetOpType().(*ConfigRequest_Operation_Unset); ok {
+		return x.Unset
+	}
+	return nil
+}
+
+func (x *ConfigRequest_Operation) GetIsModifiable() *ConfigRequest_IsModifiable {
+	if x, ok := x.GetOpType().(*ConfigRequest_Operation_IsModifiable); ok {
+		return x.IsModifiable
+	}
+	return nil
+}
+
+type isConfigRequest_Operation_OpType interface {
+	isConfigRequest_Operation_OpType()
+}
+
+type ConfigRequest_Operation_Set struct {
+	Set *ConfigRequest_Set `protobuf:"bytes,1,opt,name=set,proto3,oneof"`
+}
+
+type ConfigRequest_Operation_Get struct {
+	Get *ConfigRequest_Get `protobuf:"bytes,2,opt,name=get,proto3,oneof"`
+}
+
+type ConfigRequest_Operation_GetWithDefault struct {
+	GetWithDefault *ConfigRequest_GetWithDefault `protobuf:"bytes,3,opt,name=get_with_default,json=getWithDefault,proto3,oneof"`
+}
+
+type ConfigRequest_Operation_GetOption struct {
+	GetOption *ConfigRequest_GetOption `protobuf:"bytes,4,opt,name=get_option,json=getOption,proto3,oneof"`
+}
+
+type ConfigRequest_Operation_GetAll struct {
+	GetAll *ConfigRequest_GetAll `protobuf:"bytes,5,opt,name=get_all,json=getAll,proto3,oneof"`
+}
+
+type ConfigRequest_Operation_Unset struct {
+	Unset *ConfigRequest_Unset `protobuf:"bytes,6,opt,name=unset,proto3,oneof"`
+}
+
+type ConfigRequest_Operation_IsModifiable struct {
+	IsModifiable *ConfigRequest_IsModifiable `protobuf:"bytes,7,opt,name=is_modifiable,json=isModifiable,proto3,oneof"`
+}
+
+func (*ConfigRequest_Operation_Set) isConfigRequest_Operation_OpType() {}
+
+func (*ConfigRequest_Operation_Get) isConfigRequest_Operation_OpType() {}
+
+func (*ConfigRequest_Operation_GetWithDefault) isConfigRequest_Operation_OpType() {}
+
+func (*ConfigRequest_Operation_GetOption) isConfigRequest_Operation_OpType() {}
+
+func (*ConfigRequest_Operation_GetAll) isConfigRequest_Operation_OpType() {}
+
+func (*ConfigRequest_Operation_Unset) isConfigRequest_Operation_OpType() {}
+
+func (*ConfigRequest_Operation_IsModifiable) isConfigRequest_Operation_OpType() {}
+
+type ConfigRequest_Set struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// (Required) The config key-value pairs to set.
+	Pairs []*KeyValue `protobuf:"bytes,1,rep,name=pairs,proto3" json:"pairs,omitempty"`
+}
+
+func (x *ConfigRequest_Set) Reset() {
+	*x = ConfigRequest_Set{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[55]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ConfigRequest_Set) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ConfigRequest_Set) ProtoMessage() {}
+
+func (x *ConfigRequest_Set) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[55]
+	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 ConfigRequest_Set.ProtoReflect.Descriptor instead.
+func (*ConfigRequest_Set) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{7, 1}
+}
+
+func (x *ConfigRequest_Set) GetPairs() []*KeyValue {
+	if x != nil {
+		return x.Pairs
+	}
+	return nil
+}
+
+type ConfigRequest_Get struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// (Required) The config keys to get.
+	Keys []string `protobuf:"bytes,1,rep,name=keys,proto3" json:"keys,omitempty"`
+}
+
+func (x *ConfigRequest_Get) Reset() {
+	*x = ConfigRequest_Get{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[56]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ConfigRequest_Get) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ConfigRequest_Get) ProtoMessage() {}
+
+func (x *ConfigRequest_Get) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[56]
+	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 ConfigRequest_Get.ProtoReflect.Descriptor instead.
+func (*ConfigRequest_Get) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{7, 2}
+}
+
+func (x *ConfigRequest_Get) GetKeys() []string {
+	if x != nil {
+		return x.Keys
+	}
+	return nil
+}
+
+type ConfigRequest_GetWithDefault struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// (Required) The config key-value paris to get. The value will be used as the default value.
+	Pairs []*KeyValue `protobuf:"bytes,1,rep,name=pairs,proto3" json:"pairs,omitempty"`
+}
+
+func (x *ConfigRequest_GetWithDefault) Reset() {
+	*x = ConfigRequest_GetWithDefault{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[57]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ConfigRequest_GetWithDefault) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ConfigRequest_GetWithDefault) ProtoMessage() {}
+
+func (x *ConfigRequest_GetWithDefault) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[57]
+	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 ConfigRequest_GetWithDefault.ProtoReflect.Descriptor instead.
+func (*ConfigRequest_GetWithDefault) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{7, 3}
+}
+
+func (x *ConfigRequest_GetWithDefault) GetPairs() []*KeyValue {
+	if x != nil {
+		return x.Pairs
+	}
+	return nil
+}
+
+type ConfigRequest_GetOption struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// (Required) The config keys to get optionally.
+	Keys []string `protobuf:"bytes,1,rep,name=keys,proto3" json:"keys,omitempty"`
+}
+
+func (x *ConfigRequest_GetOption) Reset() {
+	*x = ConfigRequest_GetOption{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[58]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ConfigRequest_GetOption) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ConfigRequest_GetOption) ProtoMessage() {}
+
+func (x *ConfigRequest_GetOption) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[58]
+	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 ConfigRequest_GetOption.ProtoReflect.Descriptor instead.
+func (*ConfigRequest_GetOption) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{7, 4}
+}
+
+func (x *ConfigRequest_GetOption) GetKeys() []string {
+	if x != nil {
+		return x.Keys
+	}
+	return nil
+}
+
+type ConfigRequest_GetAll struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// (Optional) The prefix of the config key to get.
+	Prefix *string `protobuf:"bytes,1,opt,name=prefix,proto3,oneof" json:"prefix,omitempty"`
+}
+
+func (x *ConfigRequest_GetAll) Reset() {
+	*x = ConfigRequest_GetAll{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[59]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ConfigRequest_GetAll) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ConfigRequest_GetAll) ProtoMessage() {}
+
+func (x *ConfigRequest_GetAll) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[59]
+	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 ConfigRequest_GetAll.ProtoReflect.Descriptor instead.
+func (*ConfigRequest_GetAll) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{7, 5}
+}
+
+func (x *ConfigRequest_GetAll) GetPrefix() string {
+	if x != nil && x.Prefix != nil {
+		return *x.Prefix
+	}
+	return ""
+}
+
+type ConfigRequest_Unset struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// (Required) The config keys to unset.
+	Keys []string `protobuf:"bytes,1,rep,name=keys,proto3" json:"keys,omitempty"`
+}
+
+func (x *ConfigRequest_Unset) Reset() {
+	*x = ConfigRequest_Unset{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[60]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ConfigRequest_Unset) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ConfigRequest_Unset) ProtoMessage() {}
+
+func (x *ConfigRequest_Unset) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[60]
+	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 ConfigRequest_Unset.ProtoReflect.Descriptor instead.
+func (*ConfigRequest_Unset) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{7, 6}
+}
+
+func (x *ConfigRequest_Unset) GetKeys() []string {
+	if x != nil {
+		return x.Keys
+	}
+	return nil
+}
+
+type ConfigRequest_IsModifiable struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// (Required) The config keys to check the config is modifiable.
+	Keys []string `protobuf:"bytes,1,rep,name=keys,proto3" json:"keys,omitempty"`
+}
+
+func (x *ConfigRequest_IsModifiable) Reset() {
+	*x = ConfigRequest_IsModifiable{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[61]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ConfigRequest_IsModifiable) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ConfigRequest_IsModifiable) ProtoMessage() {}
+
+func (x *ConfigRequest_IsModifiable) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[61]
+	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 ConfigRequest_IsModifiable.ProtoReflect.Descriptor instead.
+func (*ConfigRequest_IsModifiable) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{7, 7}
+}
+
+func (x *ConfigRequest_IsModifiable) GetKeys() []string {
+	if x != nil {
+		return x.Keys
+	}
+	return nil
+}
+
+// A chunk of an Artifact.
+type AddArtifactsRequest_ArtifactChunk struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Data chunk.
+	Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"`
+	// CRC to allow server to verify integrity of the chunk.
+	Crc int64 `protobuf:"varint,2,opt,name=crc,proto3" json:"crc,omitempty"`
+}
+
+func (x *AddArtifactsRequest_ArtifactChunk) Reset() {
+	*x = AddArtifactsRequest_ArtifactChunk{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[62]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AddArtifactsRequest_ArtifactChunk) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AddArtifactsRequest_ArtifactChunk) ProtoMessage() {}
+
+func (x *AddArtifactsRequest_ArtifactChunk) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[62]
+	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 AddArtifactsRequest_ArtifactChunk.ProtoReflect.Descriptor instead.
+func (*AddArtifactsRequest_ArtifactChunk) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{9, 0}
+}
+
+func (x *AddArtifactsRequest_ArtifactChunk) GetData() []byte {
+	if x != nil {
+		return x.Data
+	}
+	return nil
+}
+
+func (x *AddArtifactsRequest_ArtifactChunk) GetCrc() int64 {
+	if x != nil {
+		return x.Crc
+	}
+	return 0
+}
+
+// An artifact that is contained in a single `ArtifactChunk`.
+// Generally, this message represents tiny artifacts such as REPL-generated class files.
+type AddArtifactsRequest_SingleChunkArtifact struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The name of the artifact is expected in the form of a "Relative Path" that is made up of a
+	// sequence of directories and the final file element.
+	// Examples of "Relative Path"s: "jars/test.jar", "classes/xyz.class", "abc.xyz", "a/b/X.jar".
+	// The server is expected to maintain the hierarchy of files as defined by their name. (i.e
+	// The relative path of the file on the server's filesystem will be the same as the name of
+	// the provided artifact)
+	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	// A single data chunk.
+	Data *AddArtifactsRequest_ArtifactChunk `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
+}
+
+func (x *AddArtifactsRequest_SingleChunkArtifact) Reset() {
+	*x = AddArtifactsRequest_SingleChunkArtifact{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[63]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AddArtifactsRequest_SingleChunkArtifact) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AddArtifactsRequest_SingleChunkArtifact) ProtoMessage() {}
+
+func (x *AddArtifactsRequest_SingleChunkArtifact) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[63]
+	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 AddArtifactsRequest_SingleChunkArtifact.ProtoReflect.Descriptor instead.
+func (*AddArtifactsRequest_SingleChunkArtifact) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{9, 1}
+}
+
+func (x *AddArtifactsRequest_SingleChunkArtifact) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *AddArtifactsRequest_SingleChunkArtifact) GetData() *AddArtifactsRequest_ArtifactChunk {
+	if x != nil {
+		return x.Data
+	}
+	return nil
+}
+
+// A number of `SingleChunkArtifact` batched into a single RPC.
+type AddArtifactsRequest_Batch struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Artifacts []*AddArtifactsRequest_SingleChunkArtifact `protobuf:"bytes,1,rep,name=artifacts,proto3" json:"artifacts,omitempty"`
+}
+
+func (x *AddArtifactsRequest_Batch) Reset() {
+	*x = AddArtifactsRequest_Batch{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[64]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AddArtifactsRequest_Batch) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AddArtifactsRequest_Batch) ProtoMessage() {}
+
+func (x *AddArtifactsRequest_Batch) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[64]
+	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 AddArtifactsRequest_Batch.ProtoReflect.Descriptor instead.
+func (*AddArtifactsRequest_Batch) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{9, 2}
+}
+
+func (x *AddArtifactsRequest_Batch) GetArtifacts() []*AddArtifactsRequest_SingleChunkArtifact {
+	if x != nil {
+		return x.Artifacts
+	}
+	return nil
+}
+
+// Signals the beginning/start of a chunked artifact.
+// A large artifact is transferred through a payload of `BeginChunkedArtifact` followed by a
+// sequence of `ArtifactChunk`s.
+type AddArtifactsRequest_BeginChunkedArtifact struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Name of the artifact undergoing chunking. Follows the same conventions as the `name` in
+	// the `Artifact` message.
+	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	// Total size of the artifact in bytes.
+	TotalBytes int64 `protobuf:"varint,2,opt,name=total_bytes,json=totalBytes,proto3" json:"total_bytes,omitempty"`
+	// Number of chunks the artifact is split into.
+	// This includes the `initial_chunk`.
+	NumChunks int64 `protobuf:"varint,3,opt,name=num_chunks,json=numChunks,proto3" json:"num_chunks,omitempty"`
+	// The first/initial chunk.
+	InitialChunk *AddArtifactsRequest_ArtifactChunk `protobuf:"bytes,4,opt,name=initial_chunk,json=initialChunk,proto3" json:"initial_chunk,omitempty"`
+}
+
+func (x *AddArtifactsRequest_BeginChunkedArtifact) Reset() {
+	*x = AddArtifactsRequest_BeginChunkedArtifact{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[65]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AddArtifactsRequest_BeginChunkedArtifact) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AddArtifactsRequest_BeginChunkedArtifact) ProtoMessage() {}
+
+func (x *AddArtifactsRequest_BeginChunkedArtifact) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[65]
+	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 AddArtifactsRequest_BeginChunkedArtifact.ProtoReflect.Descriptor instead.
+func (*AddArtifactsRequest_BeginChunkedArtifact) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{9, 3}
+}
+
+func (x *AddArtifactsRequest_BeginChunkedArtifact) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *AddArtifactsRequest_BeginChunkedArtifact) GetTotalBytes() int64 {
+	if x != nil {
+		return x.TotalBytes
+	}
+	return 0
+}
+
+func (x *AddArtifactsRequest_BeginChunkedArtifact) GetNumChunks() int64 {
+	if x != nil {
+		return x.NumChunks
+	}
+	return 0
+}
+
+func (x *AddArtifactsRequest_BeginChunkedArtifact) GetInitialChunk() *AddArtifactsRequest_ArtifactChunk {
+	if x != nil {
+		return x.InitialChunk
+	}
+	return nil
+}
+
+// Metadata of an artifact.
+type AddArtifactsResponse_ArtifactSummary struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	// Whether the CRC (Cyclic Redundancy Check) is successful on server verification.
+	// The server discards any artifact that fails the CRC.
+	// If false, the client may choose to resend the artifact specified by `name`.
+	IsCrcSuccessful bool `protobuf:"varint,2,opt,name=is_crc_successful,json=isCrcSuccessful,proto3" json:"is_crc_successful,omitempty"`
+}
+
+func (x *AddArtifactsResponse_ArtifactSummary) Reset() {
+	*x = AddArtifactsResponse_ArtifactSummary{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[66]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AddArtifactsResponse_ArtifactSummary) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AddArtifactsResponse_ArtifactSummary) ProtoMessage() {}
+
+func (x *AddArtifactsResponse_ArtifactSummary) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[66]
+	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 AddArtifactsResponse_ArtifactSummary.ProtoReflect.Descriptor instead.
+func (*AddArtifactsResponse_ArtifactSummary) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{10, 0}
+}
+
+func (x *AddArtifactsResponse_ArtifactSummary) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *AddArtifactsResponse_ArtifactSummary) GetIsCrcSuccessful() bool {
+	if x != nil {
+		return x.IsCrcSuccessful
+	}
+	return false
+}
+
+type ArtifactStatusesResponse_ArtifactStatus struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Exists or not particular artifact at the server.
+	Exists bool `protobuf:"varint,1,opt,name=exists,proto3" json:"exists,omitempty"`
+}
+
+func (x *ArtifactStatusesResponse_ArtifactStatus) Reset() {
+	*x = ArtifactStatusesResponse_ArtifactStatus{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[67]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ArtifactStatusesResponse_ArtifactStatus) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ArtifactStatusesResponse_ArtifactStatus) ProtoMessage() {}
+
+func (x *ArtifactStatusesResponse_ArtifactStatus) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[67]
+	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 ArtifactStatusesResponse_ArtifactStatus.ProtoReflect.Descriptor instead.
+func (*ArtifactStatusesResponse_ArtifactStatus) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{12, 0}
+}
+
+func (x *ArtifactStatusesResponse_ArtifactStatus) GetExists() bool {
+	if x != nil {
+		return x.Exists
+	}
+	return false
+}
+
+// Release and close operation completely.
+// This will also interrupt the query if it is running execution, and wait for it to be torn down.
+type ReleaseExecuteRequest_ReleaseAll struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *ReleaseExecuteRequest_ReleaseAll) Reset() {
+	*x = ReleaseExecuteRequest_ReleaseAll{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[69]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ReleaseExecuteRequest_ReleaseAll) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ReleaseExecuteRequest_ReleaseAll) ProtoMessage() {}
+
+func (x *ReleaseExecuteRequest_ReleaseAll) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[69]
+	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 ReleaseExecuteRequest_ReleaseAll.ProtoReflect.Descriptor instead.
+func (*ReleaseExecuteRequest_ReleaseAll) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{17, 0}
+}
+
+// Release all responses from the operation response stream up to and including
+// the response with the given by response_id.
+// While server determines by itself how much of a buffer of responses to keep, client providing
+// explicit release calls will help reduce resource consumption.
+// Noop if response_id not found in cached responses.
+type ReleaseExecuteRequest_ReleaseUntil struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ResponseId string `protobuf:"bytes,1,opt,name=response_id,json=responseId,proto3" json:"response_id,omitempty"`
+}
+
+func (x *ReleaseExecuteRequest_ReleaseUntil) Reset() {
+	*x = ReleaseExecuteRequest_ReleaseUntil{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_spark_connect_base_proto_msgTypes[70]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ReleaseExecuteRequest_ReleaseUntil) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ReleaseExecuteRequest_ReleaseUntil) ProtoMessage() {}
+
+func (x *ReleaseExecuteRequest_ReleaseUntil) ProtoReflect() protoreflect.Message {
+	mi := &file_spark_connect_base_proto_msgTypes[70]
+	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 ReleaseExecuteRequest_ReleaseUntil.ProtoReflect.Descriptor instead.
+func (*ReleaseExecuteRequest_ReleaseUntil) Descriptor() ([]byte, []int) {
+	return file_spark_connect_base_proto_rawDescGZIP(), []int{17, 1}
+}
+
+func (x *ReleaseExecuteRequest_ReleaseUntil) GetResponseId() string {
+	if x != nil {
+		return x.ResponseId
+	}
+	return ""
+}
+
+var File_spark_connect_base_proto protoreflect.FileDescriptor
+
+var file_spark_connect_base_proto_rawDesc = []byte{
+	0x0a, 0x18, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2f,
+	0x62, 0x61, 0x73, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0d, 0x73, 0x70, 0x61, 0x72,
+	0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2f, 0x63, 0x6f, 0x6e, 0x6e,
+	0x65, 0x63, 0x74, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x1a, 0x1a, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
+	0x74, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f,
+	0x73, 0x70, 0x61, 0x72, 0x6b, 0x2f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2f, 0x65, 0x78,
+	0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a,
+	0x1d, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2f, 0x72,
+	0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19,
+	0x73, 0x70, 0x61, 0x72, 0x6b, 0x2f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2f, 0x74, 0x79,
+	0x70, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x74, 0x0a, 0x04, 0x50, 0x6c, 0x61,
+	0x6e, 0x12, 0x2d, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x17, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e,
+	0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x74,
+	0x12, 0x32, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x16, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
+	0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6d,
+	0x6d, 0x61, 0x6e, 0x64, 0x42, 0x09, 0x0a, 0x07, 0x6f, 0x70, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22,
+	0x7a, 0x0a, 0x0b, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x17,
+	0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f,
+	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72,
+	0x4e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+	0x6e, 0x73, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52,
+	0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xf5, 0x12, 0x0a, 0x12,
+	0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49,
+	0x64, 0x12, 0x3d, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78,
+	0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e,
+	0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74,
+	0x65, 0x78, 0x74, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74,
+	0x12, 0x24, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54,
+	0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61,
+	0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63,
+	0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x50, 0x6c,
+	0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
+	0x48, 0x00, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x45, 0x0a, 0x07, 0x65, 0x78,
+	0x70, 0x6c, 0x61, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x70,
+	0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x41, 0x6e, 0x61, 0x6c,
+	0x79, 0x7a, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x45,
+	0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x07, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x69,
+	0x6e, 0x12, 0x4f, 0x0a, 0x0b, 0x74, 0x72, 0x65, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
+	0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63,
+	0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x50, 0x6c,
+	0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x72, 0x65, 0x65, 0x53, 0x74,
+	0x72, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x0a, 0x74, 0x72, 0x65, 0x65, 0x53, 0x74, 0x72, 0x69,
+	0x6e, 0x67, 0x12, 0x46, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x18, 0x07,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e,
+	0x6e, 0x65, 0x63, 0x74, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x50, 0x6c, 0x61, 0x6e,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x49, 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x48,
+	0x00, 0x52, 0x07, 0x69, 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x12, 0x52, 0x0a, 0x0c, 0x69, 0x73,
+	0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x2d, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74,
+	0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x2e, 0x49, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x48,
+	0x00, 0x52, 0x0b, 0x69, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x4f,
+	0x0a, 0x0b, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x09, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e,
+	0x65, 0x63, 0x74, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65,
+	0x73, 0x48, 0x00, 0x52, 0x0a, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12,
+	0x55, 0x0a, 0x0d, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
+	0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63,
+	0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x50, 0x6c,
+	0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x70, 0x61, 0x72, 0x6b, 0x56,
+	0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x56,
+	0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x49, 0x0a, 0x09, 0x64, 0x64, 0x6c, 0x5f, 0x70, 0x61,
+	0x72, 0x73, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x73, 0x70, 0x61, 0x72,
+	0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a,
+	0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x44, 0x4c,
+	0x50, 0x61, 0x72, 0x73, 0x65, 0x48, 0x00, 0x52, 0x08, 0x64, 0x64, 0x6c, 0x50, 0x61, 0x72, 0x73,
+	0x65, 0x12, 0x58, 0x0a, 0x0e, 0x73, 0x61, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74,
+	0x69, 0x63, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x73, 0x70, 0x61, 0x72,
+	0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a,
+	0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x61, 0x6d,
+	0x65, 0x53, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x73, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x61,
+	0x6d, 0x65, 0x53, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x73, 0x12, 0x55, 0x0a, 0x0d, 0x73,
+	0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x0d, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65,
+	0x63, 0x74, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x48, 0x61,
+	0x73, 0x68, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x48, 0x61,
+	0x73, 0x68, 0x12, 0x45, 0x0a, 0x07, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x18, 0x0e, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e,
+	0x65, 0x63, 0x74, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x48, 0x00,
+	0x52, 0x07, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x09, 0x75, 0x6e, 0x70,
+	0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x73,
+	0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x41, 0x6e, 0x61,
+	0x6c, 0x79, 0x7a, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e,
+	0x55, 0x6e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x09, 0x75, 0x6e, 0x70,
+	0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x12, 0x5f, 0x0a, 0x11, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x74,
+	0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x10, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x31, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
+	0x74, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4c,
+	0x65, 0x76, 0x65, 0x6c, 0x48, 0x00, 0x52, 0x0f, 0x67, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61,
+	0x67, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x1a, 0x31, 0x0a, 0x06, 0x53, 0x63, 0x68, 0x65, 0x6d,
+	0x61, 0x12, 0x27, 0x0a, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x13, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e,
+	0x50, 0x6c, 0x61, 0x6e, 0x52, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x1a, 0xbb, 0x02, 0x0a, 0x07, 0x45,
+	0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x12, 0x27, 0x0a, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e,
+	0x6e, 0x65, 0x63, 0x74, 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x12,
+	0x58, 0x0a, 0x0c, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f,
+	0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x50, 0x6c, 0x61,
+	0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e,
+	0x2e, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x0b, 0x65, 0x78,
+	0x70, 0x6c, 0x61, 0x69, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0xac, 0x01, 0x0a, 0x0b, 0x45, 0x78,
+	0x70, 0x6c, 0x61, 0x69, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x18, 0x45, 0x58, 0x50,
+	0x4c, 0x41, 0x49, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43,
+	0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x45, 0x58, 0x50, 0x4c, 0x41,
+	0x49, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x49, 0x4d, 0x50, 0x4c, 0x45, 0x10, 0x01,
+	0x12, 0x19, 0x0a, 0x15, 0x45, 0x58, 0x50, 0x4c, 0x41, 0x49, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45,
+	0x5f, 0x45, 0x58, 0x54, 0x45, 0x4e, 0x44, 0x45, 0x44, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x45,
+	0x58, 0x50, 0x4c, 0x41, 0x49, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45,
+	0x47, 0x45, 0x4e, 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x45, 0x58, 0x50, 0x4c, 0x41, 0x49, 0x4e,
+	0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x43, 0x4f, 0x53, 0x54, 0x10, 0x04, 0x12, 0x1a, 0x0a, 0x16,
+	0x45, 0x58, 0x50, 0x4c, 0x41, 0x49, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x46, 0x4f, 0x52,
+	0x4d, 0x41, 0x54, 0x54, 0x45, 0x44, 0x10, 0x05, 0x1a, 0x5a, 0x0a, 0x0a, 0x54, 0x72, 0x65, 0x65,
+	0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x27, 0x0a, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e,
+	0x6e, 0x65, 0x63, 0x74, 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x12,
+	0x19, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00,
+	0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x6c,
+	0x65, 0x76, 0x65, 0x6c, 0x1a, 0x32, 0x0a, 0x07, 0x49, 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x12,
+	0x27, 0x0a, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e,
+	0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x50, 0x6c,
+	0x61, 0x6e, 0x52, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x1a, 0x36, 0x0a, 0x0b, 0x49, 0x73, 0x53, 0x74,
+	0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x27, 0x0a, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f,
+	0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x04, 0x70, 0x6c, 0x61, 0x6e,
+	0x1a, 0x35, 0x0a, 0x0a, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x27,
+	0x0a, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73,
+	0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x50, 0x6c, 0x61,
+	0x6e, 0x52, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x1a, 0x0e, 0x0a, 0x0c, 0x53, 0x70, 0x61, 0x72, 0x6b,
+	0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x29, 0x0a, 0x08, 0x44, 0x44, 0x4c, 0x50, 0x61,
+	0x72, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x64, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e,
+	0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x64, 0x6c, 0x53, 0x74, 0x72, 0x69,
+	0x6e, 0x67, 0x1a, 0x79, 0x0a, 0x0d, 0x53, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x6d, 0x61, 0x6e, 0x74,
+	0x69, 0x63, 0x73, 0x12, 0x34, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x6c,
+	0x61, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b,
+	0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x0a, 0x74,
+	0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x32, 0x0a, 0x0a, 0x6f, 0x74, 0x68,
+	0x65, 0x72, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e,
+	0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x50, 0x6c,
+	0x61, 0x6e, 0x52, 0x09, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x6c, 0x61, 0x6e, 0x1a, 0x37, 0x0a,
+	0x0c, 0x53, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x48, 0x61, 0x73, 0x68, 0x12, 0x27, 0x0a,
+	0x04, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x70,
+	0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x50, 0x6c, 0x61, 0x6e,
+	0x52, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x1a, 0x97, 0x01, 0x0a, 0x07, 0x50, 0x65, 0x72, 0x73, 0x69,
+	0x73, 0x74, 0x12, 0x33, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e,
+	0x6e, 0x65, 0x63, 0x74, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x72,
+	0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61,
+	0x67, 0x65, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b,
+	0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x53,
+	0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x48, 0x00, 0x52, 0x0c, 0x73,
+	0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x88, 0x01, 0x01, 0x42, 0x10,
+	0x0a, 0x0e, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c,
+	0x1a, 0x6e, 0x0a, 0x09, 0x55, 0x6e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x12, 0x33, 0x0a,
+	0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x17, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e,
+	0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x08, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x08, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x69, 0x6e, 0x67,
+	0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x69, 0x6e, 0x67,
+	0x1a, 0x46, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4c, 0x65,
+	0x76, 0x65, 0x6c, 0x12, 0x33, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f,
+	0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08,
+	0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x09, 0x0a, 0x07, 0x61, 0x6e, 0x61, 0x6c,
+	0x79, 0x7a, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x74,
+	0x79, 0x70, 0x65, 0x22, 0x99, 0x0d, 0x0a, 0x13, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x50,
+	0x6c, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73,
+	0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x06, 0x73, 0x63,
+	0x68, 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x70, 0x61,
+	0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79,
+	0x7a, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53,
+	0x63, 0x68, 0x65, 0x6d, 0x61, 0x48, 0x00, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12,
+	0x46, 0x0a, 0x07, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x2a, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74,
+	0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x07,
+	0x65, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x12, 0x50, 0x0a, 0x0b, 0x74, 0x72, 0x65, 0x65, 0x5f,
+	0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x73,
+	0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x41, 0x6e, 0x61,
+	0x6c, 0x79, 0x7a, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x2e, 0x54, 0x72, 0x65, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x0a, 0x74,
+	0x72, 0x65, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x47, 0x0a, 0x08, 0x69, 0x73, 0x5f,
+	0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x73, 0x70,
+	0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x41, 0x6e, 0x61, 0x6c,
+	0x79, 0x7a, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e,
+	0x49, 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x07, 0x69, 0x73, 0x4c, 0x6f, 0x63,
+	0x61, 0x6c, 0x12, 0x53, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69,
+	0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b,
+	0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65,
+	0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x49, 0x73, 0x53,
+	0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x73, 0x53, 0x74,
+	0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x50, 0x0a, 0x0b, 0x69, 0x6e, 0x70, 0x75, 0x74,
+	0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x73,
+	0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x41, 0x6e, 0x61,
+	0x6c, 0x79, 0x7a, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x48, 0x00, 0x52, 0x0a, 0x69,
+	0x6e, 0x70, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x56, 0x0a, 0x0d, 0x73, 0x70, 0x61,
+	0x72, 0x6b, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x2f, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74,
+	0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x70, 0x61, 0x72, 0x6b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
+	0x6e, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
+	0x6e, 0x12, 0x4a, 0x0a, 0x09, 0x64, 0x64, 0x6c, 0x5f, 0x70, 0x61, 0x72, 0x73, 0x65, 0x18, 0x09,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e,
+	0x6e, 0x65, 0x63, 0x74, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x50, 0x6c, 0x61, 0x6e,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x44, 0x4c, 0x50, 0x61, 0x72, 0x73,
+	0x65, 0x48, 0x00, 0x52, 0x08, 0x64, 0x64, 0x6c, 0x50, 0x61, 0x72, 0x73, 0x65, 0x12, 0x59, 0x0a,
+	0x0e, 0x73, 0x61, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x73, 0x18,
+	0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f,
+	0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x50, 0x6c, 0x61,
+	0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x61, 0x6d, 0x65, 0x53, 0x65,
+	0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x73, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x61, 0x6d, 0x65, 0x53,
+	0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x73, 0x12, 0x56, 0x0a, 0x0d, 0x73, 0x65, 0x6d, 0x61,
+	0x6e, 0x74, 0x69, 0x63, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x2f, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e,
+	0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x2e, 0x53, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x48, 0x61, 0x73, 0x68,
+	0x48, 0x00, 0x52, 0x0c, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x48, 0x61, 0x73, 0x68,
+	0x12, 0x46, 0x0a, 0x07, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x2a, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
+	0x74, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52,
+	0x07, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x09, 0x75, 0x6e, 0x70, 0x65,
+	0x72, 0x73, 0x69, 0x73, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x73, 0x70,
+	0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x41, 0x6e, 0x61, 0x6c,
+	0x79, 0x7a, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e,
+	0x55, 0x6e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x09, 0x75, 0x6e, 0x70,
+	0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x12, 0x60, 0x0a, 0x11, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x74,
+	0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x0e, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x32, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
+	0x74, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65,
+	0x4c, 0x65, 0x76, 0x65, 0x6c, 0x48, 0x00, 0x52, 0x0f, 0x67, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72,
+	0x61, 0x67, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x1a, 0x39, 0x0a, 0x06, 0x53, 0x63, 0x68, 0x65,
+	0x6d, 0x61, 0x12, 0x2f, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65,
+	0x63, 0x74, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x73, 0x63, 0x68,
+	0x65, 0x6d, 0x61, 0x1a, 0x30, 0x0a, 0x07, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x12, 0x25,
+	0x0a, 0x0e, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x53,
+	0x74, 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x2d, 0x0a, 0x0a, 0x54, 0x72, 0x65, 0x65, 0x53, 0x74, 0x72,
+	0x69, 0x6e, 0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x72, 0x65, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x69,
+	0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x72, 0x65, 0x65, 0x53, 0x74,
+	0x72, 0x69, 0x6e, 0x67, 0x1a, 0x24, 0x0a, 0x07, 0x49, 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x12,
+	0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x08, 0x52, 0x07, 0x69, 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x1a, 0x30, 0x0a, 0x0b, 0x49, 0x73,
+	0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f,
+	0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52,
+	0x0b, 0x69, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x1a, 0x22, 0x0a, 0x0a,
+	0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69,
+	0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73,
+	0x1a, 0x28, 0x0a, 0x0c, 0x53, 0x70, 0x61, 0x72, 0x6b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
+	0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x3b, 0x0a, 0x08, 0x44, 0x44,
+	0x4c, 0x50, 0x61, 0x72, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63,
+	0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x52,
+	0x06, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x1a, 0x27, 0x0a, 0x0d, 0x53, 0x61, 0x6d, 0x65, 0x53,
+	0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75,
+	0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
+	0x1a, 0x26, 0x0a, 0x0c, 0x53, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x48, 0x61, 0x73, 0x68,
+	0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05,
+	0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x1a, 0x09, 0x0a, 0x07, 0x50, 0x65, 0x72, 0x73,
+	0x69, 0x73, 0x74, 0x1a, 0x0b, 0x0a, 0x09, 0x55, 0x6e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74,
+	0x1a, 0x53, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4c, 0x65,
+	0x76, 0x65, 0x6c, 0x12, 0x40, 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x6c,
+	0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x73, 0x70, 0x61,
+	0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61,
+	0x67, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65,
+	0x4c, 0x65, 0x76, 0x65, 0x6c, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22,
+	0xa0, 0x04, 0x0a, 0x12, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f,
+	0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73,
+	0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x63, 0x6f,
+	0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x73, 0x70,
+	0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x55, 0x73, 0x65, 0x72,
+	0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6e,
+	0x74, 0x65, 0x78, 0x74, 0x12, 0x26, 0x0a, 0x0c, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x6f, 0x70,
+	0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x27, 0x0a, 0x04,
+	0x70, 0x6c, 0x61, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x70, 0x61,
+	0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x52,
+	0x04, 0x70, 0x6c, 0x61, 0x6e, 0x12, 0x24, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f,
+	0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0a, 0x63, 0x6c,
+	0x69, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x58, 0x0a, 0x0f, 0x72,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05,
+	0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e,
+	0x6e, 0x65, 0x63, 0x74, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x50, 0x6c, 0x61, 0x6e,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4f,
+	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4f, 0x70,
+	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x07, 0x20,
+	0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x1a, 0xa5, 0x01, 0x0a, 0x0d, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4b, 0x0a, 0x10, 0x72,
+	0x65, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f,
+	0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x52, 0x65, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x4f, 0x70,
+	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x72, 0x65, 0x61, 0x74, 0x74, 0x61, 0x63,
+	0x68, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x35, 0x0a, 0x09, 0x65, 0x78, 0x74, 0x65,
+	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41,
+	0x6e, 0x79, 0x48, 0x00, 0x52, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x42,
+	0x10, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f,
+	0x6e, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
+	0x69, 0x64, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79,
+	0x70, 0x65, 0x22, 0x99, 0x0f, 0x0a, 0x13, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x50, 0x6c,
+	0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65,
+	0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
+	0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x6f, 0x70, 0x65,
+	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x0b, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b,
+	0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x49, 0x64, 0x12, 0x50, 0x0a,
+	0x0b, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65,
+	0x63, 0x74, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x72, 0x72, 0x6f, 0x77, 0x42, 0x61, 0x74, 0x63,
+	0x68, 0x48, 0x00, 0x52, 0x0a, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12,
+	0x63, 0x0a, 0x12, 0x73, 0x71, 0x6c, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x72,
+	0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x73, 0x70,
+	0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x45, 0x78, 0x65, 0x63,
+	0x75, 0x74, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e,
+	0x53, 0x71, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74,
+	0x48, 0x00, 0x52, 0x10, 0x73, 0x71, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65,
+	0x73, 0x75, 0x6c, 0x74, 0x12, 0x7e, 0x0a, 0x23, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x73, 0x74,
+	0x72, 0x65, 0x61, 0x6d, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73,
+	0x74, 0x61, 0x72, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x2e, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
+	0x74, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x70, 0x65,
+	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c,
+	0x74, 0x48, 0x00, 0x52, 0x1f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d,
+	0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65,
+	0x73, 0x75, 0x6c, 0x74, 0x12, 0x71, 0x0a, 0x1e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e,
+	0x67, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f,
+	0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x73,
+	0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x53, 0x74, 0x72,
+	0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x61,
+	0x6e, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x1b, 0x73, 0x74, 0x72, 0x65,
+	0x61, 0x6d, 0x69, 0x6e, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e,
+	0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x6b, 0x0a, 0x1c, 0x67, 0x65, 0x74, 0x5f, 0x72,
+	0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
+	0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e,
+	0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x47, 0x65,
+	0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e,
+	0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x19, 0x67, 0x65, 0x74, 0x52, 0x65,
+	0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65,
+	0x73, 0x75, 0x6c, 0x74, 0x12, 0x87, 0x01, 0x0a, 0x26, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69,
+	0x6e, 0x67, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72,
+	0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18,
+	0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f,
+	0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x51,
+	0x75, 0x65, 0x72, 0x79, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61,
+	0x6e, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x22, 0x73, 0x74, 0x72, 0x65,
+	0x61, 0x6d, 0x69, 0x6e, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65,
+	0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x5c,
+	0x0a, 0x0f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74,
+	0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e,
+	0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x50,
+	0x6c, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75,
+	0x6c, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x72, 0x65,
+	0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x35, 0x0a, 0x09,
+	0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+	0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x04,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e,
+	0x6e, 0x65, 0x63, 0x74, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x50, 0x6c, 0x61, 0x6e,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73,
+	0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x5d, 0x0a, 0x10, 0x6f, 0x62, 0x73,
+	0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x06, 0x20,
+	0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e,
+	0x65, 0x63, 0x74, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64,
+	0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x0f, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65,
+	0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x2f, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65,
+	0x6d, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b,
+	0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70,
+	0x65, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x1a, 0x47, 0x0a, 0x10, 0x53, 0x71, 0x6c,
+	0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x33, 0x0a,
+	0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x17, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e,
+	0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x1a, 0x3d, 0x0a, 0x0a, 0x41, 0x72, 0x72, 0x6f, 0x77, 0x42, 0x61, 0x74, 0x63, 0x68,
+	0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x77, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x6f, 0x77, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x12, 0x0a,
+	0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74,
+	0x61, 0x1a, 0x85, 0x04, 0x0a, 0x07, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x51, 0x0a,
+	0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37,
+	0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x45,
+	0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69,
+	0x63, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73,
+	0x1a, 0xcc, 0x02, 0x0a, 0x0c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4f, 0x62, 0x6a, 0x65, 0x63,
+	0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x70, 0x6c, 0x61, 0x6e, 0x5f, 0x69, 0x64,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x70, 0x6c, 0x61, 0x6e, 0x49, 0x64, 0x12, 0x16,
+	0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06,
+	0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x7a, 0x0a, 0x11, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74,
+	0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28,
+	0x0b, 0x32, 0x4d, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
+	0x74, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x4d, 0x65,
+	0x74, 0x72, 0x69, 0x63, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75,
+	0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
+	0x52, 0x10, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69,
+	0x63, 0x73, 0x1a, 0x7b, 0x0a, 0x15, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4d,
+	0x65, 0x74, 0x72, 0x69, 0x63, 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, 0x4c, 0x0a,
+	0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x73,
+	0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x45, 0x78, 0x65,
+	0x63, 0x75, 0x74, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x56,
+	0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a,
+	0x58, 0x0a, 0x0b, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12,
+	0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61,
+	0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x72,
+	0x69, 0x63, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d,
+	0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x1a, 0x60, 0x0a, 0x0f, 0x4f, 0x62, 0x73,
+	0x65, 0x72, 0x76, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x12, 0x0a, 0x04,
+	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
+	0x12, 0x39, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x21, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74,
+	0x2e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x69, 0x74, 0x65,
+	0x72, 0x61, 0x6c, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, 0x10, 0x0a, 0x0e, 0x52,
+	0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x0f, 0x0a,
+	0x0d, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x41,
+	0x0a, 0x08, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
+	0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x19, 0x0a, 0x05,
+	0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x76,
+	0x61, 0x6c, 0x75, 0x65, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x76, 0x61, 0x6c, 0x75,
+	0x65, 0x22, 0x84, 0x08, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69,
+	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e,
+	0x49, 0x64, 0x12, 0x3d, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65,
+	0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b,
+	0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6e,
+	0x74, 0x65, 0x78, 0x74, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78,
+	0x74, 0x12, 0x44, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e,
+	0x6e, 0x65, 0x63, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x6f, 0x70,
+	0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e,
+	0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a,
+	0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x1a, 0xf2, 0x03,
+	0x0a, 0x09, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x03, 0x73,
+	0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b,
+	0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x74, 0x48, 0x00, 0x52, 0x03, 0x73, 0x65,
+	0x74, 0x12, 0x34, 0x0a, 0x03, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20,
+	0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x43,
+	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x74,
+	0x48, 0x00, 0x52, 0x03, 0x67, 0x65, 0x74, 0x12, 0x57, 0x0a, 0x10, 0x67, 0x65, 0x74, 0x5f, 0x77,
+	0x69, 0x74, 0x68, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x2b, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
+	0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e,
+	0x47, 0x65, 0x74, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x48, 0x00,
+	0x52, 0x0e, 0x67, 0x65, 0x74, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
+	0x12, 0x47, 0x0a, 0x0a, 0x67, 0x65, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e,
+	0x6e, 0x65, 0x63, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x09,
+	0x67, 0x65, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x07, 0x67, 0x65, 0x74,
+	0x5f, 0x61, 0x6c, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x70, 0x61,
+	0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69,
+	0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x48,
+	0x00, 0x52, 0x06, 0x67, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x12, 0x3a, 0x0a, 0x05, 0x75, 0x6e, 0x73,
+	0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b,
+	0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x55, 0x6e, 0x73, 0x65, 0x74, 0x48, 0x00, 0x52, 0x05,
+	0x75, 0x6e, 0x73, 0x65, 0x74, 0x12, 0x50, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x6d, 0x6f, 0x64, 0x69,
+	0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73,
+	0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x43, 0x6f, 0x6e,
+	0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x49, 0x73, 0x4d, 0x6f, 0x64,
+	0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x69, 0x73, 0x4d, 0x6f, 0x64,
+	0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x6f, 0x70, 0x5f, 0x74, 0x79,
+	0x70, 0x65, 0x1a, 0x34, 0x0a, 0x03, 0x53, 0x65, 0x74, 0x12, 0x2d, 0x0a, 0x05, 0x70, 0x61, 0x69,
+	0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b,
+	0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75,
+	0x65, 0x52, 0x05, 0x70, 0x61, 0x69, 0x72, 0x73, 0x1a, 0x19, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12,
+	0x12, 0x0a, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x6b,
+	0x65, 0x79, 0x73, 0x1a, 0x3f, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65,
+	0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x2d, 0x0a, 0x05, 0x70, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01,
+	0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e,
+	0x6e, 0x65, 0x63, 0x74, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x70,
+	0x61, 0x69, 0x72, 0x73, 0x1a, 0x1f, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f,
+	0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52,
+	0x04, 0x6b, 0x65, 0x79, 0x73, 0x1a, 0x30, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x12,
+	0x1b, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48,
+	0x00, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07,
+	0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x1a, 0x1b, 0x0a, 0x05, 0x55, 0x6e, 0x73, 0x65, 0x74,
+	0x12, 0x12, 0x0a, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04,
+	0x6b, 0x65, 0x79, 0x73, 0x1a, 0x22, 0x0a, 0x0c, 0x49, 0x73, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69,
+	0x61, 0x62, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03,
+	0x28, 0x09, 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x63, 0x6c, 0x69,
+	0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x7a, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x66,
+	0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65,
+	0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
+	0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x05, 0x70, 0x61, 0x69,
+	0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b,
+	0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75,
+	0x65, 0x52, 0x05, 0x70, 0x61, 0x69, 0x72, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x61, 0x72, 0x6e,
+	0x69, 0x6e, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x77, 0x61, 0x72, 0x6e,
+	0x69, 0x6e, 0x67, 0x73, 0x22, 0xe7, 0x06, 0x0a, 0x13, 0x41, 0x64, 0x64, 0x41, 0x72, 0x74, 0x69,
+	0x66, 0x61, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a,
+	0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x0c, 0x75,
+	0x73, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1a, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
+	0x74, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0b, 0x75,
+	0x73, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x24, 0x0a, 0x0b, 0x63, 0x6c,
+	0x69, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48,
+	0x01, 0x52, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01,
+	0x12, 0x40, 0x0a, 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x28, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e,
+	0x41, 0x64, 0x64, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, 0x00, 0x52, 0x05, 0x62, 0x61, 0x74,
+	0x63, 0x68, 0x12, 0x5a, 0x0a, 0x0b, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x5f, 0x63, 0x68, 0x75, 0x6e,
+	0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e,
+	0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x41, 0x64, 0x64, 0x41, 0x72, 0x74, 0x69, 0x66,
+	0x61, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x42, 0x65, 0x67, 0x69,
+	0x6e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x65, 0x64, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74,
+	0x48, 0x00, 0x52, 0x0a, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x12, 0x48,
+	0x0a, 0x05, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e,
+	0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x41, 0x64,
+	0x64, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x48,
+	0x00, 0x52, 0x05, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x1a, 0x35, 0x0a, 0x0d, 0x41, 0x72, 0x74, 0x69,
+	0x66, 0x61, 0x63, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74,
+	0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a,
+	0x03, 0x63, 0x72, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x63, 0x72, 0x63, 0x1a,
+	0x6f, 0x0a, 0x13, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x41, 0x72,
+	0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x44, 0x0a, 0x04, 0x64, 0x61,
+	0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b,
+	0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x41, 0x64, 0x64, 0x41, 0x72, 0x74, 0x69,
+	0x66, 0x61, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x72, 0x74,
+	0x69, 0x66, 0x61, 0x63, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61,
+	0x1a, 0x5d, 0x0a, 0x05, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x54, 0x0a, 0x09, 0x61, 0x72, 0x74,
+	0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x73,
+	0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x41, 0x64, 0x64,
+	0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x2e, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x41, 0x72, 0x74, 0x69,
+	0x66, 0x61, 0x63, 0x74, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x1a,
+	0xc1, 0x01, 0x0a, 0x14, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x65, 0x64,
+	0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b,
+	0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x03, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1d, 0x0a,
+	0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x03, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x12, 0x55, 0x0a, 0x0d,
+	0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x18, 0x04, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e,
+	0x65, 0x63, 0x74, 0x2e, 0x41, 0x64, 0x64, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74,
+	0x43, 0x68, 0x75, 0x6e, 0x6b, 0x52, 0x0c, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x43, 0x68,
+	0x75, 0x6e, 0x6b, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x0e,
+	0x0a, 0x0c, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0xbc,
+	0x01, 0x0a, 0x14, 0x41, 0x64, 0x64, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66,
+	0x61, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x73, 0x70, 0x61,
+	0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x41, 0x64, 0x64, 0x41, 0x72,
+	0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e,
+	0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52,
+	0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x1a, 0x51, 0x0a, 0x0f, 0x41, 0x72,
+	0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x12, 0x0a,
+	0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d,
+	0x65, 0x12, 0x2a, 0x0a, 0x11, 0x69, 0x73, 0x5f, 0x63, 0x72, 0x63, 0x5f, 0x73, 0x75, 0x63, 0x63,
+	0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x69, 0x73,
+	0x43, 0x72, 0x63, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x22, 0xc3, 0x01,
+	0x0a, 0x17, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
+	0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73,
+	0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73,
+	0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x72,
+	0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a,
+	0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x55,
+	0x73, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x72,
+	0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x24, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e,
+	0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a,
+	0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x14, 0x0a,
+	0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6e, 0x61,
+	0x6d, 0x65, 0x73, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x74,
+	0x79, 0x70, 0x65, 0x22, 0x8c, 0x02, 0x0a, 0x18, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74,
+	0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x12, 0x51, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03,
+	0x28, 0x0b, 0x32, 0x35, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65,
+	0x63, 0x74, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75,
+	0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74,
+	0x75, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75,
+	0x73, 0x65, 0x73, 0x1a, 0x28, 0x0a, 0x0e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53,
+	0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x1a, 0x73, 0x0a,
+	0x0d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 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, 0x4c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x36, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e,
+	0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63,
+	0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02,
+	0x38, 0x01, 0x22, 0xd8, 0x03, 0x0a, 0x10, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69,
+	0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73,
+	0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x63,
+	0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x73,
+	0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x55, 0x73, 0x65,
+	0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x43, 0x6f,
+	0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x24, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f,
+	0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0a, 0x63, 0x6c,
+	0x69, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x54, 0x0a, 0x0e, 0x69,
+	0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20,
+	0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e,
+	0x65, 0x63, 0x74, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x54, 0x79,
+	0x70, 0x65, 0x52, 0x0d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x54, 0x79, 0x70,
+	0x65, 0x12, 0x25, 0x0a, 0x0d, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74,
+	0x61, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0c, 0x6f, 0x70, 0x65, 0x72,
+	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x67, 0x12, 0x23, 0x0a, 0x0c, 0x6f, 0x70, 0x65, 0x72,
+	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00,
+	0x52, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x80, 0x01,
+	0x0a, 0x0d, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12,
+	0x1e, 0x0a, 0x1a, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x52, 0x55, 0x50, 0x54, 0x5f, 0x54, 0x59, 0x50,
+	0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12,
+	0x16, 0x0a, 0x12, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x52, 0x55, 0x50, 0x54, 0x5f, 0x54, 0x59, 0x50,
+	0x45, 0x5f, 0x41, 0x4c, 0x4c, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x49, 0x4e, 0x54, 0x45, 0x52,
+	0x52, 0x55, 0x50, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x54, 0x41, 0x47, 0x10, 0x02, 0x12,
+	0x1f, 0x0a, 0x1b, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x52, 0x55, 0x50, 0x54, 0x5f, 0x54, 0x59, 0x50,
+	0x45, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x49, 0x44, 0x10, 0x03,
+	0x42, 0x0b, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x42, 0x0e, 0x0a,
+	0x0c, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x5b, 0x0a,
+	0x11, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49,
+	0x64, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x65, 0x64,
+	0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x69, 0x6e, 0x74, 0x65,
+	0x72, 0x72, 0x75, 0x70, 0x74, 0x65, 0x64, 0x49, 0x64, 0x73, 0x22, 0x35, 0x0a, 0x0f, 0x52, 0x65,
+	0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x22, 0x0a,
+	0x0c, 0x72, 0x65, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x08, 0x52, 0x0c, 0x72, 0x65, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x61, 0x62, 0x6c,
+	0x65, 0x22, 0x93, 0x02, 0x0a, 0x16, 0x52, 0x65, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x45, 0x78,
+	0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a,
+	0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x0c, 0x75,
+	0x73, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1a, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
+	0x74, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0b, 0x75,
+	0x73, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x6f, 0x70,
+	0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x24, 0x0a,
+	0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01,
+	0x28, 0x09, 0x48, 0x00, 0x52, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65,
+	0x88, 0x01, 0x01, 0x12, 0x2d, 0x0a, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52,
+	0x0e, 0x6c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x49, 0x64, 0x88,
+	0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79,
+	0x70, 0x65, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x22, 0xc6, 0x03, 0x0a, 0x15, 0x52, 0x65, 0x6c, 0x65,
+	0x61, 0x73, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64,
+	0x12, 0x3d, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63,
+	0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65,
+	0x78, 0x74, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12,
+	0x21, 0x0a, 0x0c, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x49, 0x64, 0x12, 0x24, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70,
+	0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e,
+	0x74, 0x54, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x52, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x65,
+	0x61, 0x73, 0x65, 0x5f, 0x61, 0x6c, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e,
+	0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x52, 0x65,
+	0x6c, 0x65, 0x61, 0x73, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x41, 0x6c, 0x6c, 0x48, 0x00,
+	0x52, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x41, 0x6c, 0x6c, 0x12, 0x58, 0x0a, 0x0d,
+	0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x18, 0x06, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e,
+	0x65, 0x63, 0x74, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75,
+	0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73,
+	0x65, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x48, 0x00, 0x52, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73,
+	0x65, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x1a, 0x0c, 0x0a, 0x0a, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73,
+	0x65, 0x41, 0x6c, 0x6c, 0x1a, 0x2f, 0x0a, 0x0c, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x55,
+	0x6e, 0x74, 0x69, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x49, 0x64, 0x42, 0x09, 0x0a, 0x07, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65,
+	0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65,
+	0x22, 0x70, 0x0a, 0x16, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75,
+	0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65,
+	0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
+	0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0c, 0x6f, 0x70, 0x65,
+	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48,
+	0x00, 0x52, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x88, 0x01,
+	0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
+	0x69, 0x64, 0x32, 0xe7, 0x05, 0x0a, 0x13, 0x53, 0x70, 0x61, 0x72, 0x6b, 0x43, 0x6f, 0x6e, 0x6e,
+	0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x58, 0x0a, 0x0b, 0x45, 0x78,
+	0x65, 0x63, 0x75, 0x74, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x21, 0x2e, 0x73, 0x70, 0x61, 0x72,
+	0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74,
+	0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x73,
+	0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x45, 0x78, 0x65,
+	0x63, 0x75, 0x74, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x22, 0x00, 0x30, 0x01, 0x12, 0x56, 0x0a, 0x0b, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x50,
+	0x6c, 0x61, 0x6e, 0x12, 0x21, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e,
+	0x65, 0x63, 0x74, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63,
+	0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x50, 0x6c,
+	0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x47, 0x0a, 0x06,
+	0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1c, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63,
+	0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e,
+	0x6e, 0x65, 0x63, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x0c, 0x41, 0x64, 0x64, 0x41, 0x72, 0x74, 0x69,
+	0x66, 0x61, 0x63, 0x74, 0x73, 0x12, 0x22, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f,
+	0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x41, 0x64, 0x64, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63,
+	0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x73, 0x70, 0x61, 0x72,
+	0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x41, 0x64, 0x64, 0x41, 0x72, 0x74,
+	0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
+	0x28, 0x01, 0x12, 0x63, 0x0a, 0x0e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x74,
+	0x61, 0x74, 0x75, 0x73, 0x12, 0x26, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e,
+	0x6e, 0x65, 0x63, 0x74, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x74, 0x61,
+	0x74, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x73,
+	0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x41, 0x72, 0x74,
+	0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x09, 0x49, 0x6e, 0x74, 0x65, 0x72,
+	0x72, 0x75, 0x70, 0x74, 0x12, 0x1f, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e,
+	0x6e, 0x65, 0x63, 0x74, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f,
+	0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x0f, 0x52, 0x65, 0x61,
+	0x74, 0x74, 0x61, 0x63, 0x68, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x12, 0x25, 0x2e, 0x73,
+	0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x52, 0x65, 0x61,
+	0x74, 0x74, 0x61, 0x63, 0x68, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e,
+	0x65, 0x63, 0x74, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x5f, 0x0a, 0x0e, 0x52,
+	0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x12, 0x24, 0x2e,
+	0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x52, 0x65,
+	0x6c, 0x65, 0x61, 0x73, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x6e,
+	0x65, 0x63, 0x74, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75,
+	0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x36, 0x0a, 0x1e,
+	0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x72, 0x6b,
+	0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01,
+	0x5a, 0x12, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72,
+	0x61, 0x74, 0x65, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+	file_spark_connect_base_proto_rawDescOnce sync.Once
+	file_spark_connect_base_proto_rawDescData = file_spark_connect_base_proto_rawDesc
+)
+
+func file_spark_connect_base_proto_rawDescGZIP() []byte {
+	file_spark_connect_base_proto_rawDescOnce.Do(func() {
+		file_spark_connect_base_proto_rawDescData = protoimpl.X.CompressGZIP(file_spark_connect_base_proto_rawDescData)
+	})
+	return file_spark_connect_base_proto_rawDescData
+}
+
+var file_spark_connect_base_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
+var file_spark_connect_base_proto_msgTypes = make([]protoimpl.MessageInfo, 71)
+var file_spark_connect_base_proto_goTypes = []interface{}{
+	(AnalyzePlanRequest_Explain_ExplainMode)(0),      // 0: spark.connect.AnalyzePlanRequest.Explain.ExplainMode
+	(InterruptRequest_InterruptType)(0),              // 1: spark.connect.InterruptRequest.InterruptType
+	(*Plan)(nil),                                     // 2: spark.connect.Plan
+	(*UserContext)(nil),                              // 3: spark.connect.UserContext
+	(*AnalyzePlanRequest)(nil),                       // 4: spark.connect.AnalyzePlanRequest
+	(*AnalyzePlanResponse)(nil),                      // 5: spark.connect.AnalyzePlanResponse
+	(*ExecutePlanRequest)(nil),                       // 6: spark.connect.ExecutePlanRequest
+	(*ExecutePlanResponse)(nil),                      // 7: spark.connect.ExecutePlanResponse
+	(*KeyValue)(nil),                                 // 8: spark.connect.KeyValue
+	(*ConfigRequest)(nil),                            // 9: spark.connect.ConfigRequest
+	(*ConfigResponse)(nil),                           // 10: spark.connect.ConfigResponse
+	(*AddArtifactsRequest)(nil),                      // 11: spark.connect.AddArtifactsRequest
+	(*AddArtifactsResponse)(nil),                     // 12: spark.connect.AddArtifactsResponse
+	(*ArtifactStatusesRequest)(nil),                  // 13: spark.connect.ArtifactStatusesRequest
+	(*ArtifactStatusesResponse)(nil),                 // 14: spark.connect.ArtifactStatusesResponse
+	(*InterruptRequest)(nil),                         // 15: spark.connect.InterruptRequest
+	(*InterruptResponse)(nil),                        // 16: spark.connect.InterruptResponse
+	(*ReattachOptions)(nil),                          // 17: spark.connect.ReattachOptions
+	(*ReattachExecuteRequest)(nil),                   // 18: spark.connect.ReattachExecuteRequest
+	(*ReleaseExecuteRequest)(nil),                    // 19: spark.connect.ReleaseExecuteRequest
+	(*ReleaseExecuteResponse)(nil),                   // 20: spark.connect.ReleaseExecuteResponse
+	(*AnalyzePlanRequest_Schema)(nil),                // 21: spark.connect.AnalyzePlanRequest.Schema
+	(*AnalyzePlanRequest_Explain)(nil),               // 22: spark.connect.AnalyzePlanRequest.Explain
+	(*AnalyzePlanRequest_TreeString)(nil),            // 23: spark.connect.AnalyzePlanRequest.TreeString
+	(*AnalyzePlanRequest_IsLocal)(nil),               // 24: spark.connect.AnalyzePlanRequest.IsLocal
+	(*AnalyzePlanRequest_IsStreaming)(nil),           // 25: spark.connect.AnalyzePlanRequest.IsStreaming
+	(*AnalyzePlanRequest_InputFiles)(nil),            // 26: spark.connect.AnalyzePlanRequest.InputFiles
+	(*AnalyzePlanRequest_SparkVersion)(nil),          // 27: spark.connect.AnalyzePlanRequest.SparkVersion
+	(*AnalyzePlanRequest_DDLParse)(nil),              // 28: spark.connect.AnalyzePlanRequest.DDLParse
+	(*AnalyzePlanRequest_SameSemantics)(nil),         // 29: spark.connect.AnalyzePlanRequest.SameSemantics
+	(*AnalyzePlanRequest_SemanticHash)(nil),          // 30: spark.connect.AnalyzePlanRequest.SemanticHash
+	(*AnalyzePlanRequest_Persist)(nil),               // 31: spark.connect.AnalyzePlanRequest.Persist
+	(*AnalyzePlanRequest_Unpersist)(nil),             // 32: spark.connect.AnalyzePlanRequest.Unpersist
+	(*AnalyzePlanRequest_GetStorageLevel)(nil),       // 33: spark.connect.AnalyzePlanRequest.GetStorageLevel
+	(*AnalyzePlanResponse_Schema)(nil),               // 34: spark.connect.AnalyzePlanResponse.Schema
+	(*AnalyzePlanResponse_Explain)(nil),              // 35: spark.connect.AnalyzePlanResponse.Explain
+	(*AnalyzePlanResponse_TreeString)(nil),           // 36: spark.connect.AnalyzePlanResponse.TreeString
+	(*AnalyzePlanResponse_IsLocal)(nil),              // 37: spark.connect.AnalyzePlanResponse.IsLocal
+	(*AnalyzePlanResponse_IsStreaming)(nil),          // 38: spark.connect.AnalyzePlanResponse.IsStreaming
+	(*AnalyzePlanResponse_InputFiles)(nil),           // 39: spark.connect.AnalyzePlanResponse.InputFiles
+	(*AnalyzePlanResponse_SparkVersion)(nil),         // 40: spark.connect.AnalyzePlanResponse.SparkVersion
+	(*AnalyzePlanResponse_DDLParse)(nil),             // 41: spark.connect.AnalyzePlanResponse.DDLParse
+	(*AnalyzePlanResponse_SameSemantics)(nil),        // 42: spark.connect.AnalyzePlanResponse.SameSemantics
+	(*AnalyzePlanResponse_SemanticHash)(nil),         // 43: spark.connect.AnalyzePlanResponse.SemanticHash
+	(*AnalyzePlanResponse_Persist)(nil),              // 44: spark.connect.AnalyzePlanResponse.Persist
+	(*AnalyzePlanResponse_Unpersist)(nil),            // 45: spark.connect.AnalyzePlanResponse.Unpersist
+	(*AnalyzePlanResponse_GetStorageLevel)(nil),      // 46: spark.connect.AnalyzePlanResponse.GetStorageLevel
+	(*ExecutePlanRequest_RequestOption)(nil),         // 47: spark.connect.ExecutePlanRequest.RequestOption
+	(*ExecutePlanResponse_SqlCommandResult)(nil),     // 48: spark.connect.ExecutePlanResponse.SqlCommandResult
+	(*ExecutePlanResponse_ArrowBatch)(nil),           // 49: spark.connect.ExecutePlanResponse.ArrowBatch
+	(*ExecutePlanResponse_Metrics)(nil),              // 50: spark.connect.ExecutePlanResponse.Metrics
+	(*ExecutePlanResponse_ObservedMetrics)(nil),      // 51: spark.connect.ExecutePlanResponse.ObservedMetrics
+	(*ExecutePlanResponse_ResultComplete)(nil),       // 52: spark.connect.ExecutePlanResponse.ResultComplete
+	(*ExecutePlanResponse_Metrics_MetricObject)(nil), // 53: spark.connect.ExecutePlanResponse.Metrics.MetricObject
+	(*ExecutePlanResponse_Metrics_MetricValue)(nil),  // 54: spark.connect.ExecutePlanResponse.Metrics.MetricValue
+	nil,                                              // 55: spark.connect.ExecutePlanResponse.Metrics.MetricObject.ExecutionMetricsEntry
+	(*ConfigRequest_Operation)(nil),                  // 56: spark.connect.ConfigRequest.Operation
+	(*ConfigRequest_Set)(nil),                        // 57: spark.connect.ConfigRequest.Set
+	(*ConfigRequest_Get)(nil),                        // 58: spark.connect.ConfigRequest.Get
+	(*ConfigRequest_GetWithDefault)(nil),             // 59: spark.connect.ConfigRequest.GetWithDefault
+	(*ConfigRequest_GetOption)(nil),                  // 60: spark.connect.ConfigRequest.GetOption
+	(*ConfigRequest_GetAll)(nil),                     // 61: spark.connect.ConfigRequest.GetAll
+	(*ConfigRequest_Unset)(nil),                      // 62: spark.connect.ConfigRequest.Unset
+	(*ConfigRequest_IsModifiable)(nil),               // 63: spark.connect.ConfigRequest.IsModifiable
+	(*AddArtifactsRequest_ArtifactChunk)(nil),        // 64: spark.connect.AddArtifactsRequest.ArtifactChunk
+	(*AddArtifactsRequest_SingleChunkArtifact)(nil),  // 65: spark.connect.AddArtifactsRequest.SingleChunkArtifact
+	(*AddArtifactsRequest_Batch)(nil),                // 66: spark.connect.AddArtifactsRequest.Batch
+	(*AddArtifactsRequest_BeginChunkedArtifact)(nil), // 67: spark.connect.AddArtifactsRequest.BeginChunkedArtifact
+	(*AddArtifactsResponse_ArtifactSummary)(nil),     // 68: spark.connect.AddArtifactsResponse.ArtifactSummary
+	(*ArtifactStatusesResponse_ArtifactStatus)(nil),  // 69: spark.connect.ArtifactStatusesResponse.ArtifactStatus
+	nil,                                      // 70: spark.connect.ArtifactStatusesResponse.StatusesEntry
+	(*ReleaseExecuteRequest_ReleaseAll)(nil), // 71: spark.connect.ReleaseExecuteRequest.ReleaseAll
+	(*ReleaseExecuteRequest_ReleaseUntil)(nil), // 72: spark.connect.ReleaseExecuteRequest.ReleaseUntil
+	(*Relation)(nil),                           // 73: spark.connect.Relation
+	(*Command)(nil),                            // 74: spark.connect.Command
+	(*anypb.Any)(nil),                          // 75: google.protobuf.Any
+	(*WriteStreamOperationStartResult)(nil),    // 76: spark.connect.WriteStreamOperationStartResult
+	(*StreamingQueryCommandResult)(nil),        // 77: spark.connect.StreamingQueryCommandResult
+	(*GetResourcesCommandResult)(nil),          // 78: spark.connect.GetResourcesCommandResult
+	(*StreamingQueryManagerCommandResult)(nil), // 79: spark.connect.StreamingQueryManagerCommandResult
+	(*DataType)(nil),                           // 80: spark.connect.DataType
+	(*StorageLevel)(nil),                       // 81: spark.connect.StorageLevel
+	(*Expression_Literal)(nil),                 // 82: spark.connect.Expression.Literal
+}
+var file_spark_connect_base_proto_depIdxs = []int32{
+	73,  // 0: spark.connect.Plan.root:type_name -> spark.connect.Relation
+	74,  // 1: spark.connect.Plan.command:type_name -> spark.connect.Command
+	75,  // 2: spark.connect.UserContext.extensions:type_name -> google.protobuf.Any
+	3,   // 3: spark.connect.AnalyzePlanRequest.user_context:type_name -> spark.connect.UserContext
+	21,  // 4: spark.connect.AnalyzePlanRequest.schema:type_name -> spark.connect.AnalyzePlanRequest.Schema
+	22,  // 5: spark.connect.AnalyzePlanRequest.explain:type_name -> spark.connect.AnalyzePlanRequest.Explain
+	23,  // 6: spark.connect.AnalyzePlanRequest.tree_string:type_name -> spark.connect.AnalyzePlanRequest.TreeString
+	24,  // 7: spark.connect.AnalyzePlanRequest.is_local:type_name -> spark.connect.AnalyzePlanRequest.IsLocal
+	25,  // 8: spark.connect.AnalyzePlanRequest.is_streaming:type_name -> spark.connect.AnalyzePlanRequest.IsStreaming
+	26,  // 9: spark.connect.AnalyzePlanRequest.input_files:type_name -> spark.connect.AnalyzePlanRequest.InputFiles
+	27,  // 10: spark.connect.AnalyzePlanRequest.spark_version:type_name -> spark.connect.AnalyzePlanRequest.SparkVersion
+	28,  // 11: spark.connect.AnalyzePlanRequest.ddl_parse:type_name -> spark.connect.AnalyzePlanRequest.DDLParse
+	29,  // 12: spark.connect.AnalyzePlanRequest.same_semantics:type_name -> spark.connect.AnalyzePlanRequest.SameSemantics
+	30,  // 13: spark.connect.AnalyzePlanRequest.semantic_hash:type_name -> spark.connect.AnalyzePlanRequest.SemanticHash
+	31,  // 14: spark.connect.AnalyzePlanRequest.persist:type_name -> spark.connect.AnalyzePlanRequest.Persist
+	32,  // 15: spark.connect.AnalyzePlanRequest.unpersist:type_name -> spark.connect.AnalyzePlanRequest.Unpersist
+	33,  // 16: spark.connect.AnalyzePlanRequest.get_storage_level:type_name -> spark.connect.AnalyzePlanRequest.GetStorageLevel
+	34,  // 17: spark.connect.AnalyzePlanResponse.schema:type_name -> spark.connect.AnalyzePlanResponse.Schema
+	35,  // 18: spark.connect.AnalyzePlanResponse.explain:type_name -> spark.connect.AnalyzePlanResponse.Explain
+	36,  // 19: spark.connect.AnalyzePlanResponse.tree_string:type_name -> spark.connect.AnalyzePlanResponse.TreeString
+	37,  // 20: spark.connect.AnalyzePlanResponse.is_local:type_name -> spark.connect.AnalyzePlanResponse.IsLocal
+	38,  // 21: spark.connect.AnalyzePlanResponse.is_streaming:type_name -> spark.connect.AnalyzePlanResponse.IsStreaming
+	39,  // 22: spark.connect.AnalyzePlanResponse.input_files:type_name -> spark.connect.AnalyzePlanResponse.InputFiles
+	40,  // 23: spark.connect.AnalyzePlanResponse.spark_version:type_name -> spark.connect.AnalyzePlanResponse.SparkVersion
+	41,  // 24: spark.connect.AnalyzePlanResponse.ddl_parse:type_name -> spark.connect.AnalyzePlanResponse.DDLParse
+	42,  // 25: spark.connect.AnalyzePlanResponse.same_semantics:type_name -> spark.connect.AnalyzePlanResponse.SameSemantics
+	43,  // 26: spark.connect.AnalyzePlanResponse.semantic_hash:type_name -> spark.connect.AnalyzePlanResponse.SemanticHash
+	44,  // 27: spark.connect.AnalyzePlanResponse.persist:type_name -> spark.connect.AnalyzePlanResponse.Persist
+	45,  // 28: spark.connect.AnalyzePlanResponse.unpersist:type_name -> spark.connect.AnalyzePlanResponse.Unpersist
+	46,  // 29: spark.connect.AnalyzePlanResponse.get_storage_level:type_name -> spark.connect.AnalyzePlanResponse.GetStorageLevel
+	3,   // 30: spark.connect.ExecutePlanRequest.user_context:type_name -> spark.connect.UserContext
+	2,   // 31: spark.connect.ExecutePlanRequest.plan:type_name -> spark.connect.Plan
+	47,  // 32: spark.connect.ExecutePlanRequest.request_options:type_name -> spark.connect.ExecutePlanRequest.RequestOption
+	49,  // 33: spark.connect.ExecutePlanResponse.arrow_batch:type_name -> spark.connect.ExecutePlanResponse.ArrowBatch
+	48,  // 34: spark.connect.ExecutePlanResponse.sql_command_result:type_name -> spark.connect.ExecutePlanResponse.SqlCommandResult
+	76,  // 35: spark.connect.ExecutePlanResponse.write_stream_operation_start_result:type_name -> spark.connect.WriteStreamOperationStartResult
+	77,  // 36: spark.connect.ExecutePlanResponse.streaming_query_command_result:type_name -> spark.connect.StreamingQueryCommandResult
+	78,  // 37: spark.connect.ExecutePlanResponse.get_resources_command_result:type_name -> spark.connect.GetResourcesCommandResult
+	79,  // 38: spark.connect.ExecutePlanResponse.streaming_query_manager_command_result:type_name -> spark.connect.StreamingQueryManagerCommandResult
+	52,  // 39: spark.connect.ExecutePlanResponse.result_complete:type_name -> spark.connect.ExecutePlanResponse.ResultComplete
+	75,  // 40: spark.connect.ExecutePlanResponse.extension:type_name -> google.protobuf.Any
+	50,  // 41: spark.connect.ExecutePlanResponse.metrics:type_name -> spark.connect.ExecutePlanResponse.Metrics
+	51,  // 42: spark.connect.ExecutePlanResponse.observed_metrics:type_name -> spark.connect.ExecutePlanResponse.ObservedMetrics
+	80,  // 43: spark.connect.ExecutePlanResponse.schema:type_name -> spark.connect.DataType
+	3,   // 44: spark.connect.ConfigRequest.user_context:type_name -> spark.connect.UserContext
+	56,  // 45: spark.connect.ConfigRequest.operation:type_name -> spark.connect.ConfigRequest.Operation
+	8,   // 46: spark.connect.ConfigResponse.pairs:type_name -> spark.connect.KeyValue
+	3,   // 47: spark.connect.AddArtifactsRequest.user_context:type_name -> spark.connect.UserContext
+	66,  // 48: spark.connect.AddArtifactsRequest.batch:type_name -> spark.connect.AddArtifactsRequest.Batch
+	67,  // 49: spark.connect.AddArtifactsRequest.begin_chunk:type_name -> spark.connect.AddArtifactsRequest.BeginChunkedArtifact
+	64,  // 50: spark.connect.AddArtifactsRequest.chunk:type_name -> spark.connect.AddArtifactsRequest.ArtifactChunk
+	68,  // 51: spark.connect.AddArtifactsResponse.artifacts:type_name -> spark.connect.AddArtifactsResponse.ArtifactSummary
+	3,   // 52: spark.connect.ArtifactStatusesRequest.user_context:type_name -> spark.connect.UserContext
+	70,  // 53: spark.connect.ArtifactStatusesResponse.statuses:type_name -> spark.connect.ArtifactStatusesResponse.StatusesEntry
+	3,   // 54: spark.connect.InterruptRequest.user_context:type_name -> spark.connect.UserContext
+	1,   // 55: spark.connect.InterruptRequest.interrupt_type:type_name -> spark.connect.InterruptRequest.InterruptType
+	3,   // 56: spark.connect.ReattachExecuteRequest.user_context:type_name -> spark.connect.UserContext
+	3,   // 57: spark.connect.ReleaseExecuteRequest.user_context:type_name -> spark.connect.UserContext
+	71,  // 58: spark.connect.ReleaseExecuteRequest.release_all:type_name -> spark.connect.ReleaseExecuteRequest.ReleaseAll
+	72,  // 59: spark.connect.ReleaseExecuteRequest.release_until:type_name -> spark.connect.ReleaseExecuteRequest.ReleaseUntil
+	2,   // 60: spark.connect.AnalyzePlanRequest.Schema.plan:type_name -> spark.connect.Plan
+	2,   // 61: spark.connect.AnalyzePlanRequest.Explain.plan:type_name -> spark.connect.Plan
+	0,   // 62: spark.connect.AnalyzePlanRequest.Explain.explain_mode:type_name -> spark.connect.AnalyzePlanRequest.Explain.ExplainMode
+	2,   // 63: spark.connect.AnalyzePlanRequest.TreeString.plan:type_name -> spark.connect.Plan
+	2,   // 64: spark.connect.AnalyzePlanRequest.IsLocal.plan:type_name -> spark.connect.Plan
+	2,   // 65: spark.connect.AnalyzePlanRequest.IsStreaming.plan:type_name -> spark.connect.Plan
+	2,   // 66: spark.connect.AnalyzePlanRequest.InputFiles.plan:type_name -> spark.connect.Plan
+	2,   // 67: spark.connect.AnalyzePlanRequest.SameSemantics.target_plan:type_name -> spark.connect.Plan
+	2,   // 68: spark.connect.AnalyzePlanRequest.SameSemantics.other_plan:type_name -> spark.connect.Plan
+	2,   // 69: spark.connect.AnalyzePlanRequest.SemanticHash.plan:type_name -> spark.connect.Plan
+	73,  // 70: spark.connect.AnalyzePlanRequest.Persist.relation:type_name -> spark.connect.Relation
+	81,  // 71: spark.connect.AnalyzePlanRequest.Persist.storage_level:type_name -> spark.connect.StorageLevel
+	73,  // 72: spark.connect.AnalyzePlanRequest.Unpersist.relation:type_name -> spark.connect.Relation
+	73,  // 73: spark.connect.AnalyzePlanRequest.GetStorageLevel.relation:type_name -> spark.connect.Relation
+	80,  // 74: spark.connect.AnalyzePlanResponse.Schema.schema:type_name -> spark.connect.DataType
+	80,  // 75: spark.connect.AnalyzePlanResponse.DDLParse.parsed:type_name -> spark.connect.DataType
+	81,  // 76: spark.connect.AnalyzePlanResponse.GetStorageLevel.storage_level:type_name -> spark.connect.StorageLevel
+	17,  // 77: spark.connect.ExecutePlanRequest.RequestOption.reattach_options:type_name -> spark.connect.ReattachOptions
+	75,  // 78: spark.connect.ExecutePlanRequest.RequestOption.extension:type_name -> google.protobuf.Any
+	73,  // 79: spark.connect.ExecutePlanResponse.SqlCommandResult.relation:type_name -> spark.connect.Relation
+	53,  // 80: spark.connect.ExecutePlanResponse.Metrics.metrics:type_name -> spark.connect.ExecutePlanResponse.Metrics.MetricObject
+	82,  // 81: spark.connect.ExecutePlanResponse.ObservedMetrics.values:type_name -> spark.connect.Expression.Literal
+	55,  // 82: spark.connect.ExecutePlanResponse.Metrics.MetricObject.execution_metrics:type_name -> spark.connect.ExecutePlanResponse.Metrics.MetricObject.ExecutionMetricsEntry
+	54,  // 83: spark.connect.ExecutePlanResponse.Metrics.MetricObject.ExecutionMetricsEntry.value:type_name -> spark.connect.ExecutePlanResponse.Metrics.MetricValue
+	57,  // 84: spark.connect.ConfigRequest.Operation.set:type_name -> spark.connect.ConfigRequest.Set
+	58,  // 85: spark.connect.ConfigRequest.Operation.get:type_name -> spark.connect.ConfigRequest.Get
+	59,  // 86: spark.connect.ConfigRequest.Operation.get_with_default:type_name -> spark.connect.ConfigRequest.GetWithDefault
+	60,  // 87: spark.connect.ConfigRequest.Operation.get_option:type_name -> spark.connect.ConfigRequest.GetOption
+	61,  // 88: spark.connect.ConfigRequest.Operation.get_all:type_name -> spark.connect.ConfigRequest.GetAll
+	62,  // 89: spark.connect.ConfigRequest.Operation.unset:type_name -> spark.connect.ConfigRequest.Unset
+	63,  // 90: spark.connect.ConfigRequest.Operation.is_modifiable:type_name -> spark.connect.ConfigRequest.IsModifiable
+	8,   // 91: spark.connect.ConfigRequest.Set.pairs:type_name -> spark.connect.KeyValue
+	8,   // 92: spark.connect.ConfigRequest.GetWithDefault.pairs:type_name -> spark.connect.KeyValue
+	64,  // 93: spark.connect.AddArtifactsRequest.SingleChunkArtifact.data:type_name -> spark.connect.AddArtifactsRequest.ArtifactChunk
+	65,  // 94: spark.connect.AddArtifactsRequest.Batch.artifacts:type_name -> spark.connect.AddArtifactsRequest.SingleChunkArtifact
+	64,  // 95: spark.connect.AddArtifactsRequest.BeginChunkedArtifact.initial_chunk:type_name -> spark.connect.AddArtifactsRequest.ArtifactChunk
+	69,  // 96: spark.connect.ArtifactStatusesResponse.StatusesEntry.value:type_name -> spark.connect.ArtifactStatusesResponse.ArtifactStatus
+	6,   // 97: spark.connect.SparkConnectService.ExecutePlan:input_type -> spark.connect.ExecutePlanRequest
+	4,   // 98: spark.connect.SparkConnectService.AnalyzePlan:input_type -> spark.connect.AnalyzePlanRequest
+	9,   // 99: spark.connect.SparkConnectService.Config:input_type -> spark.connect.ConfigRequest
+	11,  // 100: spark.connect.SparkConnectService.AddArtifacts:input_type -> spark.connect.AddArtifactsRequest
+	13,  // 101: spark.connect.SparkConnectService.ArtifactStatus:input_type -> spark.connect.ArtifactStatusesRequest
+	15,  // 102: spark.connect.SparkConnectService.Interrupt:input_type -> spark.connect.InterruptRequest
+	18,  // 103: spark.connect.SparkConnectService.ReattachExecute:input_type -> spark.connect.ReattachExecuteRequest
+	19,  // 104: spark.connect.SparkConnectService.ReleaseExecute:input_type -> spark.connect.ReleaseExecuteRequest
+	7,   // 105: spark.connect.SparkConnectService.ExecutePlan:output_type -> spark.connect.ExecutePlanResponse
+	5,   // 106: spark.connect.SparkConnectService.AnalyzePlan:output_type -> spark.connect.AnalyzePlanResponse
+	10,  // 107: spark.connect.SparkConnectService.Config:output_type -> spark.connect.ConfigResponse
+	12,  // 108: spark.connect.SparkConnectService.AddArtifacts:output_type -> spark.connect.AddArtifactsResponse
+	14,  // 109: spark.connect.SparkConnectService.ArtifactStatus:output_type -> spark.connect.ArtifactStatusesResponse
+	16,  // 110: spark.connect.SparkConnectService.Interrupt:output_type -> spark.connect.InterruptResponse
+	7,   // 111: spark.connect.SparkConnectService.ReattachExecute:output_type -> spark.connect.ExecutePlanResponse
+	20,  // 112: spark.connect.SparkConnectService.ReleaseExecute:output_type -> spark.connect.ReleaseExecuteResponse
+	105, // [105:113] is the sub-list for method output_type
+	97,  // [97:105] is the sub-list for method input_type
+	97,  // [97:97] is the sub-list for extension type_name
+	97,  // [97:97] is the sub-list for extension extendee
+	0,   // [0:97] is the sub-list for field type_name
+}
+
+func init() { file_spark_connect_base_proto_init() }
+func file_spark_connect_base_proto_init() {
+	if File_spark_connect_base_proto != nil {
+		return
+	}
+	file_spark_connect_commands_proto_init()
+	file_spark_connect_common_proto_init()
+	file_spark_connect_expressions_proto_init()
+	file_spark_connect_relations_proto_init()
+	file_spark_connect_types_proto_init()
+	if !protoimpl.UnsafeEnabled {
+		file_spark_connect_base_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Plan); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spark_connect_base_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*UserContext); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spark_connect_base_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*AnalyzePlanRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spark_connect_base_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*AnalyzePlanResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spark_connect_base_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ExecutePlanRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spark_connect_base_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ExecutePlanResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spark_connect_base_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*KeyValue); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spark_connect_base_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ConfigRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spark_connect_base_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ConfigResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spark_connect_base_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*AddArtifactsRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spark_connect_base_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*AddArtifactsResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spark_connect_base_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ArtifactStatusesRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spark_connect_base_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ArtifactStatusesResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spark_connect_base_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*InterruptRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spark_connect_base_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*InterruptResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spark_connect_base_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ReattachOptions); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spark_connect_base_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ReattachExecuteRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spark_connect_base_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ReleaseExecuteRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spark_connect_base_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ReleaseExecuteResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spark_connect_base_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*AnalyzePlanRequest_Schema); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spark_connect_base_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*AnalyzePlanRequest_Explain); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spark_connect_base_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*AnalyzePlanRequest_TreeString); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spark_connect_base_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*AnalyzePlanRequest_IsLocal); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_spark_connect_base_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*AnalyzePlanRequest_IsStreaming); i {
+			case 0:
+				return &v.state
... 21539 lines suppressed ...


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@spark.apache.org
For additional commands, e-mail: commits-help@spark.apache.org