From a04e939311db580fb1fab38ebe336efd9b805873 Mon Sep 17 00:00:00 2001 From: Rafael Franzke Date: Thu, 11 Apr 2024 14:47:10 +0200 Subject: [PATCH] Cleanup legacy code for cloud-config-downloader scenario (#138) --- Dockerfile | 2 +- .../templates/deployment.yaml | 1 - .../app/app.go | 3 - example/controller-registration.yaml | 2 +- go.mod | 57 +- go.sum | 189 +- .../operatingsystemconfig/actuator.go | 28 +- .../operatingsystemconfig/actuator_test.go | 127 +- pkg/controller/operatingsystemconfig/add.go | 4 +- .../generator/generator.go | 77 - .../generator/generator_suite_test.go | 24 - .../generator/script_test.go | 100 - .../templates/script.suse-chost.template | 128 - .../generator/testfiles/script/cloud-init | 70 - .../generator/testfiles/script/embed.go | 14 - .../script/script.memoryone-chost-bootstrap | 76 - .../script/script.memoryone-chost-reconcile | 43 - .../gardener/cert-management/LICENSE | 202 + .../cert-management/pkg/apis/cert/register.go | 14 + .../pkg/apis/cert/v1alpha1/doc.go | 11 + .../pkg/apis/cert/v1alpha1/register.go | 65 + .../pkg/apis/cert/v1alpha1/state.go | 22 + .../pkg/apis/cert/v1alpha1/types.go | 496 +++ .../cert/v1alpha1/zz_generated.deepcopy.go | 827 ++++ .../gardener/gardener/.github/renovate.json5 | 66 +- .../extensions/pkg/controller/cmd/options.go | 13 +- .../operatingsystemconfig/actuator.go | 4 +- .../oscommon/actuator/actuator.go | 42 - .../oscommon/actuator/actuator_delete.go | 33 - .../oscommon/actuator/actuator_migrate.go | 28 - .../oscommon/actuator/actuator_reconcile.go | 34 - .../oscommon/actuator/actuator_restore.go | 28 - .../oscommon/actuator/actuator_util.go | 111 - .../oscommon/generator/generator.go | 59 - .../oscommon/generator/test/README.md | 36 - .../generator/test/template_generator.go | 76 - .../oscommon/template/template_generator.go | 175 - .../operatingsystemconfig/reconciler.go | 43 +- .../extensions/pkg/controller/utils.go | 2 + .../gardener/extensions/pkg/util/shoot.go | 2 +- .../hack/check-skaffold-deps-for-binary.sh | 3 +- .../gardener/gardener/hack/ci-common.sh | 2 +- .../gardener/gardener/hack/generate-crds.sh | 3 + .../gardener/gardener/hack/kind-up.sh | 70 + .../gardener/gardener/hack/tools.mk | 39 +- .../gardener/pkg/api/extensions/accessor.go | 1 + .../gardener/pkg/apis/core/register.go | 3 + .../apis/core/types_controllerregistration.go | 2 + .../apis/core/types_namespacedcloudprofile.go | 78 + .../gardener/pkg/apis/core/types_shoot.go | 21 +- .../core/v1beta1/constants/types_constants.go | 44 +- .../pkg/apis/core/v1beta1/conversions.go | 2 + .../defaults_controllerregistration.go | 2 + .../pkg/apis/core/v1beta1/defaults_project.go | 1 + .../pkg/apis/core/v1beta1/defaults_seed.go | 1 + .../pkg/apis/core/v1beta1/defaults_shoot.go | 23 +- .../pkg/apis/core/v1beta1/generated.pb.go | 3412 ++++++++++++----- .../pkg/apis/core/v1beta1/generated.proto | 99 +- .../pkg/apis/core/v1beta1/helper/condition.go | 2 + .../core/v1beta1/helper/condition_builder.go | 5 +- .../pkg/apis/core/v1beta1/helper/errors.go | 2 + .../pkg/apis/core/v1beta1/helper/helper.go | 20 +- .../core/v1beta1/helper/shootstate_list.go | 3 + .../pkg/apis/core/v1beta1/register.go | 3 + .../gardener/pkg/apis/core/v1beta1/types.go | 4 + .../v1beta1/types_controllerregistration.go | 2 + .../v1beta1/types_namespacedcloudprofile.go | 94 + .../pkg/apis/core/v1beta1/types_shoot.go | 30 +- .../core/v1beta1/zz_generated.conversion.go | 192 +- .../core/v1beta1/zz_generated.deepcopy.go | 159 +- .../core/v1beta1/zz_generated.defaults.go | 44 + .../pkg/apis/core/zz_generated.deepcopy.go | 159 +- .../pkg/apis/extensions/v1alpha1/register.go | 1 + .../extensions/v1alpha1/types_defaults.go | 2 +- .../v1alpha1/types_operatingsystemconfig.go | 16 +- .../gardener/pkg/apis/operations/register.go | 1 + .../pkg/apis/operations/v1alpha1/register.go | 1 + .../pkg/apis/operator/v1alpha1/register.go | 1 + .../pkg/apis/operator/v1alpha1/types.go | 17 +- .../v1alpha1/zz_generated.deepcopy.go | 31 +- .../pkg/apis/resources/v1alpha1/register.go | 1 + .../apis/seedmanagement/encoding/encoding.go | 2 + .../pkg/apis/seedmanagement/register.go | 1 + .../seedmanagement/v1alpha1/conversions.go | 6 +- .../v1alpha1/defaults_managedseed.go | 9 +- .../v1alpha1/defaults_managedseedset.go | 6 +- .../apis/seedmanagement/v1alpha1/register.go | 1 + .../gardener/pkg/apis/settings/register.go | 1 + .../pkg/apis/settings/v1alpha1/register.go | 1 + .../gardener/pkg/chartrenderer/default.go | 5 + .../pkg/client/kubernetes/cache/aggregator.go | 1 + .../client/kubernetes/cache/single_object.go | 10 +- .../gardener/pkg/client/kubernetes/client.go | 9 +- .../gardener/pkg/client/kubernetes/pods.go | 1 + .../pkg/extensions/customresources.go | 6 +- .../pkg/gardenlet/apis/config/register.go | 1 + .../apis/config/v1alpha1/defaults.go | 22 +- .../apis/config/v1alpha1/register.go | 1 + .../gardener/gardener/pkg/logger/zap.go | 3 + .../garbagecollector/references/references.go | 1 + .../gardener/gardener/pkg/utils/checksums.go | 1 + .../gardener/gardener/pkg/utils/encoding.go | 2 + .../gardener/pkg/utils/errors/errors.go | 2 + .../gardener/gardener/pkg/utils/flow/flow.go | 7 + .../gardener/gardener/pkg/utils/flow/graph.go | 1 + .../utils/flow/progress_reporter_delaying.go | 4 +- .../gardener/pkg/utils/flow/taskfn.go | 4 + .../gardener/pkg/utils/flow/taskid.go | 1 + .../pkg/utils/gardener/backupentry.go | 6 +- .../utils/gardener/controllerinstallation.go | 4 +- .../gardener/pkg/utils/gardener/dns.go | 3 +- .../gardener/pkg/utils/gardener/garden.go | 52 +- .../gardener/pkg/utils/gardener/identity.go | 1 + .../gardener/pkg/utils/gardener/machines.go | 2 + .../gardener/pkg/utils/gardener/shoot.go | 10 +- .../utils/kubernetes/health/certificate.go | 67 + .../pkg/utils/kubernetes/health/healthz.go | 3 +- .../pkg/utils/kubernetes/health/pod.go | 1 + .../pkg/utils/kubernetes/health/vpa.go | 1 + .../pkg/utils/kubernetes/highavailability.go | 4 +- .../pkg/utils/kubernetes/kubernetes.go | 5 +- .../gardener/pkg/utils/miscellaneous.go | 4 +- .../gardener/gardener/pkg/utils/random.go | 1 + .../pkg/utils/secrets/control_plane.go | 4 +- .../gardener/pkg/utils/test/matchers/deep.go | 4 +- .../utils/test/matchers/managedresource.go | 194 + .../pkg/utils/test/matchers/matchers.go | 45 + .../gardener/pkg/utils/test/options.go | 7 +- .../pkg/utils/test/runtime/seralize.go | 52 + .../gardener/pkg/utils/test/test_resources.go | 7 +- .../pkg/utils/timewindow/timewindow.go | 4 + .../gardener/gardener/pkg/utils/values.go | 22 +- .../gardener/pkg/utils/version/version.go | 11 +- .../third_party/gopkg.in/yaml.v2/LICENSE | 201 + .../gopkg.in/yaml.v2/LICENSE.libyaml | 31 + .../third_party/gopkg.in/yaml.v2/NOTICE | 13 + .../third_party/gopkg.in/yaml.v2/README.md | 1 + .../third_party/gopkg.in/yaml.v2/apic.go | 744 ++++ .../third_party/gopkg.in/yaml.v2/decode.go | 815 ++++ .../third_party/gopkg.in/yaml.v2/emitterc.go | 1685 ++++++++ .../third_party/gopkg.in/yaml.v2/encode.go | 390 ++ .../third_party/gopkg.in/yaml.v2/parserc.go | 1095 ++++++ .../third_party/gopkg.in/yaml.v2/readerc.go | 412 ++ .../third_party/gopkg.in/yaml.v2/resolve.go | 258 ++ .../third_party/gopkg.in/yaml.v2/scannerc.go | 2711 +++++++++++++ .../third_party/gopkg.in/yaml.v2/sorter.go | 119 + .../third_party/gopkg.in/yaml.v2/writerc.go | 26 + .../third_party/gopkg.in/yaml.v2/yaml.go | 478 +++ .../third_party/gopkg.in/yaml.v2/yamlh.go | 739 ++++ .../gopkg.in/yaml.v2/yamlprivateh.go | 173 + .../golang/protobuf/jsonpb/decode.go | 1 + .../golang/protobuf/jsonpb/encode.go | 1 + .../github.com/golang/protobuf/ptypes/any.go | 7 +- vendor/github.com/onsi/ginkgo/v2/CHANGELOG.md | 35 + vendor/github.com/onsi/ginkgo/v2/core_dsl.go | 17 +- .../ginkgo/v2/ginkgo/internal/gocovmerge.go | 129 + .../ginkgo/internal/profiles_and_reports.go | 42 +- .../onsi/ginkgo/v2/internal/node.go | 33 +- .../onsi/ginkgo/v2/internal/suite.go | 14 +- .../ginkgo/v2/reporters/default_reporter.go | 47 +- .../onsi/ginkgo/v2/reporting_dsl.go | 59 +- .../github.com/onsi/ginkgo/v2/types/config.go | 5 +- .../github.com/onsi/ginkgo/v2/types/flags.go | 15 +- .../onsi/ginkgo/v2/types/version.go | 2 +- vendor/github.com/onsi/gomega/CHANGELOG.md | 13 + vendor/github.com/onsi/gomega/gomega_dsl.go | 2 +- vendor/golang.org/x/mod/modfile/rule.go | 7 +- vendor/golang.org/x/net/http2/transport.go | 9 + vendor/golang.org/x/sys/unix/aliases.go | 2 +- .../x/sys/unix/syscall_darwin_libSystem.go | 2 +- .../golang.org/x/sys/unix/syscall_freebsd.go | 12 +- vendor/golang.org/x/sys/unix/syscall_linux.go | 99 + .../golang.org/x/sys/unix/zsyscall_linux.go | 10 + vendor/golang.org/x/sys/unix/ztypes_linux.go | 60 + .../x/tools/cmd/goimports/goimports_gc.go | 2 +- vendor/golang.org/x/tools/cover/profile.go | 266 ++ .../x/tools/go/gcexportdata/gcexportdata.go | 2 +- vendor/golang.org/x/tools/go/packages/doc.go | 40 +- .../x/tools/go/packages/external.go | 77 +- .../golang.org/x/tools/go/packages/golist.go | 35 +- .../x/tools/go/packages/packages.go | 46 +- .../x/tools/go/types/objectpath/objectpath.go | 20 +- .../x/tools/internal/aliases/aliases.go | 28 + .../x/tools/internal/aliases/aliases_go121.go | 30 + .../x/tools/internal/aliases/aliases_go122.go | 72 + .../x/tools/internal/gcimporter/gcimporter.go | 7 - .../x/tools/internal/gcimporter/iexport.go | 9 +- .../x/tools/internal/gcimporter/iimport.go | 34 +- .../internal/gcimporter/support_go117.go | 16 - .../internal/gcimporter/support_go118.go | 3 - .../x/tools/internal/gcimporter/unified_no.go | 4 +- .../tools/internal/gcimporter/unified_yes.go | 4 +- .../x/tools/internal/gcimporter/ureader_no.go | 19 - .../tools/internal/gcimporter/ureader_yes.go | 6 +- .../x/tools/internal/gopathwalk/walk.go | 308 +- .../x/tools/internal/imports/fix.go | 134 +- .../x/tools/internal/imports/imports.go | 2 +- .../x/tools/internal/imports/mod.go | 287 +- .../x/tools/internal/imports/mod_cache.go | 116 +- .../x/tools/internal/imports/zstdlib.go | 61 + .../internal/tokeninternal/tokeninternal.go | 28 +- .../x/tools/internal/typeparams/common.go | 37 +- .../x/tools/internal/typeparams/coretype.go | 17 +- .../x/tools/internal/typesinternal/recv.go | 43 + .../tools/internal/typesinternal/types_118.go | 3 - .../x/tools/internal/versions/features.go | 43 + .../x/tools/internal/versions/toolchain.go | 14 + .../internal/versions/toolchain_go119.go | 14 + .../internal/versions/toolchain_go120.go | 14 + .../internal/versions/toolchain_go121.go | 14 + .../x/tools/internal/versions/types_go121.go | 18 +- .../x/tools/internal/versions/types_go122.go | 25 +- .../{versions_go121.go => versions.go} | 14 +- .../tools/internal/versions/versions_go122.go | 38 - .../encoding/protojson/well_known_types.go | 4 + .../internal/editiondefaults/defaults.go | 12 + .../editiondefaults}/editions_defaults.binpb | 2 +- .../protobuf/internal/encoding/json/decode.go | 2 +- .../protobuf/internal/filedesc/desc.go | 67 +- .../protobuf/internal/filedesc/desc_init.go | 52 + .../protobuf/internal/filedesc/desc_lazy.go | 28 + .../protobuf/internal/filedesc/editions.go | 142 + .../protobuf/internal/genid/descriptor_gen.go | 152 +- .../internal/genid/go_features_gen.go | 31 + .../protobuf/internal/genid/struct_gen.go | 5 + .../protobuf/internal/genid/type_gen.go | 38 + .../protobuf/internal/impl/codec_extension.go | 22 +- .../protobuf/internal/impl/codec_tables.go | 2 +- .../internal/impl/message_reflect_field.go | 2 +- .../protobuf/internal/strs/strings.go | 2 +- .../protobuf/internal/version/version.go | 2 +- .../protobuf/reflect/protodesc/desc_init.go | 42 +- .../reflect/protodesc/desc_resolve.go | 4 +- .../reflect/protodesc/desc_validate.go | 6 +- .../protobuf/reflect/protodesc/editions.go | 131 +- .../protobuf/reflect/protoreflect/proto.go | 2 + .../reflect/protoreflect/source_gen.go | 2 - .../types/descriptorpb/descriptor.pb.go | 1254 +++--- .../types/gofeaturespb/go_features.pb.go | 177 + .../types/gofeaturespb/go_features.proto | 28 + .../generate-internal-groups.sh | 148 +- vendor/modules.txt | 76 +- 242 files changed, 19266 insertions(+), 4186 deletions(-) delete mode 100644 pkg/controller/operatingsystemconfig/generator/generator.go delete mode 100644 pkg/controller/operatingsystemconfig/generator/generator_suite_test.go delete mode 100644 pkg/controller/operatingsystemconfig/generator/script_test.go delete mode 100644 pkg/controller/operatingsystemconfig/generator/templates/script.suse-chost.template delete mode 100644 pkg/controller/operatingsystemconfig/generator/testfiles/script/cloud-init delete mode 100644 pkg/controller/operatingsystemconfig/generator/testfiles/script/embed.go delete mode 100644 pkg/controller/operatingsystemconfig/generator/testfiles/script/script.memoryone-chost-bootstrap delete mode 100644 pkg/controller/operatingsystemconfig/generator/testfiles/script/script.memoryone-chost-reconcile create mode 100644 vendor/github.com/gardener/cert-management/LICENSE create mode 100644 vendor/github.com/gardener/cert-management/pkg/apis/cert/register.go create mode 100644 vendor/github.com/gardener/cert-management/pkg/apis/cert/v1alpha1/doc.go create mode 100644 vendor/github.com/gardener/cert-management/pkg/apis/cert/v1alpha1/register.go create mode 100644 vendor/github.com/gardener/cert-management/pkg/apis/cert/v1alpha1/state.go create mode 100644 vendor/github.com/gardener/cert-management/pkg/apis/cert/v1alpha1/types.go create mode 100644 vendor/github.com/gardener/cert-management/pkg/apis/cert/v1alpha1/zz_generated.deepcopy.go delete mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/actuator/actuator.go delete mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/actuator/actuator_delete.go delete mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/actuator/actuator_migrate.go delete mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/actuator/actuator_reconcile.go delete mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/actuator/actuator_restore.go delete mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/actuator/actuator_util.go delete mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/generator/generator.go delete mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/generator/test/README.md delete mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/generator/test/template_generator.go delete mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/template/template_generator.go create mode 100644 vendor/github.com/gardener/gardener/pkg/apis/core/types_namespacedcloudprofile.go create mode 100644 vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_namespacedcloudprofile.go create mode 100644 vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/certificate.go create mode 100644 vendor/github.com/gardener/gardener/pkg/utils/test/matchers/managedresource.go create mode 100644 vendor/github.com/gardener/gardener/pkg/utils/test/runtime/seralize.go create mode 100644 vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/LICENSE create mode 100644 vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/LICENSE.libyaml create mode 100644 vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/NOTICE create mode 100644 vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/README.md create mode 100644 vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/apic.go create mode 100644 vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/decode.go create mode 100644 vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/emitterc.go create mode 100644 vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/encode.go create mode 100644 vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/parserc.go create mode 100644 vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/readerc.go create mode 100644 vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/resolve.go create mode 100644 vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/scannerc.go create mode 100644 vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/sorter.go create mode 100644 vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/writerc.go create mode 100644 vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/yaml.go create mode 100644 vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/yamlh.go create mode 100644 vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/yamlprivateh.go create mode 100644 vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/gocovmerge.go create mode 100644 vendor/golang.org/x/tools/cover/profile.go create mode 100644 vendor/golang.org/x/tools/internal/aliases/aliases.go create mode 100644 vendor/golang.org/x/tools/internal/aliases/aliases_go121.go create mode 100644 vendor/golang.org/x/tools/internal/aliases/aliases_go122.go delete mode 100644 vendor/golang.org/x/tools/internal/gcimporter/support_go117.go delete mode 100644 vendor/golang.org/x/tools/internal/gcimporter/ureader_no.go create mode 100644 vendor/golang.org/x/tools/internal/typesinternal/recv.go create mode 100644 vendor/golang.org/x/tools/internal/versions/features.go create mode 100644 vendor/golang.org/x/tools/internal/versions/toolchain.go create mode 100644 vendor/golang.org/x/tools/internal/versions/toolchain_go119.go create mode 100644 vendor/golang.org/x/tools/internal/versions/toolchain_go120.go create mode 100644 vendor/golang.org/x/tools/internal/versions/toolchain_go121.go rename vendor/golang.org/x/tools/internal/versions/{versions_go121.go => versions.go} (77%) delete mode 100644 vendor/golang.org/x/tools/internal/versions/versions_go122.go create mode 100644 vendor/google.golang.org/protobuf/internal/editiondefaults/defaults.go rename vendor/google.golang.org/protobuf/{reflect/protodesc => internal/editiondefaults}/editions_defaults.binpb (69%) create mode 100644 vendor/google.golang.org/protobuf/internal/filedesc/editions.go create mode 100644 vendor/google.golang.org/protobuf/internal/genid/go_features_gen.go create mode 100644 vendor/google.golang.org/protobuf/types/gofeaturespb/go_features.pb.go create mode 100644 vendor/google.golang.org/protobuf/types/gofeaturespb/go_features.proto diff --git a/Dockerfile b/Dockerfile index cbc16f668..c2a7d05b3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ ############# builder -FROM golang:1.22.1 AS builder +FROM golang:1.22.2 AS builder WORKDIR /go/src/github.com/gardener/gardener-extension-os-suse-chost COPY . . diff --git a/charts/gardener-extension-os-suse-chost/templates/deployment.yaml b/charts/gardener-extension-os-suse-chost/templates/deployment.yaml index d4fb0d7b4..cfe11a0be 100644 --- a/charts/gardener-extension-os-suse-chost/templates/deployment.yaml +++ b/charts/gardener-extension-os-suse-chost/templates/deployment.yaml @@ -45,7 +45,6 @@ spec: - --ignore-operation-annotation={{ .Values.controllers.ignoreOperationAnnotation }} - --gardener-version={{ .Values.gardener.version }} - --metrics-bind-address=:{{ .Values.metrics.port }} - - --gardenlet-uses-gardener-node-agent={{ ternary .Values.gardener.gardenlet.featureGates.UseGardenerNodeAgent true (hasKey .Values.gardener.gardenlet.featureGates "UseGardenerNodeAgent") }} env: - name: LEADER_ELECTION_NAMESPACE valueFrom: diff --git a/cmd/gardener-extension-os-suse-chost/app/app.go b/cmd/gardener-extension-os-suse-chost/app/app.go index 7e12d75d1..78c03a786 100644 --- a/cmd/gardener-extension-os-suse-chost/app/app.go +++ b/cmd/gardener-extension-os-suse-chost/app/app.go @@ -103,9 +103,6 @@ func NewControllerCommand(ctx context.Context) *cobra.Command { heartbeatCtrlOpts.Completed().Apply(&heartbeat.DefaultAddOptions) reconcileOpts.Completed().Apply(&operatingsystemconfig.DefaultAddOptions.IgnoreOperationAnnotation) - // TODO(rfranzke): Remove the UseGardenerNodeAgent fields as soon as the general options no longer support - // the GardenletUsesGardenerNodeAgent field. - operatingsystemconfig.DefaultAddOptions.UseGardenerNodeAgent = generalOpts.Completed().GardenletUsesGardenerNodeAgent if err := controllerSwitches.Completed().AddToManager(ctx, mgr); err != nil { return fmt.Errorf("could not add controller to manager: %w", err) diff --git a/example/controller-registration.yaml b/example/controller-registration.yaml index f7698b254..d39141921 100644 --- a/example/controller-registration.yaml +++ b/example/controller-registration.yaml @@ -5,7 +5,7 @@ metadata: name: os-suse-chost type: helm providerConfig: - chart: H4sIAAAAAAAAA+1be3PbNhLP3/wUe/R1knRC6mFLzmkmN3VlN/E0sTVRkrmbTicDkZCEmiRYgJSjpLnPfguAL70syU6UutWOxyJBPJZY7O5vgeWICJ9GVDj0Q0IjyXjkcOnIVFLHG3OZ1B7cnepIx62W/kWa/9XXjcOjRrPVbLdVeaNdb7cfQOsLjL2WUpkQAfBAcJ7cVG/d83tKo3Xyd8c0CNko4oLedgwl4PbR0Ur5o9hn5d+sN5uHD6D+JV90Ff3N5X8APZIkVEQSEg5GznA9phEMUhb4LBpBTLwrMqLStQ7gzZhJkGkcc5HgBa6NAEYBH0BIEm+MtZ+AoAFJ2IRiu2RcKSeRjx1EdIRPeQSPYkGH7AP14ZphvX88duEyCqbAI91SsQQxFRCwiLqWe9p/30+QN+yiy8MQO3jX7YPPhLTcEUtq+r9h33IHH0VN/88LxqOa+pffyklUKzsa4PulMQxZQKX1vSuvY/w/IFf4Pwnx+n9Y9R0RjKcSzk/PcMBY8N+ol1gu8ympmXpYZLkT6XGf1qxvLdXNaa3+d8dEJO6UhMGtx1in/83m8bz+1xtHe/3fBZGYvaNCyb0Dk4ZF4ri4tRtu3bZ8Kj3B4kQXncAL9AbgqTUBQy4gGVN4ni0h6L/tn0H3Ba4aKFaTFZGQdmDdMrMm+ah1F4e9Rwp0z2mt/vvcc0f8TmOs0//j43n8d9xQ+G+v/1+fajXo907/4/yE3q/L4ym6zHHyBhdDBxCFHUH/pAeo1ajqJNI3ZIiOkpGEgsfDmERT5dhLG+DxKBFskKKvllatZuX9v2QeLi/qnGO1hA0ZFWhNEFmMqdNEfcd6I94ZqS5U13IMjge269bwb0Ijn4sa+vdxOnBx1Fq+aMuLMfrwWt7c0UzwIMBlLeiIyURozOFitzOLG1z45yOP4K8e6N3Z6/755cXj7JZ+IGEc0Nqq3pRPhMtYDYkApz+VCQ27PBqyUacyxPIKIQ25mCLWMbVsNQGIxDTQyswrjcgAEQnMzItBXtr0ZoUKoSkr7HEhEJNAyS3McGvF1d4LA7tW/5HnGAEdlbePBLeO/5rKXuzjv13QFvJ/j2gfF7N0k3g7LLjO/h/h2piVfxNv9vZ/F/TpkwPgYySGYZfNQjQQNjifP1sA6gkbwpjIno7UwJZj0my1Oza470iQYkCo67sJGUHRIhYsSoZgfyd/+E7O1xQ05pKha5je1AUNJF3WYefWHaKDwpvKpb7O39qnccCnIfqlDISaGUAoLGsIifNmWPathfUVaAv9L+dpy3Bwjf4ftQ+P5vT/sHF4vNf/XVA1/stX/BWL/A6cFuK2QpoQnySkgwq1YTxnKkoEHVj70ydwX9OAEkndi7zY6GdABqjvqmNQ47tX6YCKiCZKk3lt48EA1DYlAryahjcbtlkckEW4HKJlPBt2cRwEyA6ZEIacIxBOpgptIqRDWyR5KjzsJx/b9QKe+rVkGmN/JS6zZEw99caCTpji7AWiNDRhL1nIkPO6fhIHzCPSsJFZtqywy9MoMdxI5M/Dpmb69Fbby8p83nFGbzM/ubXIOKqsG0WZS1EBQ/5SWEUwT7oG7fY9gQsyGuWTjSxEEU80gi1eCtAncGw3pmnllewlDNkrWkg1jGqTiJSWlQ6USyBpkEDGlbL7MUf/AyyCahiAEmAhXdG7QugZP3MvqbF7yVbFIZmCYEZ4dxbf7Ra4Iqx+zQXagdHCYub52zsoKUnFREVyJAj4NfU3a++jKGda5PpgppJxgVrVDYiUF7NvK3UE5fyrXs8qq+ExrjzxPKUTF9vMjZImQfcviul2NjdthjTS0PPIIi9I/RJAudW51GW9NAh6HNV3OqPSBqzExcNqOwx0Q9SUcjU4UNuYNwccJyQflG3yUgwMowRjV3WjNrmfVTgoV7W+zir3pxGu/gozqr8xRcs6oCRxCtP+bJVlhxUtsXN67aBGoeRI4EjFk7+SoaKdq9udZ836ptXCMD6TyohUwv+ZnrPH3fIp/AG/oXqD/cSef1lzVOBwE73jPJeGaBW3psll3uKkaDDfdyHFDG9WOyzUJXs23zYzJc4AfbRDfB+9jnzWWW1rlgwc0MTBFSNLPiLuozqPUPCKFXX0QiqIumCpaO4OUSapoM8VLnTfSppv/1xgRyeqH1CWFR5h8PAz3bgnsJd1ZT+uvgaNJlWNMCr78uzk9Oz1+7OXZ90355cX7y9OXp31eyfds6ImwESx8BMa6k6lEGDIaOC/psPZ0qy8R5Jxp/BibrHsrcyRlZ45c/1VTovCjqUmlf9XbRcttvgDIhSlmrJGfS5K2QX+2wL/x9xHFRKpPgsYpP6IbhgIrMH/jXrrcA7/t+pHrT3+3wVV8X+sfVAZAfS4f1oI/Ect8HsRCmyLenL8gQ7zbZRB+wDrNv6EEDuzPJKG6CC6agdeIO749zNouM22U0fs0SWxiUwY9vczdp3J131X9ShphM41SMZTFPIZgigl4hygnATXZCpPFELbtTna045pC/svBsS7VSLAGvt/2GzP2/9Gu73P/9kJOY5jVX2AFjJJkzFGYR/NydHVU22XCrfQDXDOqHjNA3o7d3Cv9nxEGigI52BD9lzwNNaMO2WGw/x+jzUD/VRVz0yY1Dc8Pw800azZPLrpUQ25S9IbawxZRAL20QyBfmGQDawctvoNmDQX18p/6au4uEpjFCBdfEHbXnwTjNcETWT1+jaDY0M1ZGX0kqWN+KATBMxz42WdbtTeTFxI4i/VR/5MQ5psrop15+CK8tWyVFBC5cQsnafrtRLxOBc+znZFKxfZ0qt35rWK9wJzowSSXeox4a4jbfvyzjJNLWL95bOTz8mdzNWPWIDK83ewWvi2WVSbi/aGycJai6Z946mR6UBlQ2ojabrpz+zLfelI4Vu7zL8UbYH/st3W7SHgGvzXPGw1Fs//G3v8twuay/+c0d+vGewvnOtUjgxWnqQNBQ8dEqh9Y+o75hTHQfGhk5BOdqLg6NT0Djz85ZOtLu0bNkef2LHgCfd4YHfsN92e/fnXhxszU7ynk+8RZKNWNglwcHvWbM9sJuKoplP78zYjx9x3tDcqRi535HEamDo3LOGp7vYA3lyeXnZM/r5uq1yK4ATdP5b4NBbUQy339eFcxCHg0YgKZIf6WMginWM2TNVerQuvacgnVBWFQCRIziP1u5CW98Ok4R63VAoJDCiN1KcBai347nYSN/tSzuJr62OkZYvhVv1/uQV0r6BCvvtljqkzBHDeW9j72umWHICRglVu8mdTr7szR6xrTj1y0eCq7/b2qGE5be//iUF1W8CAdfl/reZ8/ufhcXuf/7cTusn/5/j9Puz578JSYujEQzUjs/Pzhl9RnL0hCSS9d2ZmC/2fxOR234GtO/9rHs1//9VoHe31fyc0d5KtZGxSsXydAlsaB1utfukhvEQ8VeyxDNA0NO3MbGDdhGGNHvdPsspU3MJ6OMjFhhakAC8a9xXn+FXGq/k5S1J9i1ydhaxHjSE3tUBmfyo7QdNNTckr7tMZpKJmuFrZLeuVGctzEsnhazVJaLbMDFkkNelCRiu5TcUjkyX18PuHRaJCyKITA32rSRDmCxXNuqC/p0xgGGAvMuOWrV3TRMUTeQv7htdY0nJ1xva3VpO/LK21/xMjv7t8ALzO/qPhX/j+v1Xf2/9dkEli1PYk/5SiAzQVHINpn3tXGCnHVyPXp5My+TD7/L0WpwNU5PIjvHLPoTZvHhMy6oCGEeourmRDng8veNJD06BMrlUeMcCnz5aFVkPxlnmkjs4qW2H7Fq1YbsHaR6/YWgttK49lW1YloU9VmkuJ7EALC1cm+uUgUMHR7DTDjLQsfbEDh3XLWkxK7MAvv1pWPqkdcxyS+WB1DFXkzpmuqwl0ZtIOMHBP9CGh/k4wC42fAHVHLsg8w3owBb1xUuYuW1lN1e9BNudFJnTerpBGnqpdCMXE5E/rT/dfb+9pT3va0572tKc9/Ynp/0dU4O8AUAAA + chart: H4sIAAAAAAAAA+1be3PbNhLP3/wUe8x10nZC6mFL7mkmN3VlN/FcamuiNHM3nU4GIiEJNUnwAFCO6uY++y0AviRZlmSnTt1qx2ORIB5LLHb3t8ByQkRIEyo8+kHRRDKeeFx6MpPUC6ZcqsaT+1MT6ajTMb9Iy7/munVw2Gp32t2uLm91m93uE+h8grE3UiYVEQBPBOfqtnqbnj9SmmySvz+lUcwmCRf0rmNoAXcPD9fKH8W+KP92s90+eALNT/mi6+gvLv+nMCBKUZFIUBysnOFqShMYZSwKWTKBlASXZEKl7zyFt1MmQWZpyoXCC1wbEUwiPoKYqGCKtZ+DoBFRbEaxnZrWykkSYgcJneBTnsCXqaBj9oGGcMWw3t++8uEiiebAE9NSswQpFRCxhPqOfzJ8P1TIG3bR53GMHbzrDyFkQjr+hKmG+W/Zd/zRr6Jh/hcF00lD/ytu5SxpVB2N8P2yFMYsotL52pdXKf4fkUv8r2K8/h9WfUcE45mEs5NTHDAV/BcaKMdnISUNWw+LHH8mAx7ShvO5pbo9bdT//pQI5c9JHN15jE36324fLet/s3W41/+HIJKyd1Roufdg1nJImpa3bstvuk5IZSBYqkzRMbxCbwCBXhMw5gLUlMLLfAnB8MfhKfRf4aqBcjU5CYlpDzYtM2dWjNr0cdhHpECPnDbqf8gDf8LvNcYm/T86WsZ/Ry2N//b6//tTowHDwcm/ve/R+/V5OkeXOVVvcTH0AFHYIQyPB4BajapOEnNDxugoGVEUAh6nJJlrx17ZgIAnSrBRhr5aOo2GU/T/mgW4vKh3htUUGzMq0JogsphSr436jvUmvDfRXeiu5RS8AFzfb+DfjCYhFw3079Ns5OOojWLRVhdT9OGNorlnmOBRhMta0AmTShjM4WO3C4sbfPj7lwHBXzPQu9M3w7OL86/yW/qBxGlEG+t60z4RLlI9JAKc4VwqGvd5MmaTXm2ImyvENOZijljH1nL1BCASM0ArN680ISNEJLAwLxZ5GdObF2qEpq1wwIVATAIVt7DArZPWey8N7Eb9R55TBHRU3j0S3Dn+a2t7sY//HoJ2kP97RPu4mKWv0t2w4Cb7f4hrY1H+bbzZ2/+HoOtrDyDESAzDLpfFaCBc8D5+dAD0EzaGKZEDE6mBK6ek3en2XPDfkSjDgNDU9xWZQNkiFSxRY3C/kN9+IZdrCppyydA1zG/rgkaS3tRh784dooPCm9qluS7eOqRpxOcx+qUchNoZQCgsGwiJi2ZY9rmF9TvQDvpfzdOO4eAG/T88aC/r/wHe7vX/Iage/xUr/pIlYQ9OSnE7MVUkJIr0UKG2jOdsRYmgA2tfX4P/hkaUSOqfF8VWPyMyQn3XHYMe37/MRlQkVGlN5o2tBwPQ25QI8BoG3mzZZnVAluBySG7i2bKL4yBA9siMMOQcgbCaa7SJkA5tkeSZCLCfYmw/iHgWNtQ8xf4qXObIlAb6jQWdMc3ZK0RpaMJes5gh503zJI1YQKRlI7dseWGfZ4my3EjkL8CmdvrMVtvr2nzec0bvMj+Ftcg5qq0bTblL0QFD8VJYRbBA+hbtDgOBCzKZFJONLCQJVwbBli8F6BM4tpvSrPZK7g0MuWtaSD2MbqNERqtKT7VLIFmkIOdK2/2Uo/8BlkA9DEAJsJiu6V0j9JyfpZc02L1iq+aQbEG0ILx7i+9uC1wTVr/iAu3AZGUx8+LtPZSUpGKmIzkSRfyKhtu1D1GUCy0KfbBTybhArepHRMrzxbeVJoLy/tFs5pX18BhXHgeB1onzXeZGS5Og+xfldHvbmzZLBmmYeWRJEGVhBaD8+lyaskEWRQOO6jtfUGkLVtLyYb0dBroxakq1GjxobM2bB54Xkw/aNgUZBoaJwthV3+hN7hc1DqpVba7zysN5gqu/xozub0rRso4oUV5p2l+ss+ywpiV2Tq881CiUHIk8qXkK1zJUtvNNu7O82dC2WhkmZFIbkVr4v9Bz/rhfPYXf4BdUb3Cfu8sva48KPG6jd5znyhCt49Y2uShaHJcNlvsupZjjzXqHpbrkz5bb5qbEG6GP9kgYoteRL3rrbU3ZmCaz+lKya/316fHJ6Zv3p69P+2/PLs7fnx//cDocHPdPy5oAM93v92jherVCgDGjUfiGjhdL8/IBUdNeaf79cr04uQeoXFruM+ucloU9rA6K/0fvs6y2+A0SnANcrNBqLsH7zw2qHhHtgP9THqIKicycBYyycEK3DAQ24P9Ws3OwhP87zcPOHv8/BNXxf2p8UBUBDHh4Ugr8OyPwRxEK7Ip6CvyBDvPHJIf2EdZt/QEhdm5AJY3RQfT1DrxA3PHPF9Dy212vidijT1IbmTDs71/YdS5f/13do2QJOtdITeco5FMEUVrEBUA5jq7IXB5rhLa3qn9y2sH+ixEJ7pQIsMH+H7S7y/a/1e3u838ehDzPc+o+wAiZZGqKUdiv9uTo8htjl0q30I9wzqh4wyN6N3fwqPZ8RBZpJOphQ/ZS8Cw1jHtVhsPyfo+zgGB11cBOmDQ3vDgPtNGs3Ty67VEDuVPZrTXGLCER+9UOgX5hlA+sHbb+jZi0F1faf5mrtLzKUhQgXX1B1119E4zXBFWyfn2XwbGhHrI2esXSVnzQGeL+pfHyTrdqbycuJumn6qN4ZiBNPlfluvNwRYV6WWoooXNibpynq40SCTgXIc52TStX2TKrd+G1yvcCe6MFkl+aMeG+I+368t5NmlrG+jfPTjEn9zJX32EBKs9fwWrh2+bBeSHaWyYLa62a9q2nRmYjnQ1pjKTtZriwL/epI4XP7TL/VLQD/st3W3eHgBvwX/ug01o9/2/t8d9D0FL+54L+/p7B/sq5Tu3IYO1J2ljw2COR3jemoWdPcTwUHzoJ6eUnCp5JTe/Bs5+uXX3p3rI5+txNBVc84JHbc9/2B+7Hn59tzUz5nl6xR5CPWtskwMHdRbO9sCeKo9pO3Y+7jJzy0DPeqBy52pHHaWD63LCCp6bbp/D24uSiZ/P3TVvtUgQn6P6xJKSpoAFqeWgO5xIOEU8mVCA7NMRClpgcs3GmMkF9eENjPqO6KAYiQXKe6N+VtLxvZy3/qKNTSGBEaaI/DdBrIfR3k7jdl/JWX9scI920GO7U/6dbQI8KKhS7X/aYOkcAZ4OVva8H3ZIDsFJwqrOKfOpNd/aIdcOpRyEaXPX9wR413Ey7+39iUd0OMGBT/l+nvZz/eXDU3ef/PQjd5v8L/P4Y9vwfwlJi6MRjPSOL8/OWX1KcvTGJJH10ZmYH/Z+l5G7fgW06/2sfLn//1eoc7vX/QWjpQF7L2KZihSYFtjIOrl79MkB4iXiq3GMZoWlou7nZwLqKYY0BD4/zylTcwXp4yMWWFqQELwb3lekIdcbr+Tk3pPqWuTorWY8GQ25rgez+VH6CZprakh94SBeQip7hemW/qldlLC9JpICv9SShxTI7ZJnUZAoZreU2lY9sltSzr5+V+RYxS44t9K3nctgvVAzrgv43YwLDAHeVGb9q7dsmOp4oWri3vMYNLddnbH9uNfnT0kb7P7Pyu88HwJvsf2sl/1tngOzt/0OQTWI09qT4lKIHNBMcg+mQB5cYKaeXEz+ksyr5MP/8vZFmI1Tk6iO8as+hsWweFZn0wMAIfZfWsiHPxudcDdA0aJPrVEcMcP3RcdBqaN5yj9QDna+7xvatWrHCgnUPf2AbLbSrPZbrOLWEPl1pKSWyBx0sXJvoV4BADUfz0ww70k3piz04aDrOalJiD3762XGKSe3Z45DcB+tjKPskonnXYxwkE/Slnls7aU8xcFfmkNB8J5iHxs+B+hMfZJFhPZqD2TipcpedvKbu92k+52UmdNGulEaRql0Kxcbk3zS/2X+9vac97WlPe9rTnvb0B6b/AxZMGAYAUAAA values: image: tag: v1.26.0-dev diff --git a/go.mod b/go.mod index 4c55c1314..47ca20086 100644 --- a/go.mod +++ b/go.mod @@ -1,20 +1,20 @@ module github.com/gardener/gardener-extension-os-suse-chost -go 1.22.0 +go 1.22.2 require ( github.com/ahmetb/gen-crd-api-reference-docs v0.3.0 - github.com/gardener/gardener v1.90.2 + github.com/gardener/gardener v1.92.0 github.com/go-logr/logr v1.4.1 - github.com/onsi/ginkgo/v2 v2.15.0 - github.com/onsi/gomega v1.31.1 + github.com/onsi/ginkgo/v2 v2.17.1 + github.com/onsi/gomega v1.32.0 github.com/spf13/cobra v1.8.0 - golang.org/x/tools v0.16.1 - k8s.io/api v0.29.2 - k8s.io/apimachinery v0.29.2 - k8s.io/code-generator v0.29.2 - k8s.io/component-base v0.29.2 - k8s.io/utils v0.0.0-20240102154912-e7106e64919e + golang.org/x/tools v0.19.0 + k8s.io/api v0.29.3 + k8s.io/apimachinery v0.29.3 + k8s.io/code-generator v0.29.3 + k8s.io/component-base v0.29.3 + k8s.io/utils v0.0.0-20240310230437-4693a0247e57 sigs.k8s.io/controller-runtime v0.17.2 ) @@ -34,8 +34,9 @@ require ( github.com/fatih/color v1.16.0 // indirect github.com/fluent/fluent-operator/v2 v2.7.0 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/gardener/cert-management v0.13.0 // indirect github.com/gardener/etcd-druid v0.22.0 // indirect - github.com/gardener/hvpa-controller/api v0.5.0 // indirect + github.com/gardener/hvpa-controller/api v0.15.0 // indirect github.com/gardener/machine-controller-manager v0.52.0 // indirect github.com/go-logr/zapr v1.3.0 // indirect github.com/go-openapi/errors v0.20.4 // indirect @@ -47,7 +48,7 @@ require ( github.com/gobwas/glob v0.2.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/protobuf v1.5.3 // indirect + github.com/golang/protobuf v1.5.4 // indirect github.com/google/gnostic-models v0.6.8 // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/google/gofuzz v1.2.0 // indirect @@ -91,36 +92,36 @@ require ( go.uber.org/mock v0.4.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/crypto v0.20.0 // indirect - golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect - golang.org/x/mod v0.14.0 // indirect - golang.org/x/net v0.21.0 // indirect - golang.org/x/oauth2 v0.15.0 // indirect - golang.org/x/sys v0.17.0 // indirect - golang.org/x/term v0.17.0 // indirect + golang.org/x/crypto v0.21.0 // indirect + golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 // indirect + golang.org/x/mod v0.16.0 // indirect + golang.org/x/net v0.22.0 // indirect + golang.org/x/oauth2 v0.16.0 // indirect + golang.org/x/sys v0.18.0 // indirect + golang.org/x/term v0.18.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.5.0 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 // indirect - google.golang.org/protobuf v1.32.0 // indirect + google.golang.org/protobuf v1.33.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - helm.sh/helm/v3 v3.14.2 // indirect - istio.io/api v1.19.7-0.20240110022508-68cf4097ffc5 // indirect - istio.io/client-go v1.19.7-0.20240110023605-ad5ce1f48b56 // indirect - k8s.io/apiextensions-apiserver v0.29.2 // indirect + helm.sh/helm/v3 v3.14.3 // indirect + istio.io/api v1.19.8 // indirect + istio.io/client-go v1.19.8 // indirect + k8s.io/apiextensions-apiserver v0.29.3 // indirect k8s.io/autoscaler/vertical-pod-autoscaler v1.0.0 // indirect - k8s.io/client-go v0.29.2 // indirect + k8s.io/client-go v0.29.3 // indirect k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01 // indirect k8s.io/klog v1.0.0 // indirect k8s.io/klog/v2 v2.120.1 // indirect - k8s.io/kube-aggregator v0.29.2 // indirect + k8s.io/kube-aggregator v0.29.3 // indirect k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect - k8s.io/kubelet v0.29.2 // indirect - k8s.io/metrics v0.29.2 // indirect + k8s.io/kubelet v0.29.3 // indirect + k8s.io/metrics v0.29.3 // indirect sigs.k8s.io/controller-runtime/tools/setup-envtest v0.0.0-20231015215740-bf15e44028f9 // indirect sigs.k8s.io/controller-tools v0.14.0 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect diff --git a/go.sum b/go.sum index 09194f2cc..c865c303b 100644 --- a/go.sum +++ b/go.sum @@ -40,15 +40,10 @@ github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdko github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/ahmetb/gen-crd-api-reference-docs v0.3.0 h1:+XfOU14S4bGuwyvCijJwhhBIjYN+YXS18jrCY2EzJaY= github.com/ahmetb/gen-crd-api-reference-docs v0.3.0/go.mod h1:TdjdkYhlOifCQWPs1UdTma97kQQMozf5h26hTuG70u8= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -76,8 +71,6 @@ github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxER github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/evanphx/json-patch v0.0.0-20200808040245-162e5629780b/go.mod h1:NAJj0yf/KaRKURN6nyi7A9IZydMivZEm9oQLWNjfKDc= -github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v5.7.0+incompatible h1:vgGkfT/9f8zE6tvSCe74nfpAVDQ2tG6yudJd8LBksgI= github.com/evanphx/json-patch v5.7.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= @@ -93,18 +86,18 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/gardener/cert-management v0.13.0 h1:KIT9wWFmbo2+YwnN3EhUqGX2tOkvB8aTFIQYFWdEo6E= +github.com/gardener/cert-management v0.13.0/go.mod h1:0nTNVZoKA+v7uumOQ0xZPNjqSOfYxF93PFCEN26A+mw= github.com/gardener/etcd-druid v0.22.0 h1:DVe+Zjrb93r9vI1uUiCTMHBffIUoMAKhNzFZNC6hsQ8= github.com/gardener/etcd-druid v0.22.0/go.mod h1:FROhfVKyWBo4krlPe3R6FIhJRmOmijEWBdEeUP0CJjE= -github.com/gardener/gardener v1.90.2 h1:aQaejAynj7l2ZoB+h1op+TBZkjVdvMhE9i8MaCO8qUc= -github.com/gardener/gardener v1.90.2/go.mod h1:2oopZmb8fQbXXeypRpiY2Nj0kVcobxsMYUn7HOupX84= -github.com/gardener/hvpa-controller/api v0.5.0 h1:f4F3O7YUrenwh4S3TgPREPiB287JjjUiUL18OqPLyAA= -github.com/gardener/hvpa-controller/api v0.5.0/go.mod h1:QQl3ELkCaki+8RhXl0FZMfvnm0WCGwGJlGmrxJj6lvM= +github.com/gardener/gardener v1.92.0 h1:++MKgnj2DsEM+0EunWXOK4wPMh+sU/+qm1ydphrm0t4= +github.com/gardener/gardener v1.92.0/go.mod h1:5QbH7gJ5nCaPiFeMGmB0l0PQ5Nz94m2PvTEqRdyTL0A= +github.com/gardener/hvpa-controller/api v0.15.0 h1:igsalL5Z6kFMn1+Kv1Eq0cRjYW+4oBA1aEY/yDO2QtI= +github.com/gardener/hvpa-controller/api v0.15.0/go.mod h1:fqb4wNrQLESDKpm7ppXyCM2Gvx96wRlLL35aH0ge07U= github.com/gardener/machine-controller-manager v0.52.0 h1:irhpamQ/QXixCXJpNKRL71aM3FAdNO1HxZwA54jvncI= github.com/gardener/machine-controller-manager v0.52.0/go.mod h1:6g5i/uRGugkRyIABZmDjvaiT8GLL7XRE9ziw4C/9nCo= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= @@ -130,19 +123,16 @@ github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= github.com/gobuffalo/flect v1.0.2 h1:eqjPGSo2WmjgY2XlpGwo2NXgL3RucAKo4k4qQMNA5sA= github.com/gobuffalo/flect v1.0.2/go.mod h1:A5msMlrHtLqh9umBSnvabjsMrCcCpAyzglnDvkbYKHs= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= @@ -150,7 +140,6 @@ github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4er github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -162,9 +151,8 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= @@ -173,7 +161,6 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= @@ -193,10 +180,7 @@ github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= -github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= -github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= @@ -222,22 +206,17 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/ironcore-dev/vgopath v0.1.4 h1:hBMuv7+wnZp5JHkVfdg4mtP8hsIGvuv42+l+F2wmQxk= github.com/ironcore-dev/vgopath v0.1.4/go.mod h1:PTGnX8xW/QDytFR7oU4kcXr1RPDLCgAJ0ZUa5Rp8vyI= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= @@ -261,7 +240,6 @@ github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovk github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= @@ -282,7 +260,6 @@ github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjY github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= @@ -293,14 +270,13 @@ github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.15.0 h1:79HwNRBAZHOEwrczrgSOPy+eFTTlIGELKy5as+ClttY= -github.com/onsi/ginkgo/v2 v2.15.0/go.mod h1:HlxMHtYF57y6Dpf+mc5529KKmSq9h2FpCF+/ZkwUxKM= +github.com/onsi/ginkgo/v2 v2.17.1 h1:V++EzdbhI4ZV4ev0UTIj0PzhzOcReJFyJaLjtSF55M8= +github.com/onsi/ginkgo/v2 v2.17.1/go.mod h1:llBI3WDLL9Z6taip6f33H76YcWtJv+7R3HigUjbIBOs= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.31.1 h1:KYppCUK+bUgAZwHOu7EXVBKyQA6ILvOESHkn/tgoqvo= -github.com/onsi/gomega v1.31.1/go.mod h1:y40C95dwAD1Nz36SsEnxvfFe8FFfNxzI5eJ0EYGyAy0= +github.com/onsi/gomega v1.32.0 h1:JRYU78fJ1LPxlckP6Txi/EYqJvjtMrDC04/MM5XRHPk= +github.com/onsi/gomega v1.32.0/go.mod h1:a4x4gW6Pz2yK1MAmvluYme5lvYTn61afQ2ETw/8n4Lg= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -309,22 +285,13 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRI github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.72.0 h1:9h7PxMhT1S8lOdadEKJnBh3ELMdO60XkoDV98grYjuM= github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.72.0/go.mod h1:4FiLCL664L4dNGeqZewiiD0NS7hhqi/CxyM4UOq5dfM= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.18.0 h1:HzFfmkOzH5Q8L8G+kSJKUx5dtG87sewO+FoDDqP5Tbk= github.com/prometheus/client_golang v1.18.0/go.mod h1:T+GXkCk5wSJyOqMIzVgvvjFDlkOQntgjkJWKrN5txjA= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= @@ -337,7 +304,6 @@ github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFR github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8= github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= @@ -350,7 +316,6 @@ github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzu github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= @@ -385,28 +350,24 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= -golang.org/x/crypto v0.20.0 h1:jmAMJJZXr5KiCw05dfYK9QnqaqKLYXijU23lsEdcQqg= -golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ= +golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= +golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= -golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= +golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 h1:aAcj0Da7eBAtrTp03QXWvm88pSyOt+UgdZw2BFZ+lEw= +golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8/go.mod h1:CQ1k9gNrJ50XIzaKCRR2hssIjF07kZFEiieALBM/ARQ= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -424,13 +385,11 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= -golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic= +golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -441,7 +400,6 @@ golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= @@ -450,15 +408,15 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= -golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= -golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= +golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= +golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.15.0 h1:s8pnnxNVzjWyrvYdFUQq5llS1PX2zhPXmccZv99h7uQ= -golang.org/x/oauth2 v0.15.0/go.mod h1:q48ptWNTY5XWf+JNten23lcvHpLJ0ZSxF5ttTHKVCAM= +golang.org/x/oauth2 v0.16.0 h1:aDkGMBSYxElaoP81NpoUoz2oo2R2wHdZpGToUxfyQrQ= +golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2o= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -467,14 +425,10 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= -golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -484,7 +438,6 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -497,14 +450,13 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= -golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= -golang.org/x/term v0.17.0 h1:mkTF7LCd6WGJNL3K1Ad7kwxNfYAW6a8a8QqtMblp/4U= -golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= +golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= @@ -536,7 +488,6 @@ golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -546,8 +497,8 @@ golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA= -golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= +golang.org/x/tools v0.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw= +golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -595,11 +546,8 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= -google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -622,76 +570,61 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -helm.sh/helm/v3 v3.14.2 h1:V71fv+NGZv0icBlr+in1MJXuUIHCiPG1hW9gEBISTIA= -helm.sh/helm/v3 v3.14.2/go.mod h1:2itvvDv2WSZXTllknfQo6j7u3VVgMAvm8POCDgYH424= +helm.sh/helm/v3 v3.14.3 h1:HmvRJlwyyt9HjgmAuxHbHv3PhMz9ir/XNWHyXfmnOP4= +helm.sh/helm/v3 v3.14.3/go.mod h1:v6myVbyseSBJTzhmeE39UcPLNv6cQK6qss3dvgAySaE= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -istio.io/api v1.19.7-0.20240110022508-68cf4097ffc5 h1:wR3m6KvLnflLUDQ+alDY8gAG1H3veH5LUtqjSEZk3mo= -istio.io/api v1.19.7-0.20240110022508-68cf4097ffc5/go.mod h1:KstZe4bKbXouALUJ5PqpjNEhu5nj90HrDFitZfpNhlU= -istio.io/client-go v1.19.7-0.20240110023605-ad5ce1f48b56 h1:KgQr08nNcZxhIwkXimdEVLSPAtM9+Lc0Mux2qddCjqg= -istio.io/client-go v1.19.7-0.20240110023605-ad5ce1f48b56/go.mod h1:MrVvkqWjM6iK2xO8jrAcuwfvjOy6HcNJRD/r0LWE6mM= -k8s.io/api v0.18.3/go.mod h1:UOaMwERbqJMfeeeHc8XJKawj4P9TgDRnViIqqBeH2QA= -k8s.io/api v0.18.8/go.mod h1:d/CXqwWv+Z2XEG1LgceeDmHQwpUJhROPx16SlxJgERY= +istio.io/api v1.19.8 h1:oe0Ccz8L/sMYBubTu4eoQgNFXpbzTzQ9M97+G3mHWDw= +istio.io/api v1.19.8/go.mod h1:KstZe4bKbXouALUJ5PqpjNEhu5nj90HrDFitZfpNhlU= +istio.io/client-go v1.19.8 h1:HluyTLIuL8oEm0ySTo4IZGEEMvZw413gYH9zI0Jzcj8= +istio.io/client-go v1.19.8/go.mod h1:wpLEk59sC4l97oqEXbj6pMcTJc/MiyTViusixPPITG4= k8s.io/api v0.19.0/go.mod h1:I1K45XlvTrDjmj5LoM5LuP/KYrhWbjUKT/SoPG0qTjw= -k8s.io/api v0.29.2 h1:hBC7B9+MU+ptchxEqTNW2DkUosJpp1P+Wn6YncZ474A= -k8s.io/api v0.29.2/go.mod h1:sdIaaKuU7P44aoyyLlikSLayT6Vb7bvJNCX105xZXY0= -k8s.io/apiextensions-apiserver v0.29.2 h1:UK3xB5lOWSnhaCk0RFZ0LUacPZz9RY4wi/yt2Iu+btg= -k8s.io/apiextensions-apiserver v0.29.2/go.mod h1:aLfYjpA5p3OwtqNXQFkhJ56TB+spV8Gc4wfMhUA3/b8= -k8s.io/apimachinery v0.18.3/go.mod h1:OaXp26zu/5J7p0f92ASynJa1pZo06YlV9fG7BoWbCko= -k8s.io/apimachinery v0.18.8/go.mod h1:6sQd+iHEqmOtALqOFjSWp2KZ9F0wlU/nWm0ZgsYWMig= +k8s.io/api v0.29.3 h1:2ORfZ7+bGC3YJqGpV0KSDDEVf8hdGQ6A03/50vj8pmw= +k8s.io/api v0.29.3/go.mod h1:y2yg2NTyHUUkIoTC+phinTnEa3KFM6RZ3szxt014a80= +k8s.io/apiextensions-apiserver v0.29.3 h1:9HF+EtZaVpFjStakF4yVufnXGPRppWFEQ87qnO91YeI= +k8s.io/apiextensions-apiserver v0.29.3/go.mod h1:po0XiY5scnpJfFizNGo6puNU6Fq6D70UJY2Cb2KwAVc= k8s.io/apimachinery v0.19.0/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA= -k8s.io/apimachinery v0.29.2 h1:EWGpfJ856oj11C52NRCHuU7rFDwxev48z+6DSlGNsV8= -k8s.io/apimachinery v0.29.2/go.mod h1:6HVkd1FwxIagpYrHSwJlQqZI3G9LfYWRPAkUvLnXTKU= -k8s.io/apiserver v0.29.2 h1:+Z9S0dSNr+CjnVXQePG8TcBWHr3Q7BmAr7NraHvsMiQ= -k8s.io/apiserver v0.29.2/go.mod h1:B0LieKVoyU7ykQvPFm7XSdIHaCHSzCzQWPFa5bqbeMQ= -k8s.io/autoscaler/vertical-pod-autoscaler v0.9.0/go.mod h1:PwWTGRRCxefhAezrDbG/tRYSAW7etHjjMPAr8fXKVAA= +k8s.io/apimachinery v0.29.3 h1:2tbx+5L7RNvqJjn7RIuIKu9XTsIZ9Z5wX2G22XAa5EU= +k8s.io/apimachinery v0.29.3/go.mod h1:hx/S4V2PNW4OMg3WizRrHutyB5la0iCUbZym+W0EQIU= +k8s.io/apiserver v0.29.3 h1:xR7ELlJ/BZSr2n4CnD3lfA4gzFivh0wwfNfz9L0WZcE= +k8s.io/apiserver v0.29.3/go.mod h1:hrvXlwfRulbMbBgmWRQlFru2b/JySDpmzvQwwk4GUOs= k8s.io/autoscaler/vertical-pod-autoscaler v1.0.0 h1:y0TgWoHaeYEv3L1MfLC+D2WVxyN1fGr6axURHXq+wHE= k8s.io/autoscaler/vertical-pod-autoscaler v1.0.0/go.mod h1:w6/LjLR3DPQd57vlgvgbpzpuJKsCiily0+OzQI+nyfI= -k8s.io/client-go v0.18.3/go.mod h1:4a/dpQEvzAhT1BbuWW09qvIaGw6Gbu1gZYiQZIi1DMw= k8s.io/client-go v0.19.0/go.mod h1:H9E/VT95blcFQnlyShFgnFT9ZnJOAceiUHM3MlRC+mU= -k8s.io/client-go v0.29.2 h1:FEg85el1TeZp+/vYJM7hkDlSTFZ+c5nnK44DJ4FyoRg= -k8s.io/client-go v0.29.2/go.mod h1:knlvFZE58VpqbQpJNbCbctTVXcd35mMyAAwBdpt4jrA= -k8s.io/code-generator v0.18.3/go.mod h1:TgNEVx9hCyPGpdtCWA34olQYLkh3ok9ar7XfSsr8b6c= +k8s.io/client-go v0.29.3 h1:R/zaZbEAxqComZ9FHeQwOh3Y1ZUs7FaHKZdQtIc2WZg= +k8s.io/client-go v0.29.3/go.mod h1:tkDisCvgPfiRpxGnOORfkljmS+UrW+WtXAy2fTvXJB0= k8s.io/code-generator v0.19.0/go.mod h1:moqLn7w0t9cMs4+5CQyxnfA/HV8MF6aAVENF+WZZhgk= -k8s.io/code-generator v0.29.2 h1:c9/iw2KnNpw2IRV+wwuG/Wns2TjPSgjWzbbjTevyiHI= -k8s.io/code-generator v0.29.2/go.mod h1:FwFi3C9jCrmbPjekhaCYcYG1n07CYiW1+PAPCockaos= -k8s.io/component-base v0.18.3/go.mod h1:bp5GzGR0aGkYEfTj+eTY0AN/vXTgkJdQXjNTTVUaa3k= -k8s.io/component-base v0.29.2 h1:lpiLyuvPA9yV1aQwGLENYyK7n/8t6l3nn3zAtFTJYe8= -k8s.io/component-base v0.29.2/go.mod h1:BfB3SLrefbZXiBfbM+2H1dlat21Uewg/5qtKOl8degM= -k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/code-generator v0.29.3 h1:m7E25/t9R9NvejspO2zBdyu+/Gl0Z5m7dCRc680KS14= +k8s.io/code-generator v0.29.3/go.mod h1:x47ofBhN4gxYFcxeKA1PYXeaPreAGaDN85Y/lNUsPoM= +k8s.io/component-base v0.29.3 h1:Oq9/nddUxlnrCuuR2K/jp6aflVvc0uDvxMzAWxnGzAo= +k8s.io/component-base v0.29.3/go.mod h1:Yuj33XXjuOk2BAaHsIGHhCKZQAgYKhqIxIjIr2UXYio= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20201203183100-97869a43a9d9/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01 h1:pWEwq4Asjm4vjW7vcsmijwBhOr1/shsbSYiWXmNGlks= k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= -k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v0.2.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= -k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= -k8s.io/kube-aggregator v0.29.2 h1:z9qJn5wlGmGaX6EfM7OEhr6fq6SBjDKR6tPRZ/qgxeY= -k8s.io/kube-aggregator v0.29.2/go.mod h1:QEuwzmMJJsg0eg1Gv+u4cWcYeJG2+8vN8/nTXBzopUo= -k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= +k8s.io/kube-aggregator v0.29.3 h1:5KvTyFN8sQq2imq8tMAHWEKoE64Zg9WSMaGX78KV6ps= +k8s.io/kube-aggregator v0.29.3/go.mod h1:xGJqV/SJJ1fbwTGfQLAZfwgqX1EMoaqfotDTkDrqqSk= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780= k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= -k8s.io/kubelet v0.29.2 h1:bQ2StqkUqPCFNLtGLsb3v3O2LKQHXNMju537zOGboRg= -k8s.io/kubelet v0.29.2/go.mod h1:i5orNPqW/fAMrqptbCXFW/vLBBP12TZZc41IrrvF7SY= -k8s.io/metrics v0.18.3/go.mod h1:TkuJE3ezDZ1ym8pYkZoEzJB7HDiFE7qxl+EmExEBoPA= -k8s.io/metrics v0.29.2 h1:oLSTHEr40V7c7C8wDRRhiAefjGRHROK5zeV8NT0tpzc= -k8s.io/metrics v0.29.2/go.mod h1:cWzACDpKElWhm0CElwfK+7I39wDNbmDDCX7hywjvgR4= -k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= +k8s.io/kubelet v0.29.3 h1:X9h0ZHzc+eUeNTaksbN0ItHyvGhQ7Z0HPjnQD2oHdwU= +k8s.io/kubelet v0.29.3/go.mod h1:jDiGuTkFOUynyBKzOoC1xRSWlgAZ9UPcTYeFyjr6vas= +k8s.io/metrics v0.29.3 h1:nN+eavbMQ7Kuif2tIdTr2/F2ec2E/SIAWSruTZ+Ye6U= +k8s.io/metrics v0.29.3/go.mod h1:kb3tGGC4ZcIDIuvXyUE291RwJ5WmDu0tB4wAVZM6h2I= k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20240102154912-e7106e64919e h1:eQ/4ljkx21sObifjzXwlPKpdGLrCfRziVtos3ofG/sQ= -k8s.io/utils v0.0.0-20240102154912-e7106e64919e/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20240310230437-4693a0247e57 h1:gbqbevonBh57eILzModw6mrkbwM0gQBEuevE/AaBsHY= +k8s.io/utils v0.0.0-20240310230437-4693a0247e57/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= sigs.k8s.io/controller-runtime v0.17.2 h1:FwHwD1CTUemg0pW2otk7/U5/i5m2ymzvOXdbeGOUvw0= sigs.k8s.io/controller-runtime v0.17.2/go.mod h1:+MngTvIQQQhfXtwfdGw/UOQ/aIaqsYywfCINOtwMO/s= @@ -701,8 +634,6 @@ sigs.k8s.io/controller-tools v0.14.0 h1:rnNoCC5wSXlrNoBKKzL70LNJKIQKEzT6lloG6/LF sigs.k8s.io/controller-tools v0.14.0/go.mod h1:TV7uOtNNnnR72SpzhStvPkoS/U5ir0nMudrkrC4M9Sc= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= -sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= -sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= diff --git a/pkg/controller/operatingsystemconfig/actuator.go b/pkg/controller/operatingsystemconfig/actuator.go index 16c61ae6a..c9315c3e8 100644 --- a/pkg/controller/operatingsystemconfig/actuator.go +++ b/pkg/controller/operatingsystemconfig/actuator.go @@ -10,49 +10,37 @@ import ( "fmt" "github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig" - oscommonactuator "github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/actuator" extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" "github.com/go-logr/logr" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/manager" - "github.com/gardener/gardener-extension-os-suse-chost/pkg/controller/operatingsystemconfig/generator" "github.com/gardener/gardener-extension-os-suse-chost/pkg/memoryone" ) type actuator struct { - client client.Client - useGardenerNodeAgent bool + client client.Client } // NewActuator creates a new Actuator that updates the status of the handled OperatingSystemConfig resources. -func NewActuator(mgr manager.Manager, useGardenerNodeAgent bool) operatingsystemconfig.Actuator { +func NewActuator(mgr manager.Manager) operatingsystemconfig.Actuator { return &actuator{ - client: mgr.GetClient(), - useGardenerNodeAgent: useGardenerNodeAgent, + client: mgr.GetClient(), } } -func (a *actuator) Reconcile(ctx context.Context, log logr.Logger, osc *extensionsv1alpha1.OperatingSystemConfig) ([]byte, *string, []string, []string, []extensionsv1alpha1.Unit, []extensionsv1alpha1.File, error) { - cloudConfig, command, err := oscommonactuator.CloudConfigFromOperatingSystemConfig(ctx, log, a.client, osc, generator.NewCloudInitGenerator()) - if err != nil { - return nil, nil, nil, nil, nil, nil, fmt.Errorf("could not generate cloud config: %w", err) - } - +func (a *actuator) Reconcile(ctx context.Context, log logr.Logger, osc *extensionsv1alpha1.OperatingSystemConfig) ([]byte, []extensionsv1alpha1.Unit, []extensionsv1alpha1.File, error) { switch purpose := osc.Spec.Purpose; purpose { case extensionsv1alpha1.OperatingSystemConfigPurposeProvision: - if !a.useGardenerNodeAgent { - return cloudConfig, command, oscommonactuator.OperatingSystemConfigUnitNames(osc), oscommonactuator.OperatingSystemConfigFilePaths(osc), nil, nil, nil - } userData, err := a.handleProvisionOSC(ctx, osc) - return []byte(userData), nil, nil, nil, nil, nil, err + return []byte(userData), nil, nil, err case extensionsv1alpha1.OperatingSystemConfigPurposeReconcile: extensionUnits, extensionFiles, err := a.handleReconcileOSC(osc) - return cloudConfig, command, oscommonactuator.OperatingSystemConfigUnitNames(osc), oscommonactuator.OperatingSystemConfigFilePaths(osc), extensionUnits, extensionFiles, err + return nil, extensionUnits, extensionFiles, err default: - return nil, nil, nil, nil, nil, nil, fmt.Errorf("unknown purpose: %s", purpose) + return nil, nil, nil, fmt.Errorf("unknown purpose: %s", purpose) } } @@ -68,7 +56,7 @@ func (a *actuator) ForceDelete(ctx context.Context, log logr.Logger, osc *extens return a.Delete(ctx, log, osc) } -func (a *actuator) Restore(ctx context.Context, log logr.Logger, osc *extensionsv1alpha1.OperatingSystemConfig) ([]byte, *string, []string, []string, []extensionsv1alpha1.Unit, []extensionsv1alpha1.File, error) { +func (a *actuator) Restore(ctx context.Context, log logr.Logger, osc *extensionsv1alpha1.OperatingSystemConfig) ([]byte, []extensionsv1alpha1.Unit, []extensionsv1alpha1.File, error) { return a.Reconcile(ctx, log, osc) } diff --git a/pkg/controller/operatingsystemconfig/actuator_test.go b/pkg/controller/operatingsystemconfig/actuator_test.go index 037e45b7a..e16f2a20b 100644 --- a/pkg/controller/operatingsystemconfig/actuator_test.go +++ b/pkg/controller/operatingsystemconfig/actuator_test.go @@ -38,6 +38,7 @@ var _ = Describe("Actuator", func() { BeforeEach(func() { fakeClient = fakeclient.NewClientBuilder().Build() mgr = test.FakeManager{Client: fakeClient} + actuator = NewActuator(mgr) osc = &extensionsv1alpha1.OperatingSystemConfig{ Spec: extensionsv1alpha1.OperatingSystemConfigSpec{ @@ -51,33 +52,8 @@ var _ = Describe("Actuator", func() { } }) - When("UseGardenerNodeAgent is false", func() { - BeforeEach(func() { - actuator = NewActuator(mgr, false) - }) - - Describe("#Reconcile", func() { - It("should not return an error", func() { - userData, command, unitNames, fileNames, extensionUnits, extensionFiles, err := actuator.Reconcile(ctx, log, osc) - Expect(err).NotTo(HaveOccurred()) - - Expect(userData).NotTo(BeEmpty()) // legacy logic is tested in ./generator/generator_test.go - Expect(command).To(BeNil()) - Expect(unitNames).To(ConsistOf("some-unit")) - Expect(fileNames).To(ConsistOf("/some/file")) - Expect(extensionUnits).To(BeEmpty()) - Expect(extensionFiles).To(BeEmpty()) - }) - }) - }) - - When("UseGardenerNodeAgent is true", func() { - BeforeEach(func() { - actuator = NewActuator(mgr, true) - }) - - When("purpose is 'provision'", func() { - expectedUserData := `#!/bin/bash + When("purpose is 'provision'", func() { + expectedUserData := `#!/bin/bash # disable the default log rotation mkdir -p /etc/docker/ cat < /etc/docker/daemon.json @@ -160,37 +136,34 @@ fi systemctl enable 'some-unit' && systemctl restart --no-block 'some-unit' ` - When("OS type is 'suse-chost'", func() { - Describe("#Reconcile", func() { - It("should not return an error", func() { - userData, command, unitNames, fileNames, extensionUnits, extensionFiles, err := actuator.Reconcile(ctx, log, osc) - Expect(err).NotTo(HaveOccurred()) - - Expect(string(userData)).To(Equal(expectedUserData)) - Expect(command).To(BeNil()) - Expect(unitNames).To(BeEmpty()) - Expect(fileNames).To(BeEmpty()) - Expect(extensionUnits).To(BeEmpty()) - Expect(extensionFiles).To(BeEmpty()) - }) + When("OS type is 'suse-chost'", func() { + Describe("#Reconcile", func() { + It("should not return an error", func() { + userData, extensionUnits, extensionFiles, err := actuator.Reconcile(ctx, log, osc) + Expect(err).NotTo(HaveOccurred()) + + Expect(string(userData)).To(Equal(expectedUserData)) + Expect(extensionUnits).To(BeEmpty()) + Expect(extensionFiles).To(BeEmpty()) }) }) + }) - When("OS type is 'memoryone-chost'", func() { - BeforeEach(func() { - osc.Spec.Type = memoryone.OSTypeMemoryOneCHost - osc.Spec.ProviderConfig = &runtime.RawExtension{Raw: []byte(`apiVersion: memoryone-chost.os.extensions.gardener.cloud/v1alpha1 + When("OS type is 'memoryone-chost'", func() { + BeforeEach(func() { + osc.Spec.Type = memoryone.OSTypeMemoryOneCHost + osc.Spec.ProviderConfig = &runtime.RawExtension{Raw: []byte(`apiVersion: memoryone-chost.os.extensions.gardener.cloud/v1alpha1 kind: OperatingSystemConfiguration memoryTopology: "4" systemMemory: "8x"`)} - }) + }) - Describe("#Reconcile", func() { - It("should not return an error", func() { - userData, command, unitNames, fileNames, extensionUnits, extensionFiles, err := actuator.Reconcile(ctx, log, osc) - Expect(err).NotTo(HaveOccurred()) + Describe("#Reconcile", func() { + It("should not return an error", func() { + userData, extensionUnits, extensionFiles, err := actuator.Reconcile(ctx, log, osc) + Expect(err).NotTo(HaveOccurred()) - Expect(string(userData)).To(Equal(`Content-Type: multipart/mixed; boundary="==BOUNDARY==" + Expect(string(userData)).To(Equal(`Content-Type: multipart/mixed; boundary="==BOUNDARY==" MIME-Version: 1.0 --==BOUNDARY== Content-Type: text/x-vsmp; section=vsmp @@ -200,20 +173,17 @@ mem_topology=4 Content-Type: text/x-shellscript ` + expectedUserData + ` --==BOUNDARY==`)) - Expect(command).To(BeNil()) - Expect(unitNames).To(BeEmpty()) - Expect(fileNames).To(BeEmpty()) - Expect(extensionUnits).To(BeEmpty()) - Expect(extensionFiles).To(BeEmpty()) - }) + Expect(extensionUnits).To(BeEmpty()) + Expect(extensionFiles).To(BeEmpty()) + }) - It("should use default values for the system_memory and mem_topology", func() { - osc.Spec.ProviderConfig = nil + It("should use default values for the system_memory and mem_topology", func() { + osc.Spec.ProviderConfig = nil - userData, command, unitNames, fileNames, extensionUnits, extensionFiles, err := actuator.Reconcile(ctx, log, osc) - Expect(err).NotTo(HaveOccurred()) + userData, extensionUnits, extensionFiles, err := actuator.Reconcile(ctx, log, osc) + Expect(err).NotTo(HaveOccurred()) - Expect(string(userData)).To(Equal(`Content-Type: multipart/mixed; boundary="==BOUNDARY==" + Expect(string(userData)).To(Equal(`Content-Type: multipart/mixed; boundary="==BOUNDARY==" MIME-Version: 1.0 --==BOUNDARY== Content-Type: text/x-vsmp; section=vsmp @@ -223,33 +193,26 @@ mem_topology=2 Content-Type: text/x-shellscript ` + expectedUserData + ` --==BOUNDARY==`)) - Expect(command).To(BeNil()) - Expect(unitNames).To(BeEmpty()) - Expect(fileNames).To(BeEmpty()) - Expect(extensionUnits).To(BeEmpty()) - Expect(extensionFiles).To(BeEmpty()) - }) + Expect(extensionUnits).To(BeEmpty()) + Expect(extensionFiles).To(BeEmpty()) }) }) }) + }) - When("purpose is 'reconcile'", func() { - BeforeEach(func() { - osc.Spec.Purpose = extensionsv1alpha1.OperatingSystemConfigPurposeReconcile - }) + When("purpose is 'reconcile'", func() { + BeforeEach(func() { + osc.Spec.Purpose = extensionsv1alpha1.OperatingSystemConfigPurposeReconcile + }) - Describe("#Reconcile", func() { - It("should not return an error", func() { - userData, command, unitNames, fileNames, extensionUnits, extensionFiles, err := actuator.Reconcile(ctx, log, osc) - Expect(err).NotTo(HaveOccurred()) + Describe("#Reconcile", func() { + It("should not return an error", func() { + userData, extensionUnits, extensionFiles, err := actuator.Reconcile(ctx, log, osc) + Expect(err).NotTo(HaveOccurred()) - Expect(userData).NotTo(BeEmpty()) // legacy logic is tested in ./generator/generator_test.go - Expect(command).To(BeNil()) - Expect(unitNames).To(ConsistOf("some-unit")) - Expect(fileNames).To(ConsistOf("/some/file")) - Expect(extensionUnits).To(BeEmpty()) - Expect(extensionFiles).To(BeEmpty()) - }) + Expect(userData).To(BeEmpty()) + Expect(extensionUnits).To(BeEmpty()) + Expect(extensionFiles).To(BeEmpty()) }) }) }) diff --git a/pkg/controller/operatingsystemconfig/add.go b/pkg/controller/operatingsystemconfig/add.go index 3e633d3db..adad96bc2 100644 --- a/pkg/controller/operatingsystemconfig/add.go +++ b/pkg/controller/operatingsystemconfig/add.go @@ -24,15 +24,13 @@ type AddOptions struct { Controller controller.Options // IgnoreOperationAnnotation specifies whether to ignore the operation annotation or not. IgnoreOperationAnnotation bool - // UseGardenerNodeAgent specifies whether the gardener-node-agent feature is enabled. - UseGardenerNodeAgent bool } // AddToManagerWithOptions adds a controller with the given Options to the given manager. // The opts.Reconciler is being set with a newly instantiated actuator. func AddToManagerWithOptions(ctx context.Context, mgr manager.Manager, opts AddOptions) error { return operatingsystemconfig.Add(mgr, operatingsystemconfig.AddArgs{ - Actuator: NewActuator(mgr, opts.UseGardenerNodeAgent), + Actuator: NewActuator(mgr), Predicates: operatingsystemconfig.DefaultPredicates(ctx, mgr, opts.IgnoreOperationAnnotation), Types: []string{susechost.OSTypeSuSECHost, memoryone.OSTypeMemoryOneCHost}, ControllerOptions: opts.Controller, diff --git a/pkg/controller/operatingsystemconfig/generator/generator.go b/pkg/controller/operatingsystemconfig/generator/generator.go deleted file mode 100644 index b8999e811..000000000 --- a/pkg/controller/operatingsystemconfig/generator/generator.go +++ /dev/null @@ -1,77 +0,0 @@ -// SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Gardener contributors -// -// SPDX-License-Identifier: Apache-2.0 - -package generator - -import ( - "embed" - "fmt" - "path/filepath" - - oscommontemplate "github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/template" - ostemplate "github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/template" - extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/serializer" - runtimeutils "k8s.io/apimachinery/pkg/util/runtime" - - "github.com/gardener/gardener-extension-os-suse-chost/pkg/apis/memoryonechost" - memoryonechostinstall "github.com/gardener/gardener-extension-os-suse-chost/pkg/apis/memoryonechost/install" - "github.com/gardener/gardener-extension-os-suse-chost/pkg/memoryone" -) - -var ( - bootCmd = "/bin/bash %s" - cloudInitGenerator *ostemplate.CloudInitGenerator - decoder runtime.Decoder -) - -//go:embed templates/* -var templates embed.FS - -func init() { - scheme := runtime.NewScheme() - runtimeutils.Must(memoryonechostinstall.AddToScheme(scheme)) - decoder = serializer.NewCodecFactory(scheme).UniversalDecoder() - - scriptTemplateString, err := templates.ReadFile(filepath.Join("templates", "script.suse-chost.template")) - runtimeutils.Must(err) - - cloudInitTemplate, err := ostemplate.NewTemplate("script").Parse(string(scriptTemplateString)) - runtimeutils.Must(err) - - cloudInitGenerator = oscommontemplate.NewCloudInitGenerator(cloudInitTemplate, oscommontemplate.DefaultUnitsPath, bootCmd, func(osc *extensionsv1alpha1.OperatingSystemConfig) (map[string]interface{}, error) { - if osc.Spec.Type != memoryone.OSTypeMemoryOneCHost { - return nil, nil - } - - values := map[string]interface{}{ - "MemoryTopology": "2", - "SystemMemory": "6x", - } - - if osc.Spec.ProviderConfig == nil { - return values, nil - } - - obj := &memoryonechost.OperatingSystemConfiguration{} - if _, _, err := decoder.Decode(osc.Spec.ProviderConfig.Raw, nil, obj); err != nil { - return nil, fmt.Errorf("failed to decode provider config: %+v", err) - } - - if obj.MemoryTopology != nil { - values["MemoryTopology"] = *obj.MemoryTopology - } - if obj.SystemMemory != nil { - values["SystemMemory"] = *obj.SystemMemory - } - - return values, nil - }) -} - -// NewCloudInitGenerator creates a new Generator using the template file for suse-chost -func NewCloudInitGenerator() *oscommontemplate.CloudInitGenerator { - return cloudInitGenerator -} diff --git a/pkg/controller/operatingsystemconfig/generator/generator_suite_test.go b/pkg/controller/operatingsystemconfig/generator/generator_suite_test.go deleted file mode 100644 index c1a445bb0..000000000 --- a/pkg/controller/operatingsystemconfig/generator/generator_suite_test.go +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Gardener contributors -// -// SPDX-License-Identifier: Apache-2.0 - -package generator_test - -import ( - "encoding/json" - "testing" - - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" - "k8s.io/apimachinery/pkg/runtime" -) - -func TestGenerator(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Controller OperatingSystemConfig Generator Suite") -} - -func encode(obj runtime.Object) []byte { - data, _ := json.Marshal(obj) - return data -} diff --git a/pkg/controller/operatingsystemconfig/generator/script_test.go b/pkg/controller/operatingsystemconfig/generator/script_test.go deleted file mode 100644 index 50f201fa7..000000000 --- a/pkg/controller/operatingsystemconfig/generator/script_test.go +++ /dev/null @@ -1,100 +0,0 @@ -// SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Gardener contributors -// -// SPDX-License-Identifier: Apache-2.0 - -package generator_test - -import ( - oscommongenerator "github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/generator" - "github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/generator/test" - extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" - "github.com/go-logr/logr" - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/utils/ptr" - - "github.com/gardener/gardener-extension-os-suse-chost/pkg/apis/memoryonechost" - "github.com/gardener/gardener-extension-os-suse-chost/pkg/controller/operatingsystemconfig/generator" - "github.com/gardener/gardener-extension-os-suse-chost/pkg/controller/operatingsystemconfig/generator/testfiles/script" - "github.com/gardener/gardener-extension-os-suse-chost/pkg/memoryone" -) - -var logger = logr.Discard() - -var _ = Describe("Script Generator Test", func() { - gen := generator.NewCloudInitGenerator() - - Describe("Conformance Tests Script", test.DescribeTest(gen, script.Files)) - - Context("memory one", func() { - var ( - onlyOwnerPerm = int32(0600) - osConfig = &oscommongenerator.OperatingSystemConfig{ - Object: &extensionsv1alpha1.OperatingSystemConfig{ - Spec: extensionsv1alpha1.OperatingSystemConfigSpec{ - DefaultSpec: extensionsv1alpha1.DefaultSpec{ - Type: memoryone.OSTypeMemoryOneCHost, - ProviderConfig: &runtime.RawExtension{ - Raw: encode(&memoryonechost.OperatingSystemConfiguration{ - MemoryTopology: ptr.To("3"), - SystemMemory: ptr.To("7x"), - }), - }, - }, - Purpose: extensionsv1alpha1.OperatingSystemConfigPurposeProvision, - }, - }, - Files: []*oscommongenerator.File{ - { - Path: "/foo", - Content: []byte("bar"), - Permissions: &onlyOwnerPerm, - }, - }, - - Units: []*oscommongenerator.Unit{ - { - Name: "docker.service", - Content: []byte("unit"), - DropIns: []*oscommongenerator.DropIn{ - { - Name: "10-docker-opts.conf", - Content: []byte("override"), - }, - }, - }, - { - Name: "cloud-config-downloader.service", - }, - }, - Bootstrap: true, - } - expectedCloudInitBootstrap []byte - expectedCloudInitReconcile []byte - err error - ) - - BeforeEach(func() { - expectedCloudInitBootstrap, err = script.Files.ReadFile("script.memoryone-chost-bootstrap") - Expect(err).NotTo(HaveOccurred()) - expectedCloudInitReconcile, err = script.Files.ReadFile("script.memoryone-chost-reconcile") - Expect(err).NotTo(HaveOccurred()) - }) - - It("should render correctly bootstrap", func() { - cloudInit, _, err := gen.Generate(logger, osConfig) - - Expect(err).NotTo(HaveOccurred()) - Expect(cloudInit).To(Equal(expectedCloudInitBootstrap)) - }) - - It("should render correctly reconcile", func() { - osConfig.Bootstrap = false - cloudInit, _, err := gen.Generate(logger, osConfig) - - Expect(err).NotTo(HaveOccurred()) - Expect(cloudInit).To(Equal(expectedCloudInitReconcile)) - }) - }) -}) diff --git a/pkg/controller/operatingsystemconfig/generator/templates/script.suse-chost.template b/pkg/controller/operatingsystemconfig/generator/templates/script.suse-chost.template deleted file mode 100644 index b333a2f11..000000000 --- a/pkg/controller/operatingsystemconfig/generator/templates/script.suse-chost.template +++ /dev/null @@ -1,128 +0,0 @@ -{{- if and (eq .Type "memoryone-chost") .Bootstrap -}} -Content-Type: multipart/mixed; boundary="==BOUNDARY==" -MIME-Version: 1.0 ---==BOUNDARY== -Content-Type: text/x-vsmp; section=vsmp -system_memory={{ .AdditionalValues.SystemMemory }} -mem_topology={{ .AdditionalValues.MemoryTopology }} ---==BOUNDARY== -Content-Type: text/x-shellscript -#!/bin/bash -{{- else -}} -#!/bin/bash -{{- end -}} -{{- define "put-content" -}} -cat << EOF | base64 -d > '{{ .Path }}' -{{ .Content }} -EOF -{{- end }} -{{- define "put-content-unencoded" -}} -cat << EOF > '{{ .Path }}' -{{ .Content }} -EOF -{{- end }} - -{{ if .Bootstrap -}} -# disable the default log rotation -mkdir -p /etc/docker/ -cat < /etc/docker/daemon.json -{ - "log-level": "warn", - "log-driver": "json-file" -} -EOF -{{ end -}} - -{{ if and (isContainerDEnabled .CRI) .Bootstrap }} -CONTAINERD_CONFIG_PATH=/etc/containerd/config.toml -if [[ ! -s "${CONTAINERD_CONFIG_PATH}" || $(cat ${CONTAINERD_CONFIG_PATH}) == "# See containerd-config.toml(5) for documentation." ]]; then - mkdir -p /etc/containerd - containerd config default > "${CONTAINERD_CONFIG_PATH}" - chmod 0644 "${CONTAINERD_CONFIG_PATH}" -fi - -if systemctl show containerd -p Conflicts | grep -q docker; then - sed -re 's/Conflicts=(.*)(docker.service|docker)(.*)/Conflicts=\1 \3/g' -i /usr/lib/systemd/system/containerd.service -fi - -mkdir -p /etc/systemd/system/containerd.service.d -cat < /etc/systemd/system/containerd.service.d/11-exec_config.conf -[Service] -ExecStart= -ExecStart=/usr/sbin/containerd --config=${CONTAINERD_CONFIG_PATH} -EOF -chmod 0644 /etc/systemd/system/containerd.service.d/11-exec_config.conf -{{- end }} - -{{ range $_, $file := .Files -}} -mkdir -p '{{ $file.Dirname }}' -{{ if $file.TransmitUnencoded -}} -{{ template "put-content-unencoded" $file }} -{{- else -}} -{{ template "put-content" $file }} -{{- end }} -{{- if $file.Permissions }} -chmod '{{ $file.Permissions }}' '{{ $file.Path }}' -{{ end }} -{{ end }} -{{- range $_, $unit := .Units -}} -{{ if $unit.Content -}} -{{ template "put-content" $unit }} -{{- end }} -{{ if $unit.DropIns }} -mkdir -p '{{ $unit.DropIns.Path }}' -{{ range $_, $dropIn := $unit.DropIns.Items -}} -{{ template "put-content" $dropIn }} -{{- end -}} -{{- end -}} -{{- end }} - -if [[ -d /sys/class/net/eth0 ]] -then - ip link set dev eth0 mtu 1460 - grep -q '^MTU' /etc/sysconfig/network/ifcfg-eth0 && sed -i 's/^MTU.*/MTU=1460/' /etc/sysconfig/network/ifcfg-eth0 || echo 'MTU=1460' >> /etc/sysconfig/network/ifcfg-eth0 - wicked ifreload eth0 -fi - -# mitigate https://github.com/systemd/systemd/issues/7082 -# ref https://github.com/coreos/bugs/issues/2193#issuecomment-337767555 -SYSTEMD_VERSION=$(rpm -q --qf %{VERSION} systemd | grep -Po '^[1-9]\d*') -SUSE_VARIANT_VERSION=$(grep -oP '(?<=^VARIANT_VERSION=).+' /etc/os-release | tr -d '"') -SUSE_SP_ID=$(grep -oP '(?<=^VERSION_ID=).+' /etc/os-release | tr -d '"' | cut -d '.' -f 2) - -if [[ $SYSMTED_VERSION -lt 236 && -n $SUSE_SP_ID && $SUSE_SP_ID -lt 3 && -n $SUSE_VARIANT_VERSION && $SUSE_VARIANT_VERSION -lt 20210722 ]]; then - mkdir -p /etc/systemd/system/systemd-hostnamed.service.d/ - cat < /etc/systemd/system/systemd-hostnamed.service.d/10-protect-system.conf -[Service] -ProtectSystem=full -EOF - systemctl daemon-reload -fi - -{{ if .Bootstrap -}} -until zypper -q install -y docker wget socat jq nfs-client; [ $? -ne 7 ]; do sleep 1; done -ln -s /usr/bin/docker /bin/docker -ln -s /bin/ip /usr/bin/ip -if [ ! -s /etc/hostname ]; then hostname > /etc/hostname; fi -systemctl daemon-reload -{{- if isContainerDEnabled .CRI }} -ln -s /usr/sbin/containerd-ctr /usr/sbin/ctr -systemctl enable containerd && systemctl restart containerd -{{- end }} -systemctl enable docker && systemctl restart docker -systemctl enable cloud-config-downloader && systemctl restart cloud-config-downloader -{{ end -}} -{{ if .Bootstrap -}} -#Set journald storage to persistent such that logs are written to /var/log instead of /run/log -if [[ ! -f /etc/systemd/journald.conf.d/10-use-persistent-log-storage.conf ]]; then - mkdir -p /etc/systemd/journald.conf.d - cat < /etc/systemd/journald.conf.d/10-use-persistent-log-storage.conf -[Journal] -Storage=persistent -EOF - systemctl restart systemd-journald -fi -{{ end -}} -{{- if and (eq .Type "memoryone-chost") .Bootstrap }} ---==BOUNDARY== -{{- end }} diff --git a/pkg/controller/operatingsystemconfig/generator/testfiles/script/cloud-init b/pkg/controller/operatingsystemconfig/generator/testfiles/script/cloud-init deleted file mode 100644 index e6b129965..000000000 --- a/pkg/controller/operatingsystemconfig/generator/testfiles/script/cloud-init +++ /dev/null @@ -1,70 +0,0 @@ -#!/bin/bash - -# disable the default log rotation -mkdir -p /etc/docker/ -cat < /etc/docker/daemon.json -{ - "log-level": "warn", - "log-driver": "json-file" -} -EOF - - -mkdir -p '/' -cat << EOF | base64 -d > '/foo' -YmFy -EOF -chmod '0600' '/foo' - -mkdir -p '/' -cat << EOF > '/foo2' -bar -EOF -cat << EOF | base64 -d > '/etc/systemd/system/docker.service' -dW5pdA== -EOF - -mkdir -p '/etc/systemd/system/docker.service.d' -cat << EOF | base64 -d > '/etc/systemd/system/docker.service.d/10-docker-opts.conf' -b3ZlcnJpZGU= -EOF - -if [[ -d /sys/class/net/eth0 ]] -then - ip link set dev eth0 mtu 1460 - grep -q '^MTU' /etc/sysconfig/network/ifcfg-eth0 && sed -i 's/^MTU.*/MTU=1460/' /etc/sysconfig/network/ifcfg-eth0 || echo 'MTU=1460' >> /etc/sysconfig/network/ifcfg-eth0 - wicked ifreload eth0 -fi - -# mitigate https://github.com/systemd/systemd/issues/7082 -# ref https://github.com/coreos/bugs/issues/2193#issuecomment-337767555 -SYSTEMD_VERSION=$(rpm -q --qf %{VERSION} systemd | grep -Po '^[1-9]\d*') -SUSE_VARIANT_VERSION=$(grep -oP '(?<=^VARIANT_VERSION=).+' /etc/os-release | tr -d '"') -SUSE_SP_ID=$(grep -oP '(?<=^VERSION_ID=).+' /etc/os-release | tr -d '"' | cut -d '.' -f 2) - -if [[ $SYSMTED_VERSION -lt 236 && -n $SUSE_SP_ID && $SUSE_SP_ID -lt 3 && -n $SUSE_VARIANT_VERSION && $SUSE_VARIANT_VERSION -lt 20210722 ]]; then - mkdir -p /etc/systemd/system/systemd-hostnamed.service.d/ - cat < /etc/systemd/system/systemd-hostnamed.service.d/10-protect-system.conf -[Service] -ProtectSystem=full -EOF - systemctl daemon-reload -fi - -until zypper -q install -y docker wget socat jq nfs-client; [ $? -ne 7 ]; do sleep 1; done -ln -s /usr/bin/docker /bin/docker -ln -s /bin/ip /usr/bin/ip -if [ ! -s /etc/hostname ]; then hostname > /etc/hostname; fi -systemctl daemon-reload -systemctl enable docker && systemctl restart docker -systemctl enable cloud-config-downloader && systemctl restart cloud-config-downloader -#Set journald storage to persistent such that logs are written to /var/log instead of /run/log -if [[ ! -f /etc/systemd/journald.conf.d/10-use-persistent-log-storage.conf ]]; then - mkdir -p /etc/systemd/journald.conf.d - cat < /etc/systemd/journald.conf.d/10-use-persistent-log-storage.conf -[Journal] -Storage=persistent -EOF - systemctl restart systemd-journald -fi - diff --git a/pkg/controller/operatingsystemconfig/generator/testfiles/script/embed.go b/pkg/controller/operatingsystemconfig/generator/testfiles/script/embed.go deleted file mode 100644 index d2c3b6751..000000000 --- a/pkg/controller/operatingsystemconfig/generator/testfiles/script/embed.go +++ /dev/null @@ -1,14 +0,0 @@ -// SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Gardener contributors -// -// SPDX-License-Identifier: Apache-2.0 - -package script - -import ( - "embed" -) - -// Files contains the contents of the script testfiles directory -// -//go:embed cloud-init script* -var Files embed.FS diff --git a/pkg/controller/operatingsystemconfig/generator/testfiles/script/script.memoryone-chost-bootstrap b/pkg/controller/operatingsystemconfig/generator/testfiles/script/script.memoryone-chost-bootstrap deleted file mode 100644 index f87718baf..000000000 --- a/pkg/controller/operatingsystemconfig/generator/testfiles/script/script.memoryone-chost-bootstrap +++ /dev/null @@ -1,76 +0,0 @@ -Content-Type: multipart/mixed; boundary="==BOUNDARY==" -MIME-Version: 1.0 ---==BOUNDARY== -Content-Type: text/x-vsmp; section=vsmp -system_memory=7x -mem_topology=3 ---==BOUNDARY== -Content-Type: text/x-shellscript -#!/bin/bash - -# disable the default log rotation -mkdir -p /etc/docker/ -cat < /etc/docker/daemon.json -{ - "log-level": "warn", - "log-driver": "json-file" -} -EOF - - -mkdir -p '/' -cat << EOF | base64 -d > '/foo' -YmFy -EOF -chmod '0600' '/foo' - -cat << EOF | base64 -d > '/etc/systemd/system/docker.service' -dW5pdA== -EOF - -mkdir -p '/etc/systemd/system/docker.service.d' -cat << EOF | base64 -d > '/etc/systemd/system/docker.service.d/10-docker-opts.conf' -b3ZlcnJpZGU= -EOF - - -if [[ -d /sys/class/net/eth0 ]] -then - ip link set dev eth0 mtu 1460 - grep -q '^MTU' /etc/sysconfig/network/ifcfg-eth0 && sed -i 's/^MTU.*/MTU=1460/' /etc/sysconfig/network/ifcfg-eth0 || echo 'MTU=1460' >> /etc/sysconfig/network/ifcfg-eth0 - wicked ifreload eth0 -fi - -# mitigate https://github.com/systemd/systemd/issues/7082 -# ref https://github.com/coreos/bugs/issues/2193#issuecomment-337767555 -SYSTEMD_VERSION=$(rpm -q --qf %{VERSION} systemd | grep -Po '^[1-9]\d*') -SUSE_VARIANT_VERSION=$(grep -oP '(?<=^VARIANT_VERSION=).+' /etc/os-release | tr -d '"') -SUSE_SP_ID=$(grep -oP '(?<=^VERSION_ID=).+' /etc/os-release | tr -d '"' | cut -d '.' -f 2) - -if [[ $SYSMTED_VERSION -lt 236 && -n $SUSE_SP_ID && $SUSE_SP_ID -lt 3 && -n $SUSE_VARIANT_VERSION && $SUSE_VARIANT_VERSION -lt 20210722 ]]; then - mkdir -p /etc/systemd/system/systemd-hostnamed.service.d/ - cat < /etc/systemd/system/systemd-hostnamed.service.d/10-protect-system.conf -[Service] -ProtectSystem=full -EOF - systemctl daemon-reload -fi - -until zypper -q install -y docker wget socat jq nfs-client; [ $? -ne 7 ]; do sleep 1; done -ln -s /usr/bin/docker /bin/docker -ln -s /bin/ip /usr/bin/ip -if [ ! -s /etc/hostname ]; then hostname > /etc/hostname; fi -systemctl daemon-reload -systemctl enable docker && systemctl restart docker -systemctl enable cloud-config-downloader && systemctl restart cloud-config-downloader -#Set journald storage to persistent such that logs are written to /var/log instead of /run/log -if [[ ! -f /etc/systemd/journald.conf.d/10-use-persistent-log-storage.conf ]]; then - mkdir -p /etc/systemd/journald.conf.d - cat < /etc/systemd/journald.conf.d/10-use-persistent-log-storage.conf -[Journal] -Storage=persistent -EOF - systemctl restart systemd-journald -fi - ---==BOUNDARY== diff --git a/pkg/controller/operatingsystemconfig/generator/testfiles/script/script.memoryone-chost-reconcile b/pkg/controller/operatingsystemconfig/generator/testfiles/script/script.memoryone-chost-reconcile deleted file mode 100644 index 5575021eb..000000000 --- a/pkg/controller/operatingsystemconfig/generator/testfiles/script/script.memoryone-chost-reconcile +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/bash - - - -mkdir -p '/' -cat << EOF | base64 -d > '/foo' -YmFy -EOF -chmod '0600' '/foo' - -cat << EOF | base64 -d > '/etc/systemd/system/docker.service' -dW5pdA== -EOF - -mkdir -p '/etc/systemd/system/docker.service.d' -cat << EOF | base64 -d > '/etc/systemd/system/docker.service.d/10-docker-opts.conf' -b3ZlcnJpZGU= -EOF - - -if [[ -d /sys/class/net/eth0 ]] -then - ip link set dev eth0 mtu 1460 - grep -q '^MTU' /etc/sysconfig/network/ifcfg-eth0 && sed -i 's/^MTU.*/MTU=1460/' /etc/sysconfig/network/ifcfg-eth0 || echo 'MTU=1460' >> /etc/sysconfig/network/ifcfg-eth0 - wicked ifreload eth0 -fi - -# mitigate https://github.com/systemd/systemd/issues/7082 -# ref https://github.com/coreos/bugs/issues/2193#issuecomment-337767555 -SYSTEMD_VERSION=$(rpm -q --qf %{VERSION} systemd | grep -Po '^[1-9]\d*') -SUSE_VARIANT_VERSION=$(grep -oP '(?<=^VARIANT_VERSION=).+' /etc/os-release | tr -d '"') -SUSE_SP_ID=$(grep -oP '(?<=^VERSION_ID=).+' /etc/os-release | tr -d '"' | cut -d '.' -f 2) - -if [[ $SYSMTED_VERSION -lt 236 && -n $SUSE_SP_ID && $SUSE_SP_ID -lt 3 && -n $SUSE_VARIANT_VERSION && $SUSE_VARIANT_VERSION -lt 20210722 ]]; then - mkdir -p /etc/systemd/system/systemd-hostnamed.service.d/ - cat < /etc/systemd/system/systemd-hostnamed.service.d/10-protect-system.conf -[Service] -ProtectSystem=full -EOF - systemctl daemon-reload -fi - - diff --git a/vendor/github.com/gardener/cert-management/LICENSE b/vendor/github.com/gardener/cert-management/LICENSE new file mode 100644 index 000000000..7a4a3ea24 --- /dev/null +++ b/vendor/github.com/gardener/cert-management/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/vendor/github.com/gardener/cert-management/pkg/apis/cert/register.go b/vendor/github.com/gardener/cert-management/pkg/apis/cert/register.go new file mode 100644 index 000000000..945eea649 --- /dev/null +++ b/vendor/github.com/gardener/cert-management/pkg/apis/cert/register.go @@ -0,0 +1,14 @@ +/* + * SPDX-FileCopyrightText: 2019 SAP SE or an SAP affiliate company and Gardener contributors + * + * SPDX-License-Identifier: Apache-2.0 + */ + +//go:generate sh -c "CONTROLLER_GEN=$CONTROLLER_GEN bash $CONTROLLER_MANAGER_LIB_HACK_DIR/generate-crds" + +package cert + +const ( + // GroupName is the name of the certificate API group. + GroupName = "cert.gardener.cloud" +) diff --git a/vendor/github.com/gardener/cert-management/pkg/apis/cert/v1alpha1/doc.go b/vendor/github.com/gardener/cert-management/pkg/apis/cert/v1alpha1/doc.go new file mode 100644 index 000000000..bf31d0c03 --- /dev/null +++ b/vendor/github.com/gardener/cert-management/pkg/apis/cert/v1alpha1/doc.go @@ -0,0 +1,11 @@ +/* + * SPDX-FileCopyrightText: 2019 SAP SE or an SAP affiliate company and Gardener contributors + * + * SPDX-License-Identifier: Apache-2.0 + */ + +// +k8s:deepcopy-gen=package,register + +// Package v1alpha1 is the v1alpha1 version of the API. +// +groupName=cert.gardener.cloud +package v1alpha1 diff --git a/vendor/github.com/gardener/cert-management/pkg/apis/cert/v1alpha1/register.go b/vendor/github.com/gardener/cert-management/pkg/apis/cert/v1alpha1/register.go new file mode 100644 index 000000000..25f39aff7 --- /dev/null +++ b/vendor/github.com/gardener/cert-management/pkg/apis/cert/v1alpha1/register.go @@ -0,0 +1,65 @@ +/* + * SPDX-FileCopyrightText: 2019 SAP SE or an SAP affiliate company and Gardener contributors + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + + "github.com/gardener/cert-management/pkg/apis/cert" +) + +const ( + // Version is the version of the API. + Version = "v1alpha1" + // GroupName is the group name of the API. + GroupName = cert.GroupName + + // IssuerKind is the issuer kind. + IssuerKind = "Issuer" + + // CertificateKind is the certificate kind. + CertificateKind = "Certificate" + + // CertificateRevocationKind is the certificate revocation kind. + CertificateRevocationKind = "CertificateRevocation" +) + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: cert.GroupName, Version: Version} + +// Kind takes an unqualified kind and returns back a Group qualified GroupKind +func Kind(kind string) schema.GroupKind { + return SchemeGroupVersion.WithKind(kind).GroupKind() +} + +// Resource takes an unqualified resources and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + // SchemeBuilder is a new Scheme Builder which registers our API. + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + // AddToScheme is a reference to the Scheme Builder's AddToScheme function. + AddToScheme = SchemeBuilder.AddToScheme +) + +// Adds the list of known types to Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &Issuer{}, + &IssuerList{}, + &Certificate{}, + &CertificateList{}, + &CertificateRevocation{}, + &CertificateRevocationList{}, + ) + metav1.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil +} diff --git a/vendor/github.com/gardener/cert-management/pkg/apis/cert/v1alpha1/state.go b/vendor/github.com/gardener/cert-management/pkg/apis/cert/v1alpha1/state.go new file mode 100644 index 000000000..4cc073b01 --- /dev/null +++ b/vendor/github.com/gardener/cert-management/pkg/apis/cert/v1alpha1/state.go @@ -0,0 +1,22 @@ +/* + * SPDX-FileCopyrightText: 2019 SAP SE or an SAP affiliate company and Gardener contributors + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package v1alpha1 + +const ( + // StatePending is the pending state. + StatePending = "Pending" + // StateError is the error state. + StateError = "Error" + // StateReady is the ready state. + StateReady = "Ready" + // StateRevoked is the revoked state. + StateRevoked = "Revoked" + // StateRevocationApplied is the applied state. + StateRevocationApplied = "Applied" + // StateRevocationPartialApplied is the partial applied state (partial success). + StateRevocationPartialApplied = "PartialApplied" +) diff --git a/vendor/github.com/gardener/cert-management/pkg/apis/cert/v1alpha1/types.go b/vendor/github.com/gardener/cert-management/pkg/apis/cert/v1alpha1/types.go new file mode 100644 index 000000000..6b63c019b --- /dev/null +++ b/vendor/github.com/gardener/cert-management/pkg/apis/cert/v1alpha1/types.go @@ -0,0 +1,496 @@ +/* + * SPDX-FileCopyrightText: 2019 SAP SE or an SAP affiliate company and Gardener contributors + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package v1alpha1 + +import ( + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" +) + +// CertificateList is the list of Certificate items. +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +type CertificateList struct { + metav1.TypeMeta `json:",inline"` + // Standard list metadata + // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata + metav1.ListMeta `json:"metadata,omitempty"` + Items []Certificate `json:"items"` +} + +// Certificate is the certificate CR. +// +kubebuilder:storageversion +// +kubebuilder:object:root=true +// +kubebuilder:resource:scope=Namespaced,path=certificates,shortName=cert,singular=certificate +// +kubebuilder:subresource:status +// +kubebuilder:printcolumn:name=COMMON NAME,description="Subject domain name of certificate",JSONPath=".status.commonName",type=string +// +kubebuilder:printcolumn:name=ISSUER,description="Issuer name",JSONPath=".status.issuerRef.name",type=string +// +kubebuilder:printcolumn:name=STATUS,JSONPath=".status.state",type=string,description="Status of registration" +// +kubebuilder:printcolumn:name=EXPIRATION_DATE,JSONPath=".status.expirationDate",priority=500,type=string,description="Expiration date (not valid anymore after this date)" +// +kubebuilder:printcolumn:name=DNS_NAMES,JSONPath=".status.dnsNames",priority=2000,type=string,description="Domains names in subject alternative names" +// +kubebuilder:printcolumn:name=AGE,JSONPath=".metadata.creationTimestamp",type=date,description="object creation timestamp" +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +type Certificate struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + Spec CertificateSpec `json:"spec"` + // +optional + Status CertificateStatus `json:"status,omitempty"` +} + +// CertificateSpec is the spec of the certificate to request. +type CertificateSpec struct { + // CommonName is the CN for the certificate (max. 64 chars). + // +optional + // +kubebuilder:validation:MaxLength=64 + CommonName *string `json:"commonName,omitempty"` + // DNSNames are the optional additional domain names of the certificate. + // +optional + DNSNames []string `json:"dnsNames,omitempty"` + // CSR is the alternative way to provide CN,DNSNames and other information. + // +optional + CSR []byte `json:"csr,omitempty"` + // IssuerRef is the reference of the issuer to use. + // +optional + IssuerRef *IssuerRef `json:"issuerRef,omitempty"` + // SecretName is the name of the secret object to use for storing the certificate. + // +optional + SecretName *string `json:"secretName,omitempty"` + // SecretRef is the reference of the secret object to use for storing the certificate. + // +optional + SecretRef *corev1.SecretReference `json:"secretRef,omitempty"` + // SecretLabels are labels to add to the certificate secret. + // +optional + SecretLabels map[string]string `json:"secretLabels,omitempty"` + // Renew triggers a renewal if set to true + // +optional + Renew *bool `json:"renew,omitempty"` + // EnsureRenewedAfter specifies a time stamp in the past. Renewing is only triggered if certificate notBefore date is before this date. + // +optional + EnsureRenewedAfter *metav1.Time `json:"ensureRenewedAfter,omitempty"` + // FollowCNAME if true delegated domain for DNS01 challenge is used if CNAME record for DNS01 challange domain `_acme-challenge.` is set. + // +optional + FollowCNAME *bool `json:"followCNAME,omitempty"` + // Keystores configures additional keystore output formats stored in the `secretName`/`secretRef` Secret resource. + // +optional + Keystores *CertificateKeystores `json:"keystores,omitempty"` + // PreferredChain allows to specify the preferred certificate chain: if the CA offers multiple certificate chains, prefer the chain with an issuer matching this Subject Common Name. If no match, the default offered chain will be used. + // +optional + PreferredChain *string `json:"preferredChain,omitempty"` + // Private key options. These include the key algorithm and size. + // +optional + PrivateKey *CertificatePrivateKey `json:"privateKey,omitempty"` +} + +// IssuerRef is the reference of the issuer by name. +type IssuerRef struct { + // Name is the name of the issuer (in the configured issuer namespace on default cluster or namespace on target cluster as given). + Name string `json:"name"` + // Namespace is the namespace of the issuer, only needed if issuer is defined on target cluster + // +optional + Namespace string `json:"namespace,omitempty"` +} + +// PrivateKeyAlgorithm is the type for the algorithm. +// +kubebuilder:validation:Enum=RSA;ECDSA +type PrivateKeyAlgorithm string + +const ( + // RSAKeyAlgorithm is the value to use the RSA algorithm for the private key. + RSAKeyAlgorithm PrivateKeyAlgorithm = "RSA" + + // ECDSAKeyAlgorithm is the value to use the ECDSA algorithm for the private key. + ECDSAKeyAlgorithm PrivateKeyAlgorithm = "ECDSA" +) + +// PrivateKeySize is the size for the algorithm. +// +kubebuilder:validation:Enum=256;384;2048;3072;4096 +type PrivateKeySize int32 + +// CertificatePrivateKey contains configuration options for private keys +// used by the Certificate controller. +// These include the key algorithm and size. +type CertificatePrivateKey struct { + // Algorithm is the private key algorithm of the corresponding private key + // for this certificate. + // + // If provided, allowed values are either `RSA` or `ECDSA`. + // If `algorithm` is specified and `size` is not provided, + // key size of 2048 will be used for `RSA` key algorithm and + // key size of 256 will be used for `ECDSA` key algorithm. + // +optional + Algorithm *PrivateKeyAlgorithm `json:"algorithm,omitempty"` + + // Size is the key bit size of the corresponding private key for this certificate. + // + // If `algorithm` is set to `RSA`, valid values are `2048`, `3072` or `4096`, + // and will default to `2048` if not specified. + // If `algorithm` is set to `ECDSA`, valid values are `256` or `384`, + // and will default to `256` if not specified. + // No other values are allowed. + // +optional + Size *PrivateKeySize `json:"size,omitempty"` +} + +// BackOffState stores the status for exponential back off on repeated cert request failure +type BackOffState struct { + // ObservedGeneration is the observed generation the BackOffState is assigned to + ObservedGeneration int64 `json:"observedGeneration,omitempty"` + // RetryAfter is the timestamp this cert request is not retried before. + RetryAfter metav1.Time `json:"recheckAfter"` + // RetryInterval is interval to wait for retrying. + RetryInterval metav1.Duration `json:"recheckInterval"` +} + +// CertificateStatus is the status of the certificate request. +type CertificateStatus struct { + // ObservedGeneration is the observed generation of the spec. + ObservedGeneration int64 `json:"observedGeneration,omitempty"` + // State is the certificate state. + State string `json:"state"` + // Message is the status or error message. + // +optional + Message *string `json:"message,omitempty"` + // LastPendingTimestamp contains the start timestamp of the last pending status. + // +optional + LastPendingTimestamp *metav1.Time `json:"lastPendingTimestamp,omitempty"` + // CommonName is the current CN. + // +optional + CommonName *string `json:"commonName,omitempty"` + // DNSNames are the current domain names. + // +optional + DNSNames []string `json:"dnsNames,omitempty"` + // IssuerRef is the used issuer. + // +optional + IssuerRef *QualifiedIssuerRef `json:"issuerRef,omitempty"` + // ExpirationDate shows the notAfter validity date. + // +optional + ExpirationDate *string `json:"expirationDate,omitempty"` + // BackOff contains the state to back off failed certificate requests + // +optional + BackOff *BackOffState `json:"backoff,omitempty"` + // List of status conditions to indicate the status of certificates. + // Known condition types are `Ready`. + // +optional + Conditions []metav1.Condition `json:"conditions,omitempty"` +} + +const ( + // CertificateConditionReady indicates that a certificate is ready for use. + // This is defined as: + // - The target secret exists + // - The target secret contains a certificate that has not expired + // - The target secret contains a private key valid for the certificate + // - The commonName and dnsNames attributes match those specified on the Certificate + CertificateConditionReady string = "Ready" +) + +// QualifiedIssuerRef is the full qualified issuer reference. +type QualifiedIssuerRef struct { + // Cluster is the cluster name of the issuer ('default' or 'target'). + // optional because of backwards compatibility + // +optional + Cluster string `json:"cluster,omitempty"` + // Name is the name of the issuer. + Name string `json:"name"` + // Namespace is the namespace of the issuer. + Namespace string `json:"namespace"` +} + +// IsDefaultCluster returns true if the reference is on the default cluster. +func (r QualifiedIssuerRef) IsDefaultCluster() bool { + return r.Cluster == "default" +} + +// CertificateKeystores configures additional keystore output formats to be created in the Certificate's output Secret. +type CertificateKeystores struct { + // JKS configures options for storing a JKS keystore in the `spec.secretName`/`spec.secretRef` Secret resource. + // +optional + JKS *JKSKeystore `json:"jks,omitempty"` + + // PKCS12 configures options for storing a PKCS12 keystore in the `spec.secretName`/`spec.secretRef` Secret resource. + // +optional + PKCS12 *PKCS12Keystore `json:"pkcs12,omitempty"` +} + +// JKSKeystore configures options for storing a JKS keystore in the `spec.secretName`/`spec.secretRef` Secret resource. +type JKSKeystore struct { + // Create enables JKS keystore creation for the Certificate. + // If true, a file named `keystore.jks` will be created in the target + // Secret resource, encrypted using the password stored in `passwordSecretRef`. + // The keystore file will only be updated upon re-issuance. + Create bool `json:"create"` + + // PasswordSecretRef is a reference to a key in a Secret resource + // containing the password used to encrypt the JKS keystore. + PasswordSecretRef SecretKeySelector `json:"passwordSecretRef"` +} + +// PKCS12Keystore configures options for storing a PKCS12 keystore in the `spec.secretName`/`spec.secretRef` Secret resource. +type PKCS12Keystore struct { + // Create enables PKCS12 keystore creation for the Certificate. + // If true, a file named `keystore.p12` will be created in the target + // Secret resource, encrypted using the password stored in `passwordSecretRef`. + // The keystore file will only be updated upon re-issuance. + Create bool `json:"create"` + + // PasswordSecretRef is a reference to a key in a Secret resource + // containing the password used to encrypt the PKCS12 keystore. + PasswordSecretRef SecretKeySelector `json:"passwordSecretRef"` +} + +// SecretKeySelector is a reference to a key in a Secret resource in the same namespace. +type SecretKeySelector struct { + // SecretName of the secret resource being referred to in the same namespace. + SecretName string `json:"secretName"` + + // Key of the entry in the Secret resource's `data` field to be used. + Key string `json:"key,omitempty"` +} + +// CertificateRevocationList is the list of Certificate revocation items. +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +type CertificateRevocationList struct { + metav1.TypeMeta `json:",inline"` + // Standard list metadata + // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata + metav1.ListMeta `json:"metadata,omitempty"` + Items []CertificateRevocation `json:"items"` +} + +// CertificateRevocation is the certificate revocation custom resource. +// +kubebuilder:storageversion +// +kubebuilder:object:root=true +// +kubebuilder:resource:scope=Namespaced,path=certificaterevocations,shortName=certrevoke,singular=certificaterevocation +// +kubebuilder:subresource:status +// +kubebuilder:printcolumn:name=CERTIFICATE,description="Certificate to be revoked",JSONPath=".spec.certificateRef.name",type=string +// +kubebuilder:printcolumn:name=STATUS,JSONPath=".status.state",type=string,description="status of revocation" +// +kubebuilder:printcolumn:name=REVOKED_AT,JSONPath=".status.revocationApplied",priority=500,type=date,description="timestamp of complete revocation" +// +kubebuilder:printcolumn:name=RENEW,JSONPath=".spec.renew",type=boolean,description="if true certificate objects should be renewed before revoking old certificates certificate(s)" +// +kubebuilder:printcolumn:name=QUALIFIED_AT,JSONPath=".spec.qualifyingDate",type=date,description="qualifying all certificates valid before this timestamp" +// +kubebuilder:printcolumn:name=AGE,JSONPath=".metadata.creationTimestamp",type=date,description="object creation timestamp" +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +type CertificateRevocation struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + Spec CertificateRevocationSpec `json:"spec"` + // +optional + Status CertificateRevocationStatus `json:"status,omitempty"` +} + +// CertificateRevocationSpec is the spec of the certificate revocation. +type CertificateRevocationSpec struct { + // CertificateRef is the references to the certificate to be revoked + CertificateRef CertificateRef `json:"certificateRef,omitempty"` + // Renew specifies if certificate objects should be renewed before revoking old certificates + // +optional + Renew *bool `json:"renew,omitempty"` + // QualifyingDate specifies that any certificate with the same DNS names like the given 'certificateRef' should be revoked + // if it is valid before this date. If not specified, it will be filled with the current time. + // +optional + QualifyingDate *metav1.Time `json:"qualifyingDate,omitempty"` +} + +// CertificateRef is the reference of the issuer by name. +type CertificateRef struct { + // Name is the name of the certificate in the same namespace. + Name string `json:"name"` + // Namespace is the namespace of the certificate CR. + Namespace string `json:"namespace"` +} + +// CertificateSecretRef is a reference to a secret together with the serial number +type CertificateSecretRef struct { + corev1.SecretReference `json:",inline"` + // SerialNumber is the serial number of the certificate + SerialNumber string `json:"serialNumber"` +} + +// CertificateRevocationStatus is the status of the certificate request. +type CertificateRevocationStatus struct { + // ObservedGeneration is the observed generation of the spec. + ObservedGeneration int64 `json:"observedGeneration,omitempty"` + // State is the certificate state. + State string `json:"state"` + // Message is the status or error message. + Message *string `json:"message,omitempty"` + // ObjectStatuses contains the statuses of the involved certificate objects + // +optional + Objects *ObjectStatuses `json:"objects,omitempty"` + // SecretStatuses contains the statuses of the involved certificate secrets + // +optional + Secrets *SecretStatuses `json:"secrets,omitempty"` + // RevocationApplied is the timestamp when the revocation was completed + // +optional + RevocationApplied *metav1.Time `json:"revocationApplied,omitempty"` +} + +// ObjectStatuses contains the statuses of the involved certificate objects +type ObjectStatuses struct { + // Processing is the list of certificate objects to be processed + // +optional + Processing []CertificateRef `json:"processing,omitempty"` + // Renewed is the list of certificate objects successfully renewed + // +optional + Renewed []CertificateRef `json:"renewed,omitempty"` + // Revoked is the list of certificate objects successfully revoked (without renewal) + // +optional + Revoked []CertificateRef `json:"revoked,omitempty"` + // Failed is the list of certificate objects whose processing failed + // +optional + Failed []CertificateRef `json:"failed,omitempty"` +} + +// SecretStatuses contains the statuses of the involved certificate secrets +type SecretStatuses struct { + // Processing is the list of certificate secrets to be processed + // +optional + Processing []CertificateSecretRef `json:"processing,omitempty"` + // Revoked is the list of certificate secrets successfully revoked + // +optional + Revoked []CertificateSecretRef `json:"revoked,omitempty"` + // Failed is the list of certificate secrets whose revocation failed + // +optional + Failed []CertificateSecretRef `json:"failed,omitempty"` +} + +// IssuerList is the list of Issuers +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +type IssuerList struct { + metav1.TypeMeta `json:",inline"` + // Standard list metadata + // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata + metav1.ListMeta `json:"metadata,omitempty"` + Items []Issuer `json:"items"` +} + +// Issuer is the issuer CR. +// +kubebuilder:storageversion +// +kubebuilder:object:root=true +// +kubebuilder:resource:scope=Namespaced,path=issuers,singular=issuer +// +kubebuilder:subresource:status +// +kubebuilder:printcolumn:name=SERVER,description="ACME Server",JSONPath=".spec.acme.server",type=string +// +kubebuilder:printcolumn:name=EMAIL,description="ACME Registration email",JSONPath=".spec.acme.email",type=string +// +kubebuilder:printcolumn:name=STATUS,JSONPath=".status.state",type=string,description="Status of registration" +// +kubebuilder:printcolumn:name=TYPE,JSONPath=".status.type",type=string,description="Issuer type" +// +kubebuilder:printcolumn:name=AGE,JSONPath=".metadata.creationTimestamp",type=date,description="object creation timestamp" +// +kubebuilder:printcolumn:name=INCLUDED_DOMAINS,JSONPath=".spec.acme.domains.include",priority=2000,type=string,description="included domains" +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +type Issuer struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + Spec IssuerSpec `json:"spec"` + // +optional + Status IssuerStatus `json:"status"` +} + +// IssuerSpec is the spec of the issuer. +type IssuerSpec struct { + // ACME is the ACME protocol specific spec. + // +optional + ACME *ACMESpec `json:"acme,omitempty"` + // CA is the CA specific spec. + // +optional + CA *CASpec `json:"ca,omitempty"` + // RequestsPerDayQuota is the maximum number of certificate requests per days allowed for this issuer + // +optional + RequestsPerDayQuota *int `json:"requestsPerDayQuota,omitempty"` +} + +// ACMESpec is the ACME specific part of the spec. +type ACMESpec struct { + // Server is the URL of the ACME server. + Server string `json:"server"` + // Email is the email address to use for user registration. + Email string `json:"email"` + + // AutoRegistration is the flag if automatic registration should be applied if needed. + // +optional + AutoRegistration bool `json:"autoRegistration,omitempty"` + + // PrivateKeySecretRef is the secret ref to the ACME private key. + // +optional + PrivateKeySecretRef *corev1.SecretReference `json:"privateKeySecretRef,omitempty"` + + // ACMEExternalAccountBinding is a reference to a CA external account of the ACME server. + // +optional + ExternalAccountBinding *ACMEExternalAccountBinding `json:"externalAccountBinding,omitempty"` + + // SkipDNSChallengeValidation marks that this issuer does not validate DNS challenges. + // In this case no DNS entries/records are created for a DNS Challenge and DNS propagation + // is not checked. + // +optional + SkipDNSChallengeValidation *bool `json:"skipDNSChallengeValidation,omitempty"` + + // Domains optionally specifies domains allowed or forbidden for certificate requests + // +optional + Domains *DNSSelection `json:"domains,omitempty"` + + // PrecheckNameservers overwrites the default precheck nameservers used for checking DNS propagation. + // Format `host` or `host:port`, e.g. "8.8.8.8" same as "8.8.8.8:53" or "google-public-dns-a.google.com:53". + // +optional + PrecheckNameservers []string `json:"precheckNameservers,omitempty"` +} + +// DNSSelection is a restriction on the domains to be allowed or forbidden for certificate requests +type DNSSelection struct { + // Include are domain names for which certificate requests are allowed (including any subdomains) + //+ optional + Include []string `json:"include,omitempty"` + // Exclude are domain names for which certificate requests are forbidden (including any subdomains) + // + optional + Exclude []string `json:"exclude,omitempty"` +} + +// ACMEExternalAccountBinding is a reference to a CA external account of the ACME server. +type ACMEExternalAccountBinding struct { + // keyID is the ID of the CA key that the External Account is bound to. + KeyID string `json:"keyID"` + + // keySecretRef is the secret ref to the + // Secret which holds the symmetric MAC key of the External Account Binding with data key 'hmacKey'. + // The secret key stored in the Secret **must** be un-padded, base64 URL + // encoded data. + KeySecretRef *corev1.SecretReference `json:"keySecretRef"` +} + +// CASpec is the CA specific part of the spec. +type CASpec struct { + // PrivateKeySecretRef is the secret ref to the CA secret. + // +optional + PrivateKeySecretRef *corev1.SecretReference `json:"privateKeySecretRef,omitempty"` +} + +// IssuerStatus is the status of the issuer. +type IssuerStatus struct { + // ObservedGeneration is the observed generation of the spec. + ObservedGeneration int64 `json:"observedGeneration,omitempty"` + // State is either empty, 'Pending', 'Error', or 'Ready'. + State string `json:"state"` + // Message is the status or error message. + // +optional + Message *string `json:"message,omitempty"` + // Type is the issuer type. Currently only 'acme' and 'ca' are supported. + // +optional + Type *string `json:"type"` + // ACME is the ACME specific status. + // +kubebuilder:validation:XPreserveUnknownFields + // +kubebuilder:pruning:PreserveUnknownFields + // +optional + ACME *runtime.RawExtension `json:"acme,omitempty"` + // CA is the CA specific status. + // +kubebuilder:validation:XPreserveUnknownFields + // +kubebuilder:pruning:PreserveUnknownFields + // +optional + CA *runtime.RawExtension `json:"ca,omitempty"` + // RequestsPerDayQuota is the actual maximum number of certificate requests per days allowed for this issuer + // +optional + RequestsPerDayQuota int `json:"requestsPerDayQuota,omitempty"` +} diff --git a/vendor/github.com/gardener/cert-management/pkg/apis/cert/v1alpha1/zz_generated.deepcopy.go b/vendor/github.com/gardener/cert-management/pkg/apis/cert/v1alpha1/zz_generated.deepcopy.go new file mode 100644 index 000000000..347a04f7f --- /dev/null +++ b/vendor/github.com/gardener/cert-management/pkg/apis/cert/v1alpha1/zz_generated.deepcopy.go @@ -0,0 +1,827 @@ +//go:build !ignore_autogenerated +// +build !ignore_autogenerated + +// SPDX-FileCopyrightText: SAP SE or an SAP affiliate company and Gardener contributors +// +// SPDX-License-Identifier: Apache-2.0 + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + v1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ACMEExternalAccountBinding) DeepCopyInto(out *ACMEExternalAccountBinding) { + *out = *in + if in.KeySecretRef != nil { + in, out := &in.KeySecretRef, &out.KeySecretRef + *out = new(v1.SecretReference) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ACMEExternalAccountBinding. +func (in *ACMEExternalAccountBinding) DeepCopy() *ACMEExternalAccountBinding { + if in == nil { + return nil + } + out := new(ACMEExternalAccountBinding) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ACMESpec) DeepCopyInto(out *ACMESpec) { + *out = *in + if in.PrivateKeySecretRef != nil { + in, out := &in.PrivateKeySecretRef, &out.PrivateKeySecretRef + *out = new(v1.SecretReference) + **out = **in + } + if in.ExternalAccountBinding != nil { + in, out := &in.ExternalAccountBinding, &out.ExternalAccountBinding + *out = new(ACMEExternalAccountBinding) + (*in).DeepCopyInto(*out) + } + if in.SkipDNSChallengeValidation != nil { + in, out := &in.SkipDNSChallengeValidation, &out.SkipDNSChallengeValidation + *out = new(bool) + **out = **in + } + if in.Domains != nil { + in, out := &in.Domains, &out.Domains + *out = new(DNSSelection) + (*in).DeepCopyInto(*out) + } + if in.PrecheckNameservers != nil { + in, out := &in.PrecheckNameservers, &out.PrecheckNameservers + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ACMESpec. +func (in *ACMESpec) DeepCopy() *ACMESpec { + if in == nil { + return nil + } + out := new(ACMESpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BackOffState) DeepCopyInto(out *BackOffState) { + *out = *in + in.RetryAfter.DeepCopyInto(&out.RetryAfter) + out.RetryInterval = in.RetryInterval + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BackOffState. +func (in *BackOffState) DeepCopy() *BackOffState { + if in == nil { + return nil + } + out := new(BackOffState) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CASpec) DeepCopyInto(out *CASpec) { + *out = *in + if in.PrivateKeySecretRef != nil { + in, out := &in.PrivateKeySecretRef, &out.PrivateKeySecretRef + *out = new(v1.SecretReference) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CASpec. +func (in *CASpec) DeepCopy() *CASpec { + if in == nil { + return nil + } + out := new(CASpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Certificate) DeepCopyInto(out *Certificate) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Certificate. +func (in *Certificate) DeepCopy() *Certificate { + if in == nil { + return nil + } + out := new(Certificate) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Certificate) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CertificateKeystores) DeepCopyInto(out *CertificateKeystores) { + *out = *in + if in.JKS != nil { + in, out := &in.JKS, &out.JKS + *out = new(JKSKeystore) + **out = **in + } + if in.PKCS12 != nil { + in, out := &in.PKCS12, &out.PKCS12 + *out = new(PKCS12Keystore) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CertificateKeystores. +func (in *CertificateKeystores) DeepCopy() *CertificateKeystores { + if in == nil { + return nil + } + out := new(CertificateKeystores) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CertificateList) DeepCopyInto(out *CertificateList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Certificate, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CertificateList. +func (in *CertificateList) DeepCopy() *CertificateList { + if in == nil { + return nil + } + out := new(CertificateList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *CertificateList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CertificatePrivateKey) DeepCopyInto(out *CertificatePrivateKey) { + *out = *in + if in.Algorithm != nil { + in, out := &in.Algorithm, &out.Algorithm + *out = new(PrivateKeyAlgorithm) + **out = **in + } + if in.Size != nil { + in, out := &in.Size, &out.Size + *out = new(PrivateKeySize) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CertificatePrivateKey. +func (in *CertificatePrivateKey) DeepCopy() *CertificatePrivateKey { + if in == nil { + return nil + } + out := new(CertificatePrivateKey) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CertificateRef) DeepCopyInto(out *CertificateRef) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CertificateRef. +func (in *CertificateRef) DeepCopy() *CertificateRef { + if in == nil { + return nil + } + out := new(CertificateRef) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CertificateRevocation) DeepCopyInto(out *CertificateRevocation) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CertificateRevocation. +func (in *CertificateRevocation) DeepCopy() *CertificateRevocation { + if in == nil { + return nil + } + out := new(CertificateRevocation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *CertificateRevocation) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CertificateRevocationList) DeepCopyInto(out *CertificateRevocationList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]CertificateRevocation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CertificateRevocationList. +func (in *CertificateRevocationList) DeepCopy() *CertificateRevocationList { + if in == nil { + return nil + } + out := new(CertificateRevocationList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *CertificateRevocationList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CertificateRevocationSpec) DeepCopyInto(out *CertificateRevocationSpec) { + *out = *in + out.CertificateRef = in.CertificateRef + if in.Renew != nil { + in, out := &in.Renew, &out.Renew + *out = new(bool) + **out = **in + } + if in.QualifyingDate != nil { + in, out := &in.QualifyingDate, &out.QualifyingDate + *out = (*in).DeepCopy() + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CertificateRevocationSpec. +func (in *CertificateRevocationSpec) DeepCopy() *CertificateRevocationSpec { + if in == nil { + return nil + } + out := new(CertificateRevocationSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CertificateRevocationStatus) DeepCopyInto(out *CertificateRevocationStatus) { + *out = *in + if in.Message != nil { + in, out := &in.Message, &out.Message + *out = new(string) + **out = **in + } + if in.Objects != nil { + in, out := &in.Objects, &out.Objects + *out = new(ObjectStatuses) + (*in).DeepCopyInto(*out) + } + if in.Secrets != nil { + in, out := &in.Secrets, &out.Secrets + *out = new(SecretStatuses) + (*in).DeepCopyInto(*out) + } + if in.RevocationApplied != nil { + in, out := &in.RevocationApplied, &out.RevocationApplied + *out = (*in).DeepCopy() + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CertificateRevocationStatus. +func (in *CertificateRevocationStatus) DeepCopy() *CertificateRevocationStatus { + if in == nil { + return nil + } + out := new(CertificateRevocationStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CertificateSecretRef) DeepCopyInto(out *CertificateSecretRef) { + *out = *in + out.SecretReference = in.SecretReference + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CertificateSecretRef. +func (in *CertificateSecretRef) DeepCopy() *CertificateSecretRef { + if in == nil { + return nil + } + out := new(CertificateSecretRef) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CertificateSpec) DeepCopyInto(out *CertificateSpec) { + *out = *in + if in.CommonName != nil { + in, out := &in.CommonName, &out.CommonName + *out = new(string) + **out = **in + } + if in.DNSNames != nil { + in, out := &in.DNSNames, &out.DNSNames + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.CSR != nil { + in, out := &in.CSR, &out.CSR + *out = make([]byte, len(*in)) + copy(*out, *in) + } + if in.IssuerRef != nil { + in, out := &in.IssuerRef, &out.IssuerRef + *out = new(IssuerRef) + **out = **in + } + if in.SecretName != nil { + in, out := &in.SecretName, &out.SecretName + *out = new(string) + **out = **in + } + if in.SecretRef != nil { + in, out := &in.SecretRef, &out.SecretRef + *out = new(v1.SecretReference) + **out = **in + } + if in.SecretLabels != nil { + in, out := &in.SecretLabels, &out.SecretLabels + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.Renew != nil { + in, out := &in.Renew, &out.Renew + *out = new(bool) + **out = **in + } + if in.EnsureRenewedAfter != nil { + in, out := &in.EnsureRenewedAfter, &out.EnsureRenewedAfter + *out = (*in).DeepCopy() + } + if in.FollowCNAME != nil { + in, out := &in.FollowCNAME, &out.FollowCNAME + *out = new(bool) + **out = **in + } + if in.Keystores != nil { + in, out := &in.Keystores, &out.Keystores + *out = new(CertificateKeystores) + (*in).DeepCopyInto(*out) + } + if in.PreferredChain != nil { + in, out := &in.PreferredChain, &out.PreferredChain + *out = new(string) + **out = **in + } + if in.PrivateKey != nil { + in, out := &in.PrivateKey, &out.PrivateKey + *out = new(CertificatePrivateKey) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CertificateSpec. +func (in *CertificateSpec) DeepCopy() *CertificateSpec { + if in == nil { + return nil + } + out := new(CertificateSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CertificateStatus) DeepCopyInto(out *CertificateStatus) { + *out = *in + if in.Message != nil { + in, out := &in.Message, &out.Message + *out = new(string) + **out = **in + } + if in.LastPendingTimestamp != nil { + in, out := &in.LastPendingTimestamp, &out.LastPendingTimestamp + *out = (*in).DeepCopy() + } + if in.CommonName != nil { + in, out := &in.CommonName, &out.CommonName + *out = new(string) + **out = **in + } + if in.DNSNames != nil { + in, out := &in.DNSNames, &out.DNSNames + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.IssuerRef != nil { + in, out := &in.IssuerRef, &out.IssuerRef + *out = new(QualifiedIssuerRef) + **out = **in + } + if in.ExpirationDate != nil { + in, out := &in.ExpirationDate, &out.ExpirationDate + *out = new(string) + **out = **in + } + if in.BackOff != nil { + in, out := &in.BackOff, &out.BackOff + *out = new(BackOffState) + (*in).DeepCopyInto(*out) + } + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]metav1.Condition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CertificateStatus. +func (in *CertificateStatus) DeepCopy() *CertificateStatus { + if in == nil { + return nil + } + out := new(CertificateStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DNSSelection) DeepCopyInto(out *DNSSelection) { + *out = *in + if in.Include != nil { + in, out := &in.Include, &out.Include + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Exclude != nil { + in, out := &in.Exclude, &out.Exclude + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DNSSelection. +func (in *DNSSelection) DeepCopy() *DNSSelection { + if in == nil { + return nil + } + out := new(DNSSelection) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Issuer) DeepCopyInto(out *Issuer) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Issuer. +func (in *Issuer) DeepCopy() *Issuer { + if in == nil { + return nil + } + out := new(Issuer) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Issuer) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IssuerList) DeepCopyInto(out *IssuerList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Issuer, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IssuerList. +func (in *IssuerList) DeepCopy() *IssuerList { + if in == nil { + return nil + } + out := new(IssuerList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *IssuerList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IssuerRef) DeepCopyInto(out *IssuerRef) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IssuerRef. +func (in *IssuerRef) DeepCopy() *IssuerRef { + if in == nil { + return nil + } + out := new(IssuerRef) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IssuerSpec) DeepCopyInto(out *IssuerSpec) { + *out = *in + if in.ACME != nil { + in, out := &in.ACME, &out.ACME + *out = new(ACMESpec) + (*in).DeepCopyInto(*out) + } + if in.CA != nil { + in, out := &in.CA, &out.CA + *out = new(CASpec) + (*in).DeepCopyInto(*out) + } + if in.RequestsPerDayQuota != nil { + in, out := &in.RequestsPerDayQuota, &out.RequestsPerDayQuota + *out = new(int) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IssuerSpec. +func (in *IssuerSpec) DeepCopy() *IssuerSpec { + if in == nil { + return nil + } + out := new(IssuerSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IssuerStatus) DeepCopyInto(out *IssuerStatus) { + *out = *in + if in.Message != nil { + in, out := &in.Message, &out.Message + *out = new(string) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.ACME != nil { + in, out := &in.ACME, &out.ACME + *out = new(runtime.RawExtension) + (*in).DeepCopyInto(*out) + } + if in.CA != nil { + in, out := &in.CA, &out.CA + *out = new(runtime.RawExtension) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IssuerStatus. +func (in *IssuerStatus) DeepCopy() *IssuerStatus { + if in == nil { + return nil + } + out := new(IssuerStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *JKSKeystore) DeepCopyInto(out *JKSKeystore) { + *out = *in + out.PasswordSecretRef = in.PasswordSecretRef + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new JKSKeystore. +func (in *JKSKeystore) DeepCopy() *JKSKeystore { + if in == nil { + return nil + } + out := new(JKSKeystore) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ObjectStatuses) DeepCopyInto(out *ObjectStatuses) { + *out = *in + if in.Processing != nil { + in, out := &in.Processing, &out.Processing + *out = make([]CertificateRef, len(*in)) + copy(*out, *in) + } + if in.Renewed != nil { + in, out := &in.Renewed, &out.Renewed + *out = make([]CertificateRef, len(*in)) + copy(*out, *in) + } + if in.Revoked != nil { + in, out := &in.Revoked, &out.Revoked + *out = make([]CertificateRef, len(*in)) + copy(*out, *in) + } + if in.Failed != nil { + in, out := &in.Failed, &out.Failed + *out = make([]CertificateRef, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ObjectStatuses. +func (in *ObjectStatuses) DeepCopy() *ObjectStatuses { + if in == nil { + return nil + } + out := new(ObjectStatuses) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PKCS12Keystore) DeepCopyInto(out *PKCS12Keystore) { + *out = *in + out.PasswordSecretRef = in.PasswordSecretRef + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PKCS12Keystore. +func (in *PKCS12Keystore) DeepCopy() *PKCS12Keystore { + if in == nil { + return nil + } + out := new(PKCS12Keystore) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *QualifiedIssuerRef) DeepCopyInto(out *QualifiedIssuerRef) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new QualifiedIssuerRef. +func (in *QualifiedIssuerRef) DeepCopy() *QualifiedIssuerRef { + if in == nil { + return nil + } + out := new(QualifiedIssuerRef) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SecretKeySelector) DeepCopyInto(out *SecretKeySelector) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecretKeySelector. +func (in *SecretKeySelector) DeepCopy() *SecretKeySelector { + if in == nil { + return nil + } + out := new(SecretKeySelector) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SecretStatuses) DeepCopyInto(out *SecretStatuses) { + *out = *in + if in.Processing != nil { + in, out := &in.Processing, &out.Processing + *out = make([]CertificateSecretRef, len(*in)) + copy(*out, *in) + } + if in.Revoked != nil { + in, out := &in.Revoked, &out.Revoked + *out = make([]CertificateSecretRef, len(*in)) + copy(*out, *in) + } + if in.Failed != nil { + in, out := &in.Failed, &out.Failed + *out = make([]CertificateSecretRef, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecretStatuses. +func (in *SecretStatuses) DeepCopy() *SecretStatuses { + if in == nil { + return nil + } + out := new(SecretStatuses) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/github.com/gardener/gardener/.github/renovate.json5 b/vendor/github.com/gardener/gardener/.github/renovate.json5 index 908e73d7d..1d9328818 100644 --- a/vendor/github.com/gardener/gardener/.github/renovate.json5 +++ b/vendor/github.com/gardener/gardener/.github/renovate.json5 @@ -38,20 +38,35 @@ "fileMatch": ["^hack\/.+\\.sh$"], "matchStrings": ["--image[=| ][\"|']?(?.*?):(?.*?)[\"|']?\\s"], "datasourceTemplate": "docker" + }, + { + // Generic detection of container images in images.yaml via container registry. + "customType": "regex", + "fileMatch": ["^imagevector\/images.yaml$"], + "matchStrings": ["\\s+repository:\\s+(?.*?)\\n\\s+tag:\\s+[\"]?(?.*?)[\"]?\\n"], + "datasourceTemplate": "docker" + }, + { + // Generic detection of container images in images.yaml via github releases. + "customType": "regex", + "fileMatch": ["^imagevector\/images.yaml$"], + "matchStrings": ["\\s+sourceRepository:\\s+github.com\/(?.*?)\\n\\s+repository:\\s+.*\\n\\s+tag:\\s+[\"]?(?.*?)[\"]?\\n"], + "datasourceTemplate": "github-releases" } ], "separateMinorPatch": true, "packageRules": [ { // Group golang updates in one PR. - "groupName": "Update golang", + "groupName": "golang", "matchDatasources": ["docker", "go-version"], "matchPackagePatterns": ["golang"], }, { - // Group tool updates in one PR. - "groupName": "Update tools", - "matchFileNames": ["hack\/tools\\.mk"] + // Group istio image updates in one PR. + "groupName": "istio images", + "matchDatasources": ["docker"], + "matchPackagePatterns": ["gcr\\.io\/istio-release\/.+"], }, { // Only patch level updates for golang-test image. Minor and major versions are updated manually. @@ -67,6 +82,12 @@ "matchPackagePatterns": ["kindest\/node"], "enabled": false }, + { + // Go versions must be in sync with golangci-lint. + "matchDatasources": ["go"], + "matchFileNames": ["hack\/tools\/logcheck\/go\\.mod"], + "enabled": false + }, { // Update only patchlevels of major dependencies like kubernetes, controller-runtime and istio. // Minor and major upgrades most likely require manual adaptations of the code. @@ -80,9 +101,40 @@ "enabled": false }, { - // Ignore dependency updates from github.com/gardener because these PRs are created by pipeline jobs. - "matchDatasources": ["go"], - "matchPackagePatterns": ["github\\.com\/gardener\/.+"], + // Update only patch levels container images of istio and cluster-autoscaler. + // Minor and major upgrades most likely require manual adaptations of the code. + "matchDatasources": ["docker", "github-releases"], + "matchUpdateTypes": ["major", "minor"], + "matchFileNames": ["imagevector/**"], + "matchPackagePatterns": [ + "gardener\/autoscaler", + "gcr\\.io\/istio-release\/.+", + ], + "enabled": false + }, + { + // Do not use docker for images from gardener registry except those which do not work with github-releases. + "matchDatasources": ["docker"], + "matchFileNames": ["imagevector/**"], + "matchPackagePatterns": [ + "europe-docker\\.pkg\\.dev\/gardener-project\/releases\/.+" + ], + "excludePackagePatterns": [ + "europe-docker\\.pkg\\.dev\/gardener-project\/releases\/3rd\/alpine", + "europe-docker\\.pkg\\.dev\/gardener-project\/releases\/3rd\/kubernetesui\/.+", + "europe-docker\\.pkg\\.dev\/gardener-project\/releases\/3rd\/kubesphere\/.+" + ], + "enabled": false + }, + { + // Do not use github-releases for external dependencies except those we copy. + "matchDatasources": ["github-releases"], + "matchFileNames": ["imagevector/**"], + "excludePackagePatterns": [ + "gardener\/.+", + "credativ\/.+", + "envoyproxy\/.+" + ], "enabled": false }, { diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/cmd/options.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/cmd/options.go index 0a8c91b63..7897cf253 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/cmd/options.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/cmd/options.go @@ -73,10 +73,6 @@ const ( // GardenerVersionFlag is the name of the command line flag containing the Gardener version. GardenerVersionFlag = "gardener-version" - // GardenletUsesGardenerNodeAgentFlag is the name of the command line flag specifying whether gardenlet's feature gate - // 'UseGardenerNodeAgent' is activated. - // TODO(rfranzke): Remove this flag when the UseGardenerNodeAgent feature gate is promoted to GA. - GardenletUsesGardenerNodeAgentFlag = "gardenlet-uses-gardener-node-agent" // LogLevelFlag is the name of the command line flag containing the log level. LogLevelFlag = "log-level" @@ -87,7 +83,7 @@ const ( // LeaderElectionNameID returns a leader election ID for the given name. func LeaderElectionNameID(name string) string { - return fmt.Sprintf("%s-leader-election", name) + return name + "-leader-election" } // Flagger adds flags to a given FlagSet. @@ -474,8 +470,6 @@ type SwitchConfig struct { type GeneralOptions struct { // GardenerVersion is the version of the Gardener. GardenerVersion string - // GardenletUsesGardenerNodeAgent specifies whether gardenlet's feature gate 'UseGardenerNodeAgent' is activated. - GardenletUsesGardenerNodeAgent bool config *GeneralConfig } @@ -484,13 +478,11 @@ type GeneralOptions struct { type GeneralConfig struct { // GardenerVersion is the version of the Gardener. GardenerVersion string - // GardenletUsesGardenerNodeAgent specifies whether gardenlet's feature gate 'UseGardenerNodeAgent' is activated. - GardenletUsesGardenerNodeAgent bool } // Complete implements Complete. func (r *GeneralOptions) Complete() error { - r.config = &GeneralConfig{r.GardenerVersion, r.GardenletUsesGardenerNodeAgent} + r.config = &GeneralConfig{r.GardenerVersion} return nil } @@ -502,5 +494,4 @@ func (r *GeneralOptions) Completed() *GeneralConfig { // AddFlags implements Flagger.AddFlags. func (r *GeneralOptions) AddFlags(fs *pflag.FlagSet) { fs.StringVar(&r.GardenerVersion, GardenerVersionFlag, "", "Version of the gardenlet.") - fs.BoolVar(&r.GardenletUsesGardenerNodeAgent, GardenletUsesGardenerNodeAgentFlag, false, "Specifies whether gardenlet's feature gate 'UseGardenerNodeAgent' is activated.") } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/actuator.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/actuator.go index 667c63b50..22cc31143 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/actuator.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/actuator.go @@ -25,13 +25,13 @@ import ( // Actuator acts upon OperatingSystemConfig resources. type Actuator interface { // Reconcile the operating system config. - Reconcile(context.Context, logr.Logger, *extensionsv1alpha1.OperatingSystemConfig) ([]byte, *string, []string, []string, []extensionsv1alpha1.Unit, []extensionsv1alpha1.File, error) + Reconcile(context.Context, logr.Logger, *extensionsv1alpha1.OperatingSystemConfig) ([]byte, []extensionsv1alpha1.Unit, []extensionsv1alpha1.File, error) // Delete the operating system config. Delete(context.Context, logr.Logger, *extensionsv1alpha1.OperatingSystemConfig) error // ForceDelete forcefully deletes the operating system config. ForceDelete(context.Context, logr.Logger, *extensionsv1alpha1.OperatingSystemConfig) error // Restore the operating system config. - Restore(context.Context, logr.Logger, *extensionsv1alpha1.OperatingSystemConfig) ([]byte, *string, []string, []string, []extensionsv1alpha1.Unit, []extensionsv1alpha1.File, error) + Restore(context.Context, logr.Logger, *extensionsv1alpha1.OperatingSystemConfig) ([]byte, []extensionsv1alpha1.Unit, []extensionsv1alpha1.File, error) // Migrate the operating system config. Migrate(context.Context, logr.Logger, *extensionsv1alpha1.OperatingSystemConfig) error } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/actuator/actuator.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/actuator/actuator.go deleted file mode 100644 index 462f874f8..000000000 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/actuator/actuator.go +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2019 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package actuator - -import ( - "k8s.io/apimachinery/pkg/runtime" - "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/controller-runtime/pkg/manager" - - "github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig" - "github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/generator" -) - -// Actuator uses a generator to render an OperatingSystemConfiguration for an Operating System -type Actuator struct { - scheme *runtime.Scheme - client client.Client - osName string - generator generator.Generator -} - -// NewActuator creates a new actuator with the given logger. -func NewActuator(mgr manager.Manager, osName string, generator generator.Generator) operatingsystemconfig.Actuator { - return &Actuator{ - scheme: mgr.GetScheme(), - client: mgr.GetClient(), - osName: osName, - generator: generator, - } -} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/actuator/actuator_delete.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/actuator/actuator_delete.go deleted file mode 100644 index a4aec3eea..000000000 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/actuator/actuator_delete.go +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2019 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package actuator - -import ( - "context" - - "github.com/go-logr/logr" - - extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" -) - -// Delete ignores the deletion of OperatingSystemConfig. -func (a *Actuator) Delete(_ context.Context, _ logr.Logger, _ *extensionsv1alpha1.OperatingSystemConfig) error { - return nil -} - -// ForceDelete forcefully deletes the OperatingSystemConfig. -func (a *Actuator) ForceDelete(ctx context.Context, log logr.Logger, config *extensionsv1alpha1.OperatingSystemConfig) error { - return a.Delete(ctx, log, config) -} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/actuator/actuator_migrate.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/actuator/actuator_migrate.go deleted file mode 100644 index 3583526dd..000000000 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/actuator/actuator_migrate.go +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2020 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package actuator - -import ( - "context" - - "github.com/go-logr/logr" - - extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" -) - -// Migrate ignores the deletion of OperatingSystemConfig -func (a *Actuator) Migrate(_ context.Context, _ logr.Logger, _ *extensionsv1alpha1.OperatingSystemConfig) error { - return nil -} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/actuator/actuator_reconcile.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/actuator/actuator_reconcile.go deleted file mode 100644 index f9bc4a781..000000000 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/actuator/actuator_reconcile.go +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2019 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package actuator - -import ( - "context" - "fmt" - - "github.com/go-logr/logr" - - extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" -) - -// Reconcile reconciles the update of a OperatingSystemConfig regenerating the os-specific format -func (a *Actuator) Reconcile(ctx context.Context, log logr.Logger, config *extensionsv1alpha1.OperatingSystemConfig) ([]byte, *string, []string, []string, []extensionsv1alpha1.Unit, []extensionsv1alpha1.File, error) { - cloudConfig, cmd, err := CloudConfigFromOperatingSystemConfig(ctx, log, a.client, config, a.generator) - if err != nil { - return nil, nil, nil, nil, nil, nil, fmt.Errorf("could not generate cloud config: %w", err) - } - - return cloudConfig, cmd, OperatingSystemConfigUnitNames(config), OperatingSystemConfigFilePaths(config), nil, nil, nil -} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/actuator/actuator_restore.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/actuator/actuator_restore.go deleted file mode 100644 index cad48b49c..000000000 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/actuator/actuator_restore.go +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2020 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package actuator - -import ( - "context" - - "github.com/go-logr/logr" - - extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" -) - -// Restore reconciles the update of a OperatingSystemConfig regenerating the os-specific format -func (a *Actuator) Restore(ctx context.Context, log logr.Logger, config *extensionsv1alpha1.OperatingSystemConfig) ([]byte, *string, []string, []string, []extensionsv1alpha1.Unit, []extensionsv1alpha1.File, error) { - return a.Reconcile(ctx, log, config) -} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/actuator/actuator_util.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/actuator/actuator_util.go deleted file mode 100644 index feb3363ff..000000000 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/actuator/actuator_util.go +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright 2019 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package actuator - -import ( - "context" - - "github.com/go-logr/logr" - corev1 "k8s.io/api/core/v1" - "sigs.k8s.io/controller-runtime/pkg/client" - - commonosgenerator "github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/generator" - extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" - extensionsv1alpha1helper "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/helper" - kubernetesutils "github.com/gardener/gardener/pkg/utils/kubernetes" -) - -// CloudConfigFromOperatingSystemConfig generates a CloudConfig from an OperatingSystemConfig -// using a Generator -func CloudConfigFromOperatingSystemConfig( - ctx context.Context, - log logr.Logger, - c client.Client, - config *extensionsv1alpha1.OperatingSystemConfig, - generator commonosgenerator.Generator, -) ( - []byte, - *string, - error, -) { - files := make([]*commonosgenerator.File, 0, len(config.Spec.Files)) - for _, file := range config.Spec.Files { - if file.Content.ImageRef != nil { - continue - } - - data, err := DataForFileContent(ctx, c, config.Namespace, &file.Content) - if err != nil { - return nil, nil, err - } - - files = append(files, &commonosgenerator.File{Path: file.Path, Content: data, Permissions: file.Permissions, TransmitUnencoded: file.Content.TransmitUnencoded}) - } - - units := make([]*commonosgenerator.Unit, 0, len(config.Spec.Units)) - for _, unit := range config.Spec.Units { - var content []byte - if unit.Content != nil { - content = []byte(*unit.Content) - } - - dropIns := make([]*commonosgenerator.DropIn, 0, len(unit.DropIns)) - for _, dropIn := range unit.DropIns { - dropIns = append(dropIns, &commonosgenerator.DropIn{Name: dropIn.Name, Content: []byte(dropIn.Content)}) - } - units = append(units, &commonosgenerator.Unit{Name: unit.Name, Content: content, DropIns: dropIns}) - } - - return generator.Generate(log, &commonosgenerator.OperatingSystemConfig{ - Object: config, - Bootstrap: config.Spec.Purpose == extensionsv1alpha1.OperatingSystemConfigPurposeProvision, - CRI: config.Spec.CRIConfig, - Files: files, - Units: units, - Path: config.Spec.ReloadConfigFilePath, - }) -} - -// DataForFileContent returns the content for a FileContent, retrieving from a Secret if necessary. -func DataForFileContent(ctx context.Context, c client.Client, namespace string, content *extensionsv1alpha1.FileContent) ([]byte, error) { - if inline := content.Inline; inline != nil { - return extensionsv1alpha1helper.Decode(inline.Encoding, []byte(inline.Data)) - } - - secret := &corev1.Secret{} - if err := c.Get(ctx, kubernetesutils.Key(namespace, content.SecretRef.Name), secret); err != nil { - return nil, err - } - - return secret.Data[content.SecretRef.DataKey], nil -} - -// OperatingSystemConfigUnitNames returns the names of the units in the OperatingSystemConfig -func OperatingSystemConfigUnitNames(config *extensionsv1alpha1.OperatingSystemConfig) []string { - unitNames := make([]string, 0, len(config.Spec.Units)) - for _, unit := range config.Spec.Units { - unitNames = append(unitNames, unit.Name) - } - return unitNames -} - -// OperatingSystemConfigFilePaths returns the paths of the files in the OperatingSystemConfig -func OperatingSystemConfigFilePaths(config *extensionsv1alpha1.OperatingSystemConfig) []string { - filePaths := make([]string, 0, len(config.Spec.Files)) - for _, file := range config.Spec.Files { - filePaths = append(filePaths, file.Path) - } - return filePaths -} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/generator/generator.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/generator/generator.go deleted file mode 100644 index 9b985023a..000000000 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/generator/generator.go +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2019 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package generator - -import ( - "github.com/go-logr/logr" - - extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" -) - -// Generator renders an OperatingSystemConfig into a -// representation suitable for an specific OS -// also returns the os specific command for applying this configuration -type Generator interface { - Generate(logr.Logger, *OperatingSystemConfig) (osconfig []byte, command *string, err error) -} - -// File is a file to be stored during the cloud init script. -type File struct { - Path string - Content []byte - Permissions *int32 - TransmitUnencoded *bool -} - -// Unit is a unit to be created during the cloud init script. -type Unit struct { - Name string - Content []byte - DropIns []*DropIn -} - -// DropIn is a drop in of a Unit. -type DropIn struct { - Name string - Content []byte -} - -// OperatingSystemConfig is the data required to create a cloud init script. -type OperatingSystemConfig struct { - Object *extensionsv1alpha1.OperatingSystemConfig - CRI *extensionsv1alpha1.CRIConfig - Files []*File - Units []*Unit - Bootstrap bool - Path *string -} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/generator/test/README.md b/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/generator/test/README.md deleted file mode 100644 index 2b8575adb..000000000 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/generator/test/README.md +++ /dev/null @@ -1,36 +0,0 @@ -# Generator test framework - -The generator test framework provides a function whith the specs for a set of -tests that can be reused for testing generators. - -The tests are based on comparing the output of the generator for a set -of pre-defined cloud-init files with a generator-specific output provided -in a test file. - -Each Generator implementation can use this function as shown bellow: - -```go -package my_generator_test - -import ( - "embed" - - "github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/generator/test" - - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" -) - -//go:embed /path/to/testfiles -var files embed.FS - -var _ = Describe("My Generator Test", func(){ - Describe("Conformance Tests", - test.DescribeTest(NewGenerator(), files), - ) - - Describe("My other Tests", func(){ - // ... - }) -}) -``` diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/generator/test/template_generator.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/generator/test/template_generator.go deleted file mode 100644 index 0287869fe..000000000 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/generator/test/template_generator.go +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2019 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package test - -import ( - "embed" - - "github.com/go-logr/logr" - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" - "k8s.io/utils/ptr" - - "github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/generator" - extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" -) - -var ( - onlyOwnerPerm = int32(0600) -) - -// DescribeTest returns a function which can be used in tests for the -// template generator implementation. It receives an instance of a template -// generator and embedded files with the test files to be used in the tests. -var DescribeTest = func(g generator.Generator, files embed.FS) func() { - return func() { - It("should render correctly", func() { - expectedCloudInit, err := files.ReadFile("cloud-init") - Expect(err).NotTo(HaveOccurred()) - - cloudInit, _, err := g.Generate(logr.Discard(), &generator.OperatingSystemConfig{ - Object: &extensionsv1alpha1.OperatingSystemConfig{}, - Files: []*generator.File{ - { - Path: "/foo", - Content: []byte("bar"), - Permissions: &onlyOwnerPerm, - }, - { - Path: "/foo2", - Content: []byte("bar"), - TransmitUnencoded: ptr.To(true), - }, - }, - - Units: []*generator.Unit{ - { - Name: "docker.service", - Content: []byte("unit"), - DropIns: []*generator.DropIn{ - { - Name: "10-docker-opts.conf", - Content: []byte("override"), - }, - }, - }, - }, - Bootstrap: true, - }) - - Expect(err).NotTo(HaveOccurred()) - Expect(cloudInit).To(Equal(expectedCloudInit)) - }) - } -} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/template/template_generator.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/template/template_generator.go deleted file mode 100644 index ee1e25577..000000000 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/template/template_generator.go +++ /dev/null @@ -1,175 +0,0 @@ -// Copyright 2019 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package template - -import ( - "bytes" - "fmt" - "path" - "text/template" - - "github.com/go-logr/logr" - - "github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/generator" - extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" - "github.com/gardener/gardener/pkg/utils" -) - -// DefaultUnitsPath is the default CoreOS path where to store units at. -const DefaultUnitsPath = "/etc/systemd/system" - -type fileData struct { - Path string - Content string - Dirname string - Permissions *string - TransmitUnencoded *bool -} - -type unitData struct { - Path string - Name string - Content *string - DropIns *dropInsData -} - -type dropInsData struct { - Path string - Items []*dropInData -} - -type dropInData struct { - Path string - Content string -} - -type initScriptData struct { - CRI *extensionsv1alpha1.CRIConfig - Files []*fileData - Units []*unitData - Bootstrap bool - Type string - AdditionalValues map[string]interface{} -} - -// CloudInitGenerator generates cloud-init scripts. -type CloudInitGenerator struct { - cloudInitTemplate *template.Template - unitsPath string - cmd string - - additionalValuesFunc func(*extensionsv1alpha1.OperatingSystemConfig) (map[string]interface{}, error) -} - -// Generate generates a cloud-init script from the given OperatingSystemConfig. -func (t *CloudInitGenerator) Generate(_ logr.Logger, data *generator.OperatingSystemConfig) ([]byte, *string, error) { - var tFiles []*fileData - for _, file := range data.Files { - tFile := &fileData{ - Path: file.Path, - Dirname: path.Dir(file.Path), - TransmitUnencoded: file.TransmitUnencoded, - } - if file.TransmitUnencoded != nil && *file.TransmitUnencoded { - tFile.Content = string(file.Content) - } else { - tFile.Content = utils.EncodeBase64(file.Content) - } - if file.Permissions != nil { - permissions := fmt.Sprintf("%04o", *file.Permissions) - tFile.Permissions = &permissions - } - tFiles = append(tFiles, tFile) - } - - var tUnits []*unitData - for _, unit := range data.Units { - var content *string - if unit.Content != nil { - encoded := utils.EncodeBase64(unit.Content) - content = &encoded - } - tUnit := &unitData{ - Name: unit.Name, - Path: path.Join(t.unitsPath, unit.Name), - Content: content, - } - if len(unit.DropIns) != 0 { - dropInPath := path.Join(t.unitsPath, fmt.Sprintf("%s.d", unit.Name)) - - var items []*dropInData - for _, dropIn := range unit.DropIns { - items = append(items, &dropInData{ - Path: path.Join(dropInPath, dropIn.Name), - Content: utils.EncodeBase64(dropIn.Content), - }) - } - tUnit.DropIns = &dropInsData{ - Path: dropInPath, - Items: items, - } - } - - tUnits = append(tUnits, tUnit) - } - - initScriptData := &initScriptData{ - Type: data.Object.Spec.Type, - CRI: data.CRI, - Files: tFiles, - Units: tUnits, - Bootstrap: data.Bootstrap, - } - - if t.additionalValuesFunc != nil { - additionalValues, err := t.additionalValuesFunc(data.Object) - if err != nil { - return nil, nil, err - } - initScriptData.AdditionalValues = additionalValues - } - - var buf bytes.Buffer - if err := t.cloudInitTemplate.Execute(&buf, initScriptData); err != nil { - return nil, nil, err - } - - var cmd *string - if data.Path != nil { - c := fmt.Sprintf(t.cmd, *data.Path) - cmd = &c - } - - return buf.Bytes(), cmd, nil -} - -// NewCloudInitGenerator creates a new CloudInitGenerator with the given units path. -func NewCloudInitGenerator(template *template.Template, unitsPath string, cmd string, additionalValuesFunc func(*extensionsv1alpha1.OperatingSystemConfig) (map[string]interface{}, error)) *CloudInitGenerator { - return &CloudInitGenerator{ - cloudInitTemplate: template, - unitsPath: unitsPath, - cmd: cmd, - additionalValuesFunc: additionalValuesFunc, - } -} - -// NewTemplate creates a new template with the given name. -func NewTemplate(name string) *template.Template { - return template.New(name).Funcs(template.FuncMap{ - "isContainerDEnabled": func(cri *extensionsv1alpha1.CRIConfig) bool { - return cri != nil && cri.Name == extensionsv1alpha1.CRINameContainerD - }, - }) -} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/reconciler.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/reconciler.go index c26dc293d..d53c2d2e0 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/reconciler.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/reconciler.go @@ -124,23 +124,23 @@ func (r *reconciler) reconcile( } log.Info("Starting the reconciliation of OperatingSystemConfig") - userData, command, unitNames, fileNames, extensionUnits, extensionFiles, err := r.actuator.Reconcile(ctx, log, osc) + userData, extensionUnits, extensionFiles, err := r.actuator.Reconcile(ctx, log, osc) if err != nil { _ = r.statusUpdater.Error(ctx, log, osc, reconcilerutils.ReconcileErrCauseOrErr(err), operationType, "Error reconciling OperatingSystemConfig") return reconcilerutils.ReconcileErr(err) } - var secret *corev1.Secret - if len(userData) > 0 { - secret, err = r.reconcileOSCResultSecret(ctx, osc, userData) - if err != nil { - _ = r.statusUpdater.Error(ctx, log, osc, reconcilerutils.ReconcileErrCauseOrErr(err), operationType, "Could not apply secret for generated cloud config") - return reconcilerutils.ReconcileErr(err) - } + // For backwards-compatibility, we have to always create a secret since gardenlet expects to find it - even if the + // user data is nil/empty (which should always be the case when purpose=reconcile). + // https://github.com/gardener/gardener/blob/328e10d975c7b6caa5db139badcc42ac8f772d31/pkg/component/extensions/operatingsystemconfig/operatingsystemconfig.go#L257-L259 + secret, err := r.reconcileOSCResultSecret(ctx, osc, userData) + if err != nil { + _ = r.statusUpdater.Error(ctx, log, osc, reconcilerutils.ReconcileErrCauseOrErr(err), operationType, "Could not apply secret for generated cloud config") + return reconcilerutils.ReconcileErr(err) } patch := client.MergeFrom(osc.DeepCopy()) - setOSCStatus(osc, secret, command, unitNames, fileNames, extensionUnits, extensionFiles) + setOSCStatus(osc, secret, extensionUnits, extensionFiles) if err := r.client.Status().Patch(ctx, osc, patch); err != nil { _ = r.statusUpdater.Error(ctx, log, osc, reconcilerutils.ReconcileErrCauseOrErr(err), gardencorev1beta1.LastOperationTypeRestore, "Could not update status") return reconcilerutils.ReconcileErr(err) @@ -172,23 +172,23 @@ func (r *reconciler) restore( } log.Info("Starting the restoration of OperatingSystemConfig") - userData, command, units, files, extensionUnits, extensionFiles, err := r.actuator.Restore(ctx, log, osc) + userData, extensionUnits, extensionFiles, err := r.actuator.Restore(ctx, log, osc) if err != nil { _ = r.statusUpdater.Error(ctx, log, osc, reconcilerutils.ReconcileErrCauseOrErr(err), gardencorev1beta1.LastOperationTypeRestore, "Error restoring OperatingSystemConfig") return reconcilerutils.ReconcileErr(err) } - var secret *corev1.Secret - if len(userData) > 0 { - secret, err = r.reconcileOSCResultSecret(ctx, osc, userData) - if err != nil { - _ = r.statusUpdater.Error(ctx, log, osc, reconcilerutils.ReconcileErrCauseOrErr(err), gardencorev1beta1.LastOperationTypeRestore, "Could not apply secret for generated cloud config") - return reconcilerutils.ReconcileErr(err) - } + // For backwards-compatibility, we have to always create a secret since gardenlet expects to find it - even if the + // user data is nil/empty (which should always be the case when purpose=reconcile). + // https://github.com/gardener/gardener/blob/328e10d975c7b6caa5db139badcc42ac8f772d31/pkg/component/extensions/operatingsystemconfig/operatingsystemconfig.go#L257-L259 + secret, err := r.reconcileOSCResultSecret(ctx, osc, userData) + if err != nil { + _ = r.statusUpdater.Error(ctx, log, osc, reconcilerutils.ReconcileErrCauseOrErr(err), gardencorev1beta1.LastOperationTypeRestore, "Could not apply secret for generated cloud config") + return reconcilerutils.ReconcileErr(err) } patch := client.MergeFrom(osc.DeepCopy()) - setOSCStatus(osc, secret, command, units, files, extensionUnits, extensionFiles) + setOSCStatus(osc, secret, extensionUnits, extensionFiles) if err := r.client.Status().Patch(ctx, osc, patch); err != nil { _ = r.statusUpdater.Error(ctx, log, osc, reconcilerutils.ReconcileErrCauseOrErr(err), gardencorev1beta1.LastOperationTypeRestore, "Could not update units and secret ref.") return reconcilerutils.ReconcileErr(err) @@ -305,8 +305,6 @@ func (r *reconciler) reconcileOSCResultSecret(ctx context.Context, osc *extensio func setOSCStatus( osc *extensionsv1alpha1.OperatingSystemConfig, secret *corev1.Secret, - command *string, - units, files []string, extensionUnits []extensionsv1alpha1.Unit, extensionFiles []extensionsv1alpha1.File, ) { @@ -318,11 +316,6 @@ func setOSCStatus( }, } } - if command != nil { - osc.Status.Command = command - } - osc.Status.Units = units - osc.Status.Files = files osc.Status.ExtensionUnits = extensionUnits osc.Status.ExtensionFiles = extensionFiles } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/utils.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/utils.go index 7259dde54..ebeb735aa 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/utils.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/utils.go @@ -61,6 +61,7 @@ type AddToManagerBuilder []func(context.Context, manager.Manager) error // NewAddToManagerBuilder creates a new AddToManagerBuilder and registers the given functions. func NewAddToManagerBuilder(funcs ...func(context.Context, manager.Manager) error) AddToManagerBuilder { var builder AddToManagerBuilder + builder.Register(funcs...) return builder } @@ -90,6 +91,7 @@ type WatchBuilder []func(controller.Controller) error // NewWatchBuilder creates a new WatchBuilder and registers the given functions. func NewWatchBuilder(funcs ...func(controller.Controller) error) WatchBuilder { var builder WatchBuilder + builder.Register(funcs...) return builder } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/util/shoot.go b/vendor/github.com/gardener/gardener/extensions/pkg/util/shoot.go index ee938be55..0c401703f 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/util/shoot.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/util/shoot.go @@ -34,7 +34,7 @@ func VersionMajorMinor(version string) (string, error) { func VersionInfo(vs string) (*version.Info, error) { v, err := semver.NewVersion(vs) if err != nil { - return nil, fmt.Errorf("Invalid version string '%s': %w", vs, err) + return nil, fmt.Errorf("invalid version string '%s': %w", vs, err) } return &version.Info{ Major: fmt.Sprintf("%d", v.Major()), diff --git a/vendor/github.com/gardener/gardener/hack/check-skaffold-deps-for-binary.sh b/vendor/github.com/gardener/gardener/hack/check-skaffold-deps-for-binary.sh index b728edf25..0f3fcd513 100755 --- a/vendor/github.com/gardener/gardener/hack/check-skaffold-deps-for-binary.sh +++ b/vendor/github.com/gardener/gardener/hack/check-skaffold-deps-for-binary.sh @@ -63,13 +63,14 @@ echo "$skaffold_yaml" |\ sort -f |\ uniq > "$path_current_skaffold_dependencies" +echo "cmd/$binary_name" > "$path_actual_dependencies" module_name=$(go list -m) module_prefix="$module_name/" go list -f '{{ join .Deps "\n" }}' "./cmd/$binary_name" |\ grep "$module_prefix" |\ sed "s@$module_prefix@@g" |\ sort -f |\ - uniq > "$path_actual_dependencies" + uniq >> "$path_actual_dependencies" # always add VERSION file echo "VERSION" >> "$path_actual_dependencies" diff --git a/vendor/github.com/gardener/gardener/hack/ci-common.sh b/vendor/github.com/gardener/gardener/hack/ci-common.sh index 9540a8cca..3ddc350b1 100755 --- a/vendor/github.com/gardener/gardener/hack/ci-common.sh +++ b/vendor/github.com/gardener/gardener/hack/ci-common.sh @@ -39,7 +39,7 @@ export_artifacts() { kubectl -n "$namespace" get pod "$node" --show-managed-fields -oyaml >"$node_dir/pod.yaml" || true # relevant systemd units - for unit in cloud-config-downloader gardener-node-agent kubelet containerd containerd-configuration-local-setup; do + for unit in gardener-node-agent kubelet containerd containerd-configuration-local-setup; do kubectl -n "$namespace" exec "$node" -- journalctl --no-pager -u $unit.service >"$node_dir/$unit.log" || true done kubectl -n "$namespace" exec "$node" -- journalctl --no-pager >"$node_dir/journal.log" || true diff --git a/vendor/github.com/gardener/gardener/hack/generate-crds.sh b/vendor/github.com/gardener/gardener/hack/generate-crds.sh index 7639bac26..271271c64 100755 --- a/vendor/github.com/gardener/gardener/hack/generate-crds.sh +++ b/vendor/github.com/gardener/gardener/hack/generate-crds.sh @@ -82,6 +82,9 @@ get_group_package () { "machine.sapcloud.io") echo "github.com/gardener/machine-controller-manager/pkg/apis/machine/v1alpha1" ;; + "cert.gardener.cloud") + echo "github.com/gardener/cert-management/pkg/apis/cert/v1alpha1" + ;; *) >&2 echo "unknown group $1" return 1 diff --git a/vendor/github.com/gardener/gardener/hack/kind-up.sh b/vendor/github.com/gardener/gardener/hack/kind-up.sh index f92544331..ca276c1ce 100755 --- a/vendor/github.com/gardener/gardener/hack/kind-up.sh +++ b/vendor/github.com/gardener/gardener/hack/kind-up.sh @@ -18,6 +18,7 @@ set -o errexit set -o nounset set -o pipefail +WITH_LPP_RESIZE_SUPPORT=${WITH_LPP_RESIZE_SUPPORT:-false} REGISTRY_CACHE=${CI:-false} CLUSTER_NAME="" PATH_CLUSTER_VALUES="" @@ -52,6 +53,10 @@ parse_flags() { --multi-zonal) MULTI_ZONAL=true ;; + --with-lpp-resize-support) + shift + WITH_LPP_RESIZE_SUPPORT="${1}" + ;; esac shift @@ -167,6 +172,67 @@ check_registry_cache_availability() { done } +# The default StorageClass which comes with `kind' is configured to use +# rancher.io/local-path (see [1]) provisioner, which defaults to `hostPath' +# volume (see [2]). However, `hostPath' does not expose any metrics via +# kubelet, while `local' (see [3]) does. On the other hand `kind' does not +# expose any mechanism for configuring the StorageClass it comes with (see [4]). +# +# This function annotates the default StorageClass with `defaultVolumeType: local', +# so that we can later scrape the various `kubelet_volume_stats_*' metrics +# exposed by kubelet (see [5]). +# +# References: +# +# [1]: https://github.com/rancher/local-path-provisioner +# [2]: https://kubernetes.io/docs/concepts/storage/volumes/#hostpath +# [3]: https://kubernetes.io/docs/concepts/storage/volumes/#local +# [4]: https://github.com/kubernetes-sigs/kind/blob/main/pkg/cluster/internal/create/actions/installstorage/storage.go +# [5]: https://kubernetes.io/docs/reference/instrumentation/metrics/ +setup_kind_sc_default_volume_type() { + echo "Configuring default StorageClass for kind cluster ..." + kubectl annotate storageclass standard defaultVolumeType=local +} + +# The rancher.io/local-path provisioner at the moment does not support volume +# resizing (see [1]). There is an open PR, which is scheduled for the next +# release around May, 2024 (see [2]). Until [2] is merged we will use a custom +# local-path provisioner with support for volume resizing. +# +# This function should be called after setting up the containerd registries on +# the kind nodes. +# +# References: +# +# [1]: https://github.com/rancher/local-path-provisioner +# [2]: https://github.com/rancher/local-path-provisioner/pull/350 +# +# TODO(dnaeon): remove this once we have [2] merged into upstream +setup_kind_with_lpp_resize_support() { + if [ "${WITH_LPP_RESIZE_SUPPORT}" != "true" ]; then + return + fi + + echo "Configuring kind local-path provisioner with volume resize support ..." + + # First configure allowVolumeExpansion on the default StorageClass + kubectl patch storageclass standard --patch '{"allowVolumeExpansion": true}' + + # Apply the latest manifests and use our own image + local _image="ghcr.io/ialidzhikov/local-path-provisioner:feature-external-resizer-c0c1c13" + local _lpp_repo="https://github.com/marjus45/local-path-provisioner" + local _lpp_branch="feature-external-resizer" + local _timeout="90" + + kustomize build "${_lpp_repo}/deploy/?ref=${_lpp_branch}&timeout=${_timeout}" | \ + sed -e "s|image: rancher/local-path-provisioner:master-head|image: ${_image}|g" | \ + kubectl apply -f - + + # The default manifests from rancher/local-path come with another + # StorageClass, which we don't need, so make sure to remove it. + kubectl delete --ignore-not-found=true storageclass local-path +} + parse_flags "$@" mkdir -m 0755 -p \ @@ -196,6 +262,9 @@ kind create cluster \ --image "kindest/node:v1.29.2" \ --config <(helm template $CHART --values "$PATH_CLUSTER_VALUES" $ADDITIONAL_ARGS --set "gardener.repositoryRoot"=$(dirname "$0")/..) +# Configure the default StorageClass in the kind cluster +setup_kind_sc_default_volume_type + # adjust Kind's CRI default OCI runtime spec for new containers to include the cgroup namespace # this is required for nesting kubelets on cgroupsv2, as the kindest-node entrypoint script assumes an existing cgroupns when the host kernel uses cgroupsv2 # See containerd CRI: https://github.com/containerd/containerd/commit/687469d3cee18bf0e12defa5c6d0c7b9139a2dbd @@ -309,6 +378,7 @@ kubectl apply -k "$(dirname "$0")/../example/gardener-local/calico/$IPFAMILY" -- kubectl apply -k "$(dirname "$0")/../example/gardener-local/metrics-server" --server-side setup_containerd_registry_mirrors +setup_kind_with_lpp_resize_support kubectl get nodes -l node-role.kubernetes.io/control-plane -o name |\ cut -d/ -f2 |\ diff --git a/vendor/github.com/gardener/gardener/hack/tools.mk b/vendor/github.com/gardener/gardener/hack/tools.mk index d833170cf..8356752dd 100755 --- a/vendor/github.com/gardener/gardener/hack/tools.mk +++ b/vendor/github.com/gardener/gardener/hack/tools.mk @@ -28,6 +28,8 @@ else TOOLS_PKG_PATH := $(shell go list -tags tools -f '{{ .Dir }}' github.com/gardener/gardener/hack/tools 2>/dev/null) endif +SYSTEM_NAME := $(shell uname -s | tr '[:upper:]' '[:lower:]') +SYSTEM_ARCH := $(shell uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/') TOOLS_BIN_DIR := $(TOOLS_DIR)/bin CONTROLLER_GEN := $(TOOLS_BIN_DIR)/controller-gen GEN_CRD_API_REFERENCE_DOCS := $(TOOLS_BIN_DIR)/gen-crd-api-reference-docs @@ -43,6 +45,7 @@ HELM := $(TOOLS_BIN_DIR)/helm IMPORT_BOSS := $(TOOLS_BIN_DIR)/import-boss KIND := $(TOOLS_BIN_DIR)/kind KUBECTL := $(TOOLS_BIN_DIR)/kubectl +KUSTOMIZE := $(TOOLS_BIN_DIR)/kustomize LOGCHECK := $(TOOLS_BIN_DIR)/logcheck.so # plugin binary MOCKGEN := $(TOOLS_BIN_DIR)/mockgen OPENAPI_GEN := $(TOOLS_BIN_DIR)/openapi-gen @@ -57,7 +60,7 @@ VGOPATH := $(TOOLS_BIN_DIR)/vgopath # default tool versions # renovate: datasource=github-releases depName=golangci/golangci-lint -GOLANGCI_LINT_VERSION ?= v1.56.2 +GOLANGCI_LINT_VERSION ?= v1.57.2 # renovate: datasource=github-releases depName=joelanford/go-apidiff GO_APIDIFF_VERSION ?= v0.8.2 # renovate: datasource=github-releases depName=google/addlicense @@ -66,19 +69,21 @@ GO_ADD_LICENSE_VERSION ?= v1.1.1 GOIMPORTSREVISER_VERSION ?= v3.6.4 GO_VULN_CHECK_VERSION ?= latest # renovate: datasource=github-releases depName=helm/helm -HELM_VERSION ?= v3.14.2 +HELM_VERSION ?= v3.14.3 # renovate: datasource=github-releases depName=kubernetes-sigs/kind KIND_VERSION ?= v0.22.0 # renovate: datasource=github-releases depName=kubernetes/kubernetes -KUBECTL_VERSION ?= v1.29.2 +KUBECTL_VERSION ?= v1.29.3 +# renovate: datasource=github-releases depName=kubernetes-sigs/kustomize +KUSTOMIZE_VERSION ?= v5.3.0 # renovate: datasource=github-releases depName=prometheus/prometheus -PROMTOOL_VERSION ?= 2.50.1 +PROMTOOL_VERSION ?= 2.51.1 # renovate: datasource=github-releases depName=protocolbuffers/protobuf -PROTOC_VERSION ?= 25.3 +PROTOC_VERSION ?= 26.1 # renovate: datasource=github-releases depName=GoogleContainerTools/skaffold -SKAFFOLD_VERSION ?= v2.9.0 +SKAFFOLD_VERSION ?= v2.11.0 # renovate: datasource=github-releases depName=mikefarah/yq -YQ_VERSION ?= v4.41.1 +YQ_VERSION ?= v4.43.1 # renovate: datasource=github-releases depName=ironcore-dev/vgopath VGOPATH_VERSION ?= v0.1.4 @@ -133,7 +138,7 @@ ifeq ($(shell if [ -d $(TOOLS_BIN_SOURCE_DIR) ]; then echo "found"; fi),found) endif .PHONY: create-tools-bin -create-tools-bin: $(CONTROLLER_GEN) $(GEN_CRD_API_REFERENCE_DOCS) $(GINKGO) $(GOIMPORTS) $(GOIMPORTSREVISER) $(GO_ADD_LICENSE) $(GO_APIDIFF) $(GO_VULN_CHECK) $(GO_TO_PROTOBUF) $(HELM) $(IMPORT_BOSS) $(KIND) $(KUBECTL) $(MOCKGEN) $(OPENAPI_GEN) $(PROMTOOL) $(PROTOC) $(PROTOC_GEN_GOGO) $(SETUP_ENVTEST) $(SKAFFOLD) $(YQ) $(VGOPATH) +create-tools-bin: $(CONTROLLER_GEN) $(GEN_CRD_API_REFERENCE_DOCS) $(GINKGO) $(GOIMPORTS) $(GOIMPORTSREVISER) $(GO_ADD_LICENSE) $(GO_APIDIFF) $(GO_VULN_CHECK) $(GO_TO_PROTOBUF) $(HELM) $(IMPORT_BOSS) $(KIND) $(KUBECTL) $(MOCKGEN) $(OPENAPI_GEN) $(PROMTOOL) $(PROTOC) $(PROTOC_GEN_GOGO) $(SETUP_ENVTEST) $(SKAFFOLD) $(YQ) $(VGOPATH) $(KUSTOMIZE) ######################################### # Tools # @@ -178,19 +183,25 @@ $(IMPORT_BOSS): $(call tool_version_file,$(IMPORT_BOSS),$(CODE_GENERATOR_VERSION go build -o $(IMPORT_BOSS) k8s.io/code-generator/cmd/import-boss $(KIND): $(call tool_version_file,$(KIND),$(KIND_VERSION)) - curl -L -o $(KIND) https://kind.sigs.k8s.io/dl/$(KIND_VERSION)/kind-$(shell uname -s | tr '[:upper:]' '[:lower:]')-$(shell uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/') + curl -L -o $(KIND) https://kind.sigs.k8s.io/dl/$(KIND_VERSION)/kind-$(SYSTEM_NAME)-$(SYSTEM_ARCH) chmod +x $(KIND) $(KUBECTL): $(call tool_version_file,$(KUBECTL),$(KUBECTL_VERSION)) - curl -Lo $(KUBECTL) https://dl.k8s.io/release/$(KUBECTL_VERSION)/bin/$(shell uname -s | tr '[:upper:]' '[:lower:]')/$(shell uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/')/kubectl + curl -Lo $(KUBECTL) https://dl.k8s.io/release/$(KUBECTL_VERSION)/bin/$(SYSTEM_NAME)/$(SYSTEM_ARCH)/kubectl chmod +x $(KUBECTL) +$(KUSTOMIZE): $(call tool_version_file,$(KUSTOMIZE),$(KUSTOMIZE_VERSION)) + curl -L -o - \ + https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2F$(KUSTOMIZE_VERSION)/kustomize_$(KUSTOMIZE_VERSION)_$(SYSTEM_NAME)_$(SYSTEM_ARCH).tar.gz | \ + tar zxvf - -C $(abspath $(TOOLS_BIN_DIR)) + touch $(KUSTOMIZE) && chmod +x $(KUSTOMIZE) + ifeq ($(strip $(shell go list -m 2>/dev/null)),github.com/gardener/gardener) $(LOGCHECK): $(TOOLS_PKG_PATH)/logcheck/go.* $(shell find $(TOOLS_PKG_PATH)/logcheck -type f -name '*.go') - cd $(TOOLS_PKG_PATH)/logcheck; CGO_ENABLED=1 go build -o $(abspath $(LOGCHECK)) -buildmode=plugin ./plugin + cd $(TOOLS_PKG_PATH)/logcheck;GOTOOLCHAIN=auto CGO_ENABLED=1 go build -o $(abspath $(LOGCHECK)) -buildmode=plugin ./plugin else $(LOGCHECK): go.mod - CGO_ENABLED=1 go build -o $(LOGCHECK) -buildmode=plugin github.com/gardener/gardener/hack/tools/logcheck/plugin + GOTOOLCHAIN=auto CGO_ENABLED=1 go build -o $(LOGCHECK) -buildmode=plugin github.com/gardener/gardener/hack/tools/logcheck/plugin endif $(MOCKGEN): $(call tool_version_file,$(MOCKGEN),$(MOCKGEN_VERSION)) @@ -220,11 +231,11 @@ $(SETUP_ENVTEST): $(call tool_version_file,$(SETUP_ENVTEST),$(CONTROLLER_RUNTIME go build -o $(SETUP_ENVTEST) sigs.k8s.io/controller-runtime/tools/setup-envtest $(SKAFFOLD): $(call tool_version_file,$(SKAFFOLD),$(SKAFFOLD_VERSION)) - curl -Lo $(SKAFFOLD) https://storage.googleapis.com/skaffold/releases/$(SKAFFOLD_VERSION)/skaffold-$(shell uname -s | tr '[:upper:]' '[:lower:]')-$(shell uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/') + curl -Lo $(SKAFFOLD) https://storage.googleapis.com/skaffold/releases/$(SKAFFOLD_VERSION)/skaffold-$(SYSTEM_NAME)-$(SYSTEM_ARCH) chmod +x $(SKAFFOLD) $(YQ): $(call tool_version_file,$(YQ),$(YQ_VERSION)) - curl -L -o $(YQ) https://github.com/mikefarah/yq/releases/download/$(YQ_VERSION)/yq_$(shell uname -s | tr '[:upper:]' '[:lower:]')_$(shell uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/') + curl -L -o $(YQ) https://github.com/mikefarah/yq/releases/download/$(YQ_VERSION)/yq_$(SYSTEM_NAME)_$(SYSTEM_ARCH) chmod +x $(YQ) $(VGOPATH): $(call tool_version_file,$(VGOPATH),$(VGOPATH_VERSION)) diff --git a/vendor/github.com/gardener/gardener/pkg/api/extensions/accessor.go b/vendor/github.com/gardener/gardener/pkg/api/extensions/accessor.go index 49f18b673..21281dd4d 100644 --- a/vendor/github.com/gardener/gardener/pkg/api/extensions/accessor.go +++ b/vendor/github.com/gardener/gardener/pkg/api/extensions/accessor.go @@ -229,6 +229,7 @@ func (u unstructuredStatusAccessor) GetConditions() []gardencorev1beta1.Conditio if err != nil || !ok { return nil } + var conditions []gardencorev1beta1.Condition interfaceConditionSlice := val.([]interface{}) for _, interfaceCondition := range interfaceConditionSlice { diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/register.go b/vendor/github.com/gardener/gardener/pkg/apis/core/register.go index 0d50b7af5..0c54ff971 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/register.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/register.go @@ -61,6 +61,8 @@ func addKnownTypes(scheme *runtime.Scheme) error { &ExposureClassList{}, &InternalSecret{}, &InternalSecretList{}, + &NamespacedCloudProfile{}, + &NamespacedCloudProfileList{}, &Project{}, &ProjectList{}, &Quota{}, @@ -74,5 +76,6 @@ func addKnownTypes(scheme *runtime.Scheme) error { &Shoot{}, &ShootList{}, ) + return nil } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/types_controllerregistration.go b/vendor/github.com/gardener/gardener/pkg/apis/core/types_controllerregistration.go index 0cce61bd9..f3a6112f6 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/types_controllerregistration.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/types_controllerregistration.go @@ -121,6 +121,8 @@ const ( BeforeKubeAPIServer ControllerResourceLifecycleStrategy = "BeforeKubeAPIServer" // AfterKubeAPIServer specifies that a resource should be handled after the kube-apiserver. AfterKubeAPIServer ControllerResourceLifecycleStrategy = "AfterKubeAPIServer" + // AfterWorker specifies that a resource should be handled after workers. This is only available during reconcile. + AfterWorker ControllerResourceLifecycleStrategy = "AfterWorker" ) // ControllerResourceLifecycle defines the lifecycle of a controller resource. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/types_namespacedcloudprofile.go b/vendor/github.com/gardener/gardener/pkg/apis/core/types_namespacedcloudprofile.go new file mode 100644 index 000000000..5fb49a8fd --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/types_namespacedcloudprofile.go @@ -0,0 +1,78 @@ +// Copyright 2024 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package core + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// NamespacedCloudProfile represents certain properties about a provider environment. +type NamespacedCloudProfile struct { + metav1.TypeMeta + // Standard object metadata. + metav1.ObjectMeta + // Spec defines the provider environment properties. + Spec NamespacedCloudProfileSpec + // Most recently observed status of the NamespacedCloudProfile. + Status NamespacedCloudProfileStatus +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// NamespacedCloudProfileList is a collection of NamespacedCloudProfiles. +type NamespacedCloudProfileList struct { + metav1.TypeMeta + // Standard list object metadata. + metav1.ListMeta + // Items is the list of NamespacedCloudProfiles. + Items []NamespacedCloudProfile +} + +// NamespacedCloudProfileSpec is the specification of a NamespacedCloudProfile. +type NamespacedCloudProfileSpec struct { + // CABundle is a certificate bundle which will be installed onto every host machine of shoot cluster targeting this profile. + CABundle *string + // Kubernetes contains constraints regarding allowed values of the 'kubernetes' block in the Shoot specification. + Kubernetes *KubernetesSettings + // MachineImages contains constraints regarding allowed values for machine images in the Shoot specification. + MachineImages []MachineImage + // MachineTypes contains constraints regarding allowed values for machine types in the 'workers' block in the Shoot specification. + MachineTypes []MachineType + // Regions contains constraints regarding allowed values for regions and zones. + Regions []Region + // VolumeTypes contains constraints regarding allowed values for volume types in the 'workers' block in the Shoot specification. + VolumeTypes []VolumeType + // Parent contains a reference to a CloudProfile it inherits from. + Parent CloudProfileReference +} + +// NamespacedCloudProfileStatus holds the most recently observed status of the NamespacedCloudProfile. +type NamespacedCloudProfileStatus struct { + // CloudProfileSpec is the most recently generated CloudProfileSpec of the NamespacedCloudProfile. + CloudProfileSpec CloudProfileSpec + // ObservedGeneration is the most recent generation observed for this NamespacedCloudProfile. + ObservedGeneration int64 +} + +// CloudProfileReference holds the information about the parent of the NamespacedCloudProfile. +type CloudProfileReference struct { + // Kind contains a CloudProfile kind. + Kind string + // Name contains the name of the referenced CloudProfile. + Name string +} diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/types_shoot.go b/vendor/github.com/gardener/gardener/pkg/apis/core/types_shoot.go index c70860c7e..d3248b30d 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/types_shoot.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/types_shoot.go @@ -110,6 +110,8 @@ type ShootSpec struct { // If not specified, the default scheduler takes over. // This field is immutable. SchedulerName *string + // CloudProfile is a reference to a CloudProfile or a NamespacedCloudProfile. + CloudProfile *CloudProfileReference } // GetProviderType gets the type of the provider. @@ -151,7 +153,8 @@ type ShootStatus struct { UID types.UID // ClusterIdentity is the identity of the Shoot cluster. This field is immutable. ClusterIdentity *string - // List of addresses on which the Kube API server can be reached. + // List of addresses that are relevant to the shoot. + // These include the Kube API server address and also the service account issuer. AdvertisedAddresses []ShootAdvertisedAddress // MigrationStartTime is the time when a migration to a different seed was initiated. MigrationStartTime *metav1.Time @@ -350,17 +353,22 @@ type DNS struct { Domain *string // Providers is a list of DNS providers that shall be enabled for this shoot cluster. Only relevant if // not a default domain is used. + // Deprecated: Configuring multiple DNS providers is deprecated and will be forbidden in a future release. + // Please use the DNS extension provider config (e.g. shoot-dns-service) for additional providers. Providers []DNSProvider } +// TODO(timuthy): Rework the 'DNSProvider' struct and deprecated fields in the scope of https://github.com/gardener/gardener/issues/9176. + // DNSProvider contains information about a DNS provider. type DNSProvider struct { - // TODO(timuthy): Remove this field in the scope of https://github.com/gardener/gardener/issues/9176. - // Domains contains information about which domains shall be included/excluded for this provider. // Deprecated: This field is deprecated and will be removed in a future release. + // Please use the DNS extension provider config (e.g. shoot-dns-service) for additional configuration. Domains *DNSIncludeExclude // Primary indicates that this DNSProvider is used for shoot related domains. + // Deprecated: This field is deprecated and will be removed in a future release. + // Please use the DNS extension provider config (e.g. shoot-dns-service) for additional and non-primary providers. Primary *bool // SecretName is a name of a secret containing credentials for the stated domain and the // provider. When not specified, the Gardener will use the cloud provider credentials referenced @@ -370,10 +378,9 @@ type DNSProvider struct { // Type is the DNS provider type for the Shoot. Only relevant if not the default domain is used for // this shoot. Type *string - // TODO(timuthy): Remove this field in the scope of https://github.com/gardener/gardener/issues/9176. - // Zones contains information about which hosted zones shall be included/excluded for this provider. // Deprecated: This field is deprecated and will be removed in a future release. + // Please use the DNS extension provider config (e.g. shoot-dns-service) for additional configuration. Zones *DNSIncludeExclude } @@ -429,10 +436,6 @@ type HibernationSchedule struct { // Kubernetes contains the version and configuration variables for the Shoot control plane. type Kubernetes struct { - // AllowPrivilegedContainers indicates whether privileged containers are allowed in the Shoot. - // - // Deprecated: This field is deprecated and will be removed in a future version. - AllowPrivilegedContainers *bool // ClusterAutoscaler contains the configuration flags for the Kubernetes cluster autoscaler. ClusterAutoscaler *ClusterAutoscaler // KubeAPIServer contains configuration settings for the kube-apiserver. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/constants/types_constants.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/constants/types_constants.go index b7e512d21..82f6ea1ad 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/constants/types_constants.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/constants/types_constants.go @@ -265,8 +265,6 @@ const ( GardenRoleMonitoring = "monitoring" // GardenRoleOptionalAddon is the value of the GardenRole key indicating type 'optional-addon'. GardenRoleOptionalAddon = "optional-addon" - // GardenRoleCloudConfig is the value of the GardenRole key indicating type 'cloud-config'. - GardenRoleCloudConfig = "cloud-config" // GardenRoleOperatingSystemConfig is the value of the GardenRole key indicating type 'operating-system-config'. GardenRoleOperatingSystemConfig = "operating-system-config" // GardenRoleKubeconfig is the value of the GardenRole key indicating type 'kubeconfig'. @@ -281,8 +279,6 @@ const ( GardenRoleDefaultDomain = "default-domain" // GardenRoleInternalDomain is the value of the GardenRole key indicating type 'internal-domain'. GardenRoleInternalDomain = "internal-domain" - // GardenRoleOpenVPNDiffieHellman is the value of the GardenRole key indicating type 'openvpn-diffie-hellman'. - GardenRoleOpenVPNDiffieHellman = "openvpn-diffie-hellman" // GardenRoleGlobalMonitoring is the value of the GardenRole key indicating type 'global-monitoring' GardenRoleGlobalMonitoring = "global-monitoring" // GardenRoleGlobalShootRemoteWriteMonitoring is the value of the GardenRole key indicating type 'global-shoot-remote-write-monitoring' @@ -296,6 +292,8 @@ const ( GardenRoleControlPlaneWildcardCert = "controlplane-cert" // GardenRoleExposureClassHandler is the value of the GardenRole key indicating type 'exposureclass-handler'. GardenRoleExposureClassHandler = "exposureclass-handler" + // GardenRoleShootServiceAccountIssuer is the value of the GardenRole key indicating type 'shoot-service-account-issuer'. + GardenRoleShootServiceAccountIssuer = "shoot-service-account-issuer" // ShootUID is an annotation key for the shoot namespace in the seed cluster, // which value will be the value of `shoot.status.uid` @@ -523,6 +521,9 @@ const ( // cluster which can be used to describe that this ClusterRole contains custom permissions for extensions. LabelAuthorizationCustomExtensionsPermissions = "authorization.gardener.cloud/custom-extensions-permissions" + // LabelObservabilityApplication is a constant for a label key set to all observability applications in gardener exposing a public endpoint. + LabelObservabilityApplication = "observability.gardener.cloud/app" + // LabelApp is a constant for a label key. LabelApp = "app" // LabelRole is a constant for a label key. @@ -542,6 +543,16 @@ const ( // LabelExtensionProjectRole is a constant for a label value for extension project roles LabelExtensionProjectRole = "extension-project-role" + // LabelShootNamespace is a constant for a label key that indicates a relationship to a shoot in the specified namespace. + LabelShootNamespace = "shoot.gardener.cloud/namespace" + // LabelShootName is a constant for a label key that indicates a relationship to a shoot with the specified name. + LabelShootName = "shoot.gardener.cloud/name" + + // LabelPublicKeys is a constant for a label key that indicates that a resource contains public keys. + LabelPublicKeys = "authentication.gardener.cloud/public-keys" + // LabelPublicKeysServiceAccount is a constant for a label value that indicates that a resource contains service account public keys. + LabelPublicKeysServiceAccount = "serviceaccount" + // LabelExposureClassHandlerName is the label key for exposure class handler names. LabelExposureClassHandlerName = "handler.exposureclass.gardener.cloud/name" @@ -615,7 +626,7 @@ const ( AnnotationShootInfrastructureCleanupWaitPeriodSeconds = "shoot.gardener.cloud/infrastructure-cleanup-wait-period-seconds" // AnnotationShootCloudConfigExecutionMaxDelaySeconds is a key for an annotation on a Shoot resource that declares // the maximum delay in seconds when potentially updated cloud-config user data is executed on the worker nodes. - // Concretely, the cloud-config-downloader/gardener-node-agent systemd service running on all worker nodes will wait + // Concretely, the gardener-node-agent systemd service running on all worker nodes will wait // for a random duration based on the configured value before executing the user data (default value is 300) plus an // additional offset of 30s. If set to 0 then no random delay will be applied and the minimum delay (30s) applies. // Any value above 1800 is ignored (in this case the default value is used). @@ -625,6 +636,13 @@ const ( // AnnotationCoreDNSRewritingDisabled disables core dns query rewriting even if the corresponding feature gate is enabled. AnnotationCoreDNSRewritingDisabled = "alpha.featuregates.shoot.gardener.cloud/core-dns-rewriting-disabled" + // AnnotationAuthenticationIssuer is the key for an annotation applied to a Shoot which specifies + // if the shoot's issuer is managed by Gardener. + AnnotationAuthenticationIssuer = "authentication.gardener.cloud/issuer" + // AnnotationAuthenticationIssuerManaged is the value for [AnnotationAuthenticationIssuer] annotation that indicates that + // a shoot's issuer should be managed by Gardener. + AnnotationAuthenticationIssuerManaged = "managed" + // AnnotationPodSecurityEnforce is a constant for an annotation on `ControllerRegistration`s and `ControllerInstallation`s. When set the // `extension` namespace is created with "pod-security.kubernetes.io/enforce" label set to AnnotationPodSecurityEnforce's value. AnnotationPodSecurityEnforce = "security.gardener.cloud/pod-security-enforce" @@ -660,6 +678,12 @@ const ( LabelControllerRegistrationName = "controllerregistration.core.gardener.cloud/name" // LabelPodMaintenanceRestart is a constant for a label that describes that a pod should be restarted during maintenance. LabelPodMaintenanceRestart = "maintenance.gardener.cloud/restart" + // LabelCareConditionType is a key for a label on a ManagedResource indicating to which condition type its status + // should be aggregated. + LabelCareConditionType = "care.gardener.cloud/condition-type" + // ObservabilityComponentsHealthy is a constant for a condition type indicating the health of observability components. + ObservabilityComponentsHealthy = "ObservabilityComponentsHealthy" + // LabelWorkerPool is a constant for a label that indicates the worker pool the node belongs to LabelWorkerPool = "worker.gardener.cloud/pool" // LabelWorkerKubernetesVersion is a constant for a label that indicates the Kubernetes version used for the worker pool nodes. @@ -756,6 +780,16 @@ const ( IngressTLSCertificateValidity = 730 * 24 * time.Hour // ~2 years, see https://support.apple.com/en-us/HT210176 // VPNTunnel dictates that VPN is used as a tunnel between seed and shoot networks. VPNTunnel string = "vpn-shoot" + + // AdvertisedAddressExternal is a constant that represents the name of the external kube-apiserver address. + AdvertisedAddressExternal = "external" + // AdvertisedAddressInternal is a constant that represents the name of the internal kube-apiserver address. + AdvertisedAddressInternal = "internal" + // AdvertisedAddressUnmanaged is a constant that represents the name of the unmanaged kube-apiserver address. + AdvertisedAddressUnmanaged = "unmanaged" + // AdvertisedAddressServiceAccountIssuer is a constant that represents the name of the address + // that is used as a service account issuer for the kube-apiserver. + AdvertisedAddressServiceAccountIssuer = "service-account-issuer" ) var ( diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/conversions.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/conversions.go index 72306fd54..79873c091 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/conversions.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/conversions.go @@ -122,6 +122,7 @@ func Convert_v1beta1_InternalSecret_To_core_InternalSecret(in *InternalSecret, o if out.Data == nil { out.Data = make(map[string][]byte, len(in.StringData)) } + for k, v := range in.StringData { out.Data[k] = []byte(v) } @@ -241,6 +242,7 @@ func Convert_core_ProjectMember_To_v1beta1_ProjectMember(in *core.ProjectMember, func removeRoleFromRoles(roles []string, role string) []string { var newRoles []string + for _, r := range roles { if r != role { newRoles = append(newRoles, r) diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/defaults_controllerregistration.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/defaults_controllerregistration.go index 947a84fda..666f37c4c 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/defaults_controllerregistration.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/defaults_controllerregistration.go @@ -48,10 +48,12 @@ func SetDefaults_ControllerResourceLifecycle(obj *ControllerResourceLifecycle) { afterKubeAPIServer := AfterKubeAPIServer obj.Reconcile = &afterKubeAPIServer } + if obj.Delete == nil { beforeKubeAPIServer := BeforeKubeAPIServer obj.Delete = &beforeKubeAPIServer } + if obj.Migrate == nil { beforeKubeAPIServer := BeforeKubeAPIServer obj.Migrate = &beforeKubeAPIServer diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/defaults_project.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/defaults_project.go index 5df107a3d..d352ca5fd 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/defaults_project.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/defaults_project.go @@ -30,6 +30,7 @@ func SetDefaults_Project(obj *Project) { if obj.Spec.Tolerations == nil { obj.Spec.Tolerations = &ProjectTolerations{} } + addTolerations(&obj.Spec.Tolerations.Whitelist, Toleration{Key: SeedTaintProtected}) addTolerations(&obj.Spec.Tolerations.Defaults, Toleration{Key: SeedTaintProtected}) } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/defaults_seed.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/defaults_seed.go index 257ddc061..647b8680c 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/defaults_seed.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/defaults_seed.go @@ -67,6 +67,7 @@ func SetDefaults_SeedSettingDependencyWatchdog(obj *SeedSettingDependencyWatchdo if obj.Weeder == nil { obj.Weeder = &SeedSettingDependencyWatchdogWeeder{Enabled: true} } + if obj.Prober == nil { obj.Prober = &SeedSettingDependencyWatchdogProber{Enabled: true} } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/defaults_shoot.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/defaults_shoot.go index ec6f74c99..3edf1d647 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/defaults_shoot.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/defaults_shoot.go @@ -88,10 +88,10 @@ func SetDefaults_Shoot(obj *Shoot) { // these fields are relevant only for shoot with workers if len(obj.Spec.Provider.Workers) > 0 { if obj.Spec.Kubernetes.KubeAPIServer.DefaultNotReadyTolerationSeconds == nil { - obj.Spec.Kubernetes.KubeAPIServer.DefaultNotReadyTolerationSeconds = ptr.To(int64(300)) + obj.Spec.Kubernetes.KubeAPIServer.DefaultNotReadyTolerationSeconds = ptr.To[int64](300) } if obj.Spec.Kubernetes.KubeAPIServer.DefaultUnreachableTolerationSeconds == nil { - obj.Spec.Kubernetes.KubeAPIServer.DefaultUnreachableTolerationSeconds = ptr.To(int64(300)) + obj.Spec.Kubernetes.KubeAPIServer.DefaultUnreachableTolerationSeconds = ptr.To[int64](300) } if obj.Spec.Kubernetes.KubeControllerManager == nil { @@ -149,10 +149,10 @@ func SetDefaults_Shoot(obj *Shoot) { } } if obj.Spec.Kubernetes.Kubelet.ImageGCHighThresholdPercent == nil { - obj.Spec.Kubernetes.Kubelet.ImageGCHighThresholdPercent = ptr.To(int32(50)) + obj.Spec.Kubernetes.Kubelet.ImageGCHighThresholdPercent = ptr.To[int32](50) } if obj.Spec.Kubernetes.Kubelet.ImageGCLowThresholdPercent == nil { - obj.Spec.Kubernetes.Kubelet.ImageGCLowThresholdPercent = ptr.To(int32(40)) + obj.Spec.Kubernetes.Kubelet.ImageGCLowThresholdPercent = ptr.To[int32](40) } if obj.Spec.Kubernetes.Kubelet.SerializeImagePulls == nil { obj.Spec.Kubernetes.Kubelet.SerializeImagePulls = ptr.To(true) @@ -215,10 +215,10 @@ func SetDefaults_KubeAPIServerConfig(obj *KubeAPIServerConfig) { obj.Requests = &APIServerRequests{} } if obj.Requests.MaxNonMutatingInflight == nil { - obj.Requests.MaxNonMutatingInflight = ptr.To(int32(400)) + obj.Requests.MaxNonMutatingInflight = ptr.To[int32](400) } if obj.Requests.MaxMutatingInflight == nil { - obj.Requests.MaxMutatingInflight = ptr.To(int32(200)) + obj.Requests.MaxMutatingInflight = ptr.To[int32](200) } if obj.EnableAnonymousAuthentication == nil { obj.EnableAnonymousAuthentication = ptr.To(false) @@ -230,7 +230,7 @@ func SetDefaults_KubeAPIServerConfig(obj *KubeAPIServerConfig) { obj.Logging = &APIServerLogging{} } if obj.Logging.Verbosity == nil { - obj.Logging.Verbosity = ptr.To(int32(2)) + obj.Logging.Verbosity = ptr.To[int32](2) } } @@ -331,19 +331,19 @@ func SetDefaults_ClusterAutoscaler(obj *ClusterAutoscaler) { obj.MaxNodeProvisionTime = &metav1.Duration{Duration: 20 * time.Minute} } if obj.MaxGracefulTerminationSeconds == nil { - obj.MaxGracefulTerminationSeconds = ptr.To(int32(600)) + obj.MaxGracefulTerminationSeconds = ptr.To[int32](600) } if obj.IgnoreDaemonsetsUtilization == nil { obj.IgnoreDaemonsetsUtilization = ptr.To(false) } if obj.Verbosity == nil { - obj.Verbosity = ptr.To(int32(2)) + obj.Verbosity = ptr.To[int32](2) } if obj.NewPodScaleUpDelay == nil { obj.NewPodScaleUpDelay = &metav1.Duration{Duration: 0} } if obj.MaxEmptyBulkDelete == nil { - obj.MaxEmptyBulkDelete = ptr.To(int32(10)) + obj.MaxEmptyBulkDelete = ptr.To[int32](10) } } @@ -362,7 +362,7 @@ func calculateDefaultNodeCIDRMaskSize(shoot *ShootSpec) *int32 { // If shoot is using IPv6 single-stack, don't be stingy and allocate larger pod CIDRs per node. // We don't calculate a nodeCIDRMaskSize matching the maxPods settings in this case, and simply apply // kube-controller-manager's default value for the --node-cidr-mask-size flag. - return ptr.To(int32(64)) + return ptr.To[int32](64) } var maxPods int32 = 110 // default maxPods setting on kubelet @@ -395,6 +395,7 @@ func addTolerations(tolerations *[]Toleration, additionalTolerations ...Tolerati if _, ok := existingTolerations[toleration]; ok { continue } + *tolerations = append(*tolerations, toleration) } } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.pb.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.pb.go index 333aeca14..01859b869 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.pb.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.pb.go @@ -657,10 +657,38 @@ func (m *CloudProfileList) XXX_DiscardUnknown() { var xxx_messageInfo_CloudProfileList proto.InternalMessageInfo +func (m *CloudProfileReference) Reset() { *m = CloudProfileReference{} } +func (*CloudProfileReference) ProtoMessage() {} +func (*CloudProfileReference) Descriptor() ([]byte, []int) { + return fileDescriptor_ca37af0df9a5bbd2, []int{22} +} +func (m *CloudProfileReference) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CloudProfileReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CloudProfileReference) XXX_Merge(src proto.Message) { + xxx_messageInfo_CloudProfileReference.Merge(m, src) +} +func (m *CloudProfileReference) XXX_Size() int { + return m.Size() +} +func (m *CloudProfileReference) XXX_DiscardUnknown() { + xxx_messageInfo_CloudProfileReference.DiscardUnknown(m) +} + +var xxx_messageInfo_CloudProfileReference proto.InternalMessageInfo + func (m *CloudProfileSpec) Reset() { *m = CloudProfileSpec{} } func (*CloudProfileSpec) ProtoMessage() {} func (*CloudProfileSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{22} + return fileDescriptor_ca37af0df9a5bbd2, []int{23} } func (m *CloudProfileSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -688,7 +716,7 @@ var xxx_messageInfo_CloudProfileSpec proto.InternalMessageInfo func (m *ClusterAutoscaler) Reset() { *m = ClusterAutoscaler{} } func (*ClusterAutoscaler) ProtoMessage() {} func (*ClusterAutoscaler) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{23} + return fileDescriptor_ca37af0df9a5bbd2, []int{24} } func (m *ClusterAutoscaler) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -716,7 +744,7 @@ var xxx_messageInfo_ClusterAutoscaler proto.InternalMessageInfo func (m *ClusterAutoscalerOptions) Reset() { *m = ClusterAutoscalerOptions{} } func (*ClusterAutoscalerOptions) ProtoMessage() {} func (*ClusterAutoscalerOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{24} + return fileDescriptor_ca37af0df9a5bbd2, []int{25} } func (m *ClusterAutoscalerOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -744,7 +772,7 @@ var xxx_messageInfo_ClusterAutoscalerOptions proto.InternalMessageInfo func (m *Condition) Reset() { *m = Condition{} } func (*Condition) ProtoMessage() {} func (*Condition) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{25} + return fileDescriptor_ca37af0df9a5bbd2, []int{26} } func (m *Condition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -772,7 +800,7 @@ var xxx_messageInfo_Condition proto.InternalMessageInfo func (m *ContainerRuntime) Reset() { *m = ContainerRuntime{} } func (*ContainerRuntime) ProtoMessage() {} func (*ContainerRuntime) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{26} + return fileDescriptor_ca37af0df9a5bbd2, []int{27} } func (m *ContainerRuntime) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -800,7 +828,7 @@ var xxx_messageInfo_ContainerRuntime proto.InternalMessageInfo func (m *ControlPlane) Reset() { *m = ControlPlane{} } func (*ControlPlane) ProtoMessage() {} func (*ControlPlane) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{27} + return fileDescriptor_ca37af0df9a5bbd2, []int{28} } func (m *ControlPlane) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -828,7 +856,7 @@ var xxx_messageInfo_ControlPlane proto.InternalMessageInfo func (m *ControllerDeployment) Reset() { *m = ControllerDeployment{} } func (*ControllerDeployment) ProtoMessage() {} func (*ControllerDeployment) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{28} + return fileDescriptor_ca37af0df9a5bbd2, []int{29} } func (m *ControllerDeployment) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -856,7 +884,7 @@ var xxx_messageInfo_ControllerDeployment proto.InternalMessageInfo func (m *ControllerDeploymentList) Reset() { *m = ControllerDeploymentList{} } func (*ControllerDeploymentList) ProtoMessage() {} func (*ControllerDeploymentList) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{29} + return fileDescriptor_ca37af0df9a5bbd2, []int{30} } func (m *ControllerDeploymentList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -884,7 +912,7 @@ var xxx_messageInfo_ControllerDeploymentList proto.InternalMessageInfo func (m *ControllerInstallation) Reset() { *m = ControllerInstallation{} } func (*ControllerInstallation) ProtoMessage() {} func (*ControllerInstallation) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{30} + return fileDescriptor_ca37af0df9a5bbd2, []int{31} } func (m *ControllerInstallation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -912,7 +940,7 @@ var xxx_messageInfo_ControllerInstallation proto.InternalMessageInfo func (m *ControllerInstallationList) Reset() { *m = ControllerInstallationList{} } func (*ControllerInstallationList) ProtoMessage() {} func (*ControllerInstallationList) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{31} + return fileDescriptor_ca37af0df9a5bbd2, []int{32} } func (m *ControllerInstallationList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -940,7 +968,7 @@ var xxx_messageInfo_ControllerInstallationList proto.InternalMessageInfo func (m *ControllerInstallationSpec) Reset() { *m = ControllerInstallationSpec{} } func (*ControllerInstallationSpec) ProtoMessage() {} func (*ControllerInstallationSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{32} + return fileDescriptor_ca37af0df9a5bbd2, []int{33} } func (m *ControllerInstallationSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -968,7 +996,7 @@ var xxx_messageInfo_ControllerInstallationSpec proto.InternalMessageInfo func (m *ControllerInstallationStatus) Reset() { *m = ControllerInstallationStatus{} } func (*ControllerInstallationStatus) ProtoMessage() {} func (*ControllerInstallationStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{33} + return fileDescriptor_ca37af0df9a5bbd2, []int{34} } func (m *ControllerInstallationStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -996,7 +1024,7 @@ var xxx_messageInfo_ControllerInstallationStatus proto.InternalMessageInfo func (m *ControllerRegistration) Reset() { *m = ControllerRegistration{} } func (*ControllerRegistration) ProtoMessage() {} func (*ControllerRegistration) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{34} + return fileDescriptor_ca37af0df9a5bbd2, []int{35} } func (m *ControllerRegistration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1024,7 +1052,7 @@ var xxx_messageInfo_ControllerRegistration proto.InternalMessageInfo func (m *ControllerRegistrationDeployment) Reset() { *m = ControllerRegistrationDeployment{} } func (*ControllerRegistrationDeployment) ProtoMessage() {} func (*ControllerRegistrationDeployment) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{35} + return fileDescriptor_ca37af0df9a5bbd2, []int{36} } func (m *ControllerRegistrationDeployment) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1052,7 +1080,7 @@ var xxx_messageInfo_ControllerRegistrationDeployment proto.InternalMessageInfo func (m *ControllerRegistrationList) Reset() { *m = ControllerRegistrationList{} } func (*ControllerRegistrationList) ProtoMessage() {} func (*ControllerRegistrationList) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{36} + return fileDescriptor_ca37af0df9a5bbd2, []int{37} } func (m *ControllerRegistrationList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1080,7 +1108,7 @@ var xxx_messageInfo_ControllerRegistrationList proto.InternalMessageInfo func (m *ControllerRegistrationSpec) Reset() { *m = ControllerRegistrationSpec{} } func (*ControllerRegistrationSpec) ProtoMessage() {} func (*ControllerRegistrationSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{37} + return fileDescriptor_ca37af0df9a5bbd2, []int{38} } func (m *ControllerRegistrationSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1108,7 +1136,7 @@ var xxx_messageInfo_ControllerRegistrationSpec proto.InternalMessageInfo func (m *ControllerResource) Reset() { *m = ControllerResource{} } func (*ControllerResource) ProtoMessage() {} func (*ControllerResource) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{38} + return fileDescriptor_ca37af0df9a5bbd2, []int{39} } func (m *ControllerResource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1136,7 +1164,7 @@ var xxx_messageInfo_ControllerResource proto.InternalMessageInfo func (m *ControllerResourceLifecycle) Reset() { *m = ControllerResourceLifecycle{} } func (*ControllerResourceLifecycle) ProtoMessage() {} func (*ControllerResourceLifecycle) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{39} + return fileDescriptor_ca37af0df9a5bbd2, []int{40} } func (m *ControllerResourceLifecycle) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1164,7 +1192,7 @@ var xxx_messageInfo_ControllerResourceLifecycle proto.InternalMessageInfo func (m *CoreDNS) Reset() { *m = CoreDNS{} } func (*CoreDNS) ProtoMessage() {} func (*CoreDNS) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{40} + return fileDescriptor_ca37af0df9a5bbd2, []int{41} } func (m *CoreDNS) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1192,7 +1220,7 @@ var xxx_messageInfo_CoreDNS proto.InternalMessageInfo func (m *CoreDNSAutoscaling) Reset() { *m = CoreDNSAutoscaling{} } func (*CoreDNSAutoscaling) ProtoMessage() {} func (*CoreDNSAutoscaling) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{41} + return fileDescriptor_ca37af0df9a5bbd2, []int{42} } func (m *CoreDNSAutoscaling) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1220,7 +1248,7 @@ var xxx_messageInfo_CoreDNSAutoscaling proto.InternalMessageInfo func (m *CoreDNSRewriting) Reset() { *m = CoreDNSRewriting{} } func (*CoreDNSRewriting) ProtoMessage() {} func (*CoreDNSRewriting) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{42} + return fileDescriptor_ca37af0df9a5bbd2, []int{43} } func (m *CoreDNSRewriting) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1248,7 +1276,7 @@ var xxx_messageInfo_CoreDNSRewriting proto.InternalMessageInfo func (m *DNS) Reset() { *m = DNS{} } func (*DNS) ProtoMessage() {} func (*DNS) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{43} + return fileDescriptor_ca37af0df9a5bbd2, []int{44} } func (m *DNS) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1276,7 +1304,7 @@ var xxx_messageInfo_DNS proto.InternalMessageInfo func (m *DNSIncludeExclude) Reset() { *m = DNSIncludeExclude{} } func (*DNSIncludeExclude) ProtoMessage() {} func (*DNSIncludeExclude) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{44} + return fileDescriptor_ca37af0df9a5bbd2, []int{45} } func (m *DNSIncludeExclude) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1304,7 +1332,7 @@ var xxx_messageInfo_DNSIncludeExclude proto.InternalMessageInfo func (m *DNSProvider) Reset() { *m = DNSProvider{} } func (*DNSProvider) ProtoMessage() {} func (*DNSProvider) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{45} + return fileDescriptor_ca37af0df9a5bbd2, []int{46} } func (m *DNSProvider) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1332,7 +1360,7 @@ var xxx_messageInfo_DNSProvider proto.InternalMessageInfo func (m *DataVolume) Reset() { *m = DataVolume{} } func (*DataVolume) ProtoMessage() {} func (*DataVolume) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{46} + return fileDescriptor_ca37af0df9a5bbd2, []int{47} } func (m *DataVolume) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1360,7 +1388,7 @@ var xxx_messageInfo_DataVolume proto.InternalMessageInfo func (m *DeploymentRef) Reset() { *m = DeploymentRef{} } func (*DeploymentRef) ProtoMessage() {} func (*DeploymentRef) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{47} + return fileDescriptor_ca37af0df9a5bbd2, []int{48} } func (m *DeploymentRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1388,7 +1416,7 @@ var xxx_messageInfo_DeploymentRef proto.InternalMessageInfo func (m *ETCDEncryptionKeyRotation) Reset() { *m = ETCDEncryptionKeyRotation{} } func (*ETCDEncryptionKeyRotation) ProtoMessage() {} func (*ETCDEncryptionKeyRotation) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{48} + return fileDescriptor_ca37af0df9a5bbd2, []int{49} } func (m *ETCDEncryptionKeyRotation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1416,7 +1444,7 @@ var xxx_messageInfo_ETCDEncryptionKeyRotation proto.InternalMessageInfo func (m *EncryptionConfig) Reset() { *m = EncryptionConfig{} } func (*EncryptionConfig) ProtoMessage() {} func (*EncryptionConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{49} + return fileDescriptor_ca37af0df9a5bbd2, []int{50} } func (m *EncryptionConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1444,7 +1472,7 @@ var xxx_messageInfo_EncryptionConfig proto.InternalMessageInfo func (m *ExpirableVersion) Reset() { *m = ExpirableVersion{} } func (*ExpirableVersion) ProtoMessage() {} func (*ExpirableVersion) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{50} + return fileDescriptor_ca37af0df9a5bbd2, []int{51} } func (m *ExpirableVersion) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1472,7 +1500,7 @@ var xxx_messageInfo_ExpirableVersion proto.InternalMessageInfo func (m *ExposureClass) Reset() { *m = ExposureClass{} } func (*ExposureClass) ProtoMessage() {} func (*ExposureClass) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{51} + return fileDescriptor_ca37af0df9a5bbd2, []int{52} } func (m *ExposureClass) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1500,7 +1528,7 @@ var xxx_messageInfo_ExposureClass proto.InternalMessageInfo func (m *ExposureClassList) Reset() { *m = ExposureClassList{} } func (*ExposureClassList) ProtoMessage() {} func (*ExposureClassList) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{52} + return fileDescriptor_ca37af0df9a5bbd2, []int{53} } func (m *ExposureClassList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1528,7 +1556,7 @@ var xxx_messageInfo_ExposureClassList proto.InternalMessageInfo func (m *ExposureClassScheduling) Reset() { *m = ExposureClassScheduling{} } func (*ExposureClassScheduling) ProtoMessage() {} func (*ExposureClassScheduling) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{53} + return fileDescriptor_ca37af0df9a5bbd2, []int{54} } func (m *ExposureClassScheduling) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1556,7 +1584,7 @@ var xxx_messageInfo_ExposureClassScheduling proto.InternalMessageInfo func (m *Extension) Reset() { *m = Extension{} } func (*Extension) ProtoMessage() {} func (*Extension) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{54} + return fileDescriptor_ca37af0df9a5bbd2, []int{55} } func (m *Extension) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1584,7 +1612,7 @@ var xxx_messageInfo_Extension proto.InternalMessageInfo func (m *ExtensionResourceState) Reset() { *m = ExtensionResourceState{} } func (*ExtensionResourceState) ProtoMessage() {} func (*ExtensionResourceState) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{55} + return fileDescriptor_ca37af0df9a5bbd2, []int{56} } func (m *ExtensionResourceState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1612,7 +1640,7 @@ var xxx_messageInfo_ExtensionResourceState proto.InternalMessageInfo func (m *FailureTolerance) Reset() { *m = FailureTolerance{} } func (*FailureTolerance) ProtoMessage() {} func (*FailureTolerance) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{56} + return fileDescriptor_ca37af0df9a5bbd2, []int{57} } func (m *FailureTolerance) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1640,7 +1668,7 @@ var xxx_messageInfo_FailureTolerance proto.InternalMessageInfo func (m *Gardener) Reset() { *m = Gardener{} } func (*Gardener) ProtoMessage() {} func (*Gardener) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{57} + return fileDescriptor_ca37af0df9a5bbd2, []int{58} } func (m *Gardener) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1668,7 +1696,7 @@ var xxx_messageInfo_Gardener proto.InternalMessageInfo func (m *GardenerResourceData) Reset() { *m = GardenerResourceData{} } func (*GardenerResourceData) ProtoMessage() {} func (*GardenerResourceData) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{58} + return fileDescriptor_ca37af0df9a5bbd2, []int{59} } func (m *GardenerResourceData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1696,7 +1724,7 @@ var xxx_messageInfo_GardenerResourceData proto.InternalMessageInfo func (m *Hibernation) Reset() { *m = Hibernation{} } func (*Hibernation) ProtoMessage() {} func (*Hibernation) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{59} + return fileDescriptor_ca37af0df9a5bbd2, []int{60} } func (m *Hibernation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1724,7 +1752,7 @@ var xxx_messageInfo_Hibernation proto.InternalMessageInfo func (m *HibernationSchedule) Reset() { *m = HibernationSchedule{} } func (*HibernationSchedule) ProtoMessage() {} func (*HibernationSchedule) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{60} + return fileDescriptor_ca37af0df9a5bbd2, []int{61} } func (m *HibernationSchedule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1752,7 +1780,7 @@ var xxx_messageInfo_HibernationSchedule proto.InternalMessageInfo func (m *HighAvailability) Reset() { *m = HighAvailability{} } func (*HighAvailability) ProtoMessage() {} func (*HighAvailability) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{61} + return fileDescriptor_ca37af0df9a5bbd2, []int{62} } func (m *HighAvailability) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1780,7 +1808,7 @@ var xxx_messageInfo_HighAvailability proto.InternalMessageInfo func (m *HorizontalPodAutoscalerConfig) Reset() { *m = HorizontalPodAutoscalerConfig{} } func (*HorizontalPodAutoscalerConfig) ProtoMessage() {} func (*HorizontalPodAutoscalerConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{62} + return fileDescriptor_ca37af0df9a5bbd2, []int{63} } func (m *HorizontalPodAutoscalerConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1808,7 +1836,7 @@ var xxx_messageInfo_HorizontalPodAutoscalerConfig proto.InternalMessageInfo func (m *Ingress) Reset() { *m = Ingress{} } func (*Ingress) ProtoMessage() {} func (*Ingress) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{63} + return fileDescriptor_ca37af0df9a5bbd2, []int{64} } func (m *Ingress) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1836,7 +1864,7 @@ var xxx_messageInfo_Ingress proto.InternalMessageInfo func (m *IngressController) Reset() { *m = IngressController{} } func (*IngressController) ProtoMessage() {} func (*IngressController) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{64} + return fileDescriptor_ca37af0df9a5bbd2, []int{65} } func (m *IngressController) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1864,7 +1892,7 @@ var xxx_messageInfo_IngressController proto.InternalMessageInfo func (m *InternalSecret) Reset() { *m = InternalSecret{} } func (*InternalSecret) ProtoMessage() {} func (*InternalSecret) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{65} + return fileDescriptor_ca37af0df9a5bbd2, []int{66} } func (m *InternalSecret) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1892,7 +1920,7 @@ var xxx_messageInfo_InternalSecret proto.InternalMessageInfo func (m *InternalSecretList) Reset() { *m = InternalSecretList{} } func (*InternalSecretList) ProtoMessage() {} func (*InternalSecretList) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{66} + return fileDescriptor_ca37af0df9a5bbd2, []int{67} } func (m *InternalSecretList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1920,7 +1948,7 @@ var xxx_messageInfo_InternalSecretList proto.InternalMessageInfo func (m *KubeAPIServerConfig) Reset() { *m = KubeAPIServerConfig{} } func (*KubeAPIServerConfig) ProtoMessage() {} func (*KubeAPIServerConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{67} + return fileDescriptor_ca37af0df9a5bbd2, []int{68} } func (m *KubeAPIServerConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1948,7 +1976,7 @@ var xxx_messageInfo_KubeAPIServerConfig proto.InternalMessageInfo func (m *KubeControllerManagerConfig) Reset() { *m = KubeControllerManagerConfig{} } func (*KubeControllerManagerConfig) ProtoMessage() {} func (*KubeControllerManagerConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{68} + return fileDescriptor_ca37af0df9a5bbd2, []int{69} } func (m *KubeControllerManagerConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1976,7 +2004,7 @@ var xxx_messageInfo_KubeControllerManagerConfig proto.InternalMessageInfo func (m *KubeProxyConfig) Reset() { *m = KubeProxyConfig{} } func (*KubeProxyConfig) ProtoMessage() {} func (*KubeProxyConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{69} + return fileDescriptor_ca37af0df9a5bbd2, []int{70} } func (m *KubeProxyConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2004,7 +2032,7 @@ var xxx_messageInfo_KubeProxyConfig proto.InternalMessageInfo func (m *KubeSchedulerConfig) Reset() { *m = KubeSchedulerConfig{} } func (*KubeSchedulerConfig) ProtoMessage() {} func (*KubeSchedulerConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{70} + return fileDescriptor_ca37af0df9a5bbd2, []int{71} } func (m *KubeSchedulerConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2032,7 +2060,7 @@ var xxx_messageInfo_KubeSchedulerConfig proto.InternalMessageInfo func (m *KubeletConfig) Reset() { *m = KubeletConfig{} } func (*KubeletConfig) ProtoMessage() {} func (*KubeletConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{71} + return fileDescriptor_ca37af0df9a5bbd2, []int{72} } func (m *KubeletConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2060,7 +2088,7 @@ var xxx_messageInfo_KubeletConfig proto.InternalMessageInfo func (m *KubeletConfigEviction) Reset() { *m = KubeletConfigEviction{} } func (*KubeletConfigEviction) ProtoMessage() {} func (*KubeletConfigEviction) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{72} + return fileDescriptor_ca37af0df9a5bbd2, []int{73} } func (m *KubeletConfigEviction) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2088,7 +2116,7 @@ var xxx_messageInfo_KubeletConfigEviction proto.InternalMessageInfo func (m *KubeletConfigEvictionMinimumReclaim) Reset() { *m = KubeletConfigEvictionMinimumReclaim{} } func (*KubeletConfigEvictionMinimumReclaim) ProtoMessage() {} func (*KubeletConfigEvictionMinimumReclaim) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{73} + return fileDescriptor_ca37af0df9a5bbd2, []int{74} } func (m *KubeletConfigEvictionMinimumReclaim) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2116,7 +2144,7 @@ var xxx_messageInfo_KubeletConfigEvictionMinimumReclaim proto.InternalMessageInf func (m *KubeletConfigEvictionSoftGracePeriod) Reset() { *m = KubeletConfigEvictionSoftGracePeriod{} } func (*KubeletConfigEvictionSoftGracePeriod) ProtoMessage() {} func (*KubeletConfigEvictionSoftGracePeriod) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{74} + return fileDescriptor_ca37af0df9a5bbd2, []int{75} } func (m *KubeletConfigEvictionSoftGracePeriod) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2144,7 +2172,7 @@ var xxx_messageInfo_KubeletConfigEvictionSoftGracePeriod proto.InternalMessageIn func (m *KubeletConfigReserved) Reset() { *m = KubeletConfigReserved{} } func (*KubeletConfigReserved) ProtoMessage() {} func (*KubeletConfigReserved) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{75} + return fileDescriptor_ca37af0df9a5bbd2, []int{76} } func (m *KubeletConfigReserved) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2172,7 +2200,7 @@ var xxx_messageInfo_KubeletConfigReserved proto.InternalMessageInfo func (m *Kubernetes) Reset() { *m = Kubernetes{} } func (*Kubernetes) ProtoMessage() {} func (*Kubernetes) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{76} + return fileDescriptor_ca37af0df9a5bbd2, []int{77} } func (m *Kubernetes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2200,7 +2228,7 @@ var xxx_messageInfo_Kubernetes proto.InternalMessageInfo func (m *KubernetesConfig) Reset() { *m = KubernetesConfig{} } func (*KubernetesConfig) ProtoMessage() {} func (*KubernetesConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{77} + return fileDescriptor_ca37af0df9a5bbd2, []int{78} } func (m *KubernetesConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2228,7 +2256,7 @@ var xxx_messageInfo_KubernetesConfig proto.InternalMessageInfo func (m *KubernetesDashboard) Reset() { *m = KubernetesDashboard{} } func (*KubernetesDashboard) ProtoMessage() {} func (*KubernetesDashboard) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{78} + return fileDescriptor_ca37af0df9a5bbd2, []int{79} } func (m *KubernetesDashboard) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2256,7 +2284,7 @@ var xxx_messageInfo_KubernetesDashboard proto.InternalMessageInfo func (m *KubernetesSettings) Reset() { *m = KubernetesSettings{} } func (*KubernetesSettings) ProtoMessage() {} func (*KubernetesSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{79} + return fileDescriptor_ca37af0df9a5bbd2, []int{80} } func (m *KubernetesSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2284,7 +2312,7 @@ var xxx_messageInfo_KubernetesSettings proto.InternalMessageInfo func (m *LastError) Reset() { *m = LastError{} } func (*LastError) ProtoMessage() {} func (*LastError) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{80} + return fileDescriptor_ca37af0df9a5bbd2, []int{81} } func (m *LastError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2312,7 +2340,7 @@ var xxx_messageInfo_LastError proto.InternalMessageInfo func (m *LastMaintenance) Reset() { *m = LastMaintenance{} } func (*LastMaintenance) ProtoMessage() {} func (*LastMaintenance) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{81} + return fileDescriptor_ca37af0df9a5bbd2, []int{82} } func (m *LastMaintenance) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2340,7 +2368,7 @@ var xxx_messageInfo_LastMaintenance proto.InternalMessageInfo func (m *LastOperation) Reset() { *m = LastOperation{} } func (*LastOperation) ProtoMessage() {} func (*LastOperation) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{82} + return fileDescriptor_ca37af0df9a5bbd2, []int{83} } func (m *LastOperation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2368,7 +2396,7 @@ var xxx_messageInfo_LastOperation proto.InternalMessageInfo func (m *Machine) Reset() { *m = Machine{} } func (*Machine) ProtoMessage() {} func (*Machine) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{83} + return fileDescriptor_ca37af0df9a5bbd2, []int{84} } func (m *Machine) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2396,7 +2424,7 @@ var xxx_messageInfo_Machine proto.InternalMessageInfo func (m *MachineControllerManagerSettings) Reset() { *m = MachineControllerManagerSettings{} } func (*MachineControllerManagerSettings) ProtoMessage() {} func (*MachineControllerManagerSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{84} + return fileDescriptor_ca37af0df9a5bbd2, []int{85} } func (m *MachineControllerManagerSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2424,7 +2452,7 @@ var xxx_messageInfo_MachineControllerManagerSettings proto.InternalMessageInfo func (m *MachineImage) Reset() { *m = MachineImage{} } func (*MachineImage) ProtoMessage() {} func (*MachineImage) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{85} + return fileDescriptor_ca37af0df9a5bbd2, []int{86} } func (m *MachineImage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2452,7 +2480,7 @@ var xxx_messageInfo_MachineImage proto.InternalMessageInfo func (m *MachineImageVersion) Reset() { *m = MachineImageVersion{} } func (*MachineImageVersion) ProtoMessage() {} func (*MachineImageVersion) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{86} + return fileDescriptor_ca37af0df9a5bbd2, []int{87} } func (m *MachineImageVersion) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2480,7 +2508,7 @@ var xxx_messageInfo_MachineImageVersion proto.InternalMessageInfo func (m *MachineType) Reset() { *m = MachineType{} } func (*MachineType) ProtoMessage() {} func (*MachineType) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{87} + return fileDescriptor_ca37af0df9a5bbd2, []int{88} } func (m *MachineType) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2508,7 +2536,7 @@ var xxx_messageInfo_MachineType proto.InternalMessageInfo func (m *MachineTypeStorage) Reset() { *m = MachineTypeStorage{} } func (*MachineTypeStorage) ProtoMessage() {} func (*MachineTypeStorage) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{88} + return fileDescriptor_ca37af0df9a5bbd2, []int{89} } func (m *MachineTypeStorage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2536,7 +2564,7 @@ var xxx_messageInfo_MachineTypeStorage proto.InternalMessageInfo func (m *Maintenance) Reset() { *m = Maintenance{} } func (*Maintenance) ProtoMessage() {} func (*Maintenance) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{89} + return fileDescriptor_ca37af0df9a5bbd2, []int{90} } func (m *Maintenance) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2564,7 +2592,7 @@ var xxx_messageInfo_Maintenance proto.InternalMessageInfo func (m *MaintenanceAutoUpdate) Reset() { *m = MaintenanceAutoUpdate{} } func (*MaintenanceAutoUpdate) ProtoMessage() {} func (*MaintenanceAutoUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{90} + return fileDescriptor_ca37af0df9a5bbd2, []int{91} } func (m *MaintenanceAutoUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2592,7 +2620,7 @@ var xxx_messageInfo_MaintenanceAutoUpdate proto.InternalMessageInfo func (m *MaintenanceTimeWindow) Reset() { *m = MaintenanceTimeWindow{} } func (*MaintenanceTimeWindow) ProtoMessage() {} func (*MaintenanceTimeWindow) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{91} + return fileDescriptor_ca37af0df9a5bbd2, []int{92} } func (m *MaintenanceTimeWindow) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2620,7 +2648,7 @@ var xxx_messageInfo_MaintenanceTimeWindow proto.InternalMessageInfo func (m *MemorySwapConfiguration) Reset() { *m = MemorySwapConfiguration{} } func (*MemorySwapConfiguration) ProtoMessage() {} func (*MemorySwapConfiguration) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{92} + return fileDescriptor_ca37af0df9a5bbd2, []int{93} } func (m *MemorySwapConfiguration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2648,7 +2676,7 @@ var xxx_messageInfo_MemorySwapConfiguration proto.InternalMessageInfo func (m *Monitoring) Reset() { *m = Monitoring{} } func (*Monitoring) ProtoMessage() {} func (*Monitoring) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{93} + return fileDescriptor_ca37af0df9a5bbd2, []int{94} } func (m *Monitoring) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2676,7 +2704,7 @@ var xxx_messageInfo_Monitoring proto.InternalMessageInfo func (m *NamedResourceReference) Reset() { *m = NamedResourceReference{} } func (*NamedResourceReference) ProtoMessage() {} func (*NamedResourceReference) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{94} + return fileDescriptor_ca37af0df9a5bbd2, []int{95} } func (m *NamedResourceReference) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2701,10 +2729,122 @@ func (m *NamedResourceReference) XXX_DiscardUnknown() { var xxx_messageInfo_NamedResourceReference proto.InternalMessageInfo +func (m *NamespacedCloudProfile) Reset() { *m = NamespacedCloudProfile{} } +func (*NamespacedCloudProfile) ProtoMessage() {} +func (*NamespacedCloudProfile) Descriptor() ([]byte, []int) { + return fileDescriptor_ca37af0df9a5bbd2, []int{96} +} +func (m *NamespacedCloudProfile) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NamespacedCloudProfile) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NamespacedCloudProfile) XXX_Merge(src proto.Message) { + xxx_messageInfo_NamespacedCloudProfile.Merge(m, src) +} +func (m *NamespacedCloudProfile) XXX_Size() int { + return m.Size() +} +func (m *NamespacedCloudProfile) XXX_DiscardUnknown() { + xxx_messageInfo_NamespacedCloudProfile.DiscardUnknown(m) +} + +var xxx_messageInfo_NamespacedCloudProfile proto.InternalMessageInfo + +func (m *NamespacedCloudProfileList) Reset() { *m = NamespacedCloudProfileList{} } +func (*NamespacedCloudProfileList) ProtoMessage() {} +func (*NamespacedCloudProfileList) Descriptor() ([]byte, []int) { + return fileDescriptor_ca37af0df9a5bbd2, []int{97} +} +func (m *NamespacedCloudProfileList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NamespacedCloudProfileList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NamespacedCloudProfileList) XXX_Merge(src proto.Message) { + xxx_messageInfo_NamespacedCloudProfileList.Merge(m, src) +} +func (m *NamespacedCloudProfileList) XXX_Size() int { + return m.Size() +} +func (m *NamespacedCloudProfileList) XXX_DiscardUnknown() { + xxx_messageInfo_NamespacedCloudProfileList.DiscardUnknown(m) +} + +var xxx_messageInfo_NamespacedCloudProfileList proto.InternalMessageInfo + +func (m *NamespacedCloudProfileSpec) Reset() { *m = NamespacedCloudProfileSpec{} } +func (*NamespacedCloudProfileSpec) ProtoMessage() {} +func (*NamespacedCloudProfileSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_ca37af0df9a5bbd2, []int{98} +} +func (m *NamespacedCloudProfileSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NamespacedCloudProfileSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NamespacedCloudProfileSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_NamespacedCloudProfileSpec.Merge(m, src) +} +func (m *NamespacedCloudProfileSpec) XXX_Size() int { + return m.Size() +} +func (m *NamespacedCloudProfileSpec) XXX_DiscardUnknown() { + xxx_messageInfo_NamespacedCloudProfileSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_NamespacedCloudProfileSpec proto.InternalMessageInfo + +func (m *NamespacedCloudProfileStatus) Reset() { *m = NamespacedCloudProfileStatus{} } +func (*NamespacedCloudProfileStatus) ProtoMessage() {} +func (*NamespacedCloudProfileStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_ca37af0df9a5bbd2, []int{99} +} +func (m *NamespacedCloudProfileStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NamespacedCloudProfileStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NamespacedCloudProfileStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_NamespacedCloudProfileStatus.Merge(m, src) +} +func (m *NamespacedCloudProfileStatus) XXX_Size() int { + return m.Size() +} +func (m *NamespacedCloudProfileStatus) XXX_DiscardUnknown() { + xxx_messageInfo_NamespacedCloudProfileStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_NamespacedCloudProfileStatus proto.InternalMessageInfo + func (m *Networking) Reset() { *m = Networking{} } func (*Networking) ProtoMessage() {} func (*Networking) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{95} + return fileDescriptor_ca37af0df9a5bbd2, []int{100} } func (m *Networking) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2732,7 +2872,7 @@ var xxx_messageInfo_Networking proto.InternalMessageInfo func (m *NginxIngress) Reset() { *m = NginxIngress{} } func (*NginxIngress) ProtoMessage() {} func (*NginxIngress) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{96} + return fileDescriptor_ca37af0df9a5bbd2, []int{101} } func (m *NginxIngress) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2760,7 +2900,7 @@ var xxx_messageInfo_NginxIngress proto.InternalMessageInfo func (m *NodeLocalDNS) Reset() { *m = NodeLocalDNS{} } func (*NodeLocalDNS) ProtoMessage() {} func (*NodeLocalDNS) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{97} + return fileDescriptor_ca37af0df9a5bbd2, []int{102} } func (m *NodeLocalDNS) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2788,7 +2928,7 @@ var xxx_messageInfo_NodeLocalDNS proto.InternalMessageInfo func (m *OIDCConfig) Reset() { *m = OIDCConfig{} } func (*OIDCConfig) ProtoMessage() {} func (*OIDCConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{98} + return fileDescriptor_ca37af0df9a5bbd2, []int{103} } func (m *OIDCConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2816,7 +2956,7 @@ var xxx_messageInfo_OIDCConfig proto.InternalMessageInfo func (m *ObservabilityRotation) Reset() { *m = ObservabilityRotation{} } func (*ObservabilityRotation) ProtoMessage() {} func (*ObservabilityRotation) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{99} + return fileDescriptor_ca37af0df9a5bbd2, []int{104} } func (m *ObservabilityRotation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2844,7 +2984,7 @@ var xxx_messageInfo_ObservabilityRotation proto.InternalMessageInfo func (m *OpenIDConnectClientAuthentication) Reset() { *m = OpenIDConnectClientAuthentication{} } func (*OpenIDConnectClientAuthentication) ProtoMessage() {} func (*OpenIDConnectClientAuthentication) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{100} + return fileDescriptor_ca37af0df9a5bbd2, []int{105} } func (m *OpenIDConnectClientAuthentication) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2872,7 +3012,7 @@ var xxx_messageInfo_OpenIDConnectClientAuthentication proto.InternalMessageInfo func (m *Project) Reset() { *m = Project{} } func (*Project) ProtoMessage() {} func (*Project) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{101} + return fileDescriptor_ca37af0df9a5bbd2, []int{106} } func (m *Project) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2900,7 +3040,7 @@ var xxx_messageInfo_Project proto.InternalMessageInfo func (m *ProjectList) Reset() { *m = ProjectList{} } func (*ProjectList) ProtoMessage() {} func (*ProjectList) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{102} + return fileDescriptor_ca37af0df9a5bbd2, []int{107} } func (m *ProjectList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2928,7 +3068,7 @@ var xxx_messageInfo_ProjectList proto.InternalMessageInfo func (m *ProjectMember) Reset() { *m = ProjectMember{} } func (*ProjectMember) ProtoMessage() {} func (*ProjectMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{103} + return fileDescriptor_ca37af0df9a5bbd2, []int{108} } func (m *ProjectMember) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2956,7 +3096,7 @@ var xxx_messageInfo_ProjectMember proto.InternalMessageInfo func (m *ProjectSpec) Reset() { *m = ProjectSpec{} } func (*ProjectSpec) ProtoMessage() {} func (*ProjectSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{104} + return fileDescriptor_ca37af0df9a5bbd2, []int{109} } func (m *ProjectSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2984,7 +3124,7 @@ var xxx_messageInfo_ProjectSpec proto.InternalMessageInfo func (m *ProjectStatus) Reset() { *m = ProjectStatus{} } func (*ProjectStatus) ProtoMessage() {} func (*ProjectStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{105} + return fileDescriptor_ca37af0df9a5bbd2, []int{110} } func (m *ProjectStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3012,7 +3152,7 @@ var xxx_messageInfo_ProjectStatus proto.InternalMessageInfo func (m *ProjectTolerations) Reset() { *m = ProjectTolerations{} } func (*ProjectTolerations) ProtoMessage() {} func (*ProjectTolerations) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{106} + return fileDescriptor_ca37af0df9a5bbd2, []int{111} } func (m *ProjectTolerations) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3040,7 +3180,7 @@ var xxx_messageInfo_ProjectTolerations proto.InternalMessageInfo func (m *Provider) Reset() { *m = Provider{} } func (*Provider) ProtoMessage() {} func (*Provider) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{107} + return fileDescriptor_ca37af0df9a5bbd2, []int{112} } func (m *Provider) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3068,7 +3208,7 @@ var xxx_messageInfo_Provider proto.InternalMessageInfo func (m *Quota) Reset() { *m = Quota{} } func (*Quota) ProtoMessage() {} func (*Quota) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{108} + return fileDescriptor_ca37af0df9a5bbd2, []int{113} } func (m *Quota) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3096,7 +3236,7 @@ var xxx_messageInfo_Quota proto.InternalMessageInfo func (m *QuotaList) Reset() { *m = QuotaList{} } func (*QuotaList) ProtoMessage() {} func (*QuotaList) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{109} + return fileDescriptor_ca37af0df9a5bbd2, []int{114} } func (m *QuotaList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3124,7 +3264,7 @@ var xxx_messageInfo_QuotaList proto.InternalMessageInfo func (m *QuotaSpec) Reset() { *m = QuotaSpec{} } func (*QuotaSpec) ProtoMessage() {} func (*QuotaSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{110} + return fileDescriptor_ca37af0df9a5bbd2, []int{115} } func (m *QuotaSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3152,7 +3292,7 @@ var xxx_messageInfo_QuotaSpec proto.InternalMessageInfo func (m *Region) Reset() { *m = Region{} } func (*Region) ProtoMessage() {} func (*Region) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{111} + return fileDescriptor_ca37af0df9a5bbd2, []int{116} } func (m *Region) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3180,7 +3320,7 @@ var xxx_messageInfo_Region proto.InternalMessageInfo func (m *ResourceData) Reset() { *m = ResourceData{} } func (*ResourceData) ProtoMessage() {} func (*ResourceData) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{112} + return fileDescriptor_ca37af0df9a5bbd2, []int{117} } func (m *ResourceData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3208,7 +3348,7 @@ var xxx_messageInfo_ResourceData proto.InternalMessageInfo func (m *ResourceWatchCacheSize) Reset() { *m = ResourceWatchCacheSize{} } func (*ResourceWatchCacheSize) ProtoMessage() {} func (*ResourceWatchCacheSize) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{113} + return fileDescriptor_ca37af0df9a5bbd2, []int{118} } func (m *ResourceWatchCacheSize) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3236,7 +3376,7 @@ var xxx_messageInfo_ResourceWatchCacheSize proto.InternalMessageInfo func (m *SSHAccess) Reset() { *m = SSHAccess{} } func (*SSHAccess) ProtoMessage() {} func (*SSHAccess) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{114} + return fileDescriptor_ca37af0df9a5bbd2, []int{119} } func (m *SSHAccess) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3264,7 +3404,7 @@ var xxx_messageInfo_SSHAccess proto.InternalMessageInfo func (m *SecretBinding) Reset() { *m = SecretBinding{} } func (*SecretBinding) ProtoMessage() {} func (*SecretBinding) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{115} + return fileDescriptor_ca37af0df9a5bbd2, []int{120} } func (m *SecretBinding) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3292,7 +3432,7 @@ var xxx_messageInfo_SecretBinding proto.InternalMessageInfo func (m *SecretBindingList) Reset() { *m = SecretBindingList{} } func (*SecretBindingList) ProtoMessage() {} func (*SecretBindingList) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{116} + return fileDescriptor_ca37af0df9a5bbd2, []int{121} } func (m *SecretBindingList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3320,7 +3460,7 @@ var xxx_messageInfo_SecretBindingList proto.InternalMessageInfo func (m *SecretBindingProvider) Reset() { *m = SecretBindingProvider{} } func (*SecretBindingProvider) ProtoMessage() {} func (*SecretBindingProvider) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{117} + return fileDescriptor_ca37af0df9a5bbd2, []int{122} } func (m *SecretBindingProvider) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3348,7 +3488,7 @@ var xxx_messageInfo_SecretBindingProvider proto.InternalMessageInfo func (m *Seed) Reset() { *m = Seed{} } func (*Seed) ProtoMessage() {} func (*Seed) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{118} + return fileDescriptor_ca37af0df9a5bbd2, []int{123} } func (m *Seed) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3376,7 +3516,7 @@ var xxx_messageInfo_Seed proto.InternalMessageInfo func (m *SeedBackup) Reset() { *m = SeedBackup{} } func (*SeedBackup) ProtoMessage() {} func (*SeedBackup) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{119} + return fileDescriptor_ca37af0df9a5bbd2, []int{124} } func (m *SeedBackup) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3404,7 +3544,7 @@ var xxx_messageInfo_SeedBackup proto.InternalMessageInfo func (m *SeedDNS) Reset() { *m = SeedDNS{} } func (*SeedDNS) ProtoMessage() {} func (*SeedDNS) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{120} + return fileDescriptor_ca37af0df9a5bbd2, []int{125} } func (m *SeedDNS) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3432,7 +3572,7 @@ var xxx_messageInfo_SeedDNS proto.InternalMessageInfo func (m *SeedDNSProvider) Reset() { *m = SeedDNSProvider{} } func (*SeedDNSProvider) ProtoMessage() {} func (*SeedDNSProvider) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{121} + return fileDescriptor_ca37af0df9a5bbd2, []int{126} } func (m *SeedDNSProvider) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3460,7 +3600,7 @@ var xxx_messageInfo_SeedDNSProvider proto.InternalMessageInfo func (m *SeedList) Reset() { *m = SeedList{} } func (*SeedList) ProtoMessage() {} func (*SeedList) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{122} + return fileDescriptor_ca37af0df9a5bbd2, []int{127} } func (m *SeedList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3488,7 +3628,7 @@ var xxx_messageInfo_SeedList proto.InternalMessageInfo func (m *SeedNetworks) Reset() { *m = SeedNetworks{} } func (*SeedNetworks) ProtoMessage() {} func (*SeedNetworks) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{123} + return fileDescriptor_ca37af0df9a5bbd2, []int{128} } func (m *SeedNetworks) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3516,7 +3656,7 @@ var xxx_messageInfo_SeedNetworks proto.InternalMessageInfo func (m *SeedProvider) Reset() { *m = SeedProvider{} } func (*SeedProvider) ProtoMessage() {} func (*SeedProvider) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{124} + return fileDescriptor_ca37af0df9a5bbd2, []int{129} } func (m *SeedProvider) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3544,7 +3684,7 @@ var xxx_messageInfo_SeedProvider proto.InternalMessageInfo func (m *SeedSelector) Reset() { *m = SeedSelector{} } func (*SeedSelector) ProtoMessage() {} func (*SeedSelector) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{125} + return fileDescriptor_ca37af0df9a5bbd2, []int{130} } func (m *SeedSelector) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3572,7 +3712,7 @@ var xxx_messageInfo_SeedSelector proto.InternalMessageInfo func (m *SeedSettingDependencyWatchdog) Reset() { *m = SeedSettingDependencyWatchdog{} } func (*SeedSettingDependencyWatchdog) ProtoMessage() {} func (*SeedSettingDependencyWatchdog) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{126} + return fileDescriptor_ca37af0df9a5bbd2, []int{131} } func (m *SeedSettingDependencyWatchdog) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3600,7 +3740,7 @@ var xxx_messageInfo_SeedSettingDependencyWatchdog proto.InternalMessageInfo func (m *SeedSettingDependencyWatchdogProber) Reset() { *m = SeedSettingDependencyWatchdogProber{} } func (*SeedSettingDependencyWatchdogProber) ProtoMessage() {} func (*SeedSettingDependencyWatchdogProber) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{127} + return fileDescriptor_ca37af0df9a5bbd2, []int{132} } func (m *SeedSettingDependencyWatchdogProber) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3628,7 +3768,7 @@ var xxx_messageInfo_SeedSettingDependencyWatchdogProber proto.InternalMessageInf func (m *SeedSettingDependencyWatchdogWeeder) Reset() { *m = SeedSettingDependencyWatchdogWeeder{} } func (*SeedSettingDependencyWatchdogWeeder) ProtoMessage() {} func (*SeedSettingDependencyWatchdogWeeder) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{128} + return fileDescriptor_ca37af0df9a5bbd2, []int{133} } func (m *SeedSettingDependencyWatchdogWeeder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3656,7 +3796,7 @@ var xxx_messageInfo_SeedSettingDependencyWatchdogWeeder proto.InternalMessageInf func (m *SeedSettingExcessCapacityReservation) Reset() { *m = SeedSettingExcessCapacityReservation{} } func (*SeedSettingExcessCapacityReservation) ProtoMessage() {} func (*SeedSettingExcessCapacityReservation) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{129} + return fileDescriptor_ca37af0df9a5bbd2, []int{134} } func (m *SeedSettingExcessCapacityReservation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3686,7 +3826,7 @@ func (m *SeedSettingExcessCapacityReservationConfig) Reset() { } func (*SeedSettingExcessCapacityReservationConfig) ProtoMessage() {} func (*SeedSettingExcessCapacityReservationConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{130} + return fileDescriptor_ca37af0df9a5bbd2, []int{135} } func (m *SeedSettingExcessCapacityReservationConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3714,7 +3854,7 @@ var xxx_messageInfo_SeedSettingExcessCapacityReservationConfig proto.InternalMes func (m *SeedSettingLoadBalancerServices) Reset() { *m = SeedSettingLoadBalancerServices{} } func (*SeedSettingLoadBalancerServices) ProtoMessage() {} func (*SeedSettingLoadBalancerServices) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{131} + return fileDescriptor_ca37af0df9a5bbd2, []int{136} } func (m *SeedSettingLoadBalancerServices) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3742,7 +3882,7 @@ var xxx_messageInfo_SeedSettingLoadBalancerServices proto.InternalMessageInfo func (m *SeedSettingLoadBalancerServicesZones) Reset() { *m = SeedSettingLoadBalancerServicesZones{} } func (*SeedSettingLoadBalancerServicesZones) ProtoMessage() {} func (*SeedSettingLoadBalancerServicesZones) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{132} + return fileDescriptor_ca37af0df9a5bbd2, []int{137} } func (m *SeedSettingLoadBalancerServicesZones) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3770,7 +3910,7 @@ var xxx_messageInfo_SeedSettingLoadBalancerServicesZones proto.InternalMessageIn func (m *SeedSettingScheduling) Reset() { *m = SeedSettingScheduling{} } func (*SeedSettingScheduling) ProtoMessage() {} func (*SeedSettingScheduling) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{133} + return fileDescriptor_ca37af0df9a5bbd2, []int{138} } func (m *SeedSettingScheduling) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3798,7 +3938,7 @@ var xxx_messageInfo_SeedSettingScheduling proto.InternalMessageInfo func (m *SeedSettingTopologyAwareRouting) Reset() { *m = SeedSettingTopologyAwareRouting{} } func (*SeedSettingTopologyAwareRouting) ProtoMessage() {} func (*SeedSettingTopologyAwareRouting) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{134} + return fileDescriptor_ca37af0df9a5bbd2, []int{139} } func (m *SeedSettingTopologyAwareRouting) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3826,7 +3966,7 @@ var xxx_messageInfo_SeedSettingTopologyAwareRouting proto.InternalMessageInfo func (m *SeedSettingVerticalPodAutoscaler) Reset() { *m = SeedSettingVerticalPodAutoscaler{} } func (*SeedSettingVerticalPodAutoscaler) ProtoMessage() {} func (*SeedSettingVerticalPodAutoscaler) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{135} + return fileDescriptor_ca37af0df9a5bbd2, []int{140} } func (m *SeedSettingVerticalPodAutoscaler) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3854,7 +3994,7 @@ var xxx_messageInfo_SeedSettingVerticalPodAutoscaler proto.InternalMessageInfo func (m *SeedSettings) Reset() { *m = SeedSettings{} } func (*SeedSettings) ProtoMessage() {} func (*SeedSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{136} + return fileDescriptor_ca37af0df9a5bbd2, []int{141} } func (m *SeedSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3882,7 +4022,7 @@ var xxx_messageInfo_SeedSettings proto.InternalMessageInfo func (m *SeedSpec) Reset() { *m = SeedSpec{} } func (*SeedSpec) ProtoMessage() {} func (*SeedSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{137} + return fileDescriptor_ca37af0df9a5bbd2, []int{142} } func (m *SeedSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3910,7 +4050,7 @@ var xxx_messageInfo_SeedSpec proto.InternalMessageInfo func (m *SeedStatus) Reset() { *m = SeedStatus{} } func (*SeedStatus) ProtoMessage() {} func (*SeedStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{138} + return fileDescriptor_ca37af0df9a5bbd2, []int{143} } func (m *SeedStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3938,7 +4078,7 @@ var xxx_messageInfo_SeedStatus proto.InternalMessageInfo func (m *SeedTaint) Reset() { *m = SeedTaint{} } func (*SeedTaint) ProtoMessage() {} func (*SeedTaint) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{139} + return fileDescriptor_ca37af0df9a5bbd2, []int{144} } func (m *SeedTaint) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3966,7 +4106,7 @@ var xxx_messageInfo_SeedTaint proto.InternalMessageInfo func (m *SeedTemplate) Reset() { *m = SeedTemplate{} } func (*SeedTemplate) ProtoMessage() {} func (*SeedTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{140} + return fileDescriptor_ca37af0df9a5bbd2, []int{145} } func (m *SeedTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3994,7 +4134,7 @@ var xxx_messageInfo_SeedTemplate proto.InternalMessageInfo func (m *SeedVolume) Reset() { *m = SeedVolume{} } func (*SeedVolume) ProtoMessage() {} func (*SeedVolume) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{141} + return fileDescriptor_ca37af0df9a5bbd2, []int{146} } func (m *SeedVolume) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4022,7 +4162,7 @@ var xxx_messageInfo_SeedVolume proto.InternalMessageInfo func (m *SeedVolumeProvider) Reset() { *m = SeedVolumeProvider{} } func (*SeedVolumeProvider) ProtoMessage() {} func (*SeedVolumeProvider) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{142} + return fileDescriptor_ca37af0df9a5bbd2, []int{147} } func (m *SeedVolumeProvider) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4050,7 +4190,7 @@ var xxx_messageInfo_SeedVolumeProvider proto.InternalMessageInfo func (m *ServiceAccountConfig) Reset() { *m = ServiceAccountConfig{} } func (*ServiceAccountConfig) ProtoMessage() {} func (*ServiceAccountConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{143} + return fileDescriptor_ca37af0df9a5bbd2, []int{148} } func (m *ServiceAccountConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4078,7 +4218,7 @@ var xxx_messageInfo_ServiceAccountConfig proto.InternalMessageInfo func (m *ServiceAccountKeyRotation) Reset() { *m = ServiceAccountKeyRotation{} } func (*ServiceAccountKeyRotation) ProtoMessage() {} func (*ServiceAccountKeyRotation) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{144} + return fileDescriptor_ca37af0df9a5bbd2, []int{149} } func (m *ServiceAccountKeyRotation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4106,7 +4246,7 @@ var xxx_messageInfo_ServiceAccountKeyRotation proto.InternalMessageInfo func (m *Shoot) Reset() { *m = Shoot{} } func (*Shoot) ProtoMessage() {} func (*Shoot) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{145} + return fileDescriptor_ca37af0df9a5bbd2, []int{150} } func (m *Shoot) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4134,7 +4274,7 @@ var xxx_messageInfo_Shoot proto.InternalMessageInfo func (m *ShootAdvertisedAddress) Reset() { *m = ShootAdvertisedAddress{} } func (*ShootAdvertisedAddress) ProtoMessage() {} func (*ShootAdvertisedAddress) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{146} + return fileDescriptor_ca37af0df9a5bbd2, []int{151} } func (m *ShootAdvertisedAddress) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4162,7 +4302,7 @@ var xxx_messageInfo_ShootAdvertisedAddress proto.InternalMessageInfo func (m *ShootCredentials) Reset() { *m = ShootCredentials{} } func (*ShootCredentials) ProtoMessage() {} func (*ShootCredentials) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{147} + return fileDescriptor_ca37af0df9a5bbd2, []int{152} } func (m *ShootCredentials) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4190,7 +4330,7 @@ var xxx_messageInfo_ShootCredentials proto.InternalMessageInfo func (m *ShootCredentialsRotation) Reset() { *m = ShootCredentialsRotation{} } func (*ShootCredentialsRotation) ProtoMessage() {} func (*ShootCredentialsRotation) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{148} + return fileDescriptor_ca37af0df9a5bbd2, []int{153} } func (m *ShootCredentialsRotation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4218,7 +4358,7 @@ var xxx_messageInfo_ShootCredentialsRotation proto.InternalMessageInfo func (m *ShootKubeconfigRotation) Reset() { *m = ShootKubeconfigRotation{} } func (*ShootKubeconfigRotation) ProtoMessage() {} func (*ShootKubeconfigRotation) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{149} + return fileDescriptor_ca37af0df9a5bbd2, []int{154} } func (m *ShootKubeconfigRotation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4246,7 +4386,7 @@ var xxx_messageInfo_ShootKubeconfigRotation proto.InternalMessageInfo func (m *ShootList) Reset() { *m = ShootList{} } func (*ShootList) ProtoMessage() {} func (*ShootList) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{150} + return fileDescriptor_ca37af0df9a5bbd2, []int{155} } func (m *ShootList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4274,7 +4414,7 @@ var xxx_messageInfo_ShootList proto.InternalMessageInfo func (m *ShootMachineImage) Reset() { *m = ShootMachineImage{} } func (*ShootMachineImage) ProtoMessage() {} func (*ShootMachineImage) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{151} + return fileDescriptor_ca37af0df9a5bbd2, []int{156} } func (m *ShootMachineImage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4302,7 +4442,7 @@ var xxx_messageInfo_ShootMachineImage proto.InternalMessageInfo func (m *ShootNetworks) Reset() { *m = ShootNetworks{} } func (*ShootNetworks) ProtoMessage() {} func (*ShootNetworks) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{152} + return fileDescriptor_ca37af0df9a5bbd2, []int{157} } func (m *ShootNetworks) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4330,7 +4470,7 @@ var xxx_messageInfo_ShootNetworks proto.InternalMessageInfo func (m *ShootSSHKeypairRotation) Reset() { *m = ShootSSHKeypairRotation{} } func (*ShootSSHKeypairRotation) ProtoMessage() {} func (*ShootSSHKeypairRotation) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{153} + return fileDescriptor_ca37af0df9a5bbd2, []int{158} } func (m *ShootSSHKeypairRotation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4358,7 +4498,7 @@ var xxx_messageInfo_ShootSSHKeypairRotation proto.InternalMessageInfo func (m *ShootSpec) Reset() { *m = ShootSpec{} } func (*ShootSpec) ProtoMessage() {} func (*ShootSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{154} + return fileDescriptor_ca37af0df9a5bbd2, []int{159} } func (m *ShootSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4386,7 +4526,7 @@ var xxx_messageInfo_ShootSpec proto.InternalMessageInfo func (m *ShootState) Reset() { *m = ShootState{} } func (*ShootState) ProtoMessage() {} func (*ShootState) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{155} + return fileDescriptor_ca37af0df9a5bbd2, []int{160} } func (m *ShootState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4414,7 +4554,7 @@ var xxx_messageInfo_ShootState proto.InternalMessageInfo func (m *ShootStateList) Reset() { *m = ShootStateList{} } func (*ShootStateList) ProtoMessage() {} func (*ShootStateList) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{156} + return fileDescriptor_ca37af0df9a5bbd2, []int{161} } func (m *ShootStateList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4442,7 +4582,7 @@ var xxx_messageInfo_ShootStateList proto.InternalMessageInfo func (m *ShootStateSpec) Reset() { *m = ShootStateSpec{} } func (*ShootStateSpec) ProtoMessage() {} func (*ShootStateSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{157} + return fileDescriptor_ca37af0df9a5bbd2, []int{162} } func (m *ShootStateSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4470,7 +4610,7 @@ var xxx_messageInfo_ShootStateSpec proto.InternalMessageInfo func (m *ShootStatus) Reset() { *m = ShootStatus{} } func (*ShootStatus) ProtoMessage() {} func (*ShootStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{158} + return fileDescriptor_ca37af0df9a5bbd2, []int{163} } func (m *ShootStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4498,7 +4638,7 @@ var xxx_messageInfo_ShootStatus proto.InternalMessageInfo func (m *ShootTemplate) Reset() { *m = ShootTemplate{} } func (*ShootTemplate) ProtoMessage() {} func (*ShootTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{159} + return fileDescriptor_ca37af0df9a5bbd2, []int{164} } func (m *ShootTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4526,7 +4666,7 @@ var xxx_messageInfo_ShootTemplate proto.InternalMessageInfo func (m *SystemComponents) Reset() { *m = SystemComponents{} } func (*SystemComponents) ProtoMessage() {} func (*SystemComponents) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{160} + return fileDescriptor_ca37af0df9a5bbd2, []int{165} } func (m *SystemComponents) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4554,7 +4694,7 @@ var xxx_messageInfo_SystemComponents proto.InternalMessageInfo func (m *Toleration) Reset() { *m = Toleration{} } func (*Toleration) ProtoMessage() {} func (*Toleration) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{161} + return fileDescriptor_ca37af0df9a5bbd2, []int{166} } func (m *Toleration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4582,7 +4722,7 @@ var xxx_messageInfo_Toleration proto.InternalMessageInfo func (m *VerticalPodAutoscaler) Reset() { *m = VerticalPodAutoscaler{} } func (*VerticalPodAutoscaler) ProtoMessage() {} func (*VerticalPodAutoscaler) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{162} + return fileDescriptor_ca37af0df9a5bbd2, []int{167} } func (m *VerticalPodAutoscaler) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4610,7 +4750,7 @@ var xxx_messageInfo_VerticalPodAutoscaler proto.InternalMessageInfo func (m *Volume) Reset() { *m = Volume{} } func (*Volume) ProtoMessage() {} func (*Volume) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{163} + return fileDescriptor_ca37af0df9a5bbd2, []int{168} } func (m *Volume) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4638,7 +4778,7 @@ var xxx_messageInfo_Volume proto.InternalMessageInfo func (m *VolumeType) Reset() { *m = VolumeType{} } func (*VolumeType) ProtoMessage() {} func (*VolumeType) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{164} + return fileDescriptor_ca37af0df9a5bbd2, []int{169} } func (m *VolumeType) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4666,7 +4806,7 @@ var xxx_messageInfo_VolumeType proto.InternalMessageInfo func (m *WatchCacheSizes) Reset() { *m = WatchCacheSizes{} } func (*WatchCacheSizes) ProtoMessage() {} func (*WatchCacheSizes) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{165} + return fileDescriptor_ca37af0df9a5bbd2, []int{170} } func (m *WatchCacheSizes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4694,7 +4834,7 @@ var xxx_messageInfo_WatchCacheSizes proto.InternalMessageInfo func (m *Worker) Reset() { *m = Worker{} } func (*Worker) ProtoMessage() {} func (*Worker) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{166} + return fileDescriptor_ca37af0df9a5bbd2, []int{171} } func (m *Worker) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4722,7 +4862,7 @@ var xxx_messageInfo_Worker proto.InternalMessageInfo func (m *WorkerKubernetes) Reset() { *m = WorkerKubernetes{} } func (*WorkerKubernetes) ProtoMessage() {} func (*WorkerKubernetes) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{167} + return fileDescriptor_ca37af0df9a5bbd2, []int{172} } func (m *WorkerKubernetes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4750,7 +4890,7 @@ var xxx_messageInfo_WorkerKubernetes proto.InternalMessageInfo func (m *WorkerSystemComponents) Reset() { *m = WorkerSystemComponents{} } func (*WorkerSystemComponents) ProtoMessage() {} func (*WorkerSystemComponents) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{168} + return fileDescriptor_ca37af0df9a5bbd2, []int{173} } func (m *WorkerSystemComponents) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4778,7 +4918,7 @@ var xxx_messageInfo_WorkerSystemComponents proto.InternalMessageInfo func (m *WorkersSettings) Reset() { *m = WorkersSettings{} } func (*WorkersSettings) ProtoMessage() {} func (*WorkersSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{169} + return fileDescriptor_ca37af0df9a5bbd2, []int{174} } func (m *WorkersSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4826,6 +4966,7 @@ func init() { proto.RegisterType((*CRI)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1beta1.CRI") proto.RegisterType((*CloudProfile)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1beta1.CloudProfile") proto.RegisterType((*CloudProfileList)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1beta1.CloudProfileList") + proto.RegisterType((*CloudProfileReference)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1beta1.CloudProfileReference") proto.RegisterType((*CloudProfileSpec)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1beta1.CloudProfileSpec") proto.RegisterType((*ClusterAutoscaler)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1beta1.ClusterAutoscaler") proto.RegisterType((*ClusterAutoscalerOptions)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1beta1.ClusterAutoscalerOptions") @@ -4904,6 +5045,10 @@ func init() { proto.RegisterType((*MemorySwapConfiguration)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1beta1.MemorySwapConfiguration") proto.RegisterType((*Monitoring)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1beta1.Monitoring") proto.RegisterType((*NamedResourceReference)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1beta1.NamedResourceReference") + proto.RegisterType((*NamespacedCloudProfile)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1beta1.NamespacedCloudProfile") + proto.RegisterType((*NamespacedCloudProfileList)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1beta1.NamespacedCloudProfileList") + proto.RegisterType((*NamespacedCloudProfileSpec)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1beta1.NamespacedCloudProfileSpec") + proto.RegisterType((*NamespacedCloudProfileStatus)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1beta1.NamespacedCloudProfileStatus") proto.RegisterType((*Networking)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1beta1.Networking") proto.RegisterType((*NginxIngress)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1beta1.NginxIngress") proto.RegisterMapType((map[string]string)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1beta1.NginxIngress.ConfigEntry") @@ -5000,766 +5145,776 @@ func init() { } var fileDescriptor_ca37af0df9a5bbd2 = []byte{ - // 12143 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x6c, 0x2d, 0x49, - 0x56, 0xd8, 0xf6, 0xf5, 0xf7, 0xf1, 0xc7, 0xb3, 0xeb, 0x7d, 0x8c, 0x9f, 0xdf, 0xcc, 0xbb, 0x6f, - 0x7b, 0x66, 0x37, 0x33, 0xcc, 0xe2, 0xc7, 0x0c, 0xbb, 0xec, 0xce, 0x5b, 0x66, 0x67, 0xed, 0x7b, - 0xed, 0xf7, 0x2e, 0xcf, 0xf6, 0xf3, 0xd6, 0xb5, 0x67, 0x86, 0x81, 0x0c, 0xb4, 0xbb, 0xcb, 0xd7, - 0x3d, 0xee, 0xdb, 0x7d, 0xa7, 0xbb, 0xaf, 0x9f, 0x3d, 0xb3, 0x04, 0x76, 0x03, 0x84, 0x5d, 0xd8, - 0x08, 0x90, 0xc8, 0x6a, 0x17, 0x22, 0x16, 0x21, 0xf2, 0x45, 0x44, 0x08, 0x11, 0x91, 0x00, 0x45, - 0x42, 0x48, 0x84, 0x05, 0x01, 0x42, 0x90, 0x28, 0xbb, 0x4a, 0x30, 0x59, 0x87, 0x40, 0xa4, 0x44, - 0x28, 0x0a, 0x8a, 0xa2, 0xbc, 0x20, 0x88, 0xea, 0xa3, 0xab, 0xab, 0xbf, 0xae, 0xed, 0xbe, 0xb6, - 0x77, 0x47, 0xf0, 0xcb, 0xbe, 0x75, 0xaa, 0xce, 0xa9, 0xaa, 0xae, 0x3a, 0x75, 0xea, 0xd4, 0xf9, - 0x80, 0xc5, 0x96, 0x1d, 0xee, 0x74, 0xb7, 0xe6, 0x4d, 0xaf, 0x7d, 0xbb, 0x65, 0xf8, 0x16, 0x71, - 0x89, 0x1f, 0xff, 0xd3, 0xd9, 0x6d, 0xdd, 0x36, 0x3a, 0x76, 0x70, 0xdb, 0xf4, 0x7c, 0x72, 0x7b, - 0xef, 0xb9, 0x2d, 0x12, 0x1a, 0xcf, 0xdd, 0x6e, 0x51, 0x98, 0x11, 0x12, 0x6b, 0xbe, 0xe3, 0x7b, - 0xa1, 0x87, 0x9e, 0x8f, 0x71, 0xcc, 0x47, 0x4d, 0xe3, 0x7f, 0x3a, 0xbb, 0xad, 0x79, 0x8a, 0x63, - 0x9e, 0xe2, 0x98, 0x17, 0x38, 0xe6, 0xbe, 0x5e, 0xa5, 0xeb, 0xb5, 0xbc, 0xdb, 0x0c, 0xd5, 0x56, - 0x77, 0x9b, 0xfd, 0x62, 0x3f, 0xd8, 0x7f, 0x9c, 0xc4, 0xdc, 0x33, 0xbb, 0x1f, 0x0a, 0xe6, 0x6d, - 0x8f, 0x76, 0xe6, 0xb6, 0xd1, 0x0d, 0xbd, 0xc0, 0x34, 0x1c, 0xdb, 0x6d, 0xdd, 0xde, 0xcb, 0xf4, - 0x66, 0x4e, 0x57, 0xaa, 0x8a, 0x6e, 0xf7, 0xac, 0xe3, 0x6f, 0x19, 0x66, 0x5e, 0x9d, 0xf7, 0xc7, - 0x75, 0xda, 0x86, 0xb9, 0x63, 0xbb, 0xc4, 0x3f, 0x88, 0x26, 0xe4, 0xb6, 0x4f, 0x02, 0xaf, 0xeb, - 0x9b, 0xe4, 0x54, 0xad, 0x82, 0xdb, 0x6d, 0x12, 0x1a, 0x79, 0xb4, 0x6e, 0x17, 0xb5, 0xf2, 0xbb, - 0x6e, 0x68, 0xb7, 0xb3, 0x64, 0xbe, 0xe9, 0xb8, 0x06, 0x81, 0xb9, 0x43, 0xda, 0x46, 0xa6, 0xdd, - 0x37, 0x16, 0xb5, 0xeb, 0x86, 0xb6, 0x73, 0xdb, 0x76, 0xc3, 0x20, 0xf4, 0xd3, 0x8d, 0xf4, 0x4f, - 0x6b, 0x30, 0xbd, 0xb0, 0xde, 0x68, 0x12, 0x7f, 0x8f, 0xf8, 0x2b, 0x5e, 0xab, 0x65, 0xbb, 0x2d, - 0xf4, 0x2c, 0x8c, 0xed, 0x11, 0x7f, 0xcb, 0x0b, 0xec, 0xf0, 0x60, 0x56, 0xbb, 0xa5, 0x3d, 0x3d, - 0xb4, 0x38, 0x79, 0x74, 0x58, 0x1d, 0x7b, 0x39, 0x2a, 0xc4, 0x31, 0x1c, 0x35, 0xe0, 0xf2, 0x4e, - 0x18, 0x76, 0x16, 0x4c, 0x93, 0x04, 0x81, 0xac, 0x31, 0x5b, 0x61, 0xcd, 0x1e, 0x3b, 0x3a, 0xac, - 0x5e, 0xbe, 0xb7, 0xb1, 0xb1, 0x9e, 0x02, 0xe3, 0xbc, 0x36, 0xfa, 0x2f, 0x68, 0x30, 0x23, 0x3b, - 0x83, 0xc9, 0x9b, 0x5d, 0x12, 0x84, 0x01, 0xc2, 0x70, 0xad, 0x6d, 0xec, 0xaf, 0x79, 0xee, 0x6a, - 0x37, 0x34, 0x42, 0xdb, 0x6d, 0x35, 0xdc, 0x6d, 0xc7, 0x6e, 0xed, 0x84, 0xa2, 0x6b, 0x73, 0x47, - 0x87, 0xd5, 0x6b, 0xab, 0xb9, 0x35, 0x70, 0x41, 0x4b, 0xda, 0xe9, 0xb6, 0xb1, 0x9f, 0x41, 0xa8, - 0x74, 0x7a, 0x35, 0x0b, 0xc6, 0x79, 0x6d, 0xf4, 0xe7, 0x61, 0x68, 0xc1, 0xb2, 0x3c, 0x17, 0x3d, - 0x03, 0x23, 0xc4, 0x35, 0xb6, 0x1c, 0x62, 0xb1, 0x8e, 0x8d, 0x2e, 0x5e, 0xfa, 0xe2, 0x61, 0xf5, - 0x5d, 0x47, 0x87, 0xd5, 0x91, 0x25, 0x5e, 0x8c, 0x23, 0xb8, 0xfe, 0x63, 0x15, 0x18, 0x66, 0x8d, - 0x02, 0xf4, 0xa3, 0x1a, 0x5c, 0xde, 0xed, 0x6e, 0x11, 0xdf, 0x25, 0x21, 0x09, 0xea, 0x46, 0xb0, - 0xb3, 0xe5, 0x19, 0x3e, 0x47, 0x31, 0xfe, 0xfc, 0xdd, 0xf9, 0xd3, 0xef, 0xbf, 0xf9, 0xfb, 0x59, - 0x74, 0x7c, 0x4c, 0x39, 0x00, 0x9c, 0x47, 0x1c, 0xed, 0xc1, 0x84, 0xdb, 0xb2, 0xdd, 0xfd, 0x86, - 0xdb, 0xf2, 0x49, 0x10, 0xb0, 0x79, 0x19, 0x7f, 0xfe, 0xa3, 0x65, 0x3a, 0xb3, 0xa6, 0xe0, 0x59, - 0x9c, 0x3e, 0x3a, 0xac, 0x4e, 0xa8, 0x25, 0x38, 0x41, 0x47, 0xff, 0x4b, 0x0d, 0x2e, 0x2d, 0x58, - 0x6d, 0x3b, 0x08, 0x6c, 0xcf, 0x5d, 0x77, 0xba, 0x2d, 0xdb, 0x45, 0xb7, 0x60, 0xd0, 0x35, 0xda, - 0x84, 0x4d, 0xc8, 0xd8, 0xe2, 0x84, 0x98, 0xd3, 0xc1, 0x35, 0xa3, 0x4d, 0x30, 0x83, 0xa0, 0x8f, - 0xc1, 0xb0, 0xe9, 0xb9, 0xdb, 0x76, 0x4b, 0xf4, 0xf3, 0xeb, 0xe7, 0xf9, 0x4e, 0x98, 0x57, 0x77, - 0x02, 0xeb, 0x9e, 0xd8, 0x41, 0xf3, 0xd8, 0x78, 0xb8, 0xb4, 0x1f, 0x12, 0x97, 0x92, 0x59, 0x84, - 0xa3, 0xc3, 0xea, 0x70, 0x8d, 0x21, 0xc0, 0x02, 0x11, 0x7a, 0x1a, 0x46, 0x2d, 0x3b, 0xe0, 0x1f, - 0x73, 0x80, 0x7d, 0xcc, 0x89, 0xa3, 0xc3, 0xea, 0x68, 0x5d, 0x94, 0x61, 0x09, 0x45, 0x2b, 0x70, - 0x85, 0xce, 0x20, 0x6f, 0xd7, 0x24, 0xa6, 0x4f, 0x42, 0xda, 0xb5, 0xd9, 0x41, 0xd6, 0xdd, 0xd9, - 0xa3, 0xc3, 0xea, 0x95, 0xfb, 0x39, 0x70, 0x9c, 0xdb, 0x4a, 0x5f, 0x86, 0xd1, 0x05, 0x87, 0xf8, - 0x74, 0x81, 0xa1, 0x3b, 0x30, 0x45, 0xda, 0x86, 0xed, 0x60, 0x62, 0x12, 0x7b, 0x8f, 0xf8, 0xc1, - 0xac, 0x76, 0x6b, 0xe0, 0xe9, 0xb1, 0x45, 0x74, 0x74, 0x58, 0x9d, 0x5a, 0x4a, 0x40, 0x70, 0xaa, - 0xa6, 0xfe, 0x09, 0x0d, 0xc6, 0x17, 0xba, 0x96, 0x1d, 0xf2, 0x71, 0x21, 0x1f, 0xc6, 0x0d, 0xfa, - 0x73, 0xdd, 0x73, 0x6c, 0xf3, 0x40, 0x2c, 0xae, 0x97, 0xca, 0x7c, 0xcf, 0x85, 0x18, 0xcd, 0xe2, - 0xa5, 0xa3, 0xc3, 0xea, 0xb8, 0x52, 0x80, 0x55, 0x22, 0xfa, 0x0e, 0xa8, 0x30, 0xf4, 0xad, 0x30, - 0xc1, 0x87, 0xbb, 0x6a, 0x74, 0x30, 0xd9, 0x16, 0x7d, 0x78, 0x52, 0xf9, 0x56, 0x11, 0xa1, 0xf9, - 0x07, 0x5b, 0x6f, 0x10, 0x33, 0xc4, 0x64, 0x9b, 0xf8, 0xc4, 0x35, 0x09, 0x5f, 0x36, 0x35, 0xa5, - 0x31, 0x4e, 0xa0, 0xd2, 0xff, 0x88, 0x32, 0xb1, 0x3d, 0xc3, 0x76, 0x8c, 0x2d, 0xdb, 0xb1, 0xc3, - 0x83, 0xd7, 0x3c, 0x97, 0x9c, 0x60, 0xdd, 0x6c, 0xc2, 0x63, 0x5d, 0xd7, 0xe0, 0xed, 0x1c, 0xb2, - 0xca, 0x57, 0xca, 0xc6, 0x41, 0x87, 0xd0, 0x05, 0x4f, 0x67, 0xfa, 0xc6, 0xd1, 0x61, 0xf5, 0xb1, - 0xcd, 0xfc, 0x2a, 0xb8, 0xa8, 0x2d, 0xe5, 0x57, 0x0a, 0xe8, 0x65, 0xcf, 0xe9, 0xb6, 0x05, 0xd6, - 0x01, 0x86, 0x95, 0xf1, 0xab, 0xcd, 0xdc, 0x1a, 0xb8, 0xa0, 0xa5, 0xfe, 0xc5, 0x0a, 0x4c, 0x2c, - 0x1a, 0xe6, 0x6e, 0xb7, 0xb3, 0xd8, 0x35, 0x77, 0x49, 0x88, 0xbe, 0x13, 0x46, 0xe9, 0x81, 0x63, - 0x19, 0xa1, 0x21, 0x66, 0xf2, 0x1b, 0x0a, 0x57, 0x3d, 0xfb, 0x88, 0xb4, 0x76, 0x3c, 0xb7, 0xab, - 0x24, 0x34, 0x16, 0x91, 0x98, 0x13, 0x88, 0xcb, 0xb0, 0xc4, 0x8a, 0xb6, 0x61, 0x30, 0xe8, 0x10, - 0x53, 0xec, 0xa9, 0x7a, 0x99, 0xb5, 0xa2, 0xf6, 0xb8, 0xd9, 0x21, 0x66, 0xfc, 0x15, 0xe8, 0x2f, - 0xcc, 0xf0, 0x23, 0x17, 0x86, 0x83, 0xd0, 0x08, 0xbb, 0x01, 0xdb, 0x68, 0xe3, 0xcf, 0x2f, 0xf7, - 0x4d, 0x89, 0x61, 0x5b, 0x9c, 0x12, 0xb4, 0x86, 0xf9, 0x6f, 0x2c, 0xa8, 0xe8, 0xff, 0x41, 0x83, - 0x69, 0xb5, 0xfa, 0x8a, 0x1d, 0x84, 0xe8, 0xdb, 0x33, 0xd3, 0x39, 0x7f, 0xb2, 0xe9, 0xa4, 0xad, - 0xd9, 0x64, 0x4e, 0x0b, 0x72, 0xa3, 0x51, 0x89, 0x32, 0x95, 0x04, 0x86, 0xec, 0x90, 0xb4, 0xf9, - 0xb2, 0x2a, 0xc9, 0x47, 0xd5, 0x2e, 0x2f, 0x4e, 0x0a, 0x62, 0x43, 0x0d, 0x8a, 0x16, 0x73, 0xec, - 0xfa, 0x77, 0xc2, 0x15, 0xb5, 0xd6, 0xba, 0xef, 0xed, 0xd9, 0x16, 0xf1, 0xe9, 0x4e, 0x08, 0x0f, - 0x3a, 0x99, 0x9d, 0x40, 0x57, 0x16, 0x66, 0x10, 0xf4, 0x5e, 0x18, 0xf6, 0x49, 0xcb, 0xf6, 0x5c, - 0xf6, 0xb5, 0xc7, 0xe2, 0xb9, 0xc3, 0xac, 0x14, 0x0b, 0xa8, 0xfe, 0xbf, 0x2b, 0xc9, 0xb9, 0xa3, - 0x9f, 0x11, 0xed, 0xc1, 0x68, 0x47, 0x90, 0x12, 0x73, 0x77, 0xaf, 0xdf, 0x01, 0x46, 0x5d, 0x8f, - 0x67, 0x35, 0x2a, 0xc1, 0x92, 0x16, 0xb2, 0x61, 0x2a, 0xfa, 0xbf, 0xd6, 0x07, 0xfb, 0x67, 0xec, - 0x74, 0x3d, 0x81, 0x08, 0xa7, 0x10, 0xa3, 0x0d, 0x18, 0x0b, 0x18, 0x93, 0xa6, 0x8c, 0x6b, 0xa0, - 0x98, 0x71, 0x35, 0xa3, 0x4a, 0x82, 0x71, 0xcd, 0x88, 0xee, 0x8f, 0x49, 0x00, 0x8e, 0x11, 0xd1, - 0x43, 0x26, 0x20, 0xc4, 0x52, 0x8e, 0x0b, 0x76, 0xc8, 0x34, 0x45, 0x19, 0x96, 0x50, 0xfd, 0x0b, - 0x83, 0x80, 0xb2, 0x4b, 0x5c, 0x9d, 0x01, 0x5e, 0x22, 0xe6, 0xbf, 0x9f, 0x19, 0x10, 0xbb, 0x25, - 0x85, 0x18, 0xbd, 0x05, 0x93, 0x8e, 0x11, 0x84, 0x0f, 0x3a, 0x54, 0x7a, 0x8c, 0x16, 0xca, 0xf8, - 0xf3, 0x0b, 0x65, 0xbe, 0xf4, 0x8a, 0x8a, 0x68, 0x71, 0xe6, 0xe8, 0xb0, 0x3a, 0x99, 0x28, 0xc2, - 0x49, 0x52, 0xe8, 0x0d, 0x18, 0xa3, 0x05, 0x4b, 0xbe, 0xef, 0xf9, 0x62, 0xf6, 0x5f, 0x2c, 0x4b, - 0x97, 0x21, 0xe1, 0xd2, 0xac, 0xfc, 0x89, 0x63, 0xf4, 0xe8, 0x5b, 0x00, 0x79, 0x5b, 0x01, 0x15, - 0x40, 0xad, 0xbb, 0x5c, 0x54, 0xa6, 0x83, 0xa5, 0x5f, 0x67, 0x60, 0x71, 0x4e, 0x7c, 0x4d, 0xf4, - 0x20, 0x53, 0x03, 0xe7, 0xb4, 0x42, 0xbb, 0x80, 0xa4, 0xb8, 0x2d, 0x17, 0xc0, 0xec, 0xd0, 0xc9, - 0x97, 0xcf, 0x35, 0x4a, 0xec, 0x6e, 0x06, 0x05, 0xce, 0x41, 0xab, 0xff, 0x7a, 0x05, 0xc6, 0xf9, - 0x12, 0x59, 0x72, 0x43, 0xff, 0xe0, 0x02, 0x0e, 0x08, 0x92, 0x38, 0x20, 0x6a, 0xe5, 0xf7, 0x3c, - 0xeb, 0x70, 0xe1, 0xf9, 0xd0, 0x4e, 0x9d, 0x0f, 0x4b, 0xfd, 0x12, 0xea, 0x7d, 0x3c, 0xfc, 0x7b, - 0x0d, 0x2e, 0x29, 0xb5, 0x2f, 0xe0, 0x74, 0xb0, 0x92, 0xa7, 0xc3, 0x4b, 0x7d, 0x8e, 0xaf, 0xe0, - 0x70, 0xf0, 0x12, 0xc3, 0x62, 0x8c, 0xfb, 0x79, 0x80, 0x2d, 0xc6, 0x4e, 0xd6, 0x62, 0x39, 0x49, - 0x7e, 0xf2, 0x45, 0x09, 0xc1, 0x4a, 0xad, 0x04, 0xcf, 0xaa, 0xf4, 0xe4, 0x59, 0xff, 0x75, 0x00, - 0x66, 0x32, 0xd3, 0x9e, 0xe5, 0x23, 0xda, 0x57, 0x89, 0x8f, 0x54, 0xbe, 0x1a, 0x7c, 0x64, 0xa0, - 0x14, 0x1f, 0x39, 0xf1, 0x39, 0x81, 0x7c, 0x40, 0x6d, 0xbb, 0xc5, 0x9b, 0x35, 0x43, 0xc3, 0x0f, - 0x37, 0xec, 0x36, 0x11, 0x1c, 0xe7, 0xeb, 0x4e, 0xb6, 0x64, 0x69, 0x0b, 0xce, 0x78, 0x56, 0x33, - 0x98, 0x70, 0x0e, 0x76, 0xfd, 0xf7, 0x07, 0x01, 0x6a, 0x0b, 0xd8, 0x0b, 0x79, 0x67, 0x5f, 0x82, - 0xa1, 0xce, 0x8e, 0x11, 0x44, 0xeb, 0xe9, 0x99, 0x68, 0x31, 0xae, 0xd3, 0xc2, 0x47, 0x87, 0xd5, - 0xd9, 0x9a, 0x4f, 0x2c, 0xe2, 0x86, 0xb6, 0xe1, 0x04, 0x51, 0x23, 0x06, 0xc3, 0xbc, 0x1d, 0x1d, - 0x03, 0x9d, 0xc6, 0x9a, 0xd7, 0xee, 0x38, 0x84, 0x42, 0xd9, 0x18, 0x2a, 0xe5, 0xc6, 0xb0, 0x92, - 0xc1, 0x84, 0x73, 0xb0, 0x47, 0x34, 0x1b, 0xae, 0x1d, 0xda, 0x86, 0xa4, 0x39, 0x50, 0x9e, 0x66, - 0x12, 0x13, 0xce, 0xc1, 0x8e, 0x3e, 0xad, 0xc1, 0x5c, 0xb2, 0x78, 0xd9, 0x76, 0xed, 0x60, 0x87, - 0x58, 0x8c, 0xf8, 0xe0, 0xa9, 0x89, 0xdf, 0x3c, 0x3a, 0xac, 0xce, 0xad, 0x14, 0x62, 0xc4, 0x3d, - 0xa8, 0xa1, 0xcf, 0x68, 0x70, 0x23, 0x35, 0x2f, 0xbe, 0xdd, 0x6a, 0x11, 0x5f, 0xf4, 0xe6, 0xf4, - 0x4b, 0xa8, 0x7a, 0x74, 0x58, 0xbd, 0xb1, 0x52, 0x8c, 0x12, 0xf7, 0xa2, 0xa7, 0xff, 0x9a, 0x06, - 0x03, 0x35, 0xdc, 0x40, 0xcf, 0x26, 0x2e, 0x71, 0x8f, 0xa9, 0x97, 0xb8, 0x47, 0x87, 0xd5, 0x91, - 0x1a, 0x6e, 0x28, 0xf7, 0xb9, 0xcf, 0x68, 0x30, 0x63, 0x7a, 0x6e, 0x68, 0xd0, 0x7e, 0x61, 0x2e, - 0xe9, 0x44, 0x5c, 0xb5, 0xd4, 0xfd, 0xa5, 0x96, 0x42, 0xb6, 0x78, 0x5d, 0x74, 0x60, 0x26, 0x0d, - 0x09, 0x70, 0x96, 0xb2, 0xfe, 0x25, 0x0d, 0x26, 0x6a, 0x8e, 0xd7, 0xb5, 0xd6, 0x7d, 0x6f, 0xdb, - 0x76, 0xc8, 0x3b, 0xe3, 0xd2, 0xa6, 0xf6, 0xb8, 0xe8, 0x50, 0x66, 0x97, 0x28, 0xb5, 0xe2, 0x3b, - 0xe4, 0x12, 0xa5, 0x76, 0xb9, 0xe0, 0x9c, 0xfc, 0xb1, 0x91, 0xe4, 0xc8, 0xd8, 0x49, 0xf9, 0x34, - 0x8c, 0x9a, 0xc6, 0x62, 0xd7, 0xb5, 0x1c, 0x79, 0x8b, 0xa2, 0xbd, 0xac, 0x2d, 0xf0, 0x32, 0x2c, - 0xa1, 0xe8, 0x2d, 0x80, 0x58, 0xa1, 0x26, 0x3e, 0xc3, 0x72, 0x7f, 0x4a, 0xbc, 0x26, 0x09, 0x43, - 0xdb, 0x6d, 0x05, 0xf1, 0xa7, 0x8f, 0x61, 0x58, 0xa1, 0x86, 0xbe, 0x0b, 0x26, 0xc5, 0x24, 0x37, - 0xda, 0x46, 0x4b, 0xe8, 0x1b, 0x4a, 0xce, 0xd4, 0xaa, 0x82, 0x68, 0xf1, 0xaa, 0x20, 0x3c, 0xa9, - 0x96, 0x06, 0x38, 0x49, 0x0d, 0x1d, 0xc0, 0x44, 0x5b, 0xd5, 0xa1, 0x0c, 0x96, 0x17, 0x67, 0x14, - 0x7d, 0xca, 0xe2, 0x15, 0x41, 0x7c, 0x22, 0xa1, 0x7d, 0x49, 0x90, 0xca, 0xb9, 0x0a, 0x0e, 0x9d, - 0xd7, 0x55, 0x90, 0xc0, 0x08, 0xbf, 0x0c, 0x07, 0xb3, 0xc3, 0x6c, 0x80, 0x77, 0xca, 0x0c, 0x90, - 0xdf, 0xab, 0x63, 0x0d, 0x31, 0xff, 0x1d, 0xe0, 0x08, 0x37, 0xda, 0x83, 0x09, 0x7a, 0xaa, 0x37, - 0x89, 0x43, 0xcc, 0xd0, 0xf3, 0x67, 0x47, 0xca, 0x6b, 0x60, 0x9b, 0x0a, 0x1e, 0xae, 0x4a, 0x53, - 0x4b, 0x70, 0x82, 0x8e, 0xd4, 0x15, 0x8c, 0x16, 0xea, 0x0a, 0xba, 0x30, 0xbe, 0xa7, 0xe8, 0xb4, - 0xc6, 0xd8, 0x24, 0x7c, 0xa4, 0x4c, 0xc7, 0x62, 0x05, 0xd7, 0xe2, 0x65, 0x41, 0x68, 0x5c, 0x55, - 0x86, 0xa9, 0x74, 0xf4, 0x9f, 0x1b, 0x87, 0x99, 0x9a, 0xd3, 0x0d, 0x42, 0xe2, 0x2f, 0x88, 0x47, - 0x22, 0xe2, 0xa3, 0x4f, 0x6a, 0x70, 0x8d, 0xfd, 0x5b, 0xf7, 0x1e, 0xba, 0x75, 0xe2, 0x18, 0x07, - 0x0b, 0xdb, 0xb4, 0x86, 0x65, 0x9d, 0x8e, 0x03, 0xd5, 0xbb, 0x42, 0x8a, 0x64, 0xca, 0xb9, 0x66, - 0x2e, 0x46, 0x5c, 0x40, 0x09, 0xfd, 0xa0, 0x06, 0xd7, 0x73, 0x40, 0x75, 0xe2, 0x90, 0x30, 0x92, - 0x5c, 0x4e, 0xdb, 0x8f, 0x27, 0x8e, 0x0e, 0xab, 0xd7, 0x9b, 0x45, 0x48, 0x71, 0x31, 0x3d, 0xf4, - 0xf7, 0x35, 0x98, 0xcb, 0x81, 0x2e, 0x1b, 0xb6, 0xd3, 0xf5, 0x23, 0xa1, 0xe6, 0xb4, 0xdd, 0x61, - 0xb2, 0x45, 0xb3, 0x10, 0x2b, 0xee, 0x41, 0x11, 0x7d, 0x37, 0x5c, 0x95, 0xd0, 0x4d, 0xd7, 0x25, - 0xc4, 0x4a, 0x88, 0x38, 0xa7, 0xed, 0xca, 0xf5, 0xa3, 0xc3, 0xea, 0xd5, 0x66, 0x1e, 0x42, 0x9c, - 0x4f, 0x07, 0xb5, 0xe0, 0x89, 0x18, 0x10, 0xda, 0x8e, 0xfd, 0x16, 0x97, 0xc2, 0x76, 0x7c, 0x12, - 0xec, 0x78, 0x8e, 0xc5, 0x98, 0x85, 0xb6, 0xf8, 0xee, 0xa3, 0xc3, 0xea, 0x13, 0xcd, 0x5e, 0x15, - 0x71, 0x6f, 0x3c, 0xc8, 0x82, 0x89, 0xc0, 0x34, 0xdc, 0x86, 0x1b, 0x12, 0x7f, 0xcf, 0x70, 0x66, - 0x87, 0x4b, 0x0d, 0x90, 0x6f, 0x51, 0x05, 0x0f, 0x4e, 0x60, 0x45, 0x1f, 0x82, 0x51, 0xb2, 0xdf, - 0x31, 0x5c, 0x8b, 0x70, 0xb6, 0x30, 0xb6, 0xf8, 0x38, 0x3d, 0x8c, 0x96, 0x44, 0xd9, 0xa3, 0xc3, - 0xea, 0x44, 0xf4, 0xff, 0xaa, 0x67, 0x11, 0x2c, 0x6b, 0xa3, 0x8f, 0xc3, 0x15, 0xf6, 0x1e, 0x66, - 0x11, 0xc6, 0xe4, 0x82, 0x48, 0xd0, 0x1d, 0x2d, 0xd5, 0x4f, 0xf6, 0xb6, 0xb1, 0x9a, 0x83, 0x0f, - 0xe7, 0x52, 0xa1, 0x9f, 0xa1, 0x6d, 0xec, 0xdf, 0xf5, 0x0d, 0x93, 0x6c, 0x77, 0x9d, 0x0d, 0xe2, - 0xb7, 0x6d, 0x97, 0xdf, 0x25, 0x88, 0xe9, 0xb9, 0x16, 0x65, 0x25, 0xda, 0xd3, 0x43, 0xfc, 0x33, - 0xac, 0xf6, 0xaa, 0x88, 0x7b, 0xe3, 0x41, 0xef, 0x87, 0x09, 0xbb, 0xe5, 0x7a, 0x3e, 0xd9, 0x30, - 0x6c, 0x37, 0x0c, 0x66, 0x81, 0xa9, 0xdd, 0xd9, 0xb4, 0x36, 0x94, 0x72, 0x9c, 0xa8, 0x85, 0xf6, - 0x00, 0xb9, 0xe4, 0xe1, 0xba, 0x67, 0xb1, 0x25, 0xb0, 0xd9, 0x61, 0x0b, 0x79, 0x76, 0xbc, 0xd4, - 0xd4, 0xb0, 0x7b, 0xc0, 0x5a, 0x06, 0x1b, 0xce, 0xa1, 0x80, 0x96, 0x01, 0xb5, 0x8d, 0xfd, 0xa5, - 0x76, 0x27, 0x3c, 0x58, 0xec, 0x3a, 0xbb, 0x82, 0x6b, 0x4c, 0xb0, 0xb9, 0xe0, 0xf7, 0xb0, 0x0c, - 0x14, 0xe7, 0xb4, 0x40, 0x06, 0xdc, 0xe0, 0xe3, 0xa9, 0x1b, 0xa4, 0xed, 0xb9, 0x01, 0x09, 0x03, - 0x65, 0x91, 0xce, 0x4e, 0xb2, 0x57, 0x2c, 0x26, 0x95, 0x37, 0x8a, 0xab, 0xe1, 0x5e, 0x38, 0x92, - 0xef, 0xc2, 0x53, 0xbd, 0xdf, 0x85, 0xf5, 0xff, 0x35, 0x08, 0xb3, 0x19, 0x86, 0xfd, 0xa0, 0x13, - 0xb2, 0xe3, 0xed, 0xd8, 0x2d, 0xa9, 0x9d, 0xd1, 0x96, 0xec, 0xc0, 0x2d, 0x59, 0xe1, 0x6e, 0xa7, - 0x9b, 0x4b, 0xab, 0xc2, 0x68, 0x3d, 0x75, 0x74, 0x58, 0xbd, 0xd5, 0x3c, 0xa6, 0x2e, 0x3e, 0x16, - 0x5b, 0x31, 0xbb, 0x1b, 0xb8, 0x20, 0x76, 0xf7, 0x71, 0xb8, 0xa2, 0x00, 0x7c, 0x62, 0x58, 0x07, - 0x7d, 0xb0, 0x5b, 0xb6, 0xcb, 0x9b, 0x39, 0xf8, 0x70, 0x2e, 0x95, 0x42, 0x1e, 0x33, 0x74, 0x11, - 0x3c, 0x46, 0x3f, 0x1c, 0x80, 0xb1, 0x9a, 0xe7, 0x5a, 0x36, 0x5b, 0xaf, 0xcf, 0x25, 0x1e, 0x3e, - 0x9e, 0x50, 0x85, 0x99, 0x47, 0x87, 0xd5, 0x49, 0x59, 0x51, 0x91, 0x6e, 0x5e, 0x90, 0xda, 0x46, - 0xae, 0xdd, 0x7a, 0x77, 0x52, 0x4d, 0xf8, 0xe8, 0xb0, 0x7a, 0x49, 0x36, 0x4b, 0x6a, 0x0e, 0x29, - 0x03, 0xa1, 0x57, 0xda, 0x0d, 0xdf, 0x70, 0x03, 0xbb, 0x0f, 0x25, 0x82, 0x54, 0x0f, 0xad, 0x64, - 0xb0, 0xe1, 0x1c, 0x0a, 0xe8, 0x0d, 0x98, 0xa2, 0xa5, 0x9b, 0x1d, 0xcb, 0x08, 0x49, 0x49, 0xdd, - 0xc1, 0x35, 0x41, 0x73, 0x6a, 0x25, 0x81, 0x09, 0xa7, 0x30, 0xf3, 0x87, 0x22, 0x23, 0xf0, 0x5c, - 0xf6, 0x3d, 0x13, 0x0f, 0x45, 0xb4, 0x14, 0x0b, 0x28, 0x7a, 0x06, 0x46, 0xda, 0x24, 0x08, 0x8c, - 0x16, 0x61, 0x87, 0xe0, 0x58, 0x2c, 0xe9, 0xae, 0xf2, 0x62, 0x1c, 0xc1, 0xd1, 0xfb, 0x60, 0xc8, - 0xf4, 0x2c, 0x12, 0xcc, 0x8e, 0x30, 0x36, 0x4d, 0x59, 0xde, 0x50, 0x8d, 0x16, 0x3c, 0x3a, 0xac, - 0x8e, 0x31, 0x65, 0x1a, 0xfd, 0x85, 0x79, 0x25, 0xfd, 0x27, 0xe9, 0xc5, 0x33, 0x75, 0xd3, 0x3e, - 0xc1, 0x03, 0xd7, 0xc5, 0xbd, 0x15, 0xe9, 0x9f, 0xa5, 0xb7, 0x7e, 0xcf, 0x0d, 0x7d, 0xcf, 0x59, - 0x77, 0x0c, 0x97, 0xa0, 0xef, 0xd7, 0x60, 0x7a, 0xc7, 0x6e, 0xed, 0xa8, 0x2f, 0xd4, 0x42, 0x3a, - 0x2d, 0x75, 0x41, 0xbf, 0x97, 0xc2, 0xb5, 0x78, 0xe5, 0xe8, 0xb0, 0x3a, 0x9d, 0x2e, 0xc5, 0x19, - 0x9a, 0xfa, 0xa7, 0x2a, 0x70, 0x45, 0xf4, 0xcc, 0xa1, 0xe2, 0x62, 0xc7, 0xf1, 0x0e, 0xda, 0xc4, - 0xbd, 0x88, 0xc7, 0xe4, 0xe8, 0x0b, 0x55, 0x0a, 0xbf, 0x50, 0x3b, 0xf3, 0x85, 0x06, 0xca, 0x7c, - 0x21, 0xb9, 0x90, 0x8f, 0xf9, 0x4a, 0x7f, 0xaa, 0xc1, 0x6c, 0xde, 0x5c, 0x5c, 0x80, 0x22, 0xa3, - 0x9d, 0x54, 0x64, 0xdc, 0x2b, 0xab, 0x99, 0x4a, 0x77, 0xbd, 0x40, 0xa1, 0xf1, 0x27, 0x15, 0xb8, - 0x16, 0x57, 0x6f, 0xb8, 0x41, 0x68, 0x38, 0x0e, 0x3f, 0xcf, 0xcf, 0xff, 0xbb, 0x77, 0x12, 0xfa, - 0xa8, 0xb5, 0xfe, 0x86, 0xaa, 0xf6, 0xbd, 0xf0, 0xb9, 0x68, 0x3f, 0xf5, 0x5c, 0xb4, 0x7e, 0x86, - 0x34, 0x7b, 0xbf, 0x1c, 0xfd, 0x77, 0x0d, 0xe6, 0xf2, 0x1b, 0x5e, 0xc0, 0xa2, 0xf2, 0x92, 0x8b, - 0xea, 0x5b, 0xce, 0x6e, 0xd4, 0x05, 0xcb, 0xea, 0x17, 0x2a, 0x45, 0xa3, 0x65, 0x1a, 0xb3, 0x6d, - 0xb8, 0xe4, 0x93, 0x96, 0x1d, 0x84, 0xe2, 0x5d, 0xe3, 0x74, 0x06, 0x3f, 0x91, 0xa2, 0xf7, 0x12, - 0x4e, 0xe2, 0xc0, 0x69, 0xa4, 0x68, 0x0d, 0x46, 0x02, 0x42, 0x2c, 0x8a, 0xbf, 0x72, 0x72, 0xfc, - 0xf2, 0x34, 0x6a, 0xf2, 0xb6, 0x38, 0x42, 0x82, 0xbe, 0x1d, 0x26, 0x2d, 0xb9, 0xa3, 0x8e, 0x79, - 0xed, 0x4f, 0x63, 0x65, 0x2f, 0x50, 0x75, 0xb5, 0x35, 0x4e, 0x22, 0xd3, 0xff, 0x42, 0x83, 0xc7, - 0x7b, 0xad, 0x2d, 0xf4, 0x26, 0x80, 0x19, 0x89, 0x17, 0xdc, 0xde, 0xab, 0xe4, 0x1b, 0x95, 0x14, - 0x52, 0xe2, 0x0d, 0x2a, 0x8b, 0x02, 0xac, 0x10, 0xc9, 0x31, 0x22, 0xa8, 0x9c, 0x93, 0x11, 0x81, - 0xfe, 0x3f, 0x34, 0x95, 0x15, 0xa9, 0xdf, 0xf6, 0x9d, 0xc6, 0x8a, 0xd4, 0xbe, 0x17, 0x2a, 0xc9, - 0xff, 0xa0, 0x02, 0xb7, 0xf2, 0x9b, 0x28, 0x67, 0xef, 0x47, 0x61, 0xb8, 0xc3, 0x8d, 0xf2, 0x06, - 0xd8, 0xd9, 0xf8, 0x34, 0xe5, 0x2c, 0xdc, 0x64, 0xee, 0xd1, 0x61, 0x75, 0x2e, 0x8f, 0xd1, 0x0b, - 0x63, 0x3b, 0xd1, 0x0e, 0xd9, 0x29, 0x55, 0x21, 0x97, 0xfe, 0xbe, 0xf1, 0x84, 0xcc, 0xc5, 0xd8, - 0x22, 0xce, 0x89, 0xb5, 0x83, 0x9f, 0xd0, 0x60, 0x2a, 0xb1, 0xa2, 0x83, 0xd9, 0x21, 0xb6, 0x46, - 0x4b, 0xbd, 0xdf, 0x26, 0xb6, 0x4a, 0x7c, 0x72, 0x27, 0x8a, 0x03, 0x9c, 0x22, 0x98, 0x62, 0xb3, - 0xea, 0xac, 0xbe, 0xe3, 0xd8, 0xac, 0xda, 0xf9, 0x02, 0x36, 0xfb, 0x13, 0x95, 0xa2, 0xd1, 0x32, - 0x36, 0xfb, 0x10, 0xc6, 0x22, 0x73, 0xf5, 0x88, 0x5d, 0x2c, 0xf7, 0xdb, 0x27, 0x8e, 0x2e, 0xb6, - 0x5d, 0x8a, 0x4a, 0x02, 0x1c, 0xd3, 0x42, 0xdf, 0xab, 0x01, 0xc4, 0x1f, 0x46, 0x6c, 0xaa, 0x8d, - 0xb3, 0x9b, 0x0e, 0x45, 0xac, 0x99, 0xa2, 0x5b, 0x5a, 0x59, 0x14, 0x0a, 0x5d, 0xfd, 0xff, 0x0e, - 0x00, 0xca, 0xf6, 0x9d, 0x8a, 0x9b, 0xbb, 0xb6, 0x6b, 0xa5, 0x2f, 0x04, 0xf7, 0x6d, 0xd7, 0xc2, - 0x0c, 0x72, 0x02, 0x81, 0xf4, 0x45, 0xb8, 0xd4, 0x72, 0xbc, 0x2d, 0xc3, 0x71, 0x0e, 0x84, 0xfd, - 0xb6, 0xb0, 0x04, 0xbe, 0x4c, 0x0f, 0xa6, 0xbb, 0x49, 0x10, 0x4e, 0xd7, 0x45, 0x1d, 0x98, 0xf6, - 0x89, 0xe9, 0xb9, 0xa6, 0xed, 0xb0, 0xab, 0x93, 0xd7, 0x0d, 0x4b, 0xde, 0xc0, 0x99, 0x78, 0x8f, - 0x53, 0xb8, 0x70, 0x06, 0x3b, 0x7a, 0x0f, 0x8c, 0x74, 0x7c, 0xbb, 0x6d, 0xf8, 0x07, 0xec, 0x72, - 0x36, 0xba, 0x38, 0x4e, 0x4f, 0xb8, 0x75, 0x5e, 0x84, 0x23, 0x18, 0xfa, 0x38, 0x8c, 0x39, 0xf6, - 0x36, 0x31, 0x0f, 0x4c, 0x87, 0x08, 0x0d, 0xe5, 0x83, 0xb3, 0x59, 0x32, 0x2b, 0x11, 0x5a, 0x61, - 0x17, 0x11, 0xfd, 0xc4, 0x31, 0x41, 0xd4, 0x80, 0xcb, 0x0f, 0x3d, 0x7f, 0x97, 0xf8, 0x0e, 0x09, - 0x82, 0x66, 0xb7, 0xd3, 0xf1, 0xfc, 0x90, 0x58, 0x4c, 0x8f, 0x39, 0xca, 0x8d, 0xd4, 0x5f, 0xc9, - 0x82, 0x71, 0x5e, 0x1b, 0xfd, 0xd3, 0x15, 0xb8, 0xd1, 0xa3, 0x13, 0x08, 0xd3, 0xbd, 0x21, 0xe6, - 0x48, 0xac, 0x84, 0xf7, 0xf3, 0xf5, 0x2c, 0x0a, 0x1f, 0x1d, 0x56, 0x9f, 0xec, 0x81, 0xa0, 0x49, - 0x97, 0x22, 0x69, 0x1d, 0xe0, 0x18, 0x0d, 0x6a, 0xc0, 0xb0, 0x15, 0xab, 0xf5, 0xc7, 0x16, 0x9f, - 0xa3, 0xdc, 0x9a, 0x2b, 0xe0, 0x4e, 0x8a, 0x4d, 0x20, 0x40, 0x2b, 0x30, 0xc2, 0xad, 0x29, 0x88, - 0xe0, 0xfc, 0xcf, 0xb3, 0xeb, 0x31, 0x2f, 0x3a, 0x29, 0xb2, 0x08, 0x85, 0xfe, 0x7f, 0x34, 0x18, - 0xa9, 0x79, 0x3e, 0xa9, 0xaf, 0x35, 0xd1, 0x01, 0x8c, 0x2b, 0x7e, 0x34, 0x82, 0x0b, 0x96, 0x64, - 0x0b, 0x0c, 0xe3, 0x42, 0x8c, 0x2d, 0xb2, 0xf9, 0x96, 0x05, 0x58, 0xa5, 0x85, 0xde, 0xa4, 0x73, - 0xfe, 0xd0, 0xb7, 0x43, 0x4a, 0xb8, 0x9f, 0x47, 0x68, 0x4e, 0x18, 0x47, 0xb8, 0xf8, 0x8a, 0x92, - 0x3f, 0x71, 0x4c, 0x45, 0x5f, 0xa7, 0x1c, 0x20, 0xdd, 0x4d, 0x74, 0x07, 0x06, 0xdb, 0x9e, 0x15, - 0x7d, 0xf7, 0xf7, 0x46, 0xfb, 0x7b, 0xd5, 0xb3, 0xe8, 0xdc, 0x5e, 0xcb, 0xb6, 0x60, 0xaa, 0x72, - 0xd6, 0x46, 0x5f, 0x83, 0xe9, 0x34, 0x7d, 0x74, 0x07, 0xa6, 0x4c, 0xaf, 0xdd, 0xf6, 0xdc, 0x66, - 0x77, 0x7b, 0xdb, 0xde, 0x27, 0x09, 0x63, 0xfc, 0x5a, 0x02, 0x82, 0x53, 0x35, 0xf5, 0x1f, 0xd7, - 0x60, 0x80, 0x7e, 0x17, 0x1d, 0x86, 0x2d, 0xaf, 0x6d, 0xd8, 0xae, 0xe8, 0x15, 0x73, 0x3c, 0xa8, - 0xb3, 0x12, 0x2c, 0x20, 0xa8, 0x03, 0x63, 0x91, 0xd0, 0xd4, 0x97, 0x41, 0x58, 0x7d, 0xad, 0x29, - 0x8d, 0x68, 0x25, 0x27, 0x8f, 0x4a, 0x02, 0x1c, 0x13, 0xd1, 0x0d, 0x98, 0xa9, 0xaf, 0x35, 0x1b, - 0xae, 0xe9, 0x74, 0x2d, 0xb2, 0xb4, 0xcf, 0xfe, 0x50, 0x5e, 0x62, 0xf3, 0x12, 0x31, 0x4e, 0xc6, - 0x4b, 0x44, 0x25, 0x1c, 0xc1, 0x68, 0x35, 0xc2, 0x5b, 0x08, 0x8b, 0x79, 0x56, 0x4d, 0x20, 0xc1, - 0x11, 0x4c, 0xff, 0x52, 0x05, 0xc6, 0x95, 0x0e, 0x21, 0x07, 0x46, 0xf8, 0x70, 0x23, 0x83, 0xd5, - 0xa5, 0x92, 0x43, 0x4c, 0xf6, 0x9a, 0x53, 0xe7, 0x13, 0x1a, 0xe0, 0x88, 0x84, 0xca, 0x17, 0x2b, - 0x3d, 0xf8, 0xe2, 0x3c, 0x40, 0x10, 0xbb, 0x6f, 0xf0, 0x2d, 0xc9, 0x8e, 0x1e, 0xc5, 0x69, 0x43, - 0xa9, 0x81, 0x1e, 0x17, 0x27, 0x08, 0xb7, 0xc8, 0x1a, 0x4d, 0x9d, 0x1e, 0xdb, 0x30, 0xf4, 0x96, - 0xe7, 0x92, 0x40, 0xe8, 0x3d, 0xcf, 0x68, 0x80, 0x63, 0x54, 0x3e, 0x78, 0x8d, 0xe2, 0xc5, 0x1c, - 0xbd, 0xfe, 0x53, 0x1a, 0x40, 0xdd, 0x08, 0x0d, 0xfe, 0x6e, 0x7a, 0x02, 0xa7, 0x87, 0xc7, 0x13, - 0x07, 0xdf, 0x68, 0xc6, 0x10, 0x7c, 0x30, 0xb0, 0xdf, 0x8a, 0x86, 0x2f, 0x05, 0x6a, 0x8e, 0xbd, - 0x69, 0xbf, 0x45, 0x30, 0x83, 0xa3, 0x67, 0x61, 0x8c, 0xb8, 0xa6, 0x7f, 0xd0, 0xa1, 0xcc, 0x7b, - 0x90, 0xcd, 0x2a, 0xdb, 0xa1, 0x4b, 0x51, 0x21, 0x8e, 0xe1, 0xfa, 0x73, 0x90, 0xbc, 0x15, 0x1d, - 0xdf, 0x4b, 0xfd, 0x2b, 0x83, 0x70, 0x7d, 0x69, 0xa3, 0x56, 0x17, 0xf8, 0x6c, 0xcf, 0xbd, 0x4f, - 0x0e, 0xfe, 0xc6, 0xc6, 0xec, 0x6f, 0x6c, 0xcc, 0xce, 0xd0, 0xc6, 0xec, 0x25, 0x98, 0x8e, 0x97, - 0x97, 0xb0, 0xee, 0x78, 0x36, 0x2d, 0x4f, 0x8f, 0x45, 0x27, 0x4f, 0x56, 0x06, 0xd6, 0x1f, 0x69, - 0x30, 0xbd, 0xb4, 0xdf, 0xb1, 0x7d, 0xe6, 0xad, 0x43, 0x7c, 0x7a, 0x0f, 0x46, 0xcf, 0xc0, 0xc8, - 0x1e, 0xff, 0x57, 0xac, 0x4e, 0xa9, 0x6b, 0x10, 0x35, 0x70, 0x04, 0x47, 0xdb, 0x30, 0x45, 0x58, - 0x73, 0x26, 0xf0, 0x1a, 0x61, 0x99, 0x15, 0xc8, 0x9d, 0xc1, 0x12, 0x58, 0x70, 0x0a, 0x2b, 0x6a, - 0xc2, 0x94, 0xe9, 0x18, 0x41, 0x60, 0x6f, 0xdb, 0x66, 0x6c, 0x87, 0x3a, 0xb6, 0xf8, 0x2c, 0x3b, - 0xbb, 0x12, 0x90, 0x47, 0x87, 0xd5, 0xab, 0xa2, 0x9f, 0x49, 0x00, 0x4e, 0xa1, 0xd0, 0x3f, 0x57, - 0x81, 0xc9, 0xa5, 0xfd, 0x8e, 0x17, 0x74, 0x7d, 0xc2, 0xaa, 0x5e, 0xc0, 0x15, 0xfe, 0x19, 0x18, - 0xd9, 0x31, 0x5c, 0xcb, 0x21, 0xbe, 0x60, 0x5f, 0x72, 0x6e, 0xef, 0xf1, 0x62, 0x1c, 0xc1, 0xd1, - 0xdb, 0x00, 0x81, 0xb9, 0x43, 0xac, 0x2e, 0x13, 0x81, 0xf8, 0x2e, 0xbb, 0x5f, 0x86, 0x09, 0x27, - 0xc6, 0xd8, 0x94, 0x28, 0xc5, 0xd1, 0x20, 0x7f, 0x63, 0x85, 0x9c, 0xfe, 0x65, 0x0d, 0x66, 0x12, - 0xed, 0x2e, 0xe0, 0x66, 0xba, 0x9d, 0xbc, 0x99, 0x2e, 0xf4, 0x3d, 0xd6, 0x82, 0x0b, 0xe9, 0x0f, - 0x54, 0xe0, 0xb1, 0x82, 0x39, 0xc9, 0x18, 0x2d, 0x69, 0x17, 0x64, 0xb4, 0xd4, 0x85, 0xf1, 0xd0, - 0x73, 0x84, 0xb9, 0x74, 0x34, 0x03, 0xa5, 0x4c, 0x92, 0x36, 0x24, 0x9a, 0xd8, 0x24, 0x29, 0x2e, - 0x0b, 0xb0, 0x4a, 0x47, 0xff, 0x35, 0x0d, 0xc6, 0xa4, 0x02, 0xec, 0x6b, 0xea, 0x11, 0xea, 0xe4, - 0xfe, 0xab, 0xfa, 0x6f, 0x57, 0xe0, 0x9a, 0xc4, 0x1d, 0xb1, 0xb9, 0x66, 0x48, 0xf9, 0xc6, 0xf1, - 0xb7, 0xe8, 0xc7, 0xc5, 0x41, 0xae, 0x08, 0x13, 0x8a, 0xa8, 0x41, 0x05, 0xaf, 0xae, 0xdf, 0xf1, - 0x82, 0x48, 0x9e, 0xe0, 0x82, 0x17, 0x2f, 0xc2, 0x11, 0x0c, 0xad, 0xc1, 0x50, 0x40, 0xe9, 0x89, - 0xe3, 0xe8, 0x94, 0xb3, 0xc1, 0x44, 0x22, 0xd6, 0x5f, 0xcc, 0xd1, 0xa0, 0xb7, 0x55, 0x1e, 0x3e, - 0x54, 0x5e, 0x4f, 0x43, 0x47, 0x62, 0x45, 0x33, 0x92, 0xe3, 0xd3, 0x95, 0x7b, 0x26, 0xac, 0xc0, - 0xb4, 0xb0, 0x7b, 0xe2, 0xcb, 0xc6, 0x35, 0x09, 0xfa, 0x50, 0x62, 0x65, 0x3c, 0x95, 0x7a, 0x86, - 0xbe, 0x92, 0xae, 0x1f, 0xaf, 0x18, 0x3d, 0x80, 0xd1, 0xbb, 0xa2, 0x93, 0x68, 0x0e, 0x2a, 0x76, - 0xf4, 0x2d, 0x40, 0xe0, 0xa8, 0x34, 0xea, 0xb8, 0x62, 0x5b, 0x52, 0xa0, 0xaa, 0x14, 0x8a, 0x7d, - 0xca, 0xb1, 0x34, 0xd0, 0xfb, 0x58, 0xd2, 0xff, 0xb8, 0x02, 0x57, 0x22, 0xaa, 0xd1, 0x18, 0xeb, - 0xe2, 0x11, 0xef, 0x18, 0xe1, 0xf2, 0x78, 0xad, 0xca, 0x03, 0x18, 0x64, 0x0c, 0xb0, 0xd4, 0xe3, - 0x9e, 0x44, 0x48, 0xbb, 0x83, 0x19, 0x22, 0xf4, 0x71, 0x18, 0x76, 0x8c, 0x2d, 0xe2, 0x44, 0xf6, - 0xa6, 0xa5, 0x74, 0x50, 0x79, 0xc3, 0xe5, 0xaa, 0xd1, 0x80, 0xfb, 0xd4, 0xc8, 0x37, 0x1f, 0x5e, - 0x88, 0x05, 0xcd, 0xb9, 0x17, 0x60, 0x5c, 0xa9, 0x86, 0xa6, 0x61, 0x60, 0x97, 0xf0, 0xc7, 0xdd, - 0x31, 0x4c, 0xff, 0x45, 0x57, 0x60, 0x68, 0xcf, 0x70, 0xba, 0x62, 0x4a, 0x30, 0xff, 0x71, 0xa7, - 0xf2, 0x21, 0x4d, 0xff, 0x39, 0x0d, 0xc6, 0xef, 0xd9, 0x5b, 0xc4, 0xe7, 0xc6, 0x4b, 0xec, 0x2e, - 0x95, 0x08, 0x1f, 0x30, 0x9e, 0x17, 0x3a, 0x00, 0xed, 0xc3, 0x98, 0x38, 0x69, 0xa4, 0x6d, 0xfb, - 0xdd, 0x72, 0xaf, 0xc8, 0x92, 0xb4, 0xe0, 0xe0, 0xaa, 0xbb, 0x62, 0x44, 0x01, 0xc7, 0xc4, 0xf4, - 0xb7, 0xe1, 0x72, 0x4e, 0x23, 0x54, 0x65, 0xdb, 0xd7, 0x0f, 0xc5, 0xb2, 0x88, 0xf6, 0xa3, 0x1f, - 0x62, 0x5e, 0x8e, 0xae, 0xc3, 0x00, 0x71, 0x2d, 0xb1, 0x26, 0x46, 0x8e, 0x0e, 0xab, 0x03, 0x4b, - 0xae, 0x85, 0x69, 0x19, 0x65, 0x53, 0x8e, 0x97, 0x90, 0x49, 0x18, 0x9b, 0x5a, 0x11, 0x65, 0x58, - 0x42, 0xd9, 0xbb, 0x7f, 0xfa, 0x89, 0x9b, 0x8a, 0xb7, 0xd3, 0xdb, 0xa9, 0xdd, 0xd3, 0xcf, 0xcb, - 0x7a, 0x7a, 0x27, 0x2e, 0xce, 0x8a, 0x09, 0xc9, 0xec, 0x69, 0x9c, 0xa1, 0xab, 0xff, 0xf2, 0x20, - 0x3c, 0x71, 0xcf, 0xf3, 0xed, 0xb7, 0x3c, 0x37, 0x34, 0x9c, 0x75, 0xcf, 0x8a, 0xad, 0x9e, 0x04, - 0x53, 0xfe, 0x3e, 0x0d, 0x1e, 0x33, 0x3b, 0x5d, 0x2e, 0x1e, 0x47, 0x86, 0x43, 0xeb, 0xc4, 0xb7, - 0xbd, 0xb2, 0xd6, 0xaa, 0xcc, 0x41, 0xbd, 0xb6, 0xbe, 0x99, 0x87, 0x12, 0x17, 0xd1, 0x62, 0x46, - 0xb3, 0x96, 0xf7, 0xd0, 0x65, 0x9d, 0x6b, 0x86, 0x6c, 0x36, 0xdf, 0x8a, 0x3f, 0x42, 0x49, 0xa3, - 0xd9, 0x7a, 0x2e, 0x46, 0x5c, 0x40, 0x09, 0x7d, 0x37, 0x5c, 0xb5, 0x79, 0xe7, 0x30, 0x31, 0x2c, - 0xdb, 0x25, 0x41, 0xc0, 0x2d, 0xee, 0xfa, 0xb0, 0x0a, 0x6d, 0xe4, 0x21, 0xc4, 0xf9, 0x74, 0xd0, - 0xeb, 0x00, 0xc1, 0x81, 0x6b, 0x8a, 0xf9, 0x2f, 0x67, 0x9e, 0xc4, 0x85, 0x40, 0x89, 0x05, 0x2b, - 0x18, 0xe9, 0x55, 0x22, 0x94, 0x8b, 0x72, 0x98, 0x99, 0x98, 0xb1, 0xab, 0x44, 0xbc, 0x86, 0x62, - 0xb8, 0xfe, 0xcf, 0x35, 0x18, 0x11, 0x41, 0x30, 0xd0, 0x7b, 0x53, 0x6a, 0x22, 0xc9, 0x7b, 0x52, - 0xaa, 0xa2, 0x03, 0xf6, 0x56, 0x28, 0x54, 0x84, 0x42, 0x94, 0x28, 0xa5, 0x67, 0x10, 0x84, 0x63, - 0x7d, 0x63, 0xe2, 0xcd, 0x30, 0xd2, 0x41, 0x2a, 0xc4, 0xf4, 0x2f, 0x68, 0x30, 0x93, 0x69, 0x75, - 0x02, 0x79, 0xe1, 0x02, 0xcd, 0x70, 0xfe, 0x60, 0x10, 0xa6, 0x98, 0xc9, 0xac, 0x6b, 0x38, 0x5c, - 0x83, 0x73, 0x01, 0x17, 0x94, 0x67, 0x61, 0xcc, 0x6e, 0xb7, 0xbb, 0x21, 0x65, 0xd5, 0x42, 0x09, - 0xcf, 0xbe, 0x79, 0x23, 0x2a, 0xc4, 0x31, 0x1c, 0xb9, 0xe2, 0x28, 0xe4, 0x4c, 0x7c, 0xa5, 0xdc, - 0x97, 0x53, 0x07, 0x38, 0x4f, 0x8f, 0x2d, 0x7e, 0x5e, 0xe5, 0x9d, 0x94, 0xdf, 0xaf, 0x01, 0x04, - 0xa1, 0x6f, 0xbb, 0x2d, 0x5a, 0x28, 0x8e, 0x4b, 0x7c, 0x06, 0x64, 0x9b, 0x12, 0x29, 0x27, 0x2e, - 0xe7, 0x28, 0x06, 0x60, 0x85, 0x32, 0x5a, 0x10, 0x52, 0x02, 0xe7, 0xf8, 0x5f, 0x9f, 0x92, 0x87, - 0x9e, 0xc8, 0xc6, 0x78, 0x12, 0x8e, 0xd1, 0xb1, 0x18, 0x31, 0xf7, 0x41, 0x18, 0x93, 0xf4, 0x8e, - 0x3b, 0x75, 0x27, 0x94, 0x53, 0x77, 0xee, 0x45, 0xb8, 0x94, 0xea, 0xee, 0xa9, 0x0e, 0xed, 0xff, - 0xa8, 0x01, 0x4a, 0x8e, 0xfe, 0x02, 0xae, 0x76, 0xad, 0xe4, 0xd5, 0x6e, 0xb1, 0xff, 0x4f, 0x56, - 0x70, 0xb7, 0xfb, 0xf2, 0x14, 0xb0, 0x18, 0x41, 0x32, 0x06, 0x93, 0x38, 0xb8, 0xe8, 0x39, 0x1b, - 0xfb, 0x19, 0x89, 0x9d, 0xdb, 0xc7, 0x39, 0x7b, 0x3f, 0x85, 0x2b, 0x3e, 0x67, 0xd3, 0x10, 0x9c, - 0xa1, 0x8b, 0x3e, 0xa5, 0xc1, 0xb4, 0x91, 0x8c, 0x11, 0x14, 0xcd, 0x4c, 0x29, 0x1f, 0xf4, 0x54, - 0xbc, 0xa1, 0xb8, 0x2f, 0x29, 0x40, 0x80, 0x33, 0x64, 0xd1, 0xfb, 0x61, 0xc2, 0xe8, 0xd8, 0x0b, - 0x5d, 0xcb, 0xa6, 0x57, 0x83, 0x28, 0xc0, 0x0b, 0xbb, 0xae, 0x2e, 0xac, 0x37, 0x64, 0x39, 0x4e, - 0xd4, 0x92, 0xc1, 0x78, 0xc4, 0x44, 0x0e, 0xf6, 0x19, 0x8c, 0x47, 0xcc, 0x61, 0x1c, 0x8c, 0x47, - 0x4c, 0x9d, 0x4a, 0x04, 0xb9, 0x00, 0x9e, 0x6d, 0x99, 0x82, 0x24, 0x7f, 0xf6, 0x2b, 0x75, 0x43, - 0x7e, 0xd0, 0xa8, 0xd7, 0x04, 0x45, 0x76, 0xfa, 0xc5, 0xbf, 0xb1, 0x42, 0x01, 0x7d, 0x56, 0x83, - 0x49, 0xc1, 0xbb, 0x05, 0xcd, 0x11, 0xf6, 0x89, 0x5e, 0x2b, 0xbb, 0x5e, 0x52, 0x6b, 0x72, 0x1e, - 0xab, 0xc8, 0x39, 0xdf, 0x91, 0x6e, 0x6a, 0x09, 0x18, 0x4e, 0xf6, 0x03, 0xfd, 0x03, 0x0d, 0xae, - 0x04, 0xc4, 0xdf, 0xb3, 0x4d, 0xb2, 0x60, 0x9a, 0x5e, 0xd7, 0x8d, 0xbe, 0xc3, 0x68, 0xf9, 0xd8, - 0x25, 0xcd, 0x1c, 0x7c, 0xc2, 0x72, 0x3a, 0x07, 0x82, 0x73, 0xe9, 0x53, 0xb1, 0xec, 0xd2, 0x43, - 0x23, 0x34, 0x77, 0x6a, 0x86, 0xb9, 0xc3, 0x94, 0xed, 0xdc, 0x25, 0xa2, 0xe4, 0xba, 0x7e, 0x25, - 0x89, 0x8a, 0x3f, 0x5b, 0xa7, 0x0a, 0x71, 0x9a, 0x20, 0xf2, 0x60, 0xd4, 0x17, 0x81, 0xd7, 0x66, - 0xa1, 0xbc, 0x48, 0x91, 0x89, 0xe2, 0xc6, 0x05, 0xfb, 0xe8, 0x17, 0x96, 0x44, 0x50, 0x0b, 0x9e, - 0xe0, 0x57, 0x9b, 0x05, 0xd7, 0x73, 0x0f, 0xda, 0x5e, 0x37, 0x58, 0xe8, 0x86, 0x3b, 0xc4, 0x0d, - 0x23, 0x5d, 0xe5, 0x38, 0x3b, 0x46, 0x99, 0x27, 0xc0, 0x52, 0xaf, 0x8a, 0xb8, 0x37, 0x1e, 0xf4, - 0x2a, 0x8c, 0x92, 0x3d, 0xe2, 0x86, 0x1b, 0x1b, 0x2b, 0xcc, 0xbb, 0xe2, 0xf4, 0xd2, 0x1e, 0x1b, - 0xc2, 0x92, 0xc0, 0x81, 0x25, 0x36, 0xb4, 0x0b, 0x23, 0x0e, 0x8f, 0x9c, 0xc7, 0xbc, 0x2c, 0x4a, - 0x32, 0xc5, 0x74, 0x14, 0x3e, 0x7e, 0xff, 0x13, 0x3f, 0x70, 0x44, 0x01, 0x75, 0xe0, 0x96, 0x45, - 0xb6, 0x8d, 0xae, 0x13, 0xae, 0x79, 0x21, 0x66, 0x66, 0xf7, 0x52, 0x25, 0x15, 0x39, 0xd2, 0x4c, - 0xb1, 0x30, 0x03, 0xcc, 0xa1, 0xa1, 0x7e, 0x4c, 0x5d, 0x7c, 0x2c, 0x36, 0x74, 0x00, 0x4f, 0x8a, - 0x3a, 0xcc, 0xce, 0xdf, 0xdc, 0xa1, 0xb3, 0x9c, 0x25, 0x7a, 0x89, 0x11, 0xfd, 0x5b, 0x47, 0x87, - 0xd5, 0x27, 0xeb, 0xc7, 0x57, 0xc7, 0x27, 0xc1, 0xc9, 0x4c, 0xa7, 0x49, 0x4a, 0x47, 0x3f, 0x3b, - 0x5d, 0x7e, 0x8e, 0xd3, 0xfa, 0x7e, 0x6e, 0x5b, 0x91, 0x2e, 0xc5, 0x19, 0x9a, 0x73, 0x1f, 0x05, - 0x94, 0x65, 0x38, 0xc7, 0x49, 0x0e, 0xa3, 0xaa, 0xe4, 0xf0, 0xf9, 0x21, 0xb8, 0x41, 0xf9, 0x58, - 0x2c, 0x2f, 0xaf, 0x1a, 0xae, 0xd1, 0xfa, 0xda, 0x3c, 0x63, 0x7f, 0x4e, 0x83, 0xc7, 0x76, 0xf2, - 0xef, 0xb2, 0x42, 0x62, 0xff, 0x58, 0x29, 0x9d, 0x43, 0xaf, 0xeb, 0x31, 0xdf, 0xe2, 0x3d, 0xab, - 0xe0, 0xa2, 0x4e, 0xa1, 0x8f, 0xc2, 0xb4, 0xeb, 0x59, 0xa4, 0xd6, 0xa8, 0xe3, 0x55, 0x23, 0xd8, - 0x6d, 0x46, 0x6f, 0x98, 0x43, 0xfc, 0x0b, 0xaf, 0xa5, 0x60, 0x38, 0x53, 0x1b, 0xed, 0x01, 0xea, - 0x78, 0xd6, 0xd2, 0x9e, 0x6d, 0x46, 0xaf, 0x67, 0xe5, 0x2d, 0x76, 0xd8, 0x13, 0xdd, 0x7a, 0x06, - 0x1b, 0xce, 0xa1, 0xc0, 0x2e, 0xe3, 0xb4, 0x33, 0xab, 0x9e, 0x6b, 0x87, 0x9e, 0xcf, 0xdc, 0xda, - 0xfa, 0xba, 0x93, 0xb2, 0xcb, 0xf8, 0x5a, 0x2e, 0x46, 0x5c, 0x40, 0x49, 0xff, 0x9f, 0x1a, 0x5c, - 0xa2, 0xcb, 0x62, 0xdd, 0xf7, 0xf6, 0x0f, 0xbe, 0x16, 0x17, 0xe4, 0x33, 0xc2, 0x9c, 0x83, 0x2b, - 0x91, 0xae, 0x2a, 0xa6, 0x1c, 0x63, 0xac, 0xcf, 0xb1, 0xf5, 0x86, 0xaa, 0x47, 0x1b, 0x28, 0xd6, - 0xa3, 0xe9, 0x9f, 0xad, 0x70, 0x59, 0x37, 0xd2, 0x63, 0x7d, 0x4d, 0xee, 0xc3, 0x0f, 0xc2, 0x24, - 0x2d, 0x5b, 0x35, 0xf6, 0xd7, 0xeb, 0x2f, 0x7b, 0x4e, 0xe4, 0x94, 0xc4, 0x0c, 0x8d, 0xef, 0xab, - 0x00, 0x9c, 0xac, 0x87, 0xee, 0xc0, 0x48, 0x87, 0xc7, 0x2f, 0x10, 0xb7, 0xac, 0x5b, 0xdc, 0xe6, - 0x81, 0x15, 0x3d, 0x3a, 0xac, 0xce, 0xc4, 0xaf, 0x36, 0xa2, 0x10, 0x47, 0x0d, 0xf4, 0xbf, 0xba, - 0x0c, 0x0c, 0xb9, 0x43, 0xc2, 0xaf, 0xc5, 0x39, 0x79, 0x0e, 0xc6, 0xcd, 0x4e, 0xb7, 0xb6, 0xdc, - 0xfc, 0x58, 0xd7, 0x63, 0xb7, 0x67, 0x16, 0x6a, 0x95, 0x0a, 0xbf, 0xb5, 0xf5, 0xcd, 0xa8, 0x18, - 0xab, 0x75, 0x28, 0x77, 0x30, 0x3b, 0x5d, 0xc1, 0x6f, 0xd7, 0x55, 0x6b, 0x5b, 0xc6, 0x1d, 0x6a, - 0xeb, 0x9b, 0x09, 0x18, 0xce, 0xd4, 0x46, 0xdf, 0x0d, 0x13, 0x44, 0x6c, 0xdc, 0x7b, 0x86, 0x6f, - 0x09, 0xbe, 0xd0, 0x28, 0x3b, 0x78, 0x39, 0xb5, 0x11, 0x37, 0xe0, 0x77, 0x86, 0x25, 0x85, 0x04, - 0x4e, 0x10, 0x44, 0xdf, 0x06, 0xd7, 0xa3, 0xdf, 0xf4, 0x2b, 0x7b, 0x56, 0x9a, 0x51, 0x0c, 0x71, - 0x97, 0xf1, 0xa5, 0xa2, 0x4a, 0xb8, 0xb8, 0x3d, 0xfa, 0x59, 0x0d, 0xae, 0x49, 0xa8, 0xed, 0xda, - 0xed, 0x6e, 0x1b, 0x13, 0xd3, 0x31, 0xec, 0xb6, 0xb8, 0x29, 0xbc, 0x72, 0x66, 0x03, 0x4d, 0xa2, - 0xe7, 0xcc, 0x2a, 0x1f, 0x86, 0x0b, 0xba, 0x84, 0xbe, 0xa0, 0xc1, 0xad, 0x08, 0xb4, 0xee, 0x93, - 0x20, 0xe8, 0xfa, 0x24, 0x76, 0x89, 0x13, 0x53, 0x32, 0x52, 0x8a, 0x77, 0x32, 0x91, 0x69, 0xe9, - 0x18, 0xdc, 0xf8, 0x58, 0xea, 0xea, 0x72, 0x69, 0x7a, 0xdb, 0xa1, 0xb8, 0x5a, 0x9c, 0xd7, 0x72, - 0xa1, 0x24, 0x70, 0x82, 0x20, 0xfa, 0x17, 0x1a, 0x3c, 0xa6, 0x16, 0xa8, 0xab, 0x85, 0xdf, 0x29, - 0x5e, 0x3d, 0xb3, 0xce, 0xa4, 0xf0, 0x73, 0xa5, 0x74, 0x01, 0x10, 0x17, 0xf5, 0x8a, 0xb2, 0xed, - 0x36, 0x5b, 0x98, 0xfc, 0xde, 0x31, 0xc4, 0xd9, 0x36, 0x5f, 0xab, 0x01, 0x8e, 0x60, 0xf4, 0xc6, - 0xdd, 0xf1, 0xac, 0x75, 0xdb, 0x0a, 0x56, 0xec, 0xb6, 0x1d, 0xb2, 0xdb, 0xc1, 0x00, 0x9f, 0x8e, - 0x75, 0xcf, 0x5a, 0x6f, 0xd4, 0x79, 0x39, 0x4e, 0xd4, 0x42, 0xf3, 0x00, 0xdb, 0x86, 0xed, 0x34, - 0x1f, 0x1a, 0x9d, 0x07, 0x91, 0x2b, 0x34, 0xbb, 0xbd, 0x2e, 0xcb, 0x52, 0xac, 0xd4, 0xa0, 0xdf, - 0x8f, 0xf2, 0x1d, 0x4c, 0x78, 0x2c, 0x2e, 0x26, 0x50, 0x9f, 0xc5, 0xf7, 0x8b, 0x10, 0xf2, 0x0e, - 0xdf, 0x57, 0x48, 0xe0, 0x04, 0x41, 0xf4, 0x7d, 0x1a, 0x4c, 0x05, 0x07, 0x41, 0x48, 0xda, 0xb2, - 0x0f, 0x97, 0xce, 0xba, 0x0f, 0x4c, 0x8b, 0xda, 0x4c, 0x10, 0xc1, 0x29, 0xa2, 0xcc, 0xa9, 0xbc, - 0x6d, 0xb4, 0xc8, 0xdd, 0xda, 0x3d, 0xbb, 0xb5, 0x23, 0x9d, 0x9c, 0xd7, 0x89, 0x6f, 0x12, 0x37, - 0x64, 0xa2, 0xf8, 0x90, 0x70, 0x2a, 0x2f, 0xae, 0x86, 0x7b, 0xe1, 0x40, 0xaf, 0xc3, 0x9c, 0x00, - 0xaf, 0x78, 0x0f, 0x33, 0x14, 0x66, 0x18, 0x05, 0x66, 0x76, 0xd4, 0x28, 0xac, 0x85, 0x7b, 0x60, - 0x40, 0x0d, 0xb8, 0x1c, 0x10, 0x9f, 0x3d, 0x82, 0xf0, 0x48, 0x35, 0xeb, 0x5d, 0xc7, 0x09, 0x66, - 0x51, 0x6c, 0x71, 0xdc, 0xcc, 0x82, 0x71, 0x5e, 0x1b, 0xf4, 0xa2, 0x74, 0x6a, 0x3a, 0xa0, 0x05, - 0x1f, 0x5b, 0x6f, 0xce, 0x5e, 0x66, 0xfd, 0xbb, 0xac, 0xf8, 0x2a, 0x45, 0x20, 0x9c, 0xae, 0x4b, - 0x4f, 0xf3, 0xa8, 0x68, 0xb1, 0xeb, 0x07, 0xe1, 0xec, 0x15, 0xd6, 0x98, 0x9d, 0xe6, 0x58, 0x05, - 0xe0, 0x64, 0x3d, 0x74, 0x07, 0xa6, 0x02, 0x62, 0x9a, 0x5e, 0xbb, 0x23, 0x6e, 0x56, 0xb3, 0x57, - 0x59, 0xef, 0xf9, 0x17, 0x4c, 0x40, 0x70, 0xaa, 0x26, 0x3a, 0x80, 0xcb, 0x32, 0x32, 0xd5, 0x8a, - 0xd7, 0x5a, 0x35, 0xf6, 0x99, 0x70, 0x7c, 0xed, 0x78, 0xfe, 0x38, 0x1f, 0xbd, 0x6a, 0xcf, 0x7f, - 0xac, 0x6b, 0xb8, 0xa1, 0x1d, 0x1e, 0xf0, 0xe9, 0xaa, 0x65, 0xd1, 0xe1, 0x3c, 0x1a, 0x68, 0x05, - 0xae, 0xa4, 0x8a, 0x97, 0x6d, 0x87, 0x04, 0xb3, 0x8f, 0xb1, 0x61, 0x33, 0xf5, 0x48, 0x2d, 0x07, - 0x8e, 0x73, 0x5b, 0xa1, 0x07, 0x70, 0xb5, 0xe3, 0x7b, 0x21, 0x31, 0xc3, 0xfb, 0x54, 0x20, 0x70, - 0xc4, 0x00, 0x83, 0xd9, 0x59, 0x36, 0x17, 0xec, 0x01, 0x68, 0x3d, 0xaf, 0x02, 0xce, 0x6f, 0x87, - 0x3e, 0xaf, 0xc1, 0xcd, 0x20, 0xf4, 0x89, 0xd1, 0xb6, 0xdd, 0x56, 0xcd, 0x73, 0x5d, 0xc2, 0x18, - 0x53, 0xc3, 0x8a, 0x0d, 0xf6, 0xaf, 0x97, 0x3a, 0x45, 0xf4, 0xa3, 0xc3, 0xea, 0xcd, 0x66, 0x4f, - 0xcc, 0xf8, 0x18, 0xca, 0xe8, 0x6d, 0x80, 0x36, 0x69, 0x7b, 0xfe, 0x01, 0xe5, 0x48, 0xb3, 0x73, - 0xe5, 0xed, 0x97, 0x56, 0x25, 0x16, 0xbe, 0xfd, 0x13, 0x4f, 0x57, 0x31, 0x10, 0x2b, 0xe4, 0xf4, - 0xc3, 0x0a, 0x5c, 0xcd, 0x65, 0xf5, 0x74, 0x07, 0xf0, 0x7a, 0x0b, 0x51, 0x94, 0x6a, 0xf1, 0xda, - 0xc3, 0x76, 0xc0, 0x6a, 0x12, 0x84, 0xd3, 0x75, 0xa9, 0x20, 0xc6, 0x76, 0xea, 0x72, 0x33, 0x6e, - 0x5f, 0x89, 0x05, 0xb1, 0x46, 0x0a, 0x86, 0x33, 0xb5, 0x51, 0x0d, 0x66, 0x44, 0x59, 0x83, 0xde, - 0x65, 0x82, 0x65, 0x9f, 0x44, 0x22, 0x2e, 0xbd, 0x15, 0xcc, 0x34, 0xd2, 0x40, 0x9c, 0xad, 0x4f, - 0x47, 0x41, 0x7f, 0xa8, 0xbd, 0x18, 0x8c, 0x47, 0xb1, 0x96, 0x04, 0xe1, 0x74, 0xdd, 0xe8, 0xb2, - 0x99, 0xe8, 0xc2, 0x50, 0x3c, 0x8a, 0xb5, 0x14, 0x0c, 0x67, 0x6a, 0xeb, 0xff, 0x69, 0x10, 0x9e, - 0x3c, 0x81, 0x78, 0x84, 0xda, 0xf9, 0xd3, 0x7d, 0xfa, 0x8d, 0x7b, 0xb2, 0xcf, 0xd3, 0x29, 0xf8, - 0x3c, 0xa7, 0xa7, 0x77, 0xd2, 0xcf, 0x19, 0x14, 0x7d, 0xce, 0xd3, 0x93, 0x3c, 0xf9, 0xe7, 0x6f, - 0xe7, 0x7f, 0xfe, 0x92, 0xb3, 0x7a, 0xec, 0x72, 0xe9, 0x14, 0x2c, 0x97, 0x92, 0xb3, 0x7a, 0x82, - 0xe5, 0xf5, 0x87, 0x83, 0xf0, 0xd4, 0x49, 0x44, 0xb5, 0x92, 0xeb, 0x2b, 0x87, 0xe5, 0x9d, 0xeb, - 0xfa, 0x2a, 0xf2, 0x89, 0x3a, 0xc7, 0xf5, 0x95, 0x43, 0xf2, 0xbc, 0xd7, 0x57, 0xd1, 0xac, 0x9e, - 0xd7, 0xfa, 0x2a, 0x9a, 0xd5, 0x13, 0xac, 0xaf, 0x3f, 0x4f, 0x9f, 0x0f, 0x52, 0x5e, 0x6c, 0xc0, - 0x80, 0xd9, 0xe9, 0x96, 0x64, 0x52, 0xcc, 0x36, 0xa8, 0xb6, 0xbe, 0x89, 0x29, 0x0e, 0x84, 0x61, - 0x98, 0xaf, 0x9f, 0x92, 0x2c, 0x88, 0x79, 0xd7, 0xf0, 0x25, 0x89, 0x05, 0x26, 0x3a, 0x55, 0xa4, - 0xb3, 0x43, 0xda, 0xc4, 0x37, 0x9c, 0x66, 0xe8, 0xf9, 0x46, 0xab, 0x2c, 0xb7, 0xe1, 0x8a, 0xe3, - 0x14, 0x2e, 0x9c, 0xc1, 0x4e, 0x27, 0xa4, 0x63, 0x5b, 0x25, 0xf9, 0x0b, 0x9b, 0x90, 0xf5, 0x46, - 0x1d, 0x53, 0x1c, 0xfa, 0x3f, 0x1a, 0x03, 0x25, 0xf2, 0x23, 0xfa, 0x36, 0xb8, 0x6e, 0x38, 0x8e, - 0xf7, 0x70, 0xdd, 0xb7, 0xf7, 0x6c, 0x87, 0xb4, 0x88, 0x25, 0x85, 0xa9, 0x40, 0x58, 0x90, 0x31, - 0x8d, 0xc0, 0x42, 0x51, 0x25, 0x5c, 0xdc, 0x1e, 0x7d, 0x5a, 0x83, 0x19, 0x33, 0x1d, 0xbc, 0xa9, - 0x1f, 0x1b, 0x93, 0x4c, 0x24, 0x28, 0xbe, 0x9f, 0x32, 0xc5, 0x38, 0x4b, 0x16, 0x7d, 0x8f, 0xc6, - 0xd5, 0x60, 0xf2, 0x85, 0x44, 0x7c, 0xb3, 0xbb, 0x67, 0xf4, 0x96, 0x18, 0xeb, 0xd3, 0xe2, 0x67, - 0xab, 0x24, 0x41, 0xf4, 0x05, 0x0d, 0xae, 0xee, 0xe6, 0x69, 0xef, 0xc5, 0x97, 0x7d, 0x50, 0xb6, - 0x2b, 0x05, 0xcf, 0x01, 0x5c, 0x9c, 0xcd, 0xad, 0x80, 0xf3, 0x3b, 0x22, 0x67, 0x49, 0x2a, 0x34, - 0x05, 0x13, 0x28, 0x3d, 0x4b, 0x29, 0xcd, 0x68, 0x3c, 0x4b, 0x12, 0x80, 0x93, 0x04, 0x51, 0x07, - 0xc6, 0x76, 0x23, 0x2d, 0xb2, 0xd0, 0x1c, 0xd5, 0xca, 0x52, 0x57, 0x54, 0xd1, 0xdc, 0x86, 0x46, - 0x16, 0xe2, 0x98, 0x08, 0xda, 0x81, 0x91, 0x5d, 0xce, 0x88, 0x84, 0xc6, 0x67, 0xa1, 0xef, 0xfb, - 0x31, 0x57, 0x3c, 0x88, 0x22, 0x1c, 0xa1, 0x57, 0x0d, 0x68, 0x47, 0x8f, 0xf1, 0xeb, 0xf8, 0xbc, - 0x06, 0x57, 0xf7, 0x88, 0x1f, 0xda, 0x66, 0xfa, 0xed, 0x64, 0xac, 0xfc, 0x1d, 0xfe, 0xe5, 0x3c, - 0x84, 0x7c, 0x99, 0xe4, 0x82, 0x70, 0x7e, 0x17, 0xe8, 0x8d, 0x9e, 0xab, 0xc0, 0x9b, 0xa1, 0x11, - 0xda, 0xe6, 0x86, 0xb7, 0x4b, 0xdc, 0x38, 0x41, 0x11, 0xd3, 0xbd, 0x88, 0x30, 0x71, 0x4b, 0xc5, - 0xd5, 0x70, 0x2f, 0x1c, 0xfa, 0x9f, 0x68, 0x90, 0x51, 0xe4, 0xa2, 0x1f, 0xd6, 0x60, 0x62, 0x9b, - 0x18, 0x61, 0xd7, 0x27, 0x77, 0x8d, 0x50, 0x7a, 0xab, 0xbf, 0x7c, 0x16, 0xfa, 0xe3, 0xf9, 0x65, - 0x05, 0x31, 0xb7, 0x05, 0x90, 0x51, 0x63, 0x55, 0x10, 0x4e, 0xf4, 0x60, 0xee, 0x25, 0x98, 0xc9, - 0x34, 0x3c, 0xd5, 0x9b, 0xde, 0xbf, 0xd1, 0x20, 0x2f, 0xa7, 0x16, 0x7a, 0x1d, 0x86, 0x0c, 0xcb, - 0x92, 0x49, 0x32, 0x5e, 0x28, 0x67, 0x96, 0x62, 0xa9, 0x41, 0x01, 0xd8, 0x4f, 0xcc, 0xd1, 0xa2, - 0x65, 0x40, 0x46, 0xe2, 0x71, 0x7b, 0x35, 0x76, 0x75, 0x65, 0x6f, 0x4f, 0x0b, 0x19, 0x28, 0xce, - 0x69, 0xa1, 0xff, 0x80, 0x06, 0x28, 0x1b, 0x67, 0x18, 0xf9, 0x30, 0x2a, 0x96, 0x72, 0xf4, 0x95, - 0xea, 0x25, 0xbd, 0x49, 0x12, 0xae, 0x51, 0xb1, 0x8d, 0x93, 0x28, 0x08, 0xb0, 0xa4, 0xa3, 0xff, - 0x85, 0x06, 0x71, 0x20, 0x7d, 0xf4, 0x01, 0x18, 0xb7, 0x48, 0x60, 0xfa, 0x76, 0x27, 0x8c, 0x1d, - 0xa9, 0xa4, 0x43, 0x46, 0x3d, 0x06, 0x61, 0xb5, 0x1e, 0xd2, 0x61, 0x38, 0x34, 0x82, 0xdd, 0x46, - 0x5d, 0x5c, 0x2a, 0x99, 0x08, 0xb0, 0xc1, 0x4a, 0xb0, 0x80, 0xc4, 0xe1, 0xc6, 0x06, 0x4e, 0x10, - 0x6e, 0x0c, 0x6d, 0x9f, 0x41, 0x6c, 0x35, 0x74, 0x7c, 0x5c, 0x35, 0xfd, 0x67, 0x2a, 0x70, 0x89, - 0x56, 0x59, 0x35, 0x6c, 0x37, 0x24, 0x2e, 0x73, 0x1b, 0x28, 0x39, 0x09, 0x2d, 0x98, 0x0c, 0x13, - 0x7e, 0x75, 0xa7, 0x77, 0x2a, 0x93, 0x86, 0x34, 0x49, 0x6f, 0xba, 0x24, 0x5e, 0xf4, 0x42, 0xe4, - 0xb7, 0xc1, 0xaf, 0xdf, 0x4f, 0x46, 0x4b, 0x95, 0x39, 0x63, 0x3c, 0x12, 0x4e, 0x8a, 0x32, 0xfb, - 0x42, 0xc2, 0x45, 0xe3, 0x83, 0x30, 0x29, 0xec, 0xa7, 0x79, 0xdc, 0x38, 0x71, 0xfd, 0x66, 0x27, - 0xcc, 0xb2, 0x0a, 0xc0, 0xc9, 0x7a, 0xfa, 0xef, 0x57, 0x20, 0x99, 0xe3, 0xa1, 0xec, 0x2c, 0x65, - 0x83, 0xe6, 0x55, 0xce, 0x2d, 0x68, 0xde, 0xfb, 0x58, 0x82, 0x24, 0x9e, 0x49, 0x8f, 0x3f, 0x4a, - 0xab, 0x69, 0x8d, 0x78, 0x1e, 0x3c, 0x59, 0x23, 0x9e, 0xd6, 0xc1, 0x53, 0x4f, 0xeb, 0x07, 0x84, - 0x61, 0xe5, 0x50, 0x22, 0x74, 0x61, 0x64, 0x58, 0x39, 0x93, 0x68, 0xa8, 0x78, 0x99, 0xfc, 0xa6, - 0x06, 0x23, 0x22, 0xb8, 0xf6, 0x09, 0xbc, 0x98, 0xb6, 0x61, 0x88, 0x5d, 0x79, 0xfa, 0x91, 0x06, - 0x9b, 0x3b, 0x9e, 0x17, 0x26, 0x42, 0x8c, 0x33, 0xb7, 0x01, 0xf6, 0x2f, 0xe6, 0xe8, 0x99, 0x6d, - 0x9d, 0x6f, 0xee, 0xd8, 0x21, 0x31, 0xc3, 0x28, 0x70, 0x71, 0x64, 0x5b, 0xa7, 0x94, 0xe3, 0x44, - 0x2d, 0xfd, 0xc7, 0x07, 0xe1, 0x96, 0x40, 0x9c, 0x11, 0x91, 0x24, 0x83, 0x3b, 0x80, 0xcb, 0xe2, - 0xdb, 0xd6, 0x7d, 0xc3, 0x96, 0x8f, 0xfd, 0xe5, 0xae, 0xbe, 0x22, 0x5b, 0x64, 0x06, 0x1d, 0xce, - 0xa3, 0xc1, 0xc3, 0x63, 0xb2, 0xe2, 0x7b, 0xc4, 0x70, 0xc2, 0x9d, 0x88, 0x76, 0xa5, 0x9f, 0xf0, - 0x98, 0x59, 0x7c, 0x38, 0x97, 0x0a, 0x33, 0x36, 0x10, 0x80, 0x9a, 0x4f, 0x0c, 0xd5, 0xd2, 0xa1, - 0x0f, 0xcb, 0xff, 0xd5, 0x5c, 0x8c, 0xb8, 0x80, 0x12, 0xd3, 0x21, 0x1a, 0xfb, 0x4c, 0x25, 0x81, - 0x49, 0xe8, 0xdb, 0x2c, 0x54, 0xbc, 0xd4, 0xa2, 0xaf, 0x26, 0x41, 0x38, 0x5d, 0x17, 0xdd, 0x81, - 0x29, 0x66, 0xbc, 0x11, 0x87, 0xc9, 0x1a, 0x8a, 0x23, 0x31, 0xac, 0x25, 0x20, 0x38, 0x55, 0x53, - 0xff, 0x44, 0x05, 0x26, 0xd4, 0x65, 0x77, 0x02, 0x97, 0xa6, 0xae, 0x72, 0x18, 0xf6, 0xe1, 0x6e, - 0xa3, 0x52, 0x3d, 0xc1, 0x79, 0x88, 0x5e, 0x85, 0xa9, 0x2e, 0xe3, 0x20, 0x51, 0xa8, 0x0f, 0xb1, - 0xfe, 0xbf, 0x81, 0x8e, 0x72, 0x33, 0x01, 0x79, 0x74, 0x58, 0x9d, 0x53, 0xd1, 0x27, 0xa1, 0x38, - 0x85, 0x47, 0xff, 0xcc, 0x00, 0x5c, 0xce, 0xe9, 0x0d, 0x7b, 0xe4, 0x27, 0xa9, 0x23, 0xbb, 0x9f, - 0x47, 0xfe, 0xcc, 0xf1, 0x2f, 0x1f, 0xf9, 0xd3, 0x10, 0x9c, 0xa1, 0x8b, 0x5e, 0x86, 0x01, 0xd3, - 0xb7, 0xc5, 0x84, 0x7f, 0xb0, 0xd4, 0x85, 0x13, 0x37, 0x16, 0xc7, 0x05, 0xc5, 0x81, 0x1a, 0x6e, - 0x60, 0x8a, 0x90, 0x1e, 0x3c, 0x2a, 0xbb, 0x88, 0xa4, 0x00, 0x76, 0xf0, 0xa8, 0x5c, 0x25, 0xc0, - 0xc9, 0x7a, 0xe8, 0x55, 0x98, 0x15, 0x37, 0x81, 0xc8, 0x3d, 0xda, 0x73, 0x83, 0x90, 0xee, 0xec, - 0x50, 0x30, 0xea, 0xc7, 0x8f, 0x0e, 0xab, 0xb3, 0xf7, 0x0b, 0xea, 0xe0, 0xc2, 0xd6, 0xfa, 0x9f, - 0x0d, 0xc0, 0xb8, 0x92, 0xda, 0x00, 0xad, 0xf6, 0xa3, 0x42, 0x89, 0x47, 0x1c, 0xa9, 0x51, 0x56, - 0x61, 0xa0, 0xd5, 0xe9, 0x96, 0xd4, 0xa1, 0x48, 0x74, 0x77, 0x29, 0xba, 0x56, 0xa7, 0x8b, 0x5e, - 0x96, 0x5a, 0x99, 0x72, 0x7a, 0x13, 0xe9, 0xcc, 0x92, 0xd2, 0xcc, 0x44, 0x1b, 0x71, 0xb0, 0x70, - 0x23, 0xb6, 0x61, 0x24, 0x10, 0x2a, 0x9b, 0xa1, 0xf2, 0x11, 0x6d, 0x94, 0x99, 0x16, 0x2a, 0x1a, - 0x7e, 0xdf, 0x8b, 0x34, 0x38, 0x11, 0x0d, 0x2a, 0x4b, 0x76, 0x99, 0x8b, 0x2c, 0xbb, 0xc8, 0x8e, - 0x72, 0x59, 0x72, 0x93, 0x95, 0x60, 0x01, 0xc9, 0x1c, 0x51, 0x23, 0x27, 0x3a, 0xa2, 0xfe, 0x5e, - 0x05, 0x50, 0xb6, 0x1b, 0xe8, 0x49, 0x18, 0x62, 0x2e, 0xf6, 0x82, 0x17, 0x49, 0xc9, 0x9f, 0x39, - 0x59, 0x63, 0x0e, 0x43, 0x4d, 0x11, 0x9f, 0xa3, 0xdc, 0xe7, 0x64, 0x56, 0x32, 0x82, 0x9e, 0x12, - 0xcc, 0xe3, 0x56, 0xc2, 0x1f, 0x23, 0xef, 0xcc, 0xdf, 0x84, 0x91, 0xb6, 0xed, 0xb2, 0x87, 0xc3, - 0x72, 0x9a, 0x2c, 0xfe, 0x98, 0xcf, 0x51, 0xe0, 0x08, 0x97, 0xfe, 0x87, 0x15, 0xba, 0xf4, 0x63, - 0x89, 0xf7, 0x00, 0xc0, 0xe8, 0x86, 0x1e, 0x67, 0x60, 0x62, 0x07, 0x34, 0xca, 0x7d, 0x65, 0x89, - 0x74, 0x41, 0x22, 0xe4, 0x4f, 0x5e, 0xf1, 0x6f, 0xac, 0x10, 0xa3, 0xa4, 0x43, 0xbb, 0x4d, 0x5e, - 0xb1, 0x5d, 0xcb, 0x7b, 0x28, 0xa6, 0xb7, 0x5f, 0xd2, 0x1b, 0x12, 0x21, 0x27, 0x1d, 0xff, 0xc6, - 0x0a, 0x31, 0xca, 0x5a, 0xd8, 0xc5, 0xd9, 0x65, 0xb9, 0x66, 0x44, 0xdf, 0x3c, 0xc7, 0x89, 0x4e, - 0xe5, 0x51, 0xce, 0x5a, 0x6a, 0x05, 0x75, 0x70, 0x61, 0x6b, 0xfd, 0x67, 0x35, 0xb8, 0x9a, 0x3b, - 0x15, 0xe8, 0x2e, 0xcc, 0xc4, 0x86, 0x55, 0x2a, 0xb3, 0x1f, 0x8d, 0x73, 0x1c, 0xdd, 0x4f, 0x57, - 0xc0, 0xd9, 0x36, 0x3c, 0x91, 0x76, 0xe6, 0x30, 0x11, 0x56, 0x59, 0xaa, 0x68, 0xa4, 0x82, 0x71, - 0x5e, 0x1b, 0xfd, 0xdb, 0x12, 0x9d, 0x8d, 0x27, 0x8b, 0xee, 0x8c, 0x2d, 0xd2, 0x92, 0xfe, 0x70, - 0x72, 0x67, 0x2c, 0xd2, 0x42, 0xcc, 0x61, 0xe8, 0x09, 0xd5, 0xcb, 0x54, 0xf2, 0xad, 0xc8, 0xd3, - 0x54, 0xff, 0x0e, 0x78, 0xac, 0xe0, 0x25, 0x14, 0xd5, 0x61, 0x22, 0x78, 0x68, 0x74, 0x16, 0xc9, - 0x8e, 0xb1, 0x67, 0x8b, 0xa8, 0x05, 0xdc, 0x60, 0x6e, 0xa2, 0xa9, 0x94, 0x3f, 0x4a, 0xfd, 0xc6, - 0x89, 0x56, 0x7a, 0x08, 0x20, 0x0c, 0x2b, 0x6d, 0xb7, 0x85, 0xb6, 0x61, 0xd4, 0x10, 0x79, 0x9c, - 0xc5, 0x3a, 0xfe, 0xe6, 0x52, 0x4a, 0x00, 0x81, 0x83, 0x9b, 0x9e, 0x47, 0xbf, 0xb0, 0xc4, 0xad, - 0xff, 0x53, 0x0d, 0xae, 0xe5, 0xfb, 0xa9, 0x9f, 0x40, 0xb4, 0x69, 0xc3, 0xb8, 0x1f, 0x37, 0x13, - 0x8b, 0xfe, 0x9b, 0xd4, 0x48, 0xa7, 0x4a, 0x68, 0x2f, 0x2a, 0xf6, 0xd5, 0x7c, 0x2f, 0x88, 0xbe, - 0x7c, 0x3a, 0xf8, 0xa9, 0xbc, 0x72, 0x29, 0x3d, 0xc1, 0x2a, 0x7e, 0xfd, 0x97, 0x2b, 0x00, 0x6b, - 0x24, 0x7c, 0xe8, 0xf9, 0xbb, 0x74, 0x8a, 0x1e, 0x4f, 0xdc, 0x34, 0x46, 0xbf, 0x7a, 0xb1, 0x12, - 0x1e, 0x87, 0xc1, 0x8e, 0x67, 0x05, 0x82, 0xfd, 0xb1, 0x8e, 0x30, 0x9b, 0x23, 0x56, 0x8a, 0xaa, - 0x30, 0xc4, 0x1e, 0x3e, 0xc4, 0xc9, 0xc4, 0xee, 0x29, 0x54, 0xca, 0x0c, 0x30, 0x2f, 0xe7, 0xd9, - 0xf9, 0x98, 0x3b, 0x47, 0x20, 0x2e, 0x5e, 0x22, 0x3b, 0x1f, 0x2f, 0xc3, 0x12, 0x8a, 0xee, 0x00, - 0xd8, 0x9d, 0x65, 0xa3, 0x6d, 0x3b, 0x54, 0xe6, 0x1d, 0x96, 0xc9, 0xa0, 0xa1, 0xb1, 0x1e, 0x95, - 0x3e, 0x3a, 0xac, 0x8e, 0x8a, 0x5f, 0x07, 0x58, 0xa9, 0xad, 0xff, 0xe5, 0x00, 0x24, 0x12, 0xa7, - 0xc7, 0x3a, 0x26, 0xed, 0x7c, 0x74, 0x4c, 0xaf, 0xc2, 0xac, 0xe3, 0x19, 0xd6, 0xa2, 0xe1, 0xd0, - 0xdd, 0xe8, 0x37, 0xf9, 0x67, 0x34, 0xdc, 0x96, 0xcc, 0x8e, 0xcd, 0xb8, 0xd2, 0x4a, 0x41, 0x1d, - 0x5c, 0xd8, 0x1a, 0x85, 0x32, 0x5d, 0xfb, 0x40, 0x79, 0xcf, 0x47, 0x75, 0x2e, 0xe6, 0x55, 0x27, - 0x20, 0x29, 0x60, 0xa4, 0x32, 0xba, 0x7f, 0x52, 0x83, 0xab, 0x64, 0x9f, 0x3b, 0xc1, 0x6d, 0xf8, - 0xc6, 0xf6, 0xb6, 0x6d, 0x0a, 0x4b, 0x50, 0xfe, 0x61, 0x57, 0x8e, 0x0e, 0xab, 0x57, 0x97, 0xf2, - 0x2a, 0x3c, 0x3a, 0xac, 0xde, 0xce, 0xf5, 0x49, 0x64, 0x9f, 0x35, 0xb7, 0x09, 0xce, 0x27, 0x35, - 0xf7, 0x02, 0x8c, 0x9f, 0xc2, 0x7f, 0x20, 0xe1, 0x79, 0xf8, 0x2b, 0x15, 0x98, 0xa0, 0xeb, 0x6e, - 0xc5, 0x33, 0x0d, 0xa7, 0xbe, 0xd6, 0x44, 0xcf, 0xa4, 0xe3, 0x05, 0x48, 0x85, 0x74, 0x26, 0x66, - 0xc0, 0x0a, 0x5c, 0xd9, 0xf6, 0x7c, 0x93, 0x6c, 0xd4, 0xd6, 0x37, 0x3c, 0xf1, 0xe4, 0x52, 0x5f, - 0x6b, 0x0a, 0x2e, 0xcd, 0x2e, 0x91, 0xcb, 0x39, 0x70, 0x9c, 0xdb, 0x0a, 0x3d, 0x80, 0xab, 0x71, - 0xf9, 0x66, 0x87, 0x1b, 0xb2, 0x50, 0x74, 0x03, 0xb1, 0x21, 0xce, 0x72, 0x5e, 0x05, 0x9c, 0xdf, - 0x0e, 0x19, 0x70, 0x43, 0x84, 0x23, 0x59, 0xf6, 0xfc, 0x87, 0x86, 0x6f, 0x25, 0xd1, 0x0e, 0xc6, - 0x2a, 0xe9, 0x7a, 0x71, 0x35, 0xdc, 0x0b, 0x87, 0xfe, 0x13, 0xc3, 0xa0, 0x78, 0xaa, 0x9d, 0x22, - 0x9f, 0xdb, 0x4f, 0x6b, 0x70, 0xc5, 0x74, 0x6c, 0xe2, 0x86, 0x29, 0xb7, 0x24, 0xce, 0x8e, 0x36, - 0x4b, 0xb9, 0xd0, 0x75, 0x88, 0xdb, 0xa8, 0x0b, 0xbb, 0x9f, 0x5a, 0x0e, 0x72, 0x61, 0x1b, 0x95, - 0x03, 0xc1, 0xb9, 0x9d, 0x61, 0xe3, 0x61, 0xe5, 0x8d, 0xba, 0x1a, 0x47, 0xa1, 0x26, 0xca, 0xb0, - 0x84, 0xa2, 0xe7, 0x60, 0xbc, 0xe5, 0x7b, 0xdd, 0x4e, 0x50, 0x63, 0xe6, 0xbd, 0x7c, 0xed, 0x33, - 0xb9, 0xf0, 0x6e, 0x5c, 0x8c, 0xd5, 0x3a, 0x54, 0xca, 0xe5, 0x3f, 0xd7, 0x7d, 0xb2, 0x6d, 0xef, - 0x0b, 0x26, 0xc7, 0xa4, 0xdc, 0xbb, 0x4a, 0x39, 0x4e, 0xd4, 0x62, 0xae, 0xd0, 0x41, 0xd0, 0x25, - 0xfe, 0x26, 0x5e, 0x11, 0x39, 0x20, 0xb8, 0x2b, 0x74, 0x54, 0x88, 0x63, 0x38, 0xfa, 0x51, 0x0d, - 0xa6, 0x7c, 0xf2, 0x66, 0xd7, 0xf6, 0x89, 0xc5, 0x88, 0x06, 0xc2, 0x5d, 0x10, 0xf7, 0xe7, 0xa2, - 0x38, 0x8f, 0x13, 0x48, 0x39, 0x87, 0x90, 0x6a, 0xbb, 0x24, 0x10, 0xa7, 0x7a, 0x40, 0xa7, 0x2a, - 0xb0, 0x5b, 0xae, 0xed, 0xb6, 0x16, 0x9c, 0x56, 0x30, 0x3b, 0xca, 0x98, 0x1e, 0x17, 0xa1, 0xe3, - 0x62, 0xac, 0xd6, 0xa1, 0xd7, 0xcb, 0x6e, 0x40, 0xf7, 0x7d, 0x9b, 0xf0, 0xf9, 0x1d, 0x8b, 0xf5, - 0x9a, 0x9b, 0x2a, 0x00, 0x27, 0xeb, 0xa1, 0x3b, 0x30, 0x15, 0x15, 0x88, 0x59, 0x06, 0x1e, 0x81, - 0x8f, 0x5d, 0xf7, 0x13, 0x10, 0x9c, 0xaa, 0x39, 0xb7, 0x00, 0x97, 0x73, 0x86, 0x79, 0x2a, 0xe6, - 0xf2, 0x57, 0x1a, 0x5c, 0xe5, 0xc9, 0x68, 0xa3, 0xec, 0x11, 0x51, 0xa8, 0xbd, 0xfc, 0xa8, 0x75, - 0xda, 0xb9, 0x46, 0xad, 0xfb, 0x2a, 0x44, 0xe7, 0xd3, 0xff, 0x71, 0x05, 0xde, 0x7d, 0xec, 0xbe, - 0x44, 0xff, 0x50, 0x83, 0x71, 0xb2, 0x1f, 0xfa, 0x86, 0xf4, 0x81, 0xa0, 0x8b, 0x74, 0xfb, 0x5c, - 0x98, 0xc0, 0xfc, 0x52, 0x4c, 0x88, 0x2f, 0x5c, 0x29, 0x62, 0x29, 0x10, 0xac, 0xf6, 0x87, 0x5e, - 0x5a, 0x79, 0x84, 0x4a, 0xf5, 0x01, 0x44, 0xe4, 0x08, 0x17, 0x90, 0xb9, 0x8f, 0xc0, 0x74, 0x1a, - 0xf3, 0xa9, 0xd6, 0xca, 0x2f, 0x55, 0x60, 0x64, 0xdd, 0xf7, 0xa8, 0xf4, 0x77, 0x01, 0x11, 0x15, - 0x8c, 0x44, 0xd4, 0xf6, 0x52, 0x4e, 0xd2, 0xa2, 0xb3, 0x85, 0x19, 0x23, 0xec, 0x54, 0xc6, 0x88, - 0x85, 0x7e, 0x88, 0xf4, 0x4e, 0x11, 0xf1, 0x3b, 0x1a, 0x8c, 0x8b, 0x9a, 0x17, 0x10, 0x37, 0xe0, - 0x3b, 0x93, 0x71, 0x03, 0x3e, 0xdc, 0xc7, 0xb8, 0x0a, 0x02, 0x06, 0x7c, 0x5e, 0x83, 0x49, 0x51, - 0x63, 0x95, 0xb4, 0xb7, 0x88, 0x8f, 0x96, 0x61, 0x24, 0xe8, 0xb2, 0x0f, 0x29, 0x06, 0x74, 0x43, - 0xbd, 0x4f, 0xf8, 0x5b, 0x86, 0xc9, 0x12, 0xdd, 0xf3, 0x2a, 0x4a, 0x1e, 0x06, 0x5e, 0x80, 0xa3, - 0xc6, 0xf4, 0xf6, 0xe2, 0x7b, 0x4e, 0x26, 0x92, 0x14, 0xf6, 0x1c, 0x82, 0x19, 0x84, 0x0a, 0xe6, - 0xf4, 0x6f, 0xa4, 0xc2, 0x63, 0x82, 0x39, 0x05, 0x07, 0x98, 0x97, 0xeb, 0xdf, 0x37, 0x28, 0x27, - 0x9b, 0xc5, 0x4a, 0xbf, 0x07, 0x63, 0xa6, 0x4f, 0x8c, 0x90, 0x58, 0x8b, 0x07, 0x27, 0xe9, 0x1c, - 0x3b, 0xae, 0x6a, 0x51, 0x0b, 0x1c, 0x37, 0xa6, 0x27, 0x83, 0xfa, 0xe6, 0x54, 0x89, 0x0f, 0xd1, - 0xc2, 0xf7, 0xa6, 0x6f, 0x86, 0x21, 0xef, 0xa1, 0x2b, 0x4d, 0x57, 0x7a, 0x12, 0x66, 0x43, 0x79, - 0x40, 0x6b, 0x63, 0xde, 0x48, 0x8d, 0xa4, 0x36, 0xd8, 0x23, 0x92, 0x9a, 0x03, 0x23, 0x6d, 0xf6, - 0x19, 0xfa, 0x0a, 0xcb, 0x9f, 0xf8, 0xa0, 0x6a, 0xe2, 0x26, 0x86, 0x19, 0x47, 0x24, 0xe8, 0x09, - 0x4f, 0x4f, 0xa1, 0xa0, 0x63, 0x98, 0x44, 0x3d, 0xe1, 0xd7, 0xa2, 0x42, 0x1c, 0xc3, 0xd1, 0x41, - 0x32, 0x44, 0xdf, 0x48, 0x79, 0x0d, 0x9e, 0xe8, 0x9e, 0x12, 0x95, 0x8f, 0x4f, 0x7d, 0x61, 0x98, - 0xbe, 0x1f, 0x1c, 0x94, 0x8b, 0x54, 0x64, 0xd9, 0xc8, 0x4f, 0xce, 0xae, 0x95, 0x4a, 0xce, 0xfe, - 0x8d, 0x51, 0x2c, 0xda, 0x4a, 0x22, 0xc9, 0x98, 0x8c, 0x45, 0x3b, 0x21, 0x48, 0x27, 0xe2, 0xcf, - 0x76, 0xe1, 0x72, 0x10, 0x1a, 0x0e, 0x69, 0xda, 0x42, 0xd3, 0x11, 0x84, 0x46, 0xbb, 0x53, 0x22, - 0x18, 0x2c, 0xf7, 0x5f, 0xc8, 0xa2, 0xc2, 0x79, 0xf8, 0xd1, 0xf7, 0x6a, 0x30, 0xcb, 0xca, 0x17, - 0xba, 0xa1, 0xc7, 0xa3, 0x96, 0xc7, 0xc4, 0x4f, 0xff, 0xb0, 0xcd, 0x2e, 0x80, 0xcd, 0x02, 0x7c, - 0xb8, 0x90, 0x12, 0x7a, 0x1b, 0xae, 0xd2, 0x13, 0x78, 0xc1, 0x0c, 0xed, 0x3d, 0x3b, 0x3c, 0x88, - 0xbb, 0x70, 0xfa, 0x08, 0xb0, 0xec, 0xb2, 0xb1, 0x92, 0x87, 0x0c, 0xe7, 0xd3, 0xd0, 0xff, 0x5c, - 0x03, 0x94, 0x5d, 0x42, 0xc8, 0x81, 0x51, 0x2b, 0x72, 0x28, 0xd0, 0xce, 0x24, 0x7e, 0xa4, 0xe4, - 0xcc, 0xd2, 0x0f, 0x41, 0x52, 0x40, 0x1e, 0x8c, 0x3d, 0xdc, 0xb1, 0x43, 0xe2, 0xd8, 0x41, 0x78, - 0x46, 0xe1, 0x2a, 0x65, 0xec, 0xb6, 0x57, 0x22, 0xc4, 0x38, 0xa6, 0xa1, 0xff, 0xd0, 0x20, 0x8c, - 0xca, 0xf0, 0xdb, 0xc7, 0xbf, 0xf1, 0x76, 0x01, 0x99, 0x4a, 0x0a, 0xb3, 0x7e, 0x34, 0x30, 0x4c, - 0x08, 0xab, 0x65, 0x90, 0xe1, 0x1c, 0x02, 0xe8, 0x6d, 0xb8, 0x62, 0xbb, 0xdb, 0xbe, 0x11, 0x84, - 0x7e, 0x97, 0xe9, 0xca, 0xfb, 0xc9, 0x04, 0xc6, 0xee, 0x50, 0x8d, 0x1c, 0x74, 0x38, 0x97, 0x08, - 0x22, 0x30, 0xc2, 0xb3, 0x0c, 0x44, 0x91, 0x04, 0x4b, 0x25, 0x76, 0xe6, 0xd9, 0x0b, 0x62, 0xae, - 0xc9, 0x7f, 0x07, 0x38, 0xc2, 0xcd, 0xa3, 0x7c, 0xf0, 0xff, 0xa3, 0xf7, 0x68, 0xb1, 0xee, 0x6b, - 0xe5, 0xe9, 0xc5, 0x39, 0xc2, 0x79, 0x94, 0x8f, 0x64, 0x21, 0x4e, 0x13, 0xd4, 0x7f, 0x4b, 0x83, - 0x21, 0xee, 0x1a, 0x7b, 0xfe, 0x12, 0xdc, 0x77, 0x24, 0x24, 0xb8, 0x52, 0xc9, 0x8c, 0x58, 0x57, - 0x0b, 0xd3, 0xec, 0xfc, 0xa6, 0x06, 0x63, 0xac, 0xc6, 0x05, 0x88, 0x54, 0xaf, 0x27, 0x45, 0xaa, - 0x17, 0x4a, 0x8f, 0xa6, 0x40, 0xa0, 0xfa, 0xad, 0x01, 0x31, 0x16, 0x26, 0xb1, 0x34, 0xe0, 0xb2, - 0xb0, 0x86, 0x5d, 0xb1, 0xb7, 0x09, 0x5d, 0xe2, 0x75, 0xe3, 0x80, 0x3f, 0x10, 0x0d, 0x09, 0x5f, - 0xac, 0x2c, 0x18, 0xe7, 0xb5, 0x41, 0xbf, 0xa2, 0x51, 0xd9, 0x20, 0xf4, 0x6d, 0xb3, 0xaf, 0xdc, - 0x35, 0xb2, 0x6f, 0xf3, 0xab, 0x1c, 0x19, 0xbf, 0x99, 0x6c, 0xc6, 0x42, 0x02, 0x2b, 0x7d, 0x74, - 0x58, 0xad, 0xe6, 0xa8, 0xcc, 0xe2, 0x3c, 0x16, 0x41, 0xf8, 0xc9, 0x3f, 0xea, 0x59, 0x85, 0xa9, - 0xa9, 0xa3, 0x1e, 0xa3, 0x7b, 0x30, 0x14, 0x98, 0x5e, 0x87, 0x9c, 0x26, 0x1b, 0x97, 0x9c, 0xe0, - 0x26, 0x6d, 0x89, 0x39, 0x82, 0xb9, 0x37, 0x60, 0x42, 0xed, 0x79, 0xce, 0xcd, 0xa7, 0xae, 0xde, - 0x7c, 0x4e, 0xfd, 0xd2, 0xa5, 0xde, 0x94, 0x7e, 0xb5, 0x02, 0xc3, 0x3c, 0xb1, 0xfb, 0x09, 0x94, - 0xf1, 0x76, 0x94, 0x30, 0xa0, 0x52, 0xde, 0xe2, 0x4e, 0x0d, 0x8e, 0xf9, 0x9a, 0xe7, 0x2a, 0x73, - 0xa0, 0xe6, 0x0c, 0x40, 0xae, 0x0c, 0x99, 0x3a, 0x50, 0x3e, 0x63, 0x10, 0x1f, 0xd8, 0x79, 0x07, - 0x49, 0xfd, 0x5d, 0x0d, 0x26, 0x12, 0x31, 0x68, 0xdb, 0x30, 0xe0, 0xcb, 0x5c, 0x72, 0x65, 0xdf, - 0x2a, 0x22, 0x9b, 0xaa, 0x1b, 0x3d, 0x2a, 0x61, 0x4a, 0x47, 0x86, 0xab, 0xad, 0x9c, 0x51, 0xb8, - 0x5a, 0xfd, 0xb3, 0x1a, 0x5c, 0x8b, 0x06, 0x94, 0x0c, 0xc6, 0x84, 0x9e, 0x86, 0x51, 0xa3, 0x63, - 0x33, 0x95, 0x9a, 0xaa, 0x94, 0x5c, 0x58, 0x6f, 0xb0, 0x32, 0x2c, 0xa1, 0xe8, 0x7d, 0x30, 0x1a, - 0x2d, 0x3c, 0x21, 0x76, 0x4a, 0x9e, 0x25, 0x5f, 0x5f, 0x64, 0x0d, 0xf4, 0x1e, 0x25, 0xa7, 0xc3, - 0x50, 0x2c, 0x27, 0x48, 0xc2, 0xfc, 0x15, 0x58, 0xff, 0x26, 0x18, 0x6b, 0x36, 0xef, 0x2d, 0x98, - 0x26, 0x09, 0x82, 0x53, 0x28, 0x97, 0xf5, 0x4f, 0x0d, 0xc0, 0xa4, 0x88, 0x2a, 0x67, 0xbb, 0x96, - 0xed, 0xb6, 0x2e, 0xe0, 0x4c, 0xd9, 0x80, 0x31, 0xae, 0xcd, 0x38, 0x26, 0xef, 0x5f, 0x33, 0xaa, - 0x94, 0x8e, 0xdd, 0x2c, 0x01, 0x38, 0x46, 0x84, 0xee, 0xc3, 0xf0, 0x9b, 0x94, 0xbf, 0x45, 0xfb, - 0xe2, 0x44, 0x6c, 0x46, 0x2e, 0x7a, 0xc6, 0x1a, 0x03, 0x2c, 0x50, 0xa0, 0x80, 0x19, 0xfd, 0x31, - 0x81, 0xab, 0x9f, 0x68, 0x11, 0x89, 0x99, 0x95, 0x19, 0x5d, 0x26, 0x84, 0xed, 0x20, 0xfb, 0x85, - 0x25, 0x21, 0x16, 0x78, 0x3e, 0xd1, 0xe2, 0x1d, 0x12, 0x78, 0x3e, 0xd1, 0xe7, 0x82, 0xa3, 0xf1, - 0x05, 0xb8, 0x9a, 0x3b, 0x19, 0xc7, 0x8b, 0xb3, 0xfa, 0xcf, 0x57, 0x60, 0xb0, 0x49, 0x88, 0x75, - 0x01, 0x2b, 0xf3, 0xf5, 0x84, 0xb4, 0xf3, 0xcd, 0xa5, 0x43, 0xdf, 0x17, 0x29, 0xab, 0xb6, 0x53, - 0xca, 0xaa, 0x8f, 0x94, 0xa6, 0xd0, 0x5b, 0x53, 0xf5, 0x93, 0x15, 0x00, 0x5a, 0x6d, 0xd1, 0x30, - 0x77, 0x39, 0xc7, 0x91, 0xab, 0x59, 0x4b, 0x72, 0x9c, 0xec, 0x32, 0xbc, 0xc8, 0xc7, 0x5b, 0x1d, - 0x86, 0x7d, 0x76, 0x12, 0x89, 0x77, 0x0f, 0xe0, 0xc9, 0xa8, 0x69, 0x09, 0x16, 0x90, 0x24, 0xb7, - 0x18, 0x3c, 0x23, 0x6e, 0xa1, 0xef, 0x03, 0xcb, 0x1e, 0x5a, 0x5f, 0x6b, 0xa2, 0xb6, 0x32, 0x3b, - 0x95, 0xf2, 0xb2, 0xbc, 0x40, 0x77, 0xec, 0x2e, 0xff, 0x94, 0x06, 0x97, 0x52, 0x75, 0x4f, 0x70, - 0xa7, 0x3b, 0x17, 0x9e, 0xa9, 0xff, 0x86, 0x06, 0xa3, 0xb4, 0x2f, 0x17, 0xc0, 0x68, 0xfe, 0x76, - 0x92, 0xd1, 0x7c, 0xa8, 0xec, 0x14, 0x17, 0xf0, 0x97, 0x3f, 0xad, 0x00, 0xcb, 0x31, 0x21, 0x4c, - 0x14, 0x94, 0x97, 0x7f, 0xad, 0xe0, 0xe5, 0xff, 0x96, 0x30, 0x1c, 0x48, 0xe9, 0x28, 0x15, 0xe3, - 0x81, 0xf7, 0x29, 0xb6, 0x01, 0x03, 0xc9, 0x6d, 0x93, 0x63, 0x1f, 0xf0, 0x16, 0x4c, 0x06, 0x3b, - 0x9e, 0x17, 0xca, 0xc8, 0x06, 0x83, 0xe5, 0xf5, 0xd1, 0xcc, 0xc2, 0x3a, 0x1a, 0x0a, 0x7f, 0x80, - 0x6a, 0xaa, 0xb8, 0x71, 0x92, 0x14, 0x9a, 0x07, 0xd8, 0x72, 0x3c, 0x73, 0xb7, 0xd6, 0xa8, 0xe3, - 0xc8, 0xa2, 0x96, 0x19, 0x2d, 0x2d, 0xca, 0x52, 0xac, 0xd4, 0xe8, 0xcb, 0x96, 0xe1, 0x8f, 0x35, - 0x3e, 0xd3, 0xa7, 0x58, 0xbc, 0x17, 0xc8, 0x51, 0xde, 0x9b, 0xe2, 0x28, 0x4a, 0x8a, 0xfb, 0x04, - 0x57, 0xa9, 0x46, 0x02, 0xfb, 0x60, 0xac, 0x7f, 0x4e, 0xa4, 0xe6, 0xfa, 0x25, 0x31, 0x4c, 0x99, - 0xa6, 0xa4, 0x03, 0x93, 0x8e, 0x9a, 0x6e, 0x55, 0xec, 0x91, 0x52, 0x99, 0x5a, 0xa5, 0x8b, 0x46, - 0xa2, 0x18, 0x27, 0x09, 0xa0, 0x0f, 0xc2, 0x64, 0x34, 0x3a, 0x3a, 0x99, 0x91, 0xe5, 0x06, 0x5b, - 0x0e, 0xeb, 0x2a, 0x00, 0x27, 0xeb, 0xe9, 0x9f, 0xab, 0xc0, 0x13, 0xbc, 0xef, 0x4c, 0x63, 0x50, - 0x27, 0x1d, 0xe2, 0x5a, 0xc4, 0x35, 0x0f, 0x98, 0xcc, 0x6a, 0x79, 0x2d, 0xf4, 0x36, 0x0c, 0x3f, - 0x24, 0xc4, 0x92, 0x1a, 0xed, 0x57, 0xca, 0x67, 0x79, 0x29, 0x20, 0xf1, 0x0a, 0x43, 0xcf, 0x39, - 0x3a, 0xff, 0x1f, 0x0b, 0x92, 0x94, 0x78, 0xc7, 0xf7, 0xb6, 0xa4, 0x68, 0x75, 0xf6, 0xc4, 0xd7, - 0x19, 0x7a, 0x4e, 0x9c, 0xff, 0x8f, 0x05, 0x49, 0x7d, 0x1d, 0x9e, 0x3c, 0x41, 0xd3, 0xd3, 0x88, - 0xd0, 0xc7, 0x61, 0xe4, 0xa3, 0x3f, 0x0d, 0xc6, 0x2f, 0x6b, 0xf0, 0x94, 0x82, 0x72, 0x69, 0x9f, - 0x4a, 0xf5, 0x35, 0xa3, 0x63, 0x98, 0xf4, 0x8e, 0xca, 0xbc, 0xb5, 0x4f, 0x95, 0x75, 0xe2, 0x53, - 0x1a, 0x8c, 0x70, 0x43, 0x9a, 0x88, 0xfd, 0xbe, 0xde, 0xe7, 0x94, 0x17, 0x76, 0x29, 0x0a, 0x67, - 0x1c, 0x8d, 0x8d, 0xff, 0x0e, 0x70, 0x44, 0x5f, 0xff, 0xb7, 0x43, 0xf0, 0x75, 0x27, 0x47, 0x84, - 0xfe, 0x58, 0xcb, 0xe6, 0xc8, 0x6d, 0x9f, 0x6f, 0xe7, 0xa5, 0x16, 0x43, 0x5c, 0x8c, 0x5f, 0xc9, - 0xa4, 0x8c, 0x39, 0x23, 0x05, 0x89, 0x92, 0x90, 0xf7, 0x9f, 0x69, 0x30, 0x41, 0x8f, 0x25, 0xc9, - 0x5c, 0xf8, 0x67, 0xea, 0x9c, 0xf3, 0x48, 0xd7, 0x14, 0x92, 0x29, 0xcf, 0x4b, 0x15, 0x84, 0x13, - 0x7d, 0x43, 0x9b, 0xc9, 0xd7, 0x20, 0x7e, 0xdd, 0xba, 0x99, 0x27, 0x8d, 0x9c, 0x26, 0x21, 0xd3, - 0x9c, 0x03, 0x53, 0xc9, 0x99, 0x3f, 0x4f, 0xf5, 0xce, 0xdc, 0x4b, 0x30, 0x93, 0x19, 0xfd, 0xa9, - 0x94, 0x1b, 0x7f, 0x77, 0x10, 0xaa, 0xca, 0x54, 0x27, 0x4c, 0xe9, 0x22, 0x99, 0xe0, 0xc7, 0x35, - 0x18, 0x37, 0x5c, 0x57, 0x98, 0x63, 0x44, 0xeb, 0xd7, 0xea, 0xf3, 0xab, 0xe6, 0x91, 0x9a, 0x5f, - 0x88, 0xc9, 0xa4, 0xec, 0x0d, 0x14, 0x08, 0x56, 0x7b, 0xd3, 0xc3, 0xa8, 0xae, 0x72, 0x61, 0x46, - 0x75, 0xe8, 0xbb, 0xa2, 0x83, 0x98, 0x2f, 0xa3, 0x57, 0xcf, 0x61, 0x6e, 0xd8, 0xb9, 0x9e, 0xaf, - 0x4d, 0x9b, 0xfb, 0x08, 0x4c, 0xa7, 0x67, 0xee, 0x54, 0xab, 0xe0, 0xe7, 0x07, 0x12, 0xac, 0xba, - 0x90, 0xfc, 0x09, 0x74, 0x88, 0x5f, 0x48, 0x2d, 0x16, 0xce, 0x02, 0xec, 0xf3, 0x9a, 0x90, 0xb3, - 0x5d, 0x31, 0x03, 0x17, 0x67, 0x86, 0xd9, 0xef, 0x27, 0x5b, 0x84, 0xab, 0xca, 0xfc, 0x28, 0x09, - 0xf0, 0x9e, 0x81, 0x91, 0x3d, 0x3b, 0xb0, 0xa3, 0x38, 0x3a, 0xca, 0x09, 0xfd, 0x32, 0x2f, 0xc6, - 0x11, 0x5c, 0x5f, 0x49, 0xec, 0xfd, 0x0d, 0xaf, 0xe3, 0x39, 0x5e, 0xeb, 0x60, 0xe1, 0xa1, 0xe1, - 0x13, 0xec, 0x75, 0x43, 0x81, 0xed, 0xa4, 0xe7, 0xfd, 0x2a, 0xdc, 0x52, 0xb0, 0xe5, 0x06, 0x04, - 0x38, 0x0d, 0xba, 0xdf, 0x19, 0x89, 0x44, 0x57, 0xe1, 0x31, 0xf9, 0x8b, 0x1a, 0x5c, 0x27, 0x45, - 0x47, 0x81, 0x90, 0x63, 0x5f, 0x3d, 0xaf, 0xa3, 0x46, 0x44, 0x36, 0x2d, 0x02, 0xe3, 0xe2, 0x9e, - 0xa1, 0x83, 0x44, 0x1a, 0xc8, 0x4a, 0x3f, 0x7a, 0xb8, 0x9c, 0xef, 0xdd, 0x2b, 0x09, 0x24, 0xfa, - 0x29, 0x0d, 0xae, 0x38, 0x39, 0x5b, 0x47, 0x88, 0xac, 0xcd, 0x73, 0xd8, 0x95, 0xfc, 0xcd, 0x33, - 0x0f, 0x82, 0x73, 0xbb, 0x82, 0x7e, 0xa6, 0x30, 0x52, 0xc5, 0x50, 0xf9, 0x84, 0xfe, 0xc7, 0x2d, - 0xc4, 0x12, 0x41, 0x2b, 0x3e, 0xa7, 0x01, 0xb2, 0x32, 0x62, 0xb1, 0xb0, 0x22, 0xf9, 0xd8, 0x99, - 0x0b, 0xff, 0xfc, 0xd1, 0x3a, 0x5b, 0x8e, 0x73, 0x3a, 0xc1, 0xbe, 0x73, 0x98, 0xb3, 0x7d, 0x45, - 0xd0, 0xd7, 0x7e, 0xbf, 0x73, 0x1e, 0x67, 0xe0, 0xdf, 0x39, 0x0f, 0x82, 0x73, 0xbb, 0xa2, 0xff, - 0xfa, 0x30, 0xd7, 0xd2, 0xb0, 0x57, 0xc5, 0x2d, 0x18, 0xde, 0x62, 0x5a, 0x3d, 0xb1, 0x6f, 0x4b, - 0xab, 0x10, 0xb9, 0x6e, 0x90, 0xdf, 0x91, 0xf8, 0xff, 0x58, 0x60, 0x46, 0xaf, 0xc1, 0x80, 0xe5, - 0x06, 0x62, 0xc3, 0x7d, 0xb8, 0x0f, 0x65, 0x58, 0xec, 0xca, 0x53, 0x5f, 0x6b, 0x62, 0x8a, 0x14, - 0xb9, 0x30, 0xea, 0x0a, 0xc5, 0x86, 0xb8, 0x7b, 0x96, 0xce, 0x30, 0x2a, 0x15, 0x24, 0x52, 0x2d, - 0x13, 0x95, 0x60, 0x49, 0x83, 0xd2, 0x4b, 0x69, 0xf2, 0x4b, 0xd3, 0x93, 0xaa, 0xbd, 0x5e, 0xda, - 0x53, 0x02, 0xc3, 0xa1, 0x61, 0xbb, 0x21, 0x57, 0xab, 0x94, 0x7c, 0x32, 0xa7, 0xd4, 0x36, 0x28, - 0x96, 0x58, 0x7f, 0xc1, 0x7e, 0x06, 0x58, 0x20, 0xa7, 0xcb, 0x60, 0x8f, 0xa5, 0xf5, 0x16, 0xdb, - 0xa8, 0xf4, 0x32, 0xe0, 0xc9, 0xc1, 0xf9, 0x32, 0xe0, 0xff, 0x63, 0x81, 0x19, 0xbd, 0x01, 0xa3, - 0x41, 0x64, 0xe4, 0x30, 0xda, 0x6f, 0x32, 0x58, 0x61, 0xe1, 0x20, 0xbc, 0x6b, 0x84, 0x69, 0x83, - 0xc4, 0x8f, 0xb6, 0x60, 0xc4, 0xe6, 0xfe, 0x20, 0x22, 0xcc, 0xce, 0x87, 0xfb, 0xc8, 0x85, 0x16, - 0xe5, 0xbb, 0xe7, 0xc1, 0x19, 0x22, 0xc4, 0xfa, 0xef, 0x00, 0xd7, 0x8a, 0x0b, 0x3b, 0xb2, 0x6d, - 0x18, 0x8d, 0xd0, 0xf5, 0xe3, 0xe5, 0x15, 0x65, 0x9f, 0xe4, 0x43, 0x93, 0xb9, 0x28, 0x25, 0x6e, - 0x54, 0xcb, 0xf3, 0xd6, 0x8b, 0x43, 0xe1, 0x9f, 0xcc, 0x53, 0xef, 0x4d, 0x96, 0x2e, 0x2e, 0xf2, - 0x99, 0x1f, 0x28, 0xbf, 0xb4, 0xa4, 0x3f, 0x7d, 0x22, 0x4d, 0x5c, 0xe4, 0x72, 0xaf, 0x10, 0x29, - 0xb0, 0xb3, 0x1b, 0x2c, 0x65, 0x67, 0xf7, 0x22, 0x5c, 0x12, 0x76, 0x0d, 0x0d, 0x96, 0xda, 0x3d, - 0x3c, 0x10, 0x8e, 0x08, 0xcc, 0xe2, 0xa5, 0x96, 0x04, 0xe1, 0x74, 0x5d, 0xf4, 0xab, 0x1a, 0x8c, - 0x9a, 0x42, 0x40, 0x10, 0xfb, 0x6a, 0xa5, 0xbf, 0xa7, 0x93, 0xf9, 0x48, 0xde, 0xe0, 0xa2, 0xef, - 0xcb, 0xd1, 0x8e, 0x8e, 0x8a, 0xcf, 0xe8, 0x8a, 0x2f, 0x7b, 0x8d, 0x7e, 0x9b, 0x4a, 0xf7, 0x0e, - 0xcb, 0x88, 0xc9, 0xfc, 0x92, 0xb9, 0x87, 0xc4, 0x83, 0x3e, 0x47, 0xb1, 0x10, 0x63, 0xe4, 0x03, - 0xf9, 0x56, 0x29, 0xc3, 0xc7, 0x90, 0x33, 0x1a, 0x8b, 0xda, 0x7d, 0xf4, 0x4f, 0x34, 0x78, 0x8a, - 0xbb, 0xa5, 0xd4, 0xe8, 0x99, 0xcf, 0x12, 0x8b, 0x93, 0x38, 0x93, 0x79, 0x6c, 0x15, 0x38, 0x7a, - 0x6a, 0xab, 0xc0, 0xa7, 0x8f, 0x0e, 0xab, 0x4f, 0xd5, 0x4e, 0x80, 0x1b, 0x9f, 0xa8, 0x07, 0xe8, - 0x2d, 0x98, 0x74, 0xd4, 0xd8, 0x29, 0x82, 0xc1, 0x94, 0x52, 0xcc, 0x27, 0x82, 0xb0, 0x70, 0x4d, - 0x6c, 0xa2, 0x08, 0x27, 0x49, 0xcd, 0xed, 0xc2, 0x64, 0x62, 0xa1, 0x9d, 0xab, 0x4a, 0xc3, 0x85, - 0xe9, 0xf4, 0x7a, 0x38, 0x57, 0x0b, 0x99, 0xfb, 0x30, 0x26, 0x0f, 0x2a, 0xf4, 0x84, 0x42, 0x28, - 0x3e, 0xf6, 0xef, 0x93, 0x03, 0x4e, 0xb5, 0x9a, 0xb8, 0x8e, 0x71, 0x7d, 0xfb, 0xcb, 0xb4, 0x40, - 0x20, 0xd4, 0x7f, 0x4f, 0xe8, 0xdb, 0x37, 0x48, 0xbb, 0xe3, 0x18, 0x21, 0x79, 0xe7, 0xbf, 0xf6, - 0xea, 0xff, 0x4d, 0xe3, 0xe7, 0x0d, 0x3f, 0x56, 0x91, 0x01, 0xe3, 0x6d, 0x1e, 0x20, 0x98, 0xb9, - 0xe2, 0x6b, 0xe5, 0x83, 0x00, 0xac, 0xc6, 0x68, 0xb0, 0x8a, 0x13, 0x3d, 0x84, 0xb1, 0x48, 0x10, - 0x89, 0xf4, 0x07, 0xcb, 0xfd, 0x09, 0x06, 0x52, 0xe6, 0x91, 0x0f, 0x89, 0x51, 0x49, 0x80, 0x63, - 0x5a, 0xba, 0x01, 0x28, 0xdb, 0x86, 0xde, 0x59, 0x23, 0xc3, 0x77, 0x2d, 0x19, 0x75, 0x2f, 0x63, - 0xfc, 0x7e, 0x6c, 0x0e, 0x6c, 0xfd, 0xd7, 0x2a, 0x90, 0x9b, 0x8f, 0x0d, 0xe9, 0x30, 0xcc, 0x7d, - 0xd1, 0xa2, 0xf4, 0xda, 0x54, 0x94, 0xe1, 0x8e, 0x6a, 0x58, 0x40, 0xd0, 0x03, 0xae, 0xb7, 0x70, - 0x2d, 0x16, 0xed, 0x2e, 0xe6, 0x12, 0xaa, 0xd7, 0xe3, 0x52, 0x5e, 0x05, 0x9c, 0xdf, 0x0e, 0xed, - 0x01, 0x6a, 0x1b, 0xfb, 0x69, 0x6c, 0x7d, 0x24, 0x1c, 0x5a, 0xcd, 0x60, 0xc3, 0x39, 0x14, 0xe8, - 0x41, 0x6a, 0x98, 0x26, 0xe9, 0x84, 0xc4, 0xe2, 0x43, 0x8c, 0x9e, 0xfb, 0xd8, 0x41, 0xba, 0x90, - 0x04, 0xe1, 0x74, 0x5d, 0xfd, 0x2b, 0x83, 0x70, 0x3d, 0x39, 0x89, 0x74, 0x87, 0x46, 0xee, 0x62, - 0x2f, 0x45, 0xd6, 0xf0, 0x7c, 0x22, 0x9f, 0x49, 0x5b, 0xc3, 0xcf, 0xd6, 0x7c, 0xc2, 0x8e, 0x64, - 0xc3, 0x09, 0xa2, 0x46, 0x09, 0xcb, 0xf8, 0xaf, 0x82, 0xef, 0x57, 0x81, 0x8f, 0xdb, 0xc0, 0xb9, - 0xfa, 0xb8, 0x7d, 0x5a, 0x83, 0xb9, 0x64, 0xf1, 0xb2, 0xed, 0xda, 0xc1, 0x8e, 0x88, 0xd9, 0x76, - 0x7a, 0x63, 0x7c, 0x96, 0x22, 0x61, 0xa5, 0x10, 0x23, 0xee, 0x41, 0x0d, 0x7d, 0x46, 0x83, 0x1b, - 0xa9, 0x79, 0x49, 0x44, 0x90, 0x3b, 0xbd, 0x5d, 0x3e, 0xf3, 0xd6, 0x5d, 0x29, 0x46, 0x89, 0x7b, - 0xd1, 0xd3, 0xff, 0x55, 0x05, 0x86, 0xd8, 0x6b, 0xf5, 0x3b, 0xc3, 0x3c, 0x99, 0x75, 0xb5, 0xd0, - 0x62, 0xa7, 0x95, 0xb2, 0xd8, 0x79, 0xa9, 0x3c, 0x89, 0xde, 0x26, 0x3b, 0xdf, 0x0a, 0xd7, 0x58, - 0xb5, 0x05, 0x8b, 0x29, 0x51, 0x02, 0x62, 0x2d, 0x58, 0x16, 0x8b, 0x15, 0x70, 0xbc, 0xe6, 0xf8, - 0x09, 0x18, 0xe8, 0xfa, 0x4e, 0x3a, 0x7a, 0xc6, 0x26, 0x5e, 0xc1, 0xb4, 0x5c, 0xff, 0xb4, 0x06, - 0xd3, 0x0c, 0xb7, 0xb2, 0x7d, 0xd1, 0x1e, 0x8c, 0xfa, 0x62, 0x0b, 0x8b, 0x6f, 0xb3, 0x52, 0x7a, - 0x68, 0x39, 0x6c, 0x41, 0x64, 0x8c, 0x14, 0xbf, 0xb0, 0xa4, 0xa5, 0x7f, 0x69, 0x18, 0x66, 0x8b, - 0x1a, 0xa1, 0x1f, 0xd5, 0xe0, 0x9a, 0x19, 0x4b, 0x73, 0x0b, 0xdd, 0x70, 0xc7, 0xf3, 0xed, 0xd0, - 0x16, 0x66, 0x1c, 0x25, 0xaf, 0xb9, 0xb5, 0x05, 0xd9, 0x2b, 0x16, 0xf1, 0xac, 0x96, 0x4b, 0x01, - 0x17, 0x50, 0x46, 0x6f, 0x03, 0xec, 0xc6, 0x21, 0x56, 0x2b, 0xe5, 0x93, 0x39, 0xb0, 0x61, 0x2b, - 0x61, 0x58, 0xa3, 0x4e, 0x31, 0x3d, 0xa4, 0x52, 0xae, 0x90, 0xa3, 0xc4, 0x83, 0x60, 0xe7, 0x3e, - 0x39, 0xe8, 0x18, 0x76, 0xf4, 0x58, 0x5f, 0x9e, 0x78, 0xb3, 0x79, 0x4f, 0xa0, 0x4a, 0x12, 0x57, - 0xca, 0x15, 0x72, 0xe8, 0x93, 0x1a, 0x4c, 0x7a, 0xaa, 0x63, 0x71, 0x3f, 0xb6, 0x90, 0xb9, 0x1e, - 0xca, 0x5c, 0x84, 0x4e, 0x82, 0x92, 0x24, 0xe9, 0x9a, 0x98, 0x09, 0xd2, 0x47, 0x96, 0x60, 0x6a, - 0xab, 0xfd, 0xa7, 0x7b, 0x55, 0xce, 0x3f, 0x7e, 0x1d, 0xcf, 0x82, 0xb3, 0xe4, 0x59, 0xa7, 0x48, - 0x68, 0x5a, 0x71, 0xf2, 0x49, 0xda, 0xa9, 0xe1, 0xf2, 0x9d, 0x5a, 0xda, 0xa8, 0xd5, 0x13, 0xc8, - 0x92, 0x9d, 0xca, 0x82, 0xb3, 0xe4, 0xf5, 0x4f, 0x54, 0xe0, 0xb1, 0x82, 0x35, 0xf6, 0xd7, 0xc6, - 0x13, 0xfc, 0x37, 0x35, 0x18, 0x63, 0x73, 0xf0, 0x0e, 0x71, 0x27, 0x61, 0x7d, 0x2d, 0xb0, 0x69, - 0xfb, 0x0d, 0x0d, 0x66, 0x32, 0xb1, 0x36, 0x4f, 0xe4, 0x8c, 0x70, 0x61, 0xe6, 0x56, 0xef, 0x89, - 0xe3, 0x6a, 0x0f, 0xc4, 0xae, 0xad, 0xe9, 0x98, 0xda, 0xfa, 0x2b, 0x30, 0x99, 0x30, 0x69, 0x93, - 0x51, 0x7b, 0xb4, 0xdc, 0xa8, 0x3d, 0x6a, 0x50, 0x9e, 0x4a, 0xaf, 0xa0, 0x3c, 0xf1, 0x92, 0xcf, - 0x72, 0xb6, 0xbf, 0x36, 0x4b, 0xfe, 0xcb, 0x97, 0xc4, 0x92, 0x67, 0xef, 0x03, 0xaf, 0xc3, 0x30, - 0x0b, 0x01, 0x14, 0x9d, 0x98, 0x77, 0x4a, 0x87, 0x16, 0x0a, 0xf8, 0x4d, 0x8a, 0xff, 0x8f, 0x05, - 0x56, 0x54, 0x87, 0x69, 0xd3, 0xf1, 0xba, 0x96, 0x48, 0x3c, 0xb9, 0x16, 0x5f, 0xda, 0x64, 0x84, - 0xc8, 0x5a, 0x0a, 0x8e, 0x33, 0x2d, 0x10, 0xe6, 0x2f, 0x0c, 0xfc, 0x3c, 0x2b, 0x15, 0x21, 0xb2, - 0xbe, 0xd6, 0xe4, 0x19, 0x16, 0xe4, 0xcb, 0xc2, 0x9b, 0x00, 0x24, 0x5a, 0xbc, 0x91, 0x17, 0xe0, - 0x8b, 0xe5, 0x62, 0x5f, 0xca, 0x2d, 0x10, 0x09, 0x9f, 0xb2, 0x28, 0xc0, 0x0a, 0x11, 0xe4, 0xc3, - 0xf8, 0x8e, 0xbd, 0x45, 0x7c, 0x97, 0xcb, 0x51, 0x43, 0xe5, 0x45, 0xc4, 0x7b, 0x31, 0x1a, 0x7e, - 0xc7, 0x57, 0x0a, 0xb0, 0x4a, 0x04, 0xf9, 0x5c, 0x1c, 0xe1, 0xea, 0xe1, 0x7e, 0x72, 0xc1, 0xc7, - 0x7a, 0xe7, 0x78, 0x9c, 0x71, 0x19, 0x56, 0xa8, 0x20, 0x17, 0xc0, 0x95, 0xb1, 0xbf, 0xfa, 0x79, - 0x71, 0x88, 0x23, 0x88, 0x71, 0xc1, 0x23, 0xfe, 0x8d, 0x15, 0x0a, 0x74, 0x5e, 0xdb, 0x71, 0x30, - 0x39, 0xa1, 0x43, 0x7c, 0xa9, 0xcf, 0x80, 0x7e, 0x42, 0x77, 0x12, 0x17, 0x60, 0x95, 0x08, 0x1d, - 0x63, 0x5b, 0x86, 0x80, 0x13, 0x3a, 0xc2, 0x52, 0x63, 0x8c, 0x03, 0xc9, 0x89, 0x34, 0x5d, 0xf2, - 0x37, 0x56, 0x28, 0xa0, 0x37, 0x94, 0x87, 0x29, 0x28, 0xaf, 0x81, 0x3a, 0xd1, 0xa3, 0xd4, 0x07, - 0x62, 0x45, 0xcc, 0x38, 0xdb, 0xab, 0x37, 0x14, 0x25, 0x0c, 0x0b, 0x8d, 0x47, 0xf9, 0x47, 0x46, - 0x29, 0x13, 0x1b, 0xd3, 0x4e, 0xf4, 0x34, 0xa6, 0xad, 0x51, 0x09, 0x4d, 0x71, 0xee, 0x60, 0x4c, - 0x61, 0x32, 0x7e, 0xe1, 0x68, 0xa6, 0x81, 0x38, 0x5b, 0x9f, 0x33, 0x7d, 0x62, 0xb1, 0xb6, 0x53, - 0x2a, 0xd3, 0xe7, 0x65, 0x58, 0x42, 0xd1, 0x1e, 0x4c, 0x04, 0x8a, 0x65, 0xae, 0xc8, 0xad, 0xd8, - 0xc7, 0xdb, 0x94, 0xb0, 0xca, 0x65, 0x41, 0x91, 0xd4, 0x12, 0x9c, 0xa0, 0x83, 0xde, 0x56, 0x4d, - 0x11, 0xa7, 0xcb, 0xbb, 0x61, 0xe6, 0x87, 0xfc, 0x8b, 0x35, 0x6c, 0xd2, 0x0a, 0x4e, 0xb5, 0x10, - 0xec, 0x26, 0x8d, 0xee, 0x66, 0xce, 0xc4, 0xed, 0xfc, 0x58, 0xa3, 0x3c, 0xfa, 0x69, 0xc9, 0x7e, - 0xc7, 0x0b, 0xba, 0x3e, 0x61, 0xa1, 0x4c, 0xd9, 0xe7, 0x41, 0xf1, 0xa7, 0x5d, 0x4a, 0x03, 0x71, - 0xb6, 0x3e, 0x4b, 0x04, 0xcf, 0x53, 0x53, 0xd2, 0xa3, 0xcb, 0x73, 0x89, 0x1b, 0x06, 0x2c, 0xf7, - 0x62, 0x49, 0x4f, 0xc9, 0x66, 0x0a, 0x17, 0xcf, 0xe7, 0x93, 0x2e, 0xc5, 0x19, 0x9a, 0x74, 0xe5, - 0xa8, 0x8e, 0xeb, 0x2c, 0x85, 0x63, 0xc9, 0x95, 0xa3, 0x3a, 0xc5, 0xf3, 0x95, 0xa3, 0x96, 0xe0, - 0x04, 0x1d, 0xf4, 0x41, 0x98, 0x0c, 0xa2, 0x3c, 0x2b, 0x6c, 0x06, 0xaf, 0xc6, 0x91, 0xa5, 0x9a, - 0x2a, 0x00, 0x27, 0xeb, 0xe9, 0xff, 0x4e, 0x03, 0x90, 0xda, 0x83, 0x8b, 0xd0, 0x89, 0x5b, 0x09, - 0x85, 0xca, 0x62, 0x5f, 0xda, 0x0e, 0x52, 0xa8, 0x19, 0xff, 0x03, 0x0d, 0xa6, 0xe2, 0x6a, 0x17, - 0x20, 0xaa, 0x9b, 0x49, 0x51, 0xfd, 0x23, 0xfd, 0x8d, 0xab, 0x40, 0x5e, 0xff, 0x7f, 0x15, 0x75, - 0x54, 0x4c, 0x1a, 0xdb, 0x4b, 0xbc, 0x31, 0x53, 0xd2, 0xf7, 0xfa, 0x79, 0x63, 0x56, 0x9d, 0x69, - 0xe3, 0xf1, 0xe6, 0xbc, 0x39, 0xff, 0x9d, 0x84, 0x2c, 0xd4, 0x87, 0xcb, 0xb8, 0x14, 0x7c, 0x22, - 0xd2, 0x7c, 0x02, 0x8e, 0x13, 0x8c, 0xde, 0x54, 0x59, 0x25, 0x7f, 0xad, 0xfe, 0x68, 0x39, 0x3f, - 0x65, 0x65, 0xc0, 0x3d, 0x19, 0xa4, 0xfe, 0x23, 0x53, 0x30, 0xae, 0x28, 0xda, 0x52, 0x2f, 0xe6, - 0xda, 0x45, 0xbc, 0x98, 0x87, 0x30, 0x6e, 0xca, 0xd0, 0xe0, 0xd1, 0xb4, 0xf7, 0x49, 0x53, 0xb2, - 0xe8, 0x38, 0xe8, 0x78, 0x80, 0x55, 0x32, 0x54, 0x90, 0x90, 0x6b, 0x6c, 0xe0, 0x0c, 0xec, 0x18, - 0x7a, 0xad, 0xab, 0xf7, 0x03, 0x44, 0xb2, 0x28, 0xb1, 0x44, 0x6c, 0x47, 0x69, 0x32, 0xde, 0x08, - 0xee, 0x49, 0x18, 0x56, 0xea, 0x65, 0x5f, 0x60, 0x87, 0x2e, 0xec, 0x05, 0x96, 0x2e, 0x03, 0x27, - 0xca, 0x4c, 0xd3, 0x97, 0x4d, 0x8e, 0xcc, 0x6f, 0x13, 0x2f, 0x03, 0x59, 0x14, 0x60, 0x85, 0x48, - 0x81, 0xe1, 0xc4, 0x48, 0x29, 0xc3, 0x89, 0x2e, 0x5c, 0xf6, 0x49, 0xe8, 0x1f, 0xd4, 0x0e, 0x4c, - 0x96, 0xb0, 0xc9, 0x0f, 0xd9, 0x8d, 0x72, 0xb4, 0x5c, 0xac, 0x21, 0x9c, 0x45, 0x85, 0xf3, 0xf0, - 0x27, 0x84, 0xb1, 0xb1, 0x9e, 0xc2, 0xd8, 0x07, 0x60, 0x3c, 0x24, 0xe6, 0x8e, 0x6b, 0x9b, 0x86, - 0xd3, 0xa8, 0x8b, 0xc0, 0x87, 0xb1, 0x5c, 0x11, 0x83, 0xb0, 0x5a, 0x0f, 0x2d, 0xc2, 0x40, 0xd7, - 0xb6, 0x84, 0x34, 0xfa, 0x0d, 0x52, 0x65, 0xdd, 0xa8, 0x3f, 0x3a, 0xac, 0xbe, 0x3b, 0xb6, 0x44, - 0x90, 0xa3, 0xba, 0xdd, 0xd9, 0x6d, 0xdd, 0x0e, 0x0f, 0x3a, 0x24, 0x98, 0xdf, 0x6c, 0xd4, 0x31, - 0x6d, 0x9c, 0x67, 0x54, 0x32, 0x71, 0x0a, 0xa3, 0x92, 0xcf, 0x69, 0x70, 0xd9, 0x48, 0x6b, 0xdb, - 0x49, 0x30, 0x3b, 0x59, 0x9e, 0x5b, 0xe6, 0x6b, 0xf0, 0x17, 0x6f, 0x88, 0xf1, 0x5d, 0x5e, 0xc8, - 0x92, 0xc3, 0x79, 0x7d, 0x40, 0x3e, 0xa0, 0xb6, 0xdd, 0x92, 0x49, 0x62, 0xc4, 0x57, 0x9f, 0x2a, - 0xa7, 0x47, 0x58, 0xcd, 0x60, 0xc2, 0x39, 0xd8, 0xd1, 0x43, 0x18, 0x37, 0x63, 0x9d, 0xbc, 0x90, - 0xaa, 0xeb, 0x67, 0xf1, 0x28, 0xc0, 0x6f, 0x5e, 0xaa, 0xc2, 0x5f, 0xa5, 0x24, 0x5f, 0xd3, 0x94, - 0x2b, 0xaf, 0x78, 0x51, 0x62, 0xa3, 0x9e, 0x2e, 0xff, 0x9a, 0x96, 0x8f, 0x11, 0xf7, 0xa0, 0xc6, - 0x22, 0xfc, 0x38, 0xc9, 0x5c, 0x4e, 0x2c, 0x8d, 0x79, 0x49, 0xaf, 0xe0, 0x54, 0x5a, 0x28, 0xbe, - 0x34, 0x53, 0x85, 0x38, 0x4d, 0x10, 0x2d, 0x03, 0x22, 0x5c, 0xb5, 0x1b, 0x5f, 0x14, 0x82, 0x59, - 0x24, 0x73, 0x5e, 0xa1, 0xa5, 0x0c, 0x14, 0xe7, 0xb4, 0xd0, 0x7f, 0x5f, 0x13, 0x8a, 0xb7, 0x0b, - 0xb4, 0xaa, 0x38, 0xef, 0x27, 0x39, 0xfd, 0xcf, 0x34, 0xc8, 0xc8, 0xfa, 0x68, 0x0b, 0x46, 0x28, - 0x8a, 0xfa, 0x5a, 0x53, 0x0c, 0xeb, 0xc3, 0xe5, 0x8e, 0x5d, 0x86, 0x82, 0x6b, 0x31, 0xc5, 0x0f, - 0x1c, 0x21, 0xa6, 0xb7, 0x07, 0x57, 0x89, 0xe1, 0x2c, 0x46, 0x58, 0x4a, 0xae, 0x51, 0x63, 0x41, - 0xf3, 0xdb, 0x83, 0x5a, 0x82, 0x13, 0x74, 0xf4, 0x15, 0x80, 0xf8, 0x7e, 0xd6, 0xb7, 0xa1, 0xcd, - 0xbf, 0x1c, 0x86, 0xab, 0xfd, 0xba, 0x18, 0xb0, 0x54, 0x44, 0x64, 0xcf, 0x36, 0xc3, 0x85, 0xed, - 0x90, 0xf8, 0x0f, 0x1e, 0xac, 0xca, 0xc4, 0xfd, 0x25, 0x73, 0x21, 0xb1, 0x87, 0xb9, 0xa5, 0x5c, - 0x8c, 0xb8, 0x80, 0x12, 0xbb, 0x9b, 0x8a, 0xd4, 0xc8, 0x98, 0x0a, 0xa5, 0x2c, 0x2b, 0x3f, 0x8f, - 0x93, 0xc2, 0xef, 0xa6, 0x69, 0x20, 0xce, 0xd6, 0x4f, 0x23, 0x59, 0xb1, 0xdb, 0x36, 0xcf, 0x09, - 0xa3, 0x65, 0x91, 0x30, 0x20, 0xce, 0xd6, 0x57, 0x91, 0xf0, 0x2f, 0x45, 0xb9, 0xc6, 0x50, 0x16, - 0x89, 0x04, 0xe2, 0x6c, 0x7d, 0x64, 0xc1, 0xe3, 0x3e, 0x31, 0xbd, 0x76, 0x9b, 0xb8, 0x16, 0xcf, - 0xf2, 0x67, 0xf8, 0x2d, 0xdb, 0x5d, 0xf6, 0x0d, 0x56, 0x91, 0xa9, 0xfa, 0x34, 0x96, 0xd9, 0xe0, - 0x71, 0xdc, 0xa3, 0x1e, 0xee, 0x89, 0x05, 0xb5, 0xe1, 0x12, 0x4f, 0x29, 0xe4, 0x37, 0xdc, 0x90, - 0xf8, 0x7b, 0x86, 0x23, 0xf4, 0x79, 0xa5, 0xd2, 0x1b, 0x6f, 0x26, 0x51, 0xe1, 0x34, 0x6e, 0x74, - 0x40, 0xe5, 0x17, 0xd1, 0x1d, 0x85, 0xe4, 0x68, 0xf9, 0x64, 0x5d, 0x38, 0x8b, 0x0e, 0xe7, 0xd1, - 0x40, 0x0d, 0xb8, 0x1c, 0x1a, 0x7e, 0x8b, 0x84, 0xb5, 0xf5, 0xcd, 0x75, 0xe2, 0x9b, 0xf4, 0xb8, - 0x71, 0xb8, 0x38, 0xa3, 0x71, 0x54, 0x1b, 0x59, 0x30, 0xce, 0x6b, 0xa3, 0x7f, 0x4e, 0x03, 0x61, - 0x1c, 0x8d, 0x1e, 0x4f, 0x3c, 0xbf, 0x8c, 0xa6, 0x9e, 0x5e, 0xa2, 0xb4, 0x08, 0x95, 0xdc, 0xb4, - 0x08, 0xef, 0x55, 0x62, 0xf9, 0x8c, 0xc5, 0x6c, 0x94, 0x63, 0x56, 0x52, 0xba, 0x3c, 0x0b, 0x63, - 0x92, 0x99, 0x0b, 0x21, 0x9b, 0xc5, 0xe6, 0x8c, 0xb9, 0x7e, 0x0c, 0xd7, 0x7f, 0x57, 0x03, 0x81, - 0x81, 0x25, 0x20, 0x3a, 0x51, 0x22, 0x9a, 0x63, 0xad, 0xad, 0x94, 0x04, 0x3a, 0x03, 0x85, 0x09, - 0x74, 0xce, 0x29, 0xaf, 0xcc, 0x2f, 0x6a, 0x70, 0x29, 0x19, 0x5c, 0x29, 0x40, 0xef, 0x81, 0x11, - 0x11, 0x7e, 0x51, 0xc4, 0x4f, 0x63, 0x4d, 0x45, 0xfc, 0x03, 0x1c, 0xc1, 0x92, 0x1a, 0xba, 0x3e, - 0x6e, 0xbd, 0xf9, 0x31, 0x9e, 0x8e, 0xb9, 0x80, 0x7e, 0x6e, 0x06, 0x86, 0x79, 0xec, 0x3e, 0xca, - 0x1e, 0x73, 0xfc, 0x3e, 0xef, 0x97, 0x0f, 0x11, 0x58, 0xc6, 0x59, 0x4f, 0x0d, 0x93, 0x5f, 0xe9, - 0x19, 0x26, 0x1f, 0xf3, 0x7c, 0x5d, 0x7d, 0xbc, 0xc6, 0xd4, 0x70, 0x43, 0x24, 0x00, 0x8f, 0x72, - 0x75, 0x85, 0x89, 0x67, 0x8a, 0xc1, 0xf2, 0xc2, 0x24, 0x9f, 0x00, 0xe5, 0xb1, 0x62, 0xaa, 0xe7, - 0x43, 0x45, 0x14, 0x1c, 0x6d, 0xa8, 0xbc, 0xf5, 0xa3, 0x98, 0xf2, 0x13, 0x04, 0x47, 0x93, 0x1b, - 0x69, 0xb8, 0x70, 0x23, 0x6d, 0xc3, 0x88, 0xd8, 0x0a, 0x82, 0xcf, 0x7e, 0xb8, 0x8f, 0xc4, 0x57, - 0x4a, 0x3c, 0x5f, 0x5e, 0x80, 0x23, 0xe4, 0xf4, 0xf0, 0x6e, 0x1b, 0xfb, 0x76, 0xbb, 0xdb, 0x66, - 0xcc, 0x75, 0x48, 0xad, 0xca, 0x8a, 0x71, 0x04, 0x67, 0x55, 0xb9, 0xd1, 0x28, 0x63, 0x86, 0x6a, - 0x55, 0x5e, 0x8c, 0x23, 0x38, 0x7a, 0x0d, 0x46, 0xdb, 0xc6, 0x7e, 0xb3, 0xeb, 0xb7, 0x88, 0x78, - 0xa4, 0x28, 0x16, 0x17, 0xbb, 0xa1, 0xed, 0xcc, 0xdb, 0x6e, 0x18, 0x84, 0xfe, 0x7c, 0xc3, 0x0d, - 0x1f, 0xf8, 0xcd, 0xd0, 0x97, 0xd9, 0x6f, 0x56, 0x05, 0x16, 0x2c, 0xf1, 0x21, 0x07, 0xa6, 0xda, - 0xc6, 0xfe, 0xa6, 0x6b, 0xc8, 0x3c, 0xfb, 0xe3, 0x25, 0x29, 0xb0, 0x97, 0xea, 0xd5, 0x04, 0x2e, - 0x9c, 0xc2, 0x9d, 0xf3, 0x28, 0x3e, 0x71, 0x5e, 0x8f, 0xe2, 0x0b, 0xd2, 0x05, 0x88, 0x5f, 0x25, - 0xaf, 0xe7, 0xba, 0xc6, 0xf7, 0x74, 0xef, 0x79, 0x5d, 0xba, 0xf7, 0x4c, 0x95, 0x7f, 0xc5, 0xed, - 0xe1, 0xda, 0xd3, 0x85, 0x71, 0x2a, 0xac, 0xf3, 0x52, 0x7a, 0xd7, 0x2b, 0xad, 0x15, 0xad, 0x4b, - 0x34, 0x4a, 0xde, 0xd6, 0x18, 0x35, 0x56, 0xe9, 0xa0, 0x07, 0x3c, 0x0f, 0xbb, 0x43, 0xc2, 0xb8, - 0x0a, 0xd3, 0x31, 0x4c, 0xb3, 0xfd, 0x23, 0xd3, 0xa6, 0x67, 0x2a, 0xe0, 0xfc, 0x76, 0x71, 0x18, - 0x97, 0x99, 0xfc, 0x30, 0x2e, 0xe8, 0x87, 0xf2, 0x9e, 0x1e, 0x10, 0x9b, 0xd3, 0x6f, 0x29, 0xcf, - 0x1b, 0x4a, 0x3f, 0x40, 0xfc, 0x6b, 0x0d, 0x66, 0xdb, 0x05, 0x09, 0x4e, 0xc5, 0x8b, 0xc8, 0x46, - 0x1f, 0xfc, 0xa1, 0x30, 0x69, 0xea, 0xe2, 0x53, 0x47, 0x87, 0xd5, 0x63, 0x53, 0xab, 0xe2, 0xc2, - 0xbe, 0x21, 0x1f, 0x46, 0x82, 0x83, 0xc0, 0x0c, 0x9d, 0x60, 0xf6, 0x4a, 0xf9, 0x3c, 0x9a, 0x82, - 0xb3, 0x36, 0x39, 0x26, 0xce, 0x5a, 0xe3, 0x28, 0xf2, 0xbc, 0x14, 0x47, 0x84, 0xd0, 0x8f, 0x68, - 0x30, 0x23, 0x94, 0x36, 0x8a, 0x6f, 0xeb, 0xd5, 0xf2, 0xc6, 0x8a, 0xb5, 0x34, 0xb2, 0x07, 0x1d, - 0x1e, 0x82, 0x9c, 0x09, 0xe9, 0x19, 0x28, 0xce, 0x52, 0xef, 0xd7, 0xf9, 0xbc, 0x8f, 0x68, 0x9a, - 0x73, 0x77, 0x60, 0x42, 0x9d, 0xb8, 0x53, 0xf9, 0xbc, 0xff, 0xb4, 0x06, 0xd3, 0xe9, 0x83, 0x54, - 0x4d, 0xbf, 0xaf, 0x9d, 0x6f, 0xfa, 0x7d, 0xc5, 0x4c, 0xa8, 0xd2, 0xc3, 0x4c, 0xe8, 0x45, 0xb8, - 0x96, 0xbf, 0xbf, 0xa8, 0x54, 0x6b, 0x38, 0x8e, 0xf7, 0x50, 0x5c, 0x4c, 0xe3, 0xa4, 0x57, 0xb4, - 0x10, 0x73, 0x98, 0xfe, 0x5d, 0x90, 0x8e, 0x9d, 0x8c, 0xde, 0x80, 0xb1, 0x20, 0xd8, 0xe1, 0x61, - 0x31, 0xc5, 0x20, 0xcb, 0x69, 0x24, 0xa2, 0xd8, 0x9a, 0x5c, 0x10, 0x97, 0x3f, 0x71, 0x8c, 0x7e, - 0xf1, 0xd5, 0x2f, 0x7e, 0xe5, 0xe6, 0xbb, 0x7e, 0xef, 0x2b, 0x37, 0xdf, 0xf5, 0xa5, 0xaf, 0xdc, - 0x7c, 0xd7, 0xf7, 0x1c, 0xdd, 0xd4, 0xbe, 0x78, 0x74, 0x53, 0xfb, 0xbd, 0xa3, 0x9b, 0xda, 0x97, - 0x8e, 0x6e, 0x6a, 0xff, 0xf9, 0xe8, 0xa6, 0xf6, 0xc3, 0xff, 0xe5, 0xe6, 0xbb, 0x5e, 0x7b, 0x3e, - 0xa6, 0x7e, 0x3b, 0x22, 0x1a, 0xff, 0xd3, 0xd9, 0x6d, 0xdd, 0xa6, 0xd4, 0x23, 0x0f, 0x2c, 0x46, - 0xfd, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0x0e, 0x6d, 0xc8, 0xe8, 0x0b, 0xee, 0x00, 0x00, + // 12300 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7d, 0x6c, 0x24, 0xc9, + 0x75, 0x18, 0xae, 0x1e, 0x7e, 0x3f, 0x7e, 0x2c, 0x59, 0xbb, 0xdc, 0xe3, 0x71, 0xf7, 0x76, 0x56, + 0x7d, 0x27, 0xfd, 0xee, 0x7c, 0x32, 0xd7, 0x77, 0x3e, 0xf9, 0x74, 0x2b, 0x9f, 0x4e, 0xe4, 0x0c, + 0xb9, 0x3b, 0x5e, 0x92, 0xcb, 0xab, 0x21, 0xef, 0xce, 0x67, 0xff, 0xce, 0x6e, 0xf6, 0x14, 0x87, + 0x7d, 0xec, 0xe9, 0x9e, 0xeb, 0xee, 0xe1, 0x92, 0x77, 0x72, 0x64, 0x29, 0xb6, 0xe3, 0x3b, 0x5b, + 0x81, 0x2d, 0xc0, 0x11, 0x4e, 0x72, 0x60, 0x19, 0x86, 0x91, 0x0f, 0x07, 0x8a, 0xe3, 0xc0, 0x01, + 0x6c, 0x23, 0x80, 0x21, 0xc0, 0xb1, 0x64, 0x58, 0x86, 0x20, 0x25, 0x88, 0x94, 0xc4, 0x74, 0xc4, + 0x28, 0x76, 0x80, 0x04, 0x46, 0x10, 0x23, 0x30, 0xb2, 0x31, 0xec, 0xa0, 0xbe, 0xba, 0xab, 0xbf, + 0x86, 0x64, 0x0f, 0x49, 0xe9, 0x60, 0xfd, 0x45, 0x4e, 0xbd, 0xaa, 0xf7, 0xaa, 0xaa, 0xab, 0x5e, + 0xbd, 0xf7, 0xea, 0xbd, 0x57, 0xb0, 0xd0, 0xb4, 0x82, 0xed, 0xce, 0xe6, 0x9c, 0xe9, 0xb6, 0x6e, + 0x34, 0x0d, 0xaf, 0x41, 0x1c, 0xe2, 0x45, 0xff, 0xb4, 0x77, 0x9a, 0x37, 0x8c, 0xb6, 0xe5, 0xdf, + 0x30, 0x5d, 0x8f, 0xdc, 0xd8, 0x7d, 0x62, 0x93, 0x04, 0xc6, 0x13, 0x37, 0x9a, 0x14, 0x66, 0x04, + 0xa4, 0x31, 0xd7, 0xf6, 0xdc, 0xc0, 0x45, 0x4f, 0x46, 0x38, 0xe6, 0x64, 0xd3, 0xe8, 0x9f, 0xf6, + 0x4e, 0x73, 0x8e, 0xe2, 0x98, 0xa3, 0x38, 0xe6, 0x04, 0x8e, 0xd9, 0xef, 0x56, 0xe9, 0xba, 0x4d, + 0xf7, 0x06, 0x43, 0xb5, 0xd9, 0xd9, 0x62, 0xbf, 0xd8, 0x0f, 0xf6, 0x1f, 0x27, 0x31, 0xfb, 0xd8, + 0xce, 0x07, 0xfc, 0x39, 0xcb, 0xa5, 0x9d, 0xb9, 0x61, 0x74, 0x02, 0xd7, 0x37, 0x0d, 0xdb, 0x72, + 0x9a, 0x37, 0x76, 0x53, 0xbd, 0x99, 0xd5, 0x95, 0xaa, 0xa2, 0xdb, 0x5d, 0xeb, 0x78, 0x9b, 0x86, + 0x99, 0x55, 0xe7, 0xa9, 0xa8, 0x4e, 0xcb, 0x30, 0xb7, 0x2d, 0x87, 0x78, 0xfb, 0x72, 0x42, 0x6e, + 0x78, 0xc4, 0x77, 0x3b, 0x9e, 0x49, 0x4e, 0xd4, 0xca, 0xbf, 0xd1, 0x22, 0x81, 0x91, 0x45, 0xeb, + 0x46, 0x5e, 0x2b, 0xaf, 0xe3, 0x04, 0x56, 0x2b, 0x4d, 0xe6, 0xfb, 0x8e, 0x6a, 0xe0, 0x9b, 0xdb, + 0xa4, 0x65, 0xa4, 0xda, 0x7d, 0x6f, 0x5e, 0xbb, 0x4e, 0x60, 0xd9, 0x37, 0x2c, 0x27, 0xf0, 0x03, + 0x2f, 0xd9, 0x48, 0x7f, 0x4b, 0x83, 0xc9, 0xf9, 0xb5, 0x5a, 0x9d, 0x78, 0xbb, 0xc4, 0x5b, 0x76, + 0x9b, 0x4d, 0xcb, 0x69, 0xa2, 0xc7, 0x61, 0x64, 0x97, 0x78, 0x9b, 0xae, 0x6f, 0x05, 0xfb, 0x33, + 0xda, 0x75, 0xed, 0xd1, 0x81, 0x85, 0xf1, 0xc3, 0x83, 0xf2, 0xc8, 0x0b, 0xb2, 0x10, 0x47, 0x70, + 0x54, 0x83, 0x8b, 0xdb, 0x41, 0xd0, 0x9e, 0x37, 0x4d, 0xe2, 0xfb, 0x61, 0x8d, 0x99, 0x12, 0x6b, + 0xf6, 0xc0, 0xe1, 0x41, 0xf9, 0xe2, 0xed, 0xf5, 0xf5, 0xb5, 0x04, 0x18, 0x67, 0xb5, 0xd1, 0x7f, + 0x43, 0x83, 0xa9, 0xb0, 0x33, 0x98, 0xbc, 0xd6, 0x21, 0x7e, 0xe0, 0x23, 0x0c, 0x97, 0x5b, 0xc6, + 0xde, 0xaa, 0xeb, 0xac, 0x74, 0x02, 0x23, 0xb0, 0x9c, 0x66, 0xcd, 0xd9, 0xb2, 0xad, 0xe6, 0x76, + 0x20, 0xba, 0x36, 0x7b, 0x78, 0x50, 0xbe, 0xbc, 0x92, 0x59, 0x03, 0xe7, 0xb4, 0xa4, 0x9d, 0x6e, + 0x19, 0x7b, 0x29, 0x84, 0x4a, 0xa7, 0x57, 0xd2, 0x60, 0x9c, 0xd5, 0x46, 0x7f, 0x12, 0x06, 0xe6, + 0x1b, 0x0d, 0xd7, 0x41, 0x8f, 0xc1, 0x10, 0x71, 0x8c, 0x4d, 0x9b, 0x34, 0x58, 0xc7, 0x86, 0x17, + 0x2e, 0x7c, 0xe1, 0xa0, 0xfc, 0xae, 0xc3, 0x83, 0xf2, 0xd0, 0x22, 0x2f, 0xc6, 0x12, 0xae, 0xff, + 0x42, 0x09, 0x06, 0x59, 0x23, 0x1f, 0x7d, 0x52, 0x83, 0x8b, 0x3b, 0x9d, 0x4d, 0xe2, 0x39, 0x24, + 0x20, 0x7e, 0xd5, 0xf0, 0xb7, 0x37, 0x5d, 0xc3, 0xe3, 0x28, 0x46, 0x9f, 0xbc, 0x35, 0x77, 0xf2, + 0xfd, 0x37, 0x77, 0x27, 0x8d, 0x8e, 0x8f, 0x29, 0x03, 0x80, 0xb3, 0x88, 0xa3, 0x5d, 0x18, 0x73, + 0x9a, 0x96, 0xb3, 0x57, 0x73, 0x9a, 0x1e, 0xf1, 0x7d, 0x36, 0x2f, 0xa3, 0x4f, 0x7e, 0xb8, 0x48, + 0x67, 0x56, 0x15, 0x3c, 0x0b, 0x93, 0x87, 0x07, 0xe5, 0x31, 0xb5, 0x04, 0xc7, 0xe8, 0xe8, 0x7f, + 0xad, 0xc1, 0x85, 0xf9, 0x46, 0xcb, 0xf2, 0x7d, 0xcb, 0x75, 0xd6, 0xec, 0x4e, 0xd3, 0x72, 0xd0, + 0x75, 0xe8, 0x77, 0x8c, 0x16, 0x61, 0x13, 0x32, 0xb2, 0x30, 0x26, 0xe6, 0xb4, 0x7f, 0xd5, 0x68, + 0x11, 0xcc, 0x20, 0xe8, 0x79, 0x18, 0x34, 0x5d, 0x67, 0xcb, 0x6a, 0x8a, 0x7e, 0x7e, 0xf7, 0x1c, + 0xdf, 0x09, 0x73, 0xea, 0x4e, 0x60, 0xdd, 0x13, 0x3b, 0x68, 0x0e, 0x1b, 0xf7, 0x16, 0xf7, 0x02, + 0xe2, 0x50, 0x32, 0x0b, 0x70, 0x78, 0x50, 0x1e, 0xac, 0x30, 0x04, 0x58, 0x20, 0x42, 0x8f, 0xc2, + 0x70, 0xc3, 0xf2, 0xf9, 0xc7, 0xec, 0x63, 0x1f, 0x73, 0xec, 0xf0, 0xa0, 0x3c, 0x5c, 0x15, 0x65, + 0x38, 0x84, 0xa2, 0x65, 0xb8, 0x44, 0x67, 0x90, 0xb7, 0xab, 0x13, 0xd3, 0x23, 0x01, 0xed, 0xda, + 0x4c, 0x3f, 0xeb, 0xee, 0xcc, 0xe1, 0x41, 0xf9, 0xd2, 0x9d, 0x0c, 0x38, 0xce, 0x6c, 0xa5, 0x2f, + 0xc1, 0xf0, 0xbc, 0x4d, 0x3c, 0xba, 0xc0, 0xd0, 0x4d, 0x98, 0x20, 0x2d, 0xc3, 0xb2, 0x31, 0x31, + 0x89, 0xb5, 0x4b, 0x3c, 0x7f, 0x46, 0xbb, 0xde, 0xf7, 0xe8, 0xc8, 0x02, 0x3a, 0x3c, 0x28, 0x4f, + 0x2c, 0xc6, 0x20, 0x38, 0x51, 0x53, 0xff, 0x98, 0x06, 0xa3, 0xf3, 0x9d, 0x86, 0x15, 0xf0, 0x71, + 0x21, 0x0f, 0x46, 0x0d, 0xfa, 0x73, 0xcd, 0xb5, 0x2d, 0x73, 0x5f, 0x2c, 0xae, 0xe7, 0x8a, 0x7c, + 0xcf, 0xf9, 0x08, 0xcd, 0xc2, 0x85, 0xc3, 0x83, 0xf2, 0xa8, 0x52, 0x80, 0x55, 0x22, 0xfa, 0x36, + 0xa8, 0x30, 0xf4, 0x83, 0x30, 0xc6, 0x87, 0xbb, 0x62, 0xb4, 0x31, 0xd9, 0x12, 0x7d, 0x78, 0x58, + 0xf9, 0x56, 0x92, 0xd0, 0xdc, 0xdd, 0xcd, 0x57, 0x89, 0x19, 0x60, 0xb2, 0x45, 0x3c, 0xe2, 0x98, + 0x84, 0x2f, 0x9b, 0x8a, 0xd2, 0x18, 0xc7, 0x50, 0xe9, 0x7f, 0x42, 0x99, 0xd8, 0xae, 0x61, 0xd9, + 0xc6, 0xa6, 0x65, 0x5b, 0xc1, 0xfe, 0xcb, 0xae, 0x43, 0x8e, 0xb1, 0x6e, 0x36, 0xe0, 0x81, 0x8e, + 0x63, 0xf0, 0x76, 0x36, 0x59, 0xe1, 0x2b, 0x65, 0x7d, 0xbf, 0x4d, 0xe8, 0x82, 0xa7, 0x33, 0x7d, + 0xe5, 0xf0, 0xa0, 0xfc, 0xc0, 0x46, 0x76, 0x15, 0x9c, 0xd7, 0x96, 0xf2, 0x2b, 0x05, 0xf4, 0x82, + 0x6b, 0x77, 0x5a, 0x02, 0x6b, 0x1f, 0xc3, 0xca, 0xf8, 0xd5, 0x46, 0x66, 0x0d, 0x9c, 0xd3, 0x52, + 0xff, 0x42, 0x09, 0xc6, 0x16, 0x0c, 0x73, 0xa7, 0xd3, 0x5e, 0xe8, 0x98, 0x3b, 0x24, 0x40, 0x3f, + 0x0a, 0xc3, 0xf4, 0xc0, 0x69, 0x18, 0x81, 0x21, 0x66, 0xf2, 0x7b, 0x72, 0x57, 0x3d, 0xfb, 0x88, + 0xb4, 0x76, 0x34, 0xb7, 0x2b, 0x24, 0x30, 0x16, 0x90, 0x98, 0x13, 0x88, 0xca, 0x70, 0x88, 0x15, + 0x6d, 0x41, 0xbf, 0xdf, 0x26, 0xa6, 0xd8, 0x53, 0xd5, 0x22, 0x6b, 0x45, 0xed, 0x71, 0xbd, 0x4d, + 0xcc, 0xe8, 0x2b, 0xd0, 0x5f, 0x98, 0xe1, 0x47, 0x0e, 0x0c, 0xfa, 0x81, 0x11, 0x74, 0x7c, 0xb6, + 0xd1, 0x46, 0x9f, 0x5c, 0xea, 0x99, 0x12, 0xc3, 0xb6, 0x30, 0x21, 0x68, 0x0d, 0xf2, 0xdf, 0x58, + 0x50, 0xd1, 0xff, 0xbd, 0x06, 0x93, 0x6a, 0xf5, 0x65, 0xcb, 0x0f, 0xd0, 0x0f, 0xa7, 0xa6, 0x73, + 0xee, 0x78, 0xd3, 0x49, 0x5b, 0xb3, 0xc9, 0x9c, 0x14, 0xe4, 0x86, 0x65, 0x89, 0x32, 0x95, 0x04, + 0x06, 0xac, 0x80, 0xb4, 0xf8, 0xb2, 0x2a, 0xc8, 0x47, 0xd5, 0x2e, 0x2f, 0x8c, 0x0b, 0x62, 0x03, + 0x35, 0x8a, 0x16, 0x73, 0xec, 0xfa, 0x8f, 0xc2, 0x25, 0xb5, 0xd6, 0x9a, 0xe7, 0xee, 0x5a, 0x0d, + 0xe2, 0xd1, 0x9d, 0x10, 0xec, 0xb7, 0x53, 0x3b, 0x81, 0xae, 0x2c, 0xcc, 0x20, 0xe8, 0xbd, 0x30, + 0xe8, 0x91, 0xa6, 0xe5, 0x3a, 0xec, 0x6b, 0x8f, 0x44, 0x73, 0x87, 0x59, 0x29, 0x16, 0x50, 0xfd, + 0x7f, 0x97, 0xe2, 0x73, 0x47, 0x3f, 0x23, 0xda, 0x85, 0xe1, 0xb6, 0x20, 0x25, 0xe6, 0xee, 0x76, + 0xaf, 0x03, 0x94, 0x5d, 0x8f, 0x66, 0x55, 0x96, 0xe0, 0x90, 0x16, 0xb2, 0x60, 0x42, 0xfe, 0x5f, + 0xe9, 0x81, 0xfd, 0x33, 0x76, 0xba, 0x16, 0x43, 0x84, 0x13, 0x88, 0xd1, 0x3a, 0x8c, 0xf8, 0x8c, + 0x49, 0x53, 0xc6, 0xd5, 0x97, 0xcf, 0xb8, 0xea, 0xb2, 0x92, 0x60, 0x5c, 0x53, 0xa2, 0xfb, 0x23, + 0x21, 0x00, 0x47, 0x88, 0xe8, 0x21, 0xe3, 0x13, 0xd2, 0x50, 0x8e, 0x0b, 0x76, 0xc8, 0xd4, 0x45, + 0x19, 0x0e, 0xa1, 0xfa, 0x67, 0xfb, 0x01, 0xa5, 0x97, 0xb8, 0x3a, 0x03, 0xbc, 0x44, 0xcc, 0x7f, + 0x2f, 0x33, 0x20, 0x76, 0x4b, 0x02, 0x31, 0x7a, 0x1d, 0xc6, 0x6d, 0xc3, 0x0f, 0xee, 0xb6, 0xa9, + 0xf4, 0x28, 0x17, 0xca, 0xe8, 0x93, 0xf3, 0x45, 0xbe, 0xf4, 0xb2, 0x8a, 0x68, 0x61, 0xea, 0xf0, + 0xa0, 0x3c, 0x1e, 0x2b, 0xc2, 0x71, 0x52, 0xe8, 0x55, 0x18, 0xa1, 0x05, 0x8b, 0x9e, 0xe7, 0x7a, + 0x62, 0xf6, 0x9f, 0x2d, 0x4a, 0x97, 0x21, 0xe1, 0xd2, 0x6c, 0xf8, 0x13, 0x47, 0xe8, 0xd1, 0x0f, + 0x00, 0x72, 0x37, 0x7d, 0x2a, 0x80, 0x36, 0x6e, 0x71, 0x51, 0x99, 0x0e, 0x96, 0x7e, 0x9d, 0xbe, + 0x85, 0x59, 0xf1, 0x35, 0xd1, 0xdd, 0x54, 0x0d, 0x9c, 0xd1, 0x0a, 0xed, 0x00, 0x0a, 0xc5, 0xed, + 0x70, 0x01, 0xcc, 0x0c, 0x1c, 0x7f, 0xf9, 0x5c, 0xa6, 0xc4, 0x6e, 0xa5, 0x50, 0xe0, 0x0c, 0xb4, + 0xfa, 0xef, 0x95, 0x60, 0x94, 0x2f, 0x91, 0x45, 0x27, 0xf0, 0xf6, 0xcf, 0xe1, 0x80, 0x20, 0xb1, + 0x03, 0xa2, 0x52, 0x7c, 0xcf, 0xb3, 0x0e, 0xe7, 0x9e, 0x0f, 0xad, 0xc4, 0xf9, 0xb0, 0xd8, 0x2b, + 0xa1, 0xee, 0xc7, 0xc3, 0xbf, 0xd3, 0xe0, 0x82, 0x52, 0xfb, 0x1c, 0x4e, 0x87, 0x46, 0xfc, 0x74, + 0x78, 0xae, 0xc7, 0xf1, 0xe5, 0x1c, 0x0e, 0x6e, 0x6c, 0x58, 0x8c, 0x71, 0x3f, 0x09, 0xb0, 0xc9, + 0xd8, 0xc9, 0x6a, 0x24, 0x27, 0x85, 0x9f, 0x7c, 0x21, 0x84, 0x60, 0xa5, 0x56, 0x8c, 0x67, 0x95, + 0xba, 0xf2, 0xac, 0xff, 0xda, 0x07, 0x53, 0xa9, 0x69, 0x4f, 0xf3, 0x11, 0xed, 0x5b, 0xc4, 0x47, + 0x4a, 0xdf, 0x0a, 0x3e, 0xd2, 0x57, 0x88, 0x8f, 0x1c, 0xfb, 0x9c, 0x40, 0x1e, 0xa0, 0x96, 0xd5, + 0xe4, 0xcd, 0xea, 0x81, 0xe1, 0x05, 0xeb, 0x56, 0x8b, 0x08, 0x8e, 0xf3, 0x5d, 0xc7, 0x5b, 0xb2, + 0xb4, 0x05, 0x67, 0x3c, 0x2b, 0x29, 0x4c, 0x38, 0x03, 0xbb, 0xfe, 0x95, 0x7e, 0x80, 0xca, 0x3c, + 0x76, 0x03, 0xde, 0xd9, 0xe7, 0x60, 0xa0, 0xbd, 0x6d, 0xf8, 0x72, 0x3d, 0x3d, 0x26, 0x17, 0xe3, + 0x1a, 0x2d, 0xbc, 0x7f, 0x50, 0x9e, 0xa9, 0x78, 0xa4, 0x41, 0x9c, 0xc0, 0x32, 0x6c, 0x5f, 0x36, + 0x62, 0x30, 0xcc, 0xdb, 0xd1, 0x31, 0xd0, 0x69, 0xac, 0xb8, 0xad, 0xb6, 0x4d, 0x28, 0x94, 0x8d, + 0xa1, 0x54, 0x6c, 0x0c, 0xcb, 0x29, 0x4c, 0x38, 0x03, 0xbb, 0xa4, 0x59, 0x73, 0xac, 0xc0, 0x32, + 0x42, 0x9a, 0x7d, 0xc5, 0x69, 0xc6, 0x31, 0xe1, 0x0c, 0xec, 0xe8, 0x2d, 0x0d, 0x66, 0xe3, 0xc5, + 0x4b, 0x96, 0x63, 0xf9, 0xdb, 0xa4, 0xc1, 0x88, 0xf7, 0x9f, 0x98, 0xf8, 0xb5, 0xc3, 0x83, 0xf2, + 0xec, 0x72, 0x2e, 0x46, 0xdc, 0x85, 0x1a, 0xfa, 0x84, 0x06, 0x57, 0x12, 0xf3, 0xe2, 0x59, 0xcd, + 0x26, 0xf1, 0x44, 0x6f, 0x4e, 0xbe, 0x84, 0xca, 0x87, 0x07, 0xe5, 0x2b, 0xcb, 0xf9, 0x28, 0x71, + 0x37, 0x7a, 0xfa, 0xe7, 0x35, 0xe8, 0xab, 0xe0, 0x1a, 0x7a, 0x3c, 0xa6, 0xc4, 0x3d, 0xa0, 0x2a, + 0x71, 0xf7, 0x0f, 0xca, 0x43, 0x15, 0x5c, 0x53, 0xf4, 0xb9, 0x4f, 0x68, 0x30, 0x65, 0xba, 0x4e, + 0x60, 0xd0, 0x7e, 0x61, 0x2e, 0xe9, 0x48, 0xae, 0x5a, 0x48, 0x7f, 0xa9, 0x24, 0x90, 0x2d, 0x3c, + 0x28, 0x3a, 0x30, 0x95, 0x84, 0xf8, 0x38, 0x4d, 0x59, 0xff, 0x9a, 0x06, 0x63, 0x15, 0xdb, 0xed, + 0x34, 0xd6, 0x3c, 0x77, 0xcb, 0xb2, 0xc9, 0x3b, 0x43, 0x69, 0x53, 0x7b, 0x9c, 0x77, 0x28, 0x33, + 0x25, 0x4a, 0xad, 0xf8, 0x0e, 0x51, 0xa2, 0xd4, 0x2e, 0xe7, 0x9c, 0x93, 0x3f, 0x04, 0xd3, 0x6a, + 0xad, 0x50, 0x18, 0xa3, 0x5a, 0xd4, 0x8e, 0xe5, 0x34, 0x92, 0x5a, 0xd4, 0x1d, 0xcb, 0x69, 0x60, + 0x06, 0x09, 0x2d, 0x0e, 0xa5, 0x3c, 0x8b, 0x83, 0xfe, 0x0b, 0x43, 0xf1, 0x69, 0x63, 0xc7, 0xf0, + 0xa3, 0x30, 0x6c, 0x1a, 0x0b, 0x1d, 0xa7, 0x61, 0x87, 0x2a, 0x1a, 0x9d, 0x82, 0xca, 0x3c, 0x2f, + 0xc3, 0x21, 0x14, 0xbd, 0x0e, 0x10, 0x59, 0xeb, 0xc4, 0x37, 0x5e, 0xea, 0xcd, 0x42, 0x58, 0x27, + 0x41, 0x60, 0x39, 0x4d, 0x3f, 0x5a, 0x57, 0x11, 0x0c, 0x2b, 0xd4, 0xd0, 0x8f, 0xc1, 0xb8, 0xf8, + 0x82, 0xb5, 0x96, 0xd1, 0x14, 0xc6, 0x8c, 0x82, 0x9f, 0x61, 0x45, 0x41, 0xb4, 0x30, 0x2d, 0x08, + 0x8f, 0xab, 0xa5, 0x3e, 0x8e, 0x53, 0x43, 0xfb, 0x30, 0xd6, 0x52, 0x0d, 0x34, 0xfd, 0xc5, 0x65, + 0x25, 0xc5, 0x58, 0xb3, 0x70, 0x49, 0x10, 0x1f, 0x8b, 0x99, 0x76, 0x62, 0xa4, 0x32, 0xf4, 0xcc, + 0x81, 0xb3, 0xd2, 0x33, 0x09, 0x0c, 0x71, 0x4d, 0xdb, 0x9f, 0x19, 0x64, 0x03, 0xbc, 0x59, 0x64, + 0x80, 0x5c, 0x69, 0x8f, 0xcc, 0xcf, 0xfc, 0xb7, 0x8f, 0x25, 0x6e, 0xb4, 0x0b, 0x63, 0x54, 0x64, + 0xa8, 0x13, 0x9b, 0x98, 0x81, 0xeb, 0xcd, 0x0c, 0x15, 0x37, 0xef, 0xd6, 0x15, 0x3c, 0xdc, 0x4e, + 0xa7, 0x96, 0xe0, 0x18, 0x9d, 0xd0, 0x10, 0x31, 0x9c, 0x6b, 0x88, 0xe8, 0xc0, 0xe8, 0xae, 0x62, + 0x30, 0x1b, 0x61, 0x93, 0xf0, 0xa1, 0x22, 0x1d, 0x8b, 0xac, 0x67, 0x0b, 0x17, 0x05, 0xa1, 0x51, + 0xd5, 0xd2, 0xa6, 0xd2, 0xd1, 0x3f, 0x37, 0x0a, 0x53, 0x15, 0xbb, 0xe3, 0x07, 0xc4, 0x9b, 0x17, + 0x37, 0x50, 0xc4, 0x43, 0x1f, 0xd7, 0xe0, 0x32, 0xfb, 0xb7, 0xea, 0xde, 0x73, 0xaa, 0xc4, 0x36, + 0xf6, 0xe7, 0xb7, 0x68, 0x8d, 0x46, 0xe3, 0x64, 0xec, 0xad, 0xda, 0x11, 0x22, 0x2a, 0xb3, 0xfc, + 0xd5, 0x33, 0x31, 0xe2, 0x1c, 0x4a, 0xe8, 0x67, 0x34, 0x78, 0x30, 0x03, 0x54, 0x25, 0x36, 0x09, + 0xa4, 0x58, 0x74, 0xd2, 0x7e, 0x3c, 0x74, 0x78, 0x50, 0x7e, 0xb0, 0x9e, 0x87, 0x14, 0xe7, 0xd3, + 0x43, 0x7f, 0x5f, 0x83, 0xd9, 0x0c, 0xe8, 0x92, 0x61, 0xd9, 0x1d, 0x4f, 0x4a, 0x4c, 0x27, 0xed, + 0x0e, 0x13, 0x5c, 0xea, 0xb9, 0x58, 0x71, 0x17, 0x8a, 0xe8, 0xa3, 0x30, 0x1d, 0x42, 0x37, 0x1c, + 0x87, 0x90, 0x46, 0x4c, 0x7e, 0x3a, 0x69, 0x57, 0x1e, 0x3c, 0x3c, 0x28, 0x4f, 0xd7, 0xb3, 0x10, + 0xe2, 0x6c, 0x3a, 0xa8, 0x09, 0x0f, 0x45, 0x80, 0xc0, 0xb2, 0xad, 0xd7, 0xb9, 0x88, 0xb7, 0xed, + 0x11, 0x7f, 0xdb, 0xb5, 0x1b, 0x8c, 0x59, 0x68, 0x0b, 0xef, 0x3e, 0x3c, 0x28, 0x3f, 0x54, 0xef, + 0x56, 0x11, 0x77, 0xc7, 0x83, 0x1a, 0x30, 0xe6, 0x9b, 0x86, 0x53, 0x73, 0x02, 0xe2, 0xed, 0x1a, + 0xf6, 0xcc, 0x60, 0xa1, 0x01, 0xf2, 0x2d, 0xaa, 0xe0, 0xc1, 0x31, 0xac, 0xe8, 0x03, 0x30, 0x4c, + 0xf6, 0xda, 0x86, 0xd3, 0x20, 0x9c, 0x2d, 0x8c, 0x2c, 0x5c, 0xa5, 0x87, 0xd1, 0xa2, 0x28, 0xbb, + 0x7f, 0x50, 0x1e, 0x93, 0xff, 0xaf, 0xb8, 0x0d, 0x82, 0xc3, 0xda, 0xe8, 0x23, 0x70, 0x89, 0x5d, + 0xb6, 0x35, 0x08, 0x63, 0x72, 0xbe, 0x94, 0xa2, 0x87, 0x0b, 0xf5, 0x93, 0x5d, 0x9c, 0xac, 0x64, + 0xe0, 0xc3, 0x99, 0x54, 0xe8, 0x67, 0x68, 0x19, 0x7b, 0xb7, 0x3c, 0xc3, 0x24, 0x5b, 0x1d, 0x7b, + 0x9d, 0x78, 0x2d, 0xcb, 0xe1, 0x8a, 0x0a, 0x31, 0x5d, 0xa7, 0x41, 0x59, 0x89, 0xf6, 0xe8, 0x00, + 0xff, 0x0c, 0x2b, 0xdd, 0x2a, 0xe2, 0xee, 0x78, 0xd0, 0x53, 0x30, 0x66, 0x35, 0x1d, 0xd7, 0x23, + 0xeb, 0x86, 0xe5, 0x04, 0xfe, 0x0c, 0x30, 0x9b, 0x3e, 0x9b, 0xd6, 0x9a, 0x52, 0x8e, 0x63, 0xb5, + 0xd0, 0x2e, 0x20, 0x87, 0xdc, 0x5b, 0x73, 0x1b, 0x6c, 0x09, 0x6c, 0xb4, 0xd9, 0x42, 0x9e, 0x19, + 0x2d, 0x34, 0x35, 0x4c, 0xc9, 0x58, 0x4d, 0x61, 0xc3, 0x19, 0x14, 0xd0, 0x12, 0xa0, 0x96, 0xb1, + 0xb7, 0xd8, 0x6a, 0x07, 0xfb, 0x0b, 0x1d, 0x7b, 0x47, 0x70, 0x8d, 0x31, 0x36, 0x17, 0x5c, 0xc9, + 0x4b, 0x41, 0x71, 0x46, 0x0b, 0x64, 0xc0, 0x15, 0x3e, 0x9e, 0xaa, 0x41, 0x5a, 0xae, 0xe3, 0x93, + 0xc0, 0x57, 0x16, 0xe9, 0xcc, 0x38, 0xbb, 0x22, 0x63, 0x22, 0x7f, 0x2d, 0xbf, 0x1a, 0xee, 0x86, + 0x23, 0x7e, 0xe9, 0x3c, 0xd1, 0xfd, 0xd2, 0x59, 0xff, 0x5f, 0xfd, 0x30, 0x93, 0x62, 0xd8, 0x77, + 0xdb, 0x01, 0x3b, 0xde, 0x8e, 0xdc, 0x92, 0xda, 0x29, 0x6d, 0xc9, 0x36, 0x5c, 0x0f, 0x2b, 0xdc, + 0x6a, 0x77, 0x32, 0x69, 0x95, 0x18, 0xad, 0x47, 0x0e, 0x0f, 0xca, 0xd7, 0xeb, 0x47, 0xd4, 0xc5, + 0x47, 0x62, 0xcb, 0x67, 0x77, 0x7d, 0xe7, 0xc4, 0xee, 0x3e, 0x02, 0x97, 0x14, 0x80, 0x47, 0x8c, + 0xc6, 0x7e, 0x0f, 0xec, 0x96, 0xed, 0xf2, 0x7a, 0x06, 0x3e, 0x9c, 0x49, 0x25, 0x97, 0xc7, 0x0c, + 0x9c, 0x07, 0x8f, 0xd1, 0x0f, 0xfa, 0x60, 0xa4, 0xe2, 0x3a, 0x0d, 0x8b, 0xad, 0xd7, 0x27, 0x62, + 0xb7, 0x2a, 0x0f, 0xa9, 0xc2, 0xcc, 0xfd, 0x83, 0xf2, 0x78, 0x58, 0x51, 0x91, 0x6e, 0x9e, 0x09, + 0x4d, 0x99, 0x5c, 0x45, 0x78, 0x77, 0xdc, 0x06, 0x79, 0xff, 0xa0, 0x7c, 0x21, 0x6c, 0x16, 0x37, + 0x4b, 0x52, 0x06, 0x42, 0xf5, 0xe5, 0x75, 0xcf, 0x70, 0x7c, 0xab, 0x07, 0x0b, 0x45, 0x68, 0x7b, + 0x5a, 0x4e, 0x61, 0xc3, 0x19, 0x14, 0xd0, 0xab, 0x30, 0x41, 0x4b, 0x37, 0xda, 0x0d, 0x23, 0x20, + 0x05, 0x0d, 0x13, 0x97, 0x05, 0xcd, 0x89, 0xe5, 0x18, 0x26, 0x9c, 0xc0, 0xcc, 0x6f, 0xa1, 0x0c, + 0xdf, 0x75, 0xd8, 0xf7, 0x8c, 0xdd, 0x42, 0xd1, 0x52, 0x2c, 0xa0, 0xe8, 0x31, 0x18, 0x6a, 0x11, + 0xdf, 0x37, 0x9a, 0x84, 0x1d, 0x82, 0x23, 0x91, 0xa4, 0xbb, 0xc2, 0x8b, 0xb1, 0x84, 0xa3, 0xf7, + 0xc1, 0x80, 0xe9, 0x36, 0x88, 0x3f, 0x33, 0xc4, 0xd8, 0x34, 0x65, 0x79, 0x03, 0x15, 0x5a, 0x70, + 0xff, 0xa0, 0x3c, 0xc2, 0x2c, 0x75, 0xf4, 0x17, 0xe6, 0x95, 0xf4, 0x5f, 0xa2, 0x5a, 0x6d, 0x42, + 0x8d, 0x3f, 0xc6, 0xed, 0xd9, 0xf9, 0x5d, 0x44, 0xe9, 0x9f, 0xd2, 0x60, 0x8c, 0xf6, 0xd0, 0x73, + 0xed, 0x35, 0xdb, 0x70, 0x08, 0xfa, 0x29, 0x0d, 0x26, 0xb7, 0xad, 0xe6, 0xb6, 0x7a, 0xfd, 0x2d, + 0xa4, 0xd3, 0x42, 0xda, 0xff, 0xed, 0x04, 0xae, 0x85, 0x4b, 0x87, 0x07, 0xe5, 0xc9, 0x64, 0x29, + 0x4e, 0xd1, 0xd4, 0xdf, 0x2c, 0xc1, 0x25, 0xd1, 0x33, 0x9b, 0x8a, 0x8b, 0x6d, 0xdb, 0xdd, 0x6f, + 0x11, 0xe7, 0x3c, 0x6e, 0xaa, 0xe5, 0x17, 0x2a, 0xe5, 0x7e, 0xa1, 0x56, 0xea, 0x0b, 0xf5, 0x15, + 0xf9, 0x42, 0xe1, 0x42, 0x3e, 0xe2, 0x2b, 0xfd, 0x99, 0x06, 0x33, 0x59, 0x73, 0x71, 0x0e, 0x56, + 0x92, 0x56, 0xdc, 0x4a, 0x72, 0xbb, 0xa8, 0xd9, 0x2b, 0xd9, 0xf5, 0x1c, 0x6b, 0xc9, 0x9f, 0x96, + 0xe0, 0x72, 0x54, 0xbd, 0xe6, 0xf8, 0x81, 0x61, 0xdb, 0xfc, 0x3c, 0x3f, 0xfb, 0xef, 0xde, 0x8e, + 0x19, 0xbb, 0x56, 0x7b, 0x1b, 0xaa, 0xda, 0xf7, 0xdc, 0xbb, 0xa8, 0xbd, 0xc4, 0x5d, 0xd4, 0xda, + 0x29, 0xd2, 0xec, 0x7e, 0x2d, 0xf5, 0xdf, 0x35, 0x98, 0xcd, 0x6e, 0x78, 0x0e, 0x8b, 0xca, 0x8d, + 0x2f, 0xaa, 0x1f, 0x38, 0xbd, 0x51, 0xe7, 0x2c, 0xab, 0xdf, 0x28, 0xe5, 0x8d, 0x96, 0x59, 0xcc, + 0xb6, 0xe0, 0x82, 0x47, 0x9a, 0x96, 0x1f, 0x88, 0x4b, 0x93, 0x93, 0x79, 0x13, 0x49, 0x2b, 0xf2, + 0x05, 0x1c, 0xc7, 0x81, 0x93, 0x48, 0xd1, 0x2a, 0x0c, 0xf9, 0x84, 0x34, 0x28, 0xfe, 0xd2, 0xf1, + 0xf1, 0x87, 0xa7, 0x51, 0x9d, 0xb7, 0xc5, 0x12, 0x09, 0xfa, 0x61, 0x18, 0x6f, 0x84, 0x3b, 0xea, + 0x08, 0x57, 0x82, 0x24, 0x56, 0x76, 0xbd, 0x55, 0x55, 0x5b, 0xe3, 0x38, 0x32, 0xfd, 0xaf, 0x34, + 0xb8, 0xda, 0x6d, 0x6d, 0xa1, 0xd7, 0x00, 0x4c, 0x29, 0x5e, 0x70, 0x67, 0xb2, 0x82, 0x17, 0x60, + 0xa1, 0x90, 0x12, 0x6d, 0xd0, 0xb0, 0xc8, 0xc7, 0x0a, 0x91, 0x0c, 0x0f, 0x85, 0xd2, 0x19, 0x79, + 0x28, 0xe8, 0xff, 0x43, 0x53, 0x59, 0x91, 0xfa, 0x6d, 0xdf, 0x69, 0xac, 0x48, 0xed, 0x7b, 0xae, + 0x05, 0xfe, 0xab, 0x25, 0xb8, 0x9e, 0xdd, 0x44, 0x39, 0x7b, 0x3f, 0x0c, 0x83, 0x6d, 0xee, 0xf1, + 0xd7, 0xc7, 0xce, 0xc6, 0x47, 0x29, 0x67, 0xe1, 0xfe, 0x78, 0xf7, 0x0f, 0xca, 0xb3, 0x59, 0x8c, + 0x5e, 0x78, 0xf2, 0x89, 0x76, 0xc8, 0x4a, 0x98, 0x0a, 0xb9, 0xf4, 0xf7, 0xbd, 0xc7, 0x64, 0x2e, + 0xc6, 0x26, 0xb1, 0x8f, 0x6d, 0x1d, 0xfc, 0x98, 0x06, 0x13, 0xb1, 0x15, 0xed, 0xcf, 0x0c, 0xb0, + 0x35, 0x5a, 0xe8, 0x72, 0x38, 0xb6, 0x55, 0xa2, 0x93, 0x3b, 0x56, 0xec, 0xe3, 0x04, 0xc1, 0x04, + 0x9b, 0x55, 0x67, 0xf5, 0x1d, 0xc7, 0x66, 0xd5, 0xce, 0xe7, 0xb0, 0xd9, 0x5f, 0x2c, 0xe5, 0x8d, + 0x96, 0xb1, 0xd9, 0x7b, 0x30, 0x22, 0x7d, 0xe1, 0x25, 0xbb, 0x58, 0xea, 0xb5, 0x4f, 0x1c, 0x5d, + 0xe4, 0x18, 0x25, 0x4b, 0x7c, 0x1c, 0xd1, 0x42, 0x3f, 0xa1, 0x01, 0x44, 0x1f, 0x46, 0x6c, 0xaa, + 0xf5, 0xd3, 0x9b, 0x0e, 0x45, 0xac, 0x99, 0xa0, 0x5b, 0x5a, 0x59, 0x14, 0x0a, 0x5d, 0xfd, 0xff, + 0xf4, 0x01, 0x4a, 0xf7, 0xfd, 0x78, 0x17, 0x41, 0x47, 0x08, 0xa4, 0xcf, 0xc2, 0x85, 0xa6, 0xed, + 0x6e, 0x1a, 0xb6, 0xbd, 0x2f, 0x9c, 0xc3, 0x85, 0x9b, 0xf1, 0x45, 0x7a, 0x30, 0xdd, 0x8a, 0x83, + 0x70, 0xb2, 0x2e, 0x6a, 0xc3, 0xa4, 0x47, 0x4c, 0xd7, 0x31, 0x2d, 0x9b, 0xa9, 0x4e, 0x6e, 0x27, + 0x28, 0xa8, 0x81, 0x33, 0xf1, 0x1e, 0x27, 0x70, 0xe1, 0x14, 0x76, 0xf4, 0x1e, 0x18, 0x6a, 0x7b, + 0x56, 0xcb, 0xf0, 0xf6, 0x99, 0x72, 0x36, 0xbc, 0x30, 0x4a, 0x4f, 0xb8, 0x35, 0x5e, 0x84, 0x25, + 0x0c, 0x7d, 0x04, 0x46, 0x6c, 0x6b, 0x8b, 0x98, 0xfb, 0xa6, 0x4d, 0x84, 0x85, 0xf2, 0xee, 0xe9, + 0x2c, 0x99, 0x65, 0x89, 0x56, 0x38, 0x5d, 0xc8, 0x9f, 0x38, 0x22, 0x88, 0x6a, 0x70, 0xf1, 0x9e, + 0xeb, 0xed, 0x10, 0xcf, 0x26, 0xbe, 0x5f, 0xef, 0xb4, 0xdb, 0xae, 0x17, 0x90, 0x06, 0xb3, 0x63, + 0x0e, 0x73, 0x0f, 0xf8, 0x17, 0xd3, 0x60, 0x9c, 0xd5, 0x46, 0x7f, 0xab, 0x04, 0x57, 0xba, 0x74, + 0x02, 0x61, 0xba, 0x37, 0xc4, 0x1c, 0x89, 0x95, 0xf0, 0x14, 0x5f, 0xcf, 0xa2, 0xf0, 0xfe, 0x41, + 0xf9, 0xe1, 0x2e, 0x08, 0xea, 0x74, 0x29, 0x92, 0xe6, 0x3e, 0x8e, 0xd0, 0xa0, 0x1a, 0x0c, 0x36, + 0x22, 0xb3, 0xfe, 0xc8, 0xc2, 0x13, 0x94, 0x5b, 0x73, 0x03, 0xdc, 0x71, 0xb1, 0x09, 0x04, 0x68, + 0x19, 0x86, 0xb8, 0xab, 0x06, 0x11, 0x9c, 0xff, 0x49, 0xa6, 0x1e, 0xf3, 0xa2, 0xe3, 0x22, 0x93, + 0x28, 0xf4, 0xbf, 0xd4, 0x60, 0xa8, 0xe2, 0x7a, 0xa4, 0xba, 0x5a, 0x47, 0xfb, 0x30, 0xaa, 0x04, + 0xe9, 0x08, 0x2e, 0x58, 0x90, 0x2d, 0x30, 0x8c, 0xf3, 0x11, 0x36, 0xe9, 0x50, 0x1e, 0x16, 0x60, + 0x95, 0x16, 0x7a, 0x8d, 0xce, 0xf9, 0x3d, 0xcf, 0x0a, 0x28, 0xe1, 0x5e, 0x6e, 0xb8, 0x39, 0x61, + 0x2c, 0x71, 0xf1, 0x15, 0x15, 0xfe, 0xc4, 0x11, 0x15, 0x7d, 0x8d, 0x72, 0x80, 0x64, 0x37, 0xd1, + 0x4d, 0xe8, 0x6f, 0xb9, 0x0d, 0xf9, 0xdd, 0xdf, 0x2b, 0xf7, 0xf7, 0x8a, 0xdb, 0xa0, 0x73, 0x7b, + 0x39, 0xdd, 0x82, 0x99, 0xca, 0x59, 0x1b, 0x7d, 0x15, 0x26, 0x93, 0xf4, 0xd1, 0x4d, 0x98, 0x30, + 0xdd, 0x56, 0xcb, 0x75, 0xea, 0x9d, 0xad, 0x2d, 0x6b, 0x8f, 0xc4, 0x3c, 0xfd, 0x2b, 0x31, 0x08, + 0x4e, 0xd4, 0xd4, 0x3f, 0xa3, 0x41, 0x1f, 0xfd, 0x2e, 0x3a, 0x0c, 0x36, 0xdc, 0x96, 0x61, 0x39, + 0xa2, 0x57, 0x2c, 0xaa, 0xa1, 0xca, 0x4a, 0xb0, 0x80, 0xa0, 0x36, 0x8c, 0x48, 0xa1, 0xa9, 0x27, + 0x6f, 0xb3, 0xea, 0x6a, 0x3d, 0xf4, 0xd0, 0x0d, 0x39, 0xb9, 0x2c, 0xf1, 0x71, 0x44, 0x44, 0x37, + 0x60, 0xaa, 0xba, 0x5a, 0xaf, 0x39, 0xa6, 0xdd, 0x69, 0x90, 0xc5, 0x3d, 0xf6, 0x87, 0xf2, 0x12, + 0x8b, 0x97, 0x88, 0x71, 0x32, 0x5e, 0x22, 0x2a, 0x61, 0x09, 0xa3, 0xd5, 0x08, 0x6f, 0x21, 0xdc, + 0xf1, 0x59, 0x35, 0x81, 0x04, 0x4b, 0x98, 0xfe, 0xb5, 0x12, 0x8c, 0x2a, 0x1d, 0x42, 0x36, 0x0c, + 0xf1, 0xe1, 0x4a, 0x6f, 0xd8, 0xc5, 0x82, 0x43, 0x8c, 0xf7, 0x9a, 0x53, 0xe7, 0x13, 0xea, 0x63, + 0x49, 0x42, 0xe5, 0x8b, 0xa5, 0x2e, 0x7c, 0x71, 0x0e, 0xc0, 0x8f, 0x62, 0x43, 0xf8, 0x96, 0x64, + 0x47, 0x8f, 0x12, 0x11, 0xa2, 0xd4, 0x40, 0x57, 0xc5, 0x09, 0xc2, 0xdd, 0xbd, 0x86, 0x13, 0xa7, + 0xc7, 0x16, 0x0c, 0xbc, 0xee, 0x3a, 0xc4, 0x17, 0x76, 0xcf, 0x53, 0x1a, 0xe0, 0x08, 0x95, 0x0f, + 0x5e, 0xa6, 0x78, 0x31, 0x47, 0xaf, 0xff, 0xb2, 0x06, 0x50, 0x35, 0x02, 0x83, 0xdf, 0x9b, 0x1e, + 0x23, 0xa2, 0xe2, 0x6a, 0xec, 0xe0, 0x1b, 0x4e, 0x79, 0x99, 0xf7, 0xfb, 0xd6, 0xeb, 0x72, 0xf8, + 0xa1, 0x40, 0xcd, 0xb1, 0xd7, 0xad, 0xd7, 0x09, 0x66, 0x70, 0xf4, 0x38, 0x8c, 0x10, 0xc7, 0xf4, + 0xf6, 0xdb, 0x94, 0x79, 0xf7, 0xb3, 0x59, 0x65, 0x3b, 0x74, 0x51, 0x16, 0xe2, 0x08, 0xae, 0x3f, + 0x01, 0x71, 0xad, 0xe8, 0xe8, 0x5e, 0xea, 0xdf, 0xe8, 0x87, 0x07, 0x17, 0xd7, 0x2b, 0x55, 0x81, + 0xcf, 0x72, 0x9d, 0x3b, 0x64, 0xff, 0x3b, 0x0e, 0x6c, 0xdf, 0x71, 0x60, 0x3b, 0x45, 0x07, 0xb6, + 0xe7, 0x60, 0x32, 0x5a, 0x5e, 0xc2, 0xbb, 0xe3, 0xf1, 0xa4, 0x3c, 0x3d, 0x22, 0x4f, 0x9e, 0xb4, + 0x0c, 0xac, 0xdf, 0xd7, 0x60, 0x72, 0x71, 0xaf, 0x6d, 0x79, 0x2c, 0x14, 0x88, 0x78, 0x54, 0x0f, + 0x46, 0x8f, 0xc1, 0xd0, 0x2e, 0xff, 0x57, 0xac, 0xce, 0xd0, 0xd6, 0x20, 0x6a, 0x60, 0x09, 0x47, + 0x5b, 0x30, 0x41, 0x58, 0x73, 0x26, 0xf0, 0x1a, 0x41, 0x91, 0x15, 0xc8, 0x23, 0xcd, 0x62, 0x58, + 0x70, 0x02, 0x2b, 0xaa, 0xc3, 0x84, 0x69, 0x1b, 0xbe, 0x6f, 0x6d, 0x59, 0x66, 0xe4, 0xe4, 0x3a, + 0xb2, 0xf0, 0x38, 0x3b, 0xbb, 0x62, 0x90, 0xfb, 0x07, 0xe5, 0x69, 0xd1, 0xcf, 0x38, 0x00, 0x27, + 0x50, 0xe8, 0x6f, 0x97, 0x60, 0x7c, 0x71, 0xaf, 0xed, 0xfa, 0x1d, 0x8f, 0xb0, 0xaa, 0xe7, 0xa0, + 0xc2, 0x3f, 0x06, 0x43, 0xdb, 0x86, 0xd3, 0xb0, 0x89, 0x27, 0xd8, 0x57, 0x38, 0xb7, 0xb7, 0x79, + 0x31, 0x96, 0x70, 0xf4, 0x06, 0x80, 0x6f, 0x6e, 0x93, 0x46, 0x87, 0x89, 0x40, 0x7c, 0x97, 0xdd, + 0x29, 0xc2, 0x84, 0x63, 0x63, 0xac, 0x87, 0x28, 0xc5, 0xd1, 0x10, 0xfe, 0xc6, 0x0a, 0x39, 0xfd, + 0xeb, 0x1a, 0x4c, 0xc5, 0xda, 0x9d, 0x83, 0x66, 0xba, 0x15, 0xd7, 0x4c, 0xe7, 0x7b, 0x1e, 0x6b, + 0x8e, 0x42, 0xfa, 0xd3, 0x25, 0x78, 0x20, 0x67, 0x4e, 0x52, 0x4e, 0x4b, 0xda, 0x39, 0x39, 0x2d, + 0x75, 0x60, 0x34, 0x70, 0x6d, 0xe1, 0x8b, 0x2d, 0x67, 0xa0, 0x90, 0x4b, 0xd2, 0x7a, 0x88, 0x26, + 0x72, 0x49, 0x8a, 0xca, 0x7c, 0xac, 0xd2, 0xd1, 0x3f, 0xaf, 0xc1, 0x48, 0x68, 0x00, 0xfb, 0xb6, + 0xba, 0x84, 0x3a, 0x7e, 0x70, 0xac, 0xfe, 0x87, 0x25, 0xb8, 0x1c, 0xe2, 0x96, 0x6c, 0xae, 0x1e, + 0x50, 0xbe, 0x71, 0xb4, 0x16, 0x7d, 0x35, 0xe6, 0x4e, 0x39, 0x9c, 0x10, 0x35, 0xa8, 0xe0, 0xd5, + 0xf1, 0xda, 0xae, 0x2f, 0xe5, 0x09, 0x2e, 0x78, 0xf1, 0x22, 0x2c, 0x61, 0x68, 0x15, 0x06, 0x7c, + 0x4a, 0x4f, 0x1c, 0x47, 0x27, 0x9c, 0x0d, 0x26, 0x12, 0xb1, 0xfe, 0x62, 0x8e, 0x06, 0xbd, 0xa1, + 0xf2, 0xf0, 0x81, 0xe2, 0x76, 0x1a, 0x3a, 0x92, 0x86, 0x9c, 0x91, 0x8c, 0x80, 0xb1, 0xcc, 0x33, + 0x61, 0x19, 0x26, 0x85, 0xdf, 0x13, 0x5f, 0x36, 0x8e, 0x49, 0xd0, 0x07, 0x62, 0x2b, 0xe3, 0x91, + 0xc4, 0x35, 0xf4, 0xa5, 0x64, 0xfd, 0x68, 0xc5, 0xe8, 0x3e, 0x0c, 0xdf, 0x12, 0x9d, 0x44, 0xb3, + 0x50, 0xb2, 0xe4, 0xb7, 0x00, 0x81, 0xa3, 0x54, 0xab, 0xe2, 0x92, 0x75, 0x0c, 0xb7, 0x56, 0xf5, + 0x58, 0xea, 0xeb, 0x7e, 0x2c, 0xe9, 0xdf, 0x2c, 0xc1, 0x25, 0x49, 0x55, 0x8e, 0xb1, 0x2a, 0x2e, + 0xf1, 0x8e, 0x10, 0x2e, 0x8f, 0xb6, 0xaa, 0xdc, 0x85, 0x7e, 0xc6, 0x00, 0x0b, 0x5d, 0xee, 0x85, + 0x08, 0x69, 0x77, 0x30, 0x43, 0x84, 0x3e, 0x02, 0x83, 0xb6, 0xb1, 0x49, 0x6c, 0xe9, 0x6f, 0x5a, + 0xc8, 0x06, 0x95, 0x35, 0x5c, 0x6e, 0x1a, 0xf5, 0x79, 0xc0, 0x4e, 0x78, 0xe7, 0xc3, 0x0b, 0xb1, + 0xa0, 0x39, 0xfb, 0x0c, 0x8c, 0x2a, 0xd5, 0xd0, 0x24, 0xf4, 0xed, 0x10, 0x7e, 0xb9, 0x3b, 0x82, + 0xe9, 0xbf, 0xe8, 0x12, 0x0c, 0xec, 0x1a, 0x76, 0x47, 0x4c, 0x09, 0xe6, 0x3f, 0x6e, 0x96, 0x3e, + 0xa0, 0xe9, 0x9f, 0xd3, 0x60, 0xf4, 0xb6, 0xb5, 0x49, 0x3c, 0xee, 0xbc, 0xc4, 0x74, 0xa9, 0x58, + 0x6e, 0x82, 0xd1, 0xac, 0xbc, 0x04, 0x68, 0x0f, 0x46, 0xc4, 0x49, 0x13, 0x3a, 0xce, 0xdf, 0x2a, + 0x76, 0x8b, 0x1c, 0x92, 0x16, 0x1c, 0x5c, 0x8d, 0x85, 0x94, 0x14, 0x70, 0x44, 0x4c, 0x7f, 0x03, + 0x2e, 0x66, 0x34, 0x42, 0x65, 0xb6, 0x7d, 0xbd, 0x40, 0x2c, 0x0b, 0xb9, 0x1f, 0xbd, 0x00, 0xf3, + 0x72, 0xf4, 0x20, 0xf4, 0x11, 0xa7, 0x21, 0xd6, 0xc4, 0xd0, 0xe1, 0x41, 0xb9, 0x6f, 0xd1, 0x69, + 0x60, 0x5a, 0x46, 0xd9, 0x94, 0xed, 0xc6, 0x64, 0x12, 0xc6, 0xa6, 0x96, 0x45, 0x19, 0x0e, 0xa1, + 0xec, 0xde, 0x3f, 0x79, 0xc5, 0x4d, 0xc5, 0xdb, 0xc9, 0xad, 0xc4, 0xee, 0xe9, 0xe5, 0x66, 0x3d, + 0xb9, 0x13, 0x17, 0x66, 0xc4, 0x84, 0xa4, 0xf6, 0x34, 0x4e, 0xd1, 0xd5, 0x7f, 0xbb, 0x1f, 0x1e, + 0xba, 0xed, 0x7a, 0xd6, 0xeb, 0xae, 0x13, 0x18, 0xf6, 0x9a, 0xdb, 0x88, 0xbc, 0x9e, 0x04, 0x53, + 0xfe, 0x49, 0x0d, 0x1e, 0x30, 0xdb, 0x1d, 0x2e, 0x1e, 0x4b, 0xc7, 0xa1, 0x35, 0xe2, 0x59, 0x6e, + 0x51, 0x6f, 0x55, 0x16, 0xfd, 0x5e, 0x59, 0xdb, 0xc8, 0x42, 0x89, 0xf3, 0x68, 0x31, 0xa7, 0xd9, + 0x86, 0x7b, 0xcf, 0x61, 0x9d, 0xab, 0x07, 0x6c, 0x36, 0x5f, 0x8f, 0x3e, 0x42, 0x41, 0xa7, 0xd9, + 0x6a, 0x26, 0x46, 0x9c, 0x43, 0x09, 0x7d, 0x14, 0xa6, 0x2d, 0xde, 0x39, 0x4c, 0x8c, 0x86, 0xe5, + 0x10, 0xdf, 0xe7, 0x1e, 0x77, 0x3d, 0x78, 0x85, 0xd6, 0xb2, 0x10, 0xe2, 0x6c, 0x3a, 0xe8, 0x15, + 0x00, 0x7f, 0xdf, 0x31, 0xc5, 0xfc, 0x17, 0x73, 0x4f, 0xe2, 0x42, 0x60, 0x88, 0x05, 0x2b, 0x18, + 0xa9, 0x2a, 0x11, 0x84, 0x8b, 0x72, 0x90, 0xb9, 0x98, 0x31, 0x55, 0x22, 0x5a, 0x43, 0x11, 0x5c, + 0xff, 0x67, 0x1a, 0x0c, 0x89, 0x0c, 0x1b, 0xe8, 0xbd, 0x09, 0x33, 0x51, 0xc8, 0x7b, 0x12, 0xa6, + 0xa2, 0x7d, 0x76, 0x57, 0x28, 0x4c, 0x84, 0x42, 0x94, 0x28, 0x64, 0x67, 0x10, 0x84, 0x23, 0x7b, + 0x63, 0xec, 0xce, 0x50, 0xda, 0x20, 0x15, 0x62, 0xfa, 0x67, 0x35, 0x98, 0x4a, 0xb5, 0x3a, 0x86, + 0xbc, 0x70, 0x8e, 0x6e, 0x38, 0x5f, 0xed, 0x87, 0x09, 0xe6, 0x32, 0xeb, 0x18, 0x36, 0xb7, 0xe0, + 0x9c, 0x83, 0x82, 0xf2, 0x38, 0x8c, 0x58, 0xad, 0x56, 0x27, 0xa0, 0xac, 0x5a, 0x18, 0xe1, 0xd9, + 0x37, 0xaf, 0xc9, 0x42, 0x1c, 0xc1, 0x91, 0x23, 0x8e, 0x42, 0xce, 0xc4, 0x97, 0x8b, 0x7d, 0x39, + 0x75, 0x80, 0x73, 0xf4, 0xd8, 0xe2, 0xe7, 0x55, 0xd6, 0x49, 0xf9, 0x53, 0x1a, 0x80, 0x1f, 0x78, + 0x96, 0xd3, 0xa4, 0x85, 0xe2, 0xb8, 0xc4, 0xa7, 0x40, 0xb6, 0x1e, 0x22, 0xe5, 0xc4, 0xc3, 0x39, + 0x8a, 0x00, 0x58, 0xa1, 0x8c, 0xe6, 0x85, 0x94, 0xc0, 0x39, 0xfe, 0x77, 0x27, 0xe4, 0xa1, 0x87, + 0xd2, 0x09, 0xa4, 0x44, 0xd4, 0x75, 0x24, 0x46, 0xcc, 0x3e, 0x0d, 0x23, 0x21, 0xbd, 0xa3, 0x4e, + 0xdd, 0x31, 0xe5, 0xd4, 0x9d, 0x7d, 0x16, 0x2e, 0x24, 0xba, 0x7b, 0xa2, 0x43, 0xfb, 0x3f, 0x6a, + 0x80, 0xe2, 0xa3, 0x3f, 0x07, 0xd5, 0xae, 0x19, 0x57, 0xed, 0x16, 0x7a, 0xff, 0x64, 0x39, 0xba, + 0xdd, 0xd7, 0x27, 0x80, 0x25, 0x20, 0x0a, 0x13, 0x3c, 0x89, 0x83, 0x8b, 0x9e, 0xb3, 0x51, 0x9c, + 0x91, 0xd8, 0xb9, 0x3d, 0x9c, 0xb3, 0x77, 0x12, 0xb8, 0xa2, 0x73, 0x36, 0x09, 0xc1, 0x29, 0xba, + 0xe8, 0x4d, 0x0d, 0x26, 0x8d, 0x78, 0x02, 0x22, 0x39, 0x33, 0x85, 0x02, 0xdc, 0x13, 0xc9, 0x8c, + 0xa2, 0xbe, 0x24, 0x00, 0x3e, 0x4e, 0x91, 0x45, 0x4f, 0xc1, 0x98, 0xd1, 0xb6, 0xe6, 0x3b, 0x0d, + 0x8b, 0xaa, 0x06, 0x32, 0x7b, 0x0c, 0x53, 0x57, 0xe7, 0xd7, 0x6a, 0x61, 0x39, 0x8e, 0xd5, 0x0a, + 0x33, 0xfd, 0x88, 0x89, 0xec, 0xef, 0x31, 0xd3, 0x8f, 0x98, 0xc3, 0x28, 0xd3, 0x8f, 0x98, 0x3a, + 0x95, 0x08, 0x72, 0x00, 0x5c, 0xab, 0x61, 0x0a, 0x92, 0xfc, 0xda, 0xaf, 0x90, 0x86, 0x7c, 0xb7, + 0x56, 0xad, 0x08, 0x8a, 0xec, 0xf4, 0x8b, 0x7e, 0x63, 0x85, 0x02, 0xfa, 0x94, 0x06, 0xe3, 0x82, + 0x77, 0x0b, 0x9a, 0x43, 0xec, 0x13, 0xbd, 0x5c, 0x74, 0xbd, 0x24, 0xd6, 0xe4, 0x1c, 0x56, 0x91, + 0x73, 0xbe, 0x13, 0x86, 0xa9, 0xc5, 0x60, 0x38, 0xde, 0x0f, 0xf4, 0x0f, 0x34, 0xb8, 0xe4, 0x13, + 0x6f, 0xd7, 0x32, 0xc9, 0xbc, 0x69, 0xba, 0x1d, 0x47, 0x7e, 0x87, 0xe1, 0xe2, 0x89, 0x51, 0xea, + 0x19, 0xf8, 0x84, 0xe7, 0x74, 0x06, 0x04, 0x67, 0xd2, 0xa7, 0x62, 0xd9, 0x85, 0x7b, 0x46, 0x60, + 0x6e, 0x57, 0x0c, 0x73, 0x9b, 0x19, 0xdb, 0x79, 0x48, 0x44, 0xc1, 0x75, 0xfd, 0x62, 0x1c, 0x15, + 0xbf, 0xb6, 0x4e, 0x14, 0xe2, 0x24, 0x41, 0xe4, 0xc2, 0xb0, 0x27, 0xb2, 0xba, 0xcd, 0x40, 0x71, + 0x91, 0x22, 0x95, 0x22, 0x8e, 0x0b, 0xf6, 0xf2, 0x17, 0x0e, 0x89, 0xa0, 0x26, 0x3c, 0xc4, 0x55, + 0x9b, 0x79, 0xc7, 0x75, 0xf6, 0x5b, 0x6e, 0xc7, 0x9f, 0xef, 0x04, 0xdb, 0xc4, 0x09, 0xa4, 0xad, + 0x72, 0x94, 0x1d, 0xa3, 0x2c, 0x12, 0x60, 0xb1, 0x5b, 0x45, 0xdc, 0x1d, 0x0f, 0x7a, 0x09, 0x86, + 0xc9, 0x2e, 0x71, 0x82, 0xf5, 0xf5, 0x65, 0x16, 0x5d, 0x71, 0x72, 0x69, 0x8f, 0x0d, 0x61, 0x51, + 0xe0, 0xc0, 0x21, 0x36, 0xb4, 0x03, 0x43, 0x36, 0x4f, 0xcb, 0xc7, 0xa2, 0x2c, 0x0a, 0x32, 0xc5, + 0x64, 0x8a, 0x3f, 0xae, 0xff, 0x89, 0x1f, 0x58, 0x52, 0x40, 0x6d, 0xb8, 0xde, 0x20, 0x5b, 0x46, + 0xc7, 0x0e, 0x56, 0xdd, 0x00, 0x33, 0xb7, 0xfb, 0xd0, 0x24, 0x25, 0x03, 0x69, 0x26, 0x58, 0x0e, + 0x03, 0x16, 0xd0, 0x50, 0x3d, 0xa2, 0x2e, 0x3e, 0x12, 0x1b, 0xda, 0x87, 0x87, 0x45, 0x1d, 0xe6, + 0xe7, 0x6f, 0x6e, 0xd3, 0x59, 0x4e, 0x13, 0xbd, 0xc0, 0x88, 0xfe, 0x7f, 0x87, 0x07, 0xe5, 0x87, + 0xab, 0x47, 0x57, 0xc7, 0xc7, 0xc1, 0xc9, 0x5c, 0xa7, 0x49, 0xc2, 0x46, 0x3f, 0x33, 0x59, 0x7c, + 0x8e, 0x93, 0xf6, 0x7e, 0xee, 0x5b, 0x91, 0x2c, 0xc5, 0x29, 0x9a, 0xb3, 0x1f, 0x06, 0x94, 0x66, + 0x38, 0x47, 0x49, 0x0e, 0xc3, 0xaa, 0xe4, 0xf0, 0xe9, 0x01, 0xb8, 0x42, 0xf9, 0x58, 0x24, 0x2f, + 0xaf, 0x18, 0x8e, 0xd1, 0xfc, 0xf6, 0x3c, 0x63, 0x3f, 0xa7, 0xc1, 0x03, 0xdb, 0xd9, 0xba, 0xac, + 0x90, 0xd8, 0x9f, 0x2f, 0x64, 0x73, 0xe8, 0xa6, 0x1e, 0xf3, 0x2d, 0xde, 0xb5, 0x0a, 0xce, 0xeb, + 0x14, 0xfa, 0x30, 0x4c, 0x3a, 0x6e, 0x83, 0x54, 0x6a, 0x55, 0xbc, 0x62, 0xf8, 0x3b, 0x75, 0x79, + 0x87, 0x39, 0xc0, 0xbf, 0xf0, 0x6a, 0x02, 0x86, 0x53, 0xb5, 0xd1, 0x2e, 0xa0, 0xb6, 0xdb, 0x58, + 0xdc, 0xb5, 0x4c, 0x79, 0x7b, 0x56, 0xdc, 0x63, 0x87, 0x5d, 0xd1, 0xad, 0xa5, 0xb0, 0xe1, 0x0c, + 0x0a, 0x4c, 0x19, 0xa7, 0x9d, 0x59, 0x71, 0x1d, 0x2b, 0x70, 0x3d, 0x16, 0xd6, 0xd6, 0x93, 0x4e, + 0xca, 0x94, 0xf1, 0xd5, 0x4c, 0x8c, 0x38, 0x87, 0x92, 0xfe, 0x3f, 0x35, 0xb8, 0x40, 0x97, 0xc5, + 0x9a, 0xe7, 0xee, 0xed, 0x7f, 0x3b, 0x2e, 0xc8, 0xc7, 0x84, 0x3b, 0x07, 0x37, 0x22, 0x4d, 0x2b, + 0xae, 0x1c, 0x23, 0xac, 0xcf, 0x91, 0xf7, 0x86, 0x6a, 0x47, 0xeb, 0xcb, 0xb7, 0xa3, 0xe9, 0x9f, + 0x2a, 0x71, 0x59, 0x57, 0xda, 0xb1, 0xbe, 0x2d, 0xf7, 0xe1, 0xd3, 0x30, 0x4e, 0xcb, 0x56, 0x8c, + 0xbd, 0xb5, 0xea, 0x0b, 0xae, 0x2d, 0x83, 0x92, 0x98, 0xa3, 0xf1, 0x1d, 0x15, 0x80, 0xe3, 0xf5, + 0xd0, 0x4d, 0x18, 0x6a, 0xf3, 0xfc, 0x05, 0x42, 0xcb, 0xba, 0xce, 0x7d, 0x1e, 0x58, 0xd1, 0xfd, + 0x83, 0xf2, 0x54, 0x74, 0x6b, 0x23, 0xb3, 0x28, 0xc8, 0x06, 0xfa, 0xdf, 0x5c, 0x04, 0x86, 0xdc, + 0x26, 0xc1, 0xb7, 0xe3, 0x9c, 0x3c, 0x01, 0xa3, 0x66, 0xbb, 0x53, 0x59, 0xaa, 0x3f, 0xdf, 0x71, + 0x99, 0xf6, 0xcc, 0xf2, 0xb8, 0x52, 0xe1, 0xb7, 0xb2, 0xb6, 0x21, 0x8b, 0xb1, 0x5a, 0x87, 0x72, + 0x07, 0xb3, 0xdd, 0x11, 0xfc, 0x76, 0x4d, 0xf5, 0xb6, 0x65, 0xdc, 0xa1, 0xb2, 0xb6, 0x11, 0x83, + 0xe1, 0x54, 0x6d, 0xf4, 0x51, 0x18, 0x23, 0x62, 0xe3, 0xde, 0x36, 0xbc, 0x86, 0xe0, 0x0b, 0xb5, + 0xa2, 0x83, 0x0f, 0xa7, 0x56, 0x72, 0x03, 0xae, 0x33, 0x2c, 0x2a, 0x24, 0x70, 0x8c, 0x20, 0xfa, + 0x21, 0x78, 0x50, 0xfe, 0xa6, 0x5f, 0xd9, 0x6d, 0x24, 0x19, 0xc5, 0x00, 0x0f, 0x19, 0x5f, 0xcc, + 0xab, 0x84, 0xf3, 0xdb, 0xa3, 0x5f, 0xd3, 0xe0, 0x72, 0x08, 0xb5, 0x1c, 0xab, 0xd5, 0x69, 0x61, + 0x62, 0xda, 0x86, 0xd5, 0x12, 0x9a, 0xc2, 0x8b, 0xa7, 0x36, 0xd0, 0x38, 0x7a, 0xce, 0xac, 0xb2, + 0x61, 0x38, 0xa7, 0x4b, 0xe8, 0xb3, 0x1a, 0x5c, 0x97, 0xa0, 0x35, 0x8f, 0xf8, 0x7e, 0xc7, 0x23, + 0x51, 0x48, 0x9c, 0x98, 0x92, 0xa1, 0x42, 0xbc, 0x93, 0x89, 0x4c, 0x8b, 0x47, 0xe0, 0xc6, 0x47, + 0x52, 0x57, 0x97, 0x4b, 0xdd, 0xdd, 0x0a, 0x84, 0x6a, 0x71, 0x56, 0xcb, 0x85, 0x92, 0xc0, 0x31, + 0x82, 0xe8, 0x9f, 0x6b, 0xf0, 0x80, 0x5a, 0xa0, 0xae, 0x16, 0xae, 0x53, 0xbc, 0x74, 0x6a, 0x9d, + 0x49, 0xe0, 0xe7, 0x46, 0xe9, 0x1c, 0x20, 0xce, 0xeb, 0x15, 0x65, 0xdb, 0x2d, 0xb6, 0x30, 0xb9, + 0xde, 0x31, 0xc0, 0xd9, 0x36, 0x5f, 0xab, 0x3e, 0x96, 0x30, 0xaa, 0x71, 0xb7, 0xdd, 0xc6, 0x9a, + 0xd5, 0xf0, 0x97, 0xad, 0x96, 0x15, 0x30, 0xed, 0xa0, 0x8f, 0x4f, 0xc7, 0x9a, 0xdb, 0x58, 0xab, + 0x55, 0x79, 0x39, 0x8e, 0xd5, 0x42, 0x73, 0x00, 0x5b, 0x86, 0x65, 0xd7, 0xef, 0x19, 0xed, 0xbb, + 0x32, 0x14, 0x9a, 0x69, 0xaf, 0x4b, 0x61, 0x29, 0x56, 0x6a, 0xd0, 0xef, 0x47, 0xf9, 0x0e, 0x26, + 0x3c, 0xd1, 0x17, 0x13, 0xa8, 0x4f, 0xe3, 0xfb, 0x49, 0x84, 0xbc, 0xc3, 0x77, 0x14, 0x12, 0x38, + 0x46, 0x10, 0xfd, 0xa4, 0x06, 0x13, 0xfe, 0xbe, 0x1f, 0x90, 0x56, 0xd8, 0x87, 0x0b, 0xa7, 0xdd, + 0x07, 0x66, 0x45, 0xad, 0xc7, 0x88, 0xe0, 0x04, 0x51, 0x16, 0x54, 0xde, 0x32, 0x9a, 0xe4, 0x56, + 0xe5, 0xb6, 0xd5, 0xdc, 0x0e, 0x83, 0x9c, 0xd7, 0x88, 0x67, 0x12, 0x27, 0x60, 0xa2, 0xf8, 0x80, + 0x08, 0x2a, 0xcf, 0xaf, 0x86, 0xbb, 0xe1, 0x40, 0xaf, 0xc0, 0xac, 0x00, 0x2f, 0xbb, 0xf7, 0x52, + 0x14, 0xa6, 0x18, 0x05, 0xe6, 0x76, 0x54, 0xcb, 0xad, 0x85, 0xbb, 0x60, 0x40, 0x35, 0xb8, 0xe8, + 0x13, 0x8f, 0x5d, 0x82, 0xf0, 0x4c, 0x35, 0x6b, 0x1d, 0xdb, 0xf6, 0x67, 0x50, 0xe4, 0x71, 0x5c, + 0x4f, 0x83, 0x71, 0x56, 0x1b, 0xf4, 0x6c, 0x18, 0xd4, 0xb4, 0x4f, 0x0b, 0x9e, 0x5f, 0xab, 0xcf, + 0x5c, 0x64, 0xfd, 0xbb, 0xa8, 0xc4, 0x2a, 0x49, 0x10, 0x4e, 0xd6, 0xa5, 0xa7, 0xb9, 0x2c, 0x5a, + 0xe8, 0x78, 0x7e, 0x30, 0x73, 0x89, 0x35, 0x66, 0xa7, 0x39, 0x56, 0x01, 0x38, 0x5e, 0x0f, 0xdd, + 0x84, 0x09, 0x9f, 0x98, 0xa6, 0xdb, 0x6a, 0x0b, 0xcd, 0x6a, 0x66, 0x9a, 0xf5, 0x9e, 0x7f, 0xc1, + 0x18, 0x04, 0x27, 0x6a, 0xa2, 0x7d, 0xb8, 0x18, 0xa6, 0xbd, 0x5a, 0x76, 0x9b, 0x2b, 0xc6, 0x1e, + 0x13, 0x8e, 0x2f, 0x1f, 0xcd, 0x1f, 0xe7, 0xe4, 0xad, 0xf6, 0xdc, 0xf3, 0x1d, 0xc3, 0x09, 0xac, + 0x60, 0x9f, 0x4f, 0x57, 0x25, 0x8d, 0x0e, 0x67, 0xd1, 0x40, 0xcb, 0x70, 0x29, 0x51, 0xbc, 0x64, + 0xd9, 0xc4, 0x9f, 0x79, 0x80, 0x0d, 0x9b, 0x99, 0x47, 0x2a, 0x19, 0x70, 0x9c, 0xd9, 0x0a, 0xdd, + 0x85, 0xe9, 0xb6, 0xe7, 0x06, 0xc4, 0x0c, 0xee, 0x50, 0x81, 0xc0, 0x16, 0x03, 0xf4, 0x67, 0x66, + 0xd8, 0x5c, 0xb0, 0x0b, 0xa0, 0xb5, 0xac, 0x0a, 0x38, 0xbb, 0x1d, 0xfa, 0xb4, 0x06, 0xd7, 0xfc, + 0xc0, 0x23, 0x46, 0xcb, 0x72, 0x9a, 0x15, 0xd7, 0x71, 0x08, 0x63, 0x4c, 0xb5, 0x46, 0xe4, 0xb0, + 0xff, 0x60, 0xa1, 0x53, 0x44, 0x3f, 0x3c, 0x28, 0x5f, 0xab, 0x77, 0xc5, 0x8c, 0x8f, 0xa0, 0x8c, + 0xde, 0x00, 0x68, 0x91, 0x96, 0xeb, 0xed, 0x53, 0x8e, 0x34, 0x33, 0x5b, 0xdc, 0x7f, 0x69, 0x25, + 0xc4, 0xc2, 0xb7, 0x7f, 0xec, 0xea, 0x2a, 0x02, 0x62, 0x85, 0x9c, 0x7e, 0x50, 0x82, 0xe9, 0x4c, + 0x56, 0x4f, 0x77, 0x00, 0xaf, 0x37, 0x2f, 0x53, 0x60, 0x8b, 0xdb, 0x1e, 0xb6, 0x03, 0x56, 0xe2, + 0x20, 0x9c, 0xac, 0x4b, 0x05, 0x31, 0xb6, 0x53, 0x97, 0xea, 0x51, 0xfb, 0x52, 0x24, 0x88, 0xd5, + 0x12, 0x30, 0x9c, 0xaa, 0x8d, 0x2a, 0x30, 0x25, 0xca, 0x6a, 0x54, 0x97, 0xf1, 0x97, 0x3c, 0x22, + 0x45, 0x5c, 0xaa, 0x15, 0x4c, 0xd5, 0x92, 0x40, 0x9c, 0xae, 0x4f, 0x47, 0x41, 0x7f, 0xa8, 0xbd, + 0xe8, 0x8f, 0x46, 0xb1, 0x1a, 0x07, 0xe1, 0x64, 0x5d, 0xa9, 0x6c, 0xc6, 0xba, 0x30, 0x10, 0x8d, + 0x62, 0x35, 0x01, 0xc3, 0xa9, 0xda, 0xfa, 0x7f, 0xea, 0x87, 0x87, 0x8f, 0x21, 0x1e, 0xa1, 0x56, + 0xf6, 0x74, 0x9f, 0x7c, 0xe3, 0x1e, 0xef, 0xf3, 0xb4, 0x73, 0x3e, 0xcf, 0xc9, 0xe9, 0x1d, 0xf7, + 0x73, 0xfa, 0x79, 0x9f, 0xf3, 0xe4, 0x24, 0x8f, 0xff, 0xf9, 0x5b, 0xd9, 0x9f, 0xbf, 0xe0, 0xac, + 0x1e, 0xb9, 0x5c, 0xda, 0x39, 0xcb, 0xa5, 0xe0, 0xac, 0x1e, 0x63, 0x79, 0xfd, 0x71, 0x3f, 0x3c, + 0x72, 0x1c, 0x51, 0xad, 0xe0, 0xfa, 0xca, 0x60, 0x79, 0x67, 0xba, 0xbe, 0xf2, 0x62, 0xa2, 0xce, + 0x70, 0x7d, 0x65, 0x90, 0x3c, 0xeb, 0xf5, 0x95, 0x37, 0xab, 0x67, 0xb5, 0xbe, 0xf2, 0x66, 0xf5, + 0x18, 0xeb, 0xeb, 0x2f, 0x92, 0xe7, 0x43, 0x28, 0x2f, 0xd6, 0xa0, 0xcf, 0x6c, 0x77, 0x0a, 0x32, + 0x29, 0xe6, 0x1b, 0x54, 0x59, 0xdb, 0xc0, 0x14, 0x07, 0xc2, 0x30, 0xc8, 0xd7, 0x4f, 0x41, 0x16, + 0xc4, 0xa2, 0x6b, 0xf8, 0x92, 0xc4, 0x02, 0x13, 0x9d, 0x2a, 0xd2, 0xde, 0x26, 0x2d, 0xe2, 0x19, + 0x76, 0x3d, 0x70, 0x3d, 0xa3, 0x59, 0x94, 0xdb, 0x70, 0xc3, 0x71, 0x02, 0x17, 0x4e, 0x61, 0xa7, + 0x13, 0xd2, 0xb6, 0x1a, 0x05, 0xf9, 0x0b, 0x9b, 0x90, 0xb5, 0x5a, 0x15, 0x53, 0x1c, 0xfa, 0x17, + 0x87, 0x41, 0xc9, 0xfc, 0x88, 0xde, 0xd2, 0x60, 0xca, 0x4c, 0xe6, 0x57, 0xea, 0xc5, 0x0d, 0x24, + 0x95, 0xac, 0x89, 0x2f, 0xf9, 0x54, 0x31, 0x4e, 0x93, 0x45, 0x3f, 0xae, 0x71, 0x4b, 0x55, 0x78, + 0x89, 0x21, 0xa6, 0xf5, 0xd6, 0x29, 0x5d, 0xf7, 0x45, 0x26, 0xaf, 0xe8, 0x66, 0x29, 0x4e, 0x10, + 0x7d, 0x56, 0x83, 0xe9, 0x9d, 0x2c, 0x03, 0xbb, 0x98, 0xfc, 0xbb, 0x45, 0xbb, 0x92, 0x63, 0xb1, + 0xe7, 0x12, 0x67, 0x66, 0x05, 0x9c, 0xdd, 0x91, 0x70, 0x96, 0x42, 0x9b, 0xa3, 0xd8, 0xa7, 0x85, + 0x67, 0x29, 0x61, 0xbc, 0x8c, 0x66, 0x29, 0x04, 0xe0, 0x38, 0x41, 0xd4, 0x86, 0x91, 0x1d, 0x69, + 0xe8, 0x15, 0xc6, 0x9d, 0x4a, 0x51, 0xea, 0x8a, 0xb5, 0x98, 0xbb, 0xb9, 0x84, 0x85, 0x38, 0x22, + 0x82, 0xb6, 0x61, 0x68, 0x87, 0xf3, 0x0a, 0x61, 0x94, 0x99, 0xef, 0x59, 0x85, 0xe5, 0xb6, 0x01, + 0x51, 0x84, 0x25, 0x7a, 0xd5, 0xc7, 0x75, 0xf8, 0x88, 0xd0, 0x8b, 0x4f, 0x6b, 0x30, 0xbd, 0x4b, + 0xbc, 0xc0, 0x32, 0x93, 0xd7, 0x1b, 0x23, 0xc5, 0xd5, 0xec, 0x17, 0xb2, 0x10, 0xf2, 0x65, 0x92, + 0x09, 0xc2, 0xd9, 0x5d, 0xa0, 0x4a, 0x37, 0xb7, 0x52, 0xd7, 0x03, 0x23, 0xb0, 0xcc, 0x75, 0x77, + 0x87, 0x38, 0xd1, 0x03, 0x45, 0xcc, 0x3c, 0x22, 0x32, 0xb9, 0x2d, 0xe6, 0x57, 0xc3, 0xdd, 0x70, + 0xe8, 0x7f, 0xaa, 0x41, 0xca, 0xd6, 0x8a, 0x7e, 0x4e, 0x83, 0xb1, 0x2d, 0x62, 0x04, 0x1d, 0x8f, + 0xdc, 0x32, 0x82, 0x30, 0xa0, 0xfc, 0x85, 0xd3, 0x30, 0xf1, 0xce, 0x2d, 0x29, 0x88, 0xf9, 0x75, + 0x7d, 0x98, 0xd8, 0x55, 0x05, 0xe1, 0x58, 0x0f, 0x66, 0x9f, 0x83, 0xa9, 0x54, 0xc3, 0x13, 0x5d, + 0xbb, 0xfd, 0x6b, 0x0d, 0xb2, 0xde, 0xd4, 0x42, 0xaf, 0xc0, 0x80, 0xd1, 0x68, 0x84, 0x8f, 0x64, + 0x3c, 0x53, 0xcc, 0x73, 0xa4, 0xa1, 0xc6, 0xed, 0xb3, 0x9f, 0x98, 0xa3, 0x45, 0x4b, 0x80, 0x8c, + 0xd8, 0xfd, 0xf3, 0x4a, 0x14, 0x8d, 0xca, 0xae, 0x87, 0xe6, 0x53, 0x50, 0x9c, 0xd1, 0x42, 0xff, + 0x69, 0x0d, 0x50, 0x3a, 0x15, 0x30, 0xf2, 0x60, 0x58, 0x2c, 0x65, 0xf9, 0x95, 0xaa, 0x05, 0x03, + 0x3e, 0x62, 0xd1, 0x4b, 0x91, 0x1b, 0x92, 0x28, 0xf0, 0x71, 0x48, 0x47, 0xff, 0x2b, 0x0d, 0xa2, + 0x44, 0xfa, 0xe8, 0xfd, 0x30, 0xda, 0x20, 0xbe, 0xe9, 0x59, 0xed, 0x20, 0x8a, 0x75, 0x0a, 0x63, + 0x26, 0xaa, 0x11, 0x08, 0xab, 0xf5, 0x90, 0x0e, 0x83, 0x81, 0xe1, 0xef, 0xd4, 0xaa, 0x42, 0xef, + 0x63, 0xa7, 0xf4, 0x3a, 0x2b, 0xc1, 0x02, 0x12, 0x65, 0x04, 0xeb, 0x3b, 0x46, 0x46, 0x30, 0xb4, + 0x75, 0x0a, 0xe9, 0xcf, 0xd0, 0xd1, 0xa9, 0xcf, 0xf4, 0x5f, 0x2d, 0xc1, 0x05, 0x5a, 0x65, 0xc5, + 0xb0, 0x9c, 0x80, 0x38, 0xcc, 0xb3, 0xbf, 0xe0, 0x24, 0x34, 0x61, 0x3c, 0x88, 0x85, 0xbe, 0x9d, + 0x3c, 0xee, 0x2b, 0xf4, 0x75, 0x89, 0x07, 0xbc, 0xc5, 0xf1, 0xa2, 0x67, 0x64, 0x68, 0x05, 0xd7, + 0x90, 0x1f, 0x96, 0x4b, 0x95, 0xc5, 0x4b, 0xdc, 0x17, 0x71, 0x84, 0xe1, 0xeb, 0x0b, 0xb1, 0x28, + 0x8a, 0xa7, 0x61, 0x5c, 0xb8, 0x38, 0xf3, 0xd4, 0x6e, 0x42, 0x43, 0x66, 0x27, 0xcc, 0x92, 0x0a, + 0xc0, 0xf1, 0x7a, 0xfa, 0x57, 0x4a, 0x10, 0x7f, 0xe3, 0xa1, 0xe8, 0x2c, 0xa5, 0xf3, 0xda, 0x95, + 0xce, 0x2c, 0xaf, 0xdd, 0xfb, 0xd8, 0x03, 0x49, 0xfc, 0x25, 0x3d, 0x7e, 0x6f, 0xac, 0x3e, 0x6b, + 0xc4, 0xdf, 0xc1, 0x0b, 0x6b, 0x44, 0xd3, 0xda, 0x7f, 0xe2, 0x69, 0x7d, 0xbf, 0xf0, 0x7d, 0x1c, + 0x88, 0x65, 0x17, 0x94, 0xbe, 0x8f, 0x53, 0xb1, 0x86, 0x4a, 0x20, 0xc8, 0x17, 0x35, 0x18, 0x12, + 0xf9, 0xaf, 0x8f, 0x11, 0x68, 0xb4, 0x05, 0x03, 0x4c, 0x2b, 0xe9, 0x45, 0x1a, 0xac, 0x6f, 0xbb, + 0x6e, 0x10, 0xcb, 0x02, 0xce, 0x3c, 0xfb, 0xd9, 0xbf, 0x98, 0xa3, 0x67, 0xee, 0x6f, 0x9e, 0xb9, + 0x6d, 0x05, 0xc4, 0x0c, 0x64, 0x6e, 0x61, 0xe9, 0xfe, 0xa6, 0x94, 0xe3, 0x58, 0x2d, 0xfd, 0x33, + 0xfd, 0x70, 0x5d, 0x20, 0x4e, 0x89, 0x48, 0x21, 0x83, 0xdb, 0x87, 0x8b, 0xe2, 0xdb, 0x56, 0x3d, + 0xc3, 0x0a, 0xef, 0xe3, 0x8b, 0x69, 0xa7, 0xe2, 0xb5, 0xc8, 0x14, 0x3a, 0x9c, 0x45, 0x83, 0x67, + 0xb0, 0x64, 0xc5, 0xb7, 0x89, 0x61, 0x07, 0xdb, 0x92, 0x76, 0xa9, 0x97, 0x0c, 0x96, 0x69, 0x7c, + 0x38, 0x93, 0x0a, 0xf3, 0x07, 0x10, 0x80, 0x8a, 0x47, 0x0c, 0xd5, 0x19, 0xa1, 0x07, 0xe7, 0xfc, + 0x95, 0x4c, 0x8c, 0x38, 0x87, 0x12, 0x33, 0xf3, 0x19, 0x7b, 0xcc, 0x6a, 0x80, 0x49, 0xe0, 0x59, + 0x2c, 0x9b, 0x7b, 0x68, 0xe8, 0x5e, 0x89, 0x83, 0x70, 0xb2, 0x2e, 0xba, 0x09, 0x13, 0xcc, 0xbf, + 0x22, 0xca, 0x64, 0x35, 0x10, 0x25, 0x4b, 0x58, 0x8d, 0x41, 0x70, 0xa2, 0xa6, 0xfe, 0xb1, 0x12, + 0x8c, 0xa9, 0xcb, 0xee, 0x18, 0x51, 0x47, 0x1d, 0xe5, 0x30, 0xec, 0x21, 0x22, 0x46, 0xa5, 0x7a, + 0x8c, 0xf3, 0x10, 0xbd, 0x04, 0x13, 0x1d, 0xc6, 0x41, 0x64, 0x36, 0x0e, 0xb1, 0xfe, 0xbf, 0x87, + 0x8e, 0x72, 0x23, 0x06, 0xb9, 0x7f, 0x50, 0x9e, 0x55, 0xd1, 0xc7, 0xa1, 0x38, 0x81, 0x47, 0xff, + 0x44, 0x1f, 0x5c, 0xcc, 0xe8, 0x0d, 0xbb, 0x87, 0x27, 0x89, 0x23, 0xbb, 0x97, 0x7b, 0xf8, 0xd4, + 0xf1, 0x1f, 0xde, 0xc3, 0x27, 0x21, 0x38, 0x45, 0x17, 0xbd, 0x00, 0x7d, 0xa6, 0x67, 0x89, 0x09, + 0x7f, 0xba, 0x90, 0xc2, 0x89, 0x6b, 0x0b, 0xa3, 0x82, 0x62, 0x5f, 0x05, 0xd7, 0x30, 0x45, 0x48, + 0x0f, 0x1e, 0x95, 0x5d, 0x48, 0x29, 0x80, 0x1d, 0x3c, 0x2a, 0x57, 0xf1, 0x71, 0xbc, 0x1e, 0x7a, + 0x09, 0x66, 0x84, 0x26, 0x20, 0x23, 0x98, 0x5d, 0xc7, 0x0f, 0xe8, 0xce, 0x0e, 0x04, 0xa3, 0xbe, + 0x7a, 0x78, 0x50, 0x9e, 0xb9, 0x93, 0x53, 0x07, 0xe7, 0xb6, 0xd6, 0xff, 0xbc, 0x0f, 0x46, 0x95, + 0xd7, 0x07, 0xd0, 0x4a, 0x2f, 0x56, 0x8e, 0x68, 0xc4, 0xd2, 0xd2, 0xb1, 0x02, 0x7d, 0xcd, 0x76, + 0xa7, 0xa0, 0x99, 0x23, 0x44, 0x77, 0x8b, 0xa2, 0x6b, 0xb6, 0x3b, 0xe8, 0x85, 0xd0, 0x70, 0x52, + 0xcc, 0xb4, 0x11, 0xc6, 0x9b, 0x24, 0x8c, 0x27, 0x72, 0x23, 0xf6, 0xe7, 0x6e, 0xc4, 0x16, 0x0c, + 0xf9, 0xc2, 0xaa, 0x32, 0x50, 0x3c, 0xe9, 0x8c, 0x32, 0xd3, 0xc2, 0x8a, 0xc2, 0xf5, 0x3d, 0x69, + 0x64, 0x91, 0x34, 0xa8, 0x2c, 0xd9, 0x61, 0x51, 0xac, 0x4c, 0x91, 0x1d, 0xe6, 0xb2, 0xe4, 0x06, + 0x2b, 0xc1, 0x02, 0x92, 0x3a, 0xa2, 0x86, 0x8e, 0x75, 0x44, 0xfd, 0xbd, 0x12, 0xa0, 0x74, 0x37, + 0xd0, 0xc3, 0x30, 0xc0, 0xa2, 0xe0, 0x05, 0x2f, 0x0a, 0x25, 0x7f, 0x16, 0x07, 0x8d, 0x39, 0x0c, + 0xd5, 0x45, 0x0a, 0x8d, 0x62, 0x9f, 0x93, 0x39, 0xb2, 0x08, 0x7a, 0x4a, 0xbe, 0x8d, 0xeb, 0xb1, + 0x90, 0x89, 0xac, 0x33, 0x7f, 0x03, 0x86, 0x5a, 0x96, 0xc3, 0xee, 0xf6, 0x8a, 0x19, 0x9b, 0xf8, + 0x7d, 0x3b, 0x47, 0x81, 0x25, 0x2e, 0xfd, 0x8f, 0x4b, 0x74, 0xe9, 0x47, 0x12, 0xef, 0x3e, 0x80, + 0xd1, 0x09, 0x5c, 0xce, 0xc0, 0xc4, 0x0e, 0xa8, 0x15, 0xfb, 0xca, 0x21, 0xd2, 0xf9, 0x10, 0x21, + 0xbf, 0x95, 0x8a, 0x7e, 0x63, 0x85, 0x18, 0x25, 0x1d, 0x58, 0x2d, 0xf2, 0xa2, 0xe5, 0x34, 0xdc, + 0x7b, 0x62, 0x7a, 0x7b, 0x25, 0xbd, 0x1e, 0x22, 0xe4, 0xa4, 0xa3, 0xdf, 0x58, 0x21, 0x46, 0x59, + 0x0b, 0x53, 0x9c, 0x1d, 0xf6, 0x1c, 0x8c, 0xe8, 0x9b, 0x6b, 0xdb, 0xf2, 0x54, 0x1e, 0xe6, 0xac, + 0xa5, 0x92, 0x53, 0x07, 0xe7, 0xb6, 0xd6, 0x7f, 0x4d, 0x83, 0xe9, 0xcc, 0xa9, 0x40, 0xb7, 0x60, + 0x2a, 0xf2, 0x7d, 0x52, 0x99, 0xfd, 0x70, 0xf4, 0xc6, 0xd1, 0x9d, 0x64, 0x05, 0x9c, 0x6e, 0xc3, + 0x1f, 0xd2, 0x4e, 0x1d, 0x26, 0xc2, 0x71, 0x4a, 0x15, 0x8d, 0x54, 0x30, 0xce, 0x6a, 0xa3, 0xff, + 0x50, 0xac, 0xb3, 0xd1, 0x64, 0xd1, 0x9d, 0xb1, 0x49, 0x9a, 0x61, 0xc8, 0x5a, 0xb8, 0x33, 0x16, + 0x68, 0x21, 0xe6, 0x30, 0xf4, 0x90, 0x1a, 0x08, 0x1a, 0xf2, 0x2d, 0x19, 0x0c, 0xaa, 0xff, 0x08, + 0x3c, 0x90, 0x73, 0x59, 0x89, 0xaa, 0x30, 0xe6, 0xdf, 0x33, 0xda, 0x0b, 0x64, 0xdb, 0xd8, 0xb5, + 0x44, 0x62, 0x01, 0xee, 0xd3, 0x36, 0x56, 0x57, 0xca, 0xef, 0x27, 0x7e, 0xe3, 0x58, 0x2b, 0x3d, + 0x00, 0x10, 0xbe, 0x8f, 0x96, 0xd3, 0x44, 0x5b, 0x30, 0x6c, 0x88, 0x77, 0x9c, 0xc5, 0x3a, 0xfe, + 0xfe, 0x42, 0x46, 0x00, 0x81, 0x83, 0x7b, 0x87, 0xcb, 0x5f, 0x38, 0xc4, 0xad, 0xff, 0x13, 0x0d, + 0x2e, 0x67, 0x87, 0x92, 0x1f, 0x43, 0xb4, 0x69, 0xc1, 0xa8, 0x17, 0x35, 0x13, 0x8b, 0xfe, 0xfb, + 0xd4, 0x64, 0xa4, 0x4a, 0xf6, 0x2d, 0x2a, 0xf6, 0x55, 0x3c, 0xd7, 0x97, 0x5f, 0x3e, 0x99, 0x9f, + 0x34, 0x54, 0xb9, 0x94, 0x9e, 0x60, 0x15, 0x3f, 0xcb, 0x15, 0x4c, 0xa9, 0xfb, 0x6d, 0xc3, 0x24, + 0x8d, 0x73, 0x7e, 0x18, 0xeb, 0x14, 0x12, 0x74, 0x66, 0xf7, 0xfd, 0x6c, 0x73, 0x05, 0xe7, 0xd0, + 0x3c, 0x3a, 0x57, 0x70, 0x76, 0xc3, 0x77, 0x48, 0x12, 0xcb, 0xec, 0xce, 0xe7, 0xc4, 0x95, 0xbd, + 0x39, 0x98, 0x37, 0xda, 0x13, 0xbe, 0xae, 0xb5, 0x7b, 0x86, 0xaf, 0x6b, 0x4d, 0x7c, 0xe7, 0x65, + 0xad, 0x8c, 0x97, 0xb5, 0x94, 0xe7, 0xae, 0x06, 0xce, 0xf0, 0xb9, 0xab, 0xc4, 0xa3, 0x52, 0x83, + 0xe7, 0xf3, 0xa8, 0x14, 0x7a, 0x0d, 0x06, 0xdb, 0x86, 0x47, 0x1c, 0x79, 0x35, 0x51, 0xeb, 0xf5, + 0xc5, 0xba, 0x88, 0xd9, 0x86, 0x3b, 0x7f, 0x8d, 0x11, 0xc0, 0x82, 0x90, 0xfe, 0x97, 0x1a, 0x5c, + 0xed, 0xc6, 0x32, 0x98, 0x92, 0x67, 0x26, 0xb6, 0x48, 0x2f, 0x4a, 0x5e, 0x8a, 0x13, 0x86, 0x4a, + 0x5e, 0x12, 0x82, 0x53, 0x74, 0x73, 0xde, 0x48, 0x2d, 0x15, 0x79, 0x23, 0x55, 0xff, 0xed, 0x12, + 0xc0, 0x2a, 0x09, 0xee, 0xb9, 0xde, 0x0e, 0x3d, 0x7f, 0xaf, 0xc6, 0xcc, 0x58, 0xc3, 0xdf, 0xba, + 0x5c, 0x39, 0x57, 0xa1, 0xbf, 0xed, 0x36, 0x7c, 0x21, 0x5b, 0xb3, 0x8e, 0x30, 0x9f, 0x53, 0x56, + 0x8a, 0xca, 0x30, 0xc0, 0x2e, 0xbe, 0x85, 0xda, 0xc3, 0x8c, 0x60, 0xab, 0xb4, 0x00, 0xf3, 0x72, + 0xfe, 0xf4, 0x2b, 0x0b, 0xe7, 0xf3, 0x85, 0x55, 0x4f, 0x3c, 0xfd, 0xca, 0xcb, 0x70, 0x08, 0x45, + 0x37, 0x01, 0xac, 0xf6, 0x92, 0xd1, 0xb2, 0x6c, 0x4b, 0xac, 0xf1, 0x11, 0x66, 0x9d, 0x81, 0xda, + 0x9a, 0x2c, 0xbd, 0x7f, 0x50, 0x1e, 0x16, 0xbf, 0xf6, 0xb1, 0x52, 0x5b, 0xff, 0xeb, 0x3e, 0x18, + 0x5b, 0x6d, 0x5a, 0xce, 0x9e, 0xcc, 0x12, 0x10, 0x5e, 0x60, 0x68, 0x67, 0x73, 0x81, 0xf1, 0x12, + 0xcc, 0xd8, 0xae, 0xd1, 0x58, 0x30, 0x6c, 0x2a, 0xea, 0x79, 0x75, 0x2e, 0x23, 0x18, 0x4e, 0x53, + 0xa4, 0x1d, 0x11, 0xda, 0xf4, 0x72, 0x4e, 0x1d, 0x9c, 0xdb, 0x1a, 0x05, 0x30, 0x68, 0xca, 0x17, + 0x1e, 0x0a, 0x47, 0xbe, 0xab, 0x73, 0x31, 0xa7, 0x06, 0x81, 0x86, 0xfb, 0x4e, 0x7c, 0x6d, 0x41, + 0x0b, 0x7d, 0x5c, 0x83, 0x69, 0xb2, 0xc7, 0x83, 0xa0, 0xd7, 0x3d, 0x63, 0x6b, 0xcb, 0x32, 0x45, + 0x24, 0x00, 0xff, 0xb0, 0xcb, 0x87, 0x07, 0xe5, 0xe9, 0xc5, 0xac, 0x0a, 0xf7, 0x0f, 0xca, 0x37, + 0x32, 0x63, 0xd2, 0xd9, 0x67, 0xcd, 0x6c, 0x82, 0xb3, 0x49, 0xcd, 0x3e, 0x03, 0xa3, 0x27, 0x88, + 0x1f, 0x8b, 0x45, 0x9e, 0xff, 0x4e, 0x09, 0xc6, 0xe8, 0xba, 0x5b, 0x76, 0x4d, 0xc3, 0xae, 0xae, + 0xd6, 0xd1, 0x63, 0xc9, 0x7c, 0x31, 0x21, 0x77, 0x4d, 0xe5, 0x8c, 0x59, 0x86, 0x4b, 0x5b, 0xae, + 0x67, 0x92, 0xf5, 0xca, 0xda, 0xba, 0x2b, 0xee, 0xf3, 0xab, 0xab, 0x75, 0xa1, 0x02, 0x30, 0x0b, + 0xe5, 0x52, 0x06, 0x1c, 0x67, 0xb6, 0x42, 0x77, 0x61, 0x3a, 0x2a, 0xdf, 0x68, 0x73, 0x47, 0x46, + 0x8a, 0xae, 0x2f, 0x72, 0xc4, 0x5c, 0xca, 0xaa, 0x80, 0xb3, 0xdb, 0x21, 0x03, 0xae, 0x88, 0x74, + 0x54, 0x4b, 0xae, 0x77, 0xcf, 0xf0, 0x1a, 0x71, 0xb4, 0xfd, 0xd1, 0x7d, 0x67, 0x35, 0xbf, 0x1a, + 0xee, 0x86, 0x43, 0xff, 0xc5, 0x41, 0x50, 0x22, 0x95, 0x4f, 0x20, 0x71, 0xfc, 0x8a, 0x06, 0x97, + 0x4c, 0xdb, 0x22, 0x4e, 0x90, 0x08, 0x4b, 0xe5, 0xec, 0x68, 0xa3, 0x50, 0x08, 0x75, 0x9b, 0x38, + 0xb5, 0xaa, 0xf0, 0xfb, 0xac, 0x64, 0x20, 0x17, 0xbe, 0xb1, 0x19, 0x10, 0x9c, 0xd9, 0x19, 0x36, + 0x1e, 0x56, 0x5e, 0xab, 0xaa, 0x79, 0x74, 0x2a, 0xa2, 0x0c, 0x87, 0x50, 0xf4, 0x04, 0x8c, 0x36, + 0x3d, 0xb7, 0xd3, 0xf6, 0x2b, 0x2c, 0xbc, 0x83, 0xaf, 0x7d, 0x66, 0x74, 0xb8, 0x15, 0x15, 0x63, + 0xb5, 0x0e, 0x7a, 0x0a, 0xc6, 0xf8, 0xcf, 0x35, 0x8f, 0x6c, 0x59, 0x7b, 0x82, 0xc9, 0x31, 0x13, + 0xca, 0x2d, 0xa5, 0x1c, 0xc7, 0x6a, 0xb1, 0x54, 0x18, 0xbe, 0xdf, 0x21, 0xde, 0x06, 0x5e, 0x16, + 0x6f, 0x00, 0xf1, 0x54, 0x18, 0xb2, 0x10, 0x47, 0x70, 0xf4, 0x49, 0x0d, 0x26, 0x3c, 0xf2, 0x5a, + 0xc7, 0xf2, 0xe8, 0x91, 0x68, 0x58, 0x2d, 0x5f, 0x84, 0x8b, 0xe3, 0xde, 0x42, 0xd4, 0xe7, 0x70, + 0x0c, 0x29, 0xe7, 0x10, 0xe1, 0x9d, 0x50, 0x1c, 0x88, 0x13, 0x3d, 0xa0, 0x53, 0xe5, 0x5b, 0x4d, + 0xc7, 0x72, 0x9a, 0xf3, 0x76, 0xd3, 0x9f, 0x19, 0x66, 0x4c, 0x8f, 0xdb, 0x67, 0xa2, 0x62, 0xac, + 0xd6, 0x41, 0x4f, 0xc3, 0x78, 0xc7, 0xa7, 0xfb, 0xbe, 0x45, 0xf8, 0xfc, 0x8e, 0x44, 0x97, 0x66, + 0x1b, 0x2a, 0x00, 0xc7, 0xeb, 0xa1, 0x9b, 0x30, 0x21, 0x0b, 0xc4, 0x2c, 0x03, 0xcf, 0xc0, 0xca, + 0x6c, 0xc9, 0x31, 0x08, 0x4e, 0xd4, 0x9c, 0x9d, 0x87, 0x8b, 0x19, 0xc3, 0x3c, 0x11, 0x73, 0xf9, + 0x1b, 0x0d, 0xa6, 0xf9, 0x29, 0x2e, 0x5f, 0x0f, 0x92, 0xa9, 0x56, 0xb3, 0xb3, 0x96, 0x6a, 0x67, + 0x9a, 0xb5, 0xf4, 0x5b, 0x90, 0x9d, 0x55, 0xff, 0x47, 0x25, 0x78, 0xf7, 0x91, 0xfb, 0x12, 0xfd, + 0x43, 0x0d, 0x46, 0xc9, 0x5e, 0xe0, 0x19, 0x61, 0x0c, 0x1c, 0x5d, 0xa4, 0x5b, 0x67, 0xc2, 0x04, + 0xe6, 0x16, 0x23, 0x42, 0x7c, 0xe1, 0x86, 0xf2, 0xac, 0x02, 0xc1, 0x6a, 0x7f, 0x90, 0x0e, 0x83, + 0x3c, 0x43, 0xb1, 0x7a, 0xbb, 0xce, 0x53, 0x7e, 0x60, 0x01, 0x99, 0xfd, 0x10, 0x4c, 0x26, 0x31, + 0x9f, 0x68, 0xad, 0xfc, 0x56, 0x09, 0x86, 0xd6, 0x3c, 0x97, 0x2a, 0xf0, 0xe7, 0x60, 0x14, 0x30, + 0x62, 0x46, 0x81, 0x42, 0x2a, 0x8f, 0xe8, 0x6c, 0xae, 0x15, 0xc0, 0x4a, 0x58, 0x01, 0xe6, 0x7b, + 0x21, 0xd2, 0x5d, 0xed, 0xff, 0x92, 0x06, 0xa3, 0xa2, 0xe6, 0x39, 0xe8, 0xf9, 0x3f, 0x1a, 0xd7, + 0xf3, 0x3f, 0xd8, 0xc3, 0xb8, 0x72, 0x14, 0xfb, 0x4f, 0x6b, 0x30, 0x2e, 0x6a, 0xac, 0x90, 0xd6, + 0x26, 0xf1, 0xd0, 0x12, 0x0c, 0xf9, 0x1d, 0xf6, 0x21, 0xc5, 0x80, 0xae, 0xa8, 0xc6, 0x2a, 0x6f, + 0xd3, 0x30, 0x69, 0xf7, 0xeb, 0xbc, 0x8a, 0xf2, 0x0e, 0x0f, 0x2f, 0xc0, 0xb2, 0x31, 0xba, 0x0e, + 0xfd, 0x9e, 0x6b, 0xa7, 0x32, 0x09, 0x62, 0xd7, 0x26, 0x98, 0x41, 0xa8, 0x60, 0x4e, 0xff, 0xca, + 0xfb, 0x21, 0x26, 0x98, 0x53, 0xb0, 0x8f, 0x79, 0xb9, 0xfe, 0x93, 0xfd, 0xe1, 0x64, 0x33, 0x5d, + 0xe6, 0x36, 0x8c, 0x98, 0x1e, 0x31, 0x02, 0xd2, 0x58, 0xd8, 0x3f, 0x4e, 0xe7, 0xd8, 0x71, 0x55, + 0x91, 0x2d, 0x70, 0xd4, 0x98, 0x9e, 0x0c, 0xaa, 0x43, 0x43, 0x29, 0x3a, 0x44, 0x73, 0x9d, 0x19, + 0xbe, 0x1f, 0x06, 0xdc, 0x7b, 0x4e, 0xe8, 0x17, 0xd9, 0x95, 0x30, 0x1b, 0xca, 0x5d, 0x5a, 0x1b, + 0xf3, 0x46, 0x6a, 0x26, 0xcd, 0xfe, 0x2e, 0x99, 0x34, 0x6d, 0x18, 0x6a, 0xb1, 0xcf, 0xd0, 0xd3, + 0xb3, 0x2c, 0xb1, 0x0f, 0xaa, 0x3e, 0xdc, 0xc7, 0x30, 0x63, 0x49, 0x82, 0x9e, 0xf0, 0x8e, 0x54, + 0x64, 0xd5, 0x13, 0x3e, 0xd4, 0x6e, 0x71, 0x04, 0x47, 0xfb, 0xf1, 0x14, 0xad, 0x43, 0xc5, 0x4d, + 0x37, 0xa2, 0x7b, 0x4a, 0x56, 0x56, 0x3e, 0xf5, 0xb9, 0x69, 0x5a, 0x7f, 0xa6, 0x3f, 0x5c, 0xa4, + 0x42, 0xc5, 0xce, 0xd6, 0x6a, 0xb5, 0x22, 0x5a, 0x2d, 0xfa, 0x5e, 0x99, 0x8b, 0xbc, 0x14, 0x7b, + 0x64, 0x32, 0xcc, 0x45, 0x3e, 0x26, 0x48, 0xc7, 0xf2, 0x8f, 0x77, 0xe0, 0xa2, 0x1f, 0x18, 0x36, + 0xa9, 0x5b, 0xc2, 0x8c, 0xee, 0x07, 0x46, 0xab, 0x5d, 0x20, 0x19, 0x38, 0x8f, 0x5f, 0x4b, 0xa3, + 0xc2, 0x59, 0xf8, 0xd1, 0x4f, 0x68, 0x30, 0xc3, 0xca, 0xe7, 0x3b, 0x81, 0xcb, 0x5f, 0xad, 0x88, + 0x88, 0x9f, 0xdc, 0x6b, 0x8a, 0x29, 0x80, 0xf5, 0x1c, 0x7c, 0x38, 0x97, 0x12, 0x7a, 0x03, 0xa6, + 0xe9, 0x09, 0x3c, 0x6f, 0x06, 0xd6, 0xae, 0x15, 0xec, 0x47, 0x5d, 0x38, 0x79, 0x06, 0x70, 0xa6, + 0x6c, 0x2c, 0x67, 0x21, 0xc3, 0xd9, 0x34, 0xf4, 0xbf, 0xd0, 0x00, 0xa5, 0x97, 0x10, 0xb2, 0x61, + 0xb8, 0x21, 0x03, 0xca, 0xb4, 0x53, 0xc9, 0x1f, 0x1c, 0x72, 0xe6, 0x30, 0x0e, 0x2d, 0xa4, 0x80, + 0x5c, 0x18, 0xb9, 0xb7, 0x6d, 0x05, 0xc4, 0xb6, 0xfc, 0xe0, 0x94, 0xd2, 0x15, 0x87, 0xb9, 0x3b, + 0x5f, 0x94, 0x88, 0x71, 0x44, 0x43, 0xff, 0xd9, 0x7e, 0x18, 0x0e, 0x9f, 0x5f, 0x38, 0xda, 0x81, + 0xa8, 0x03, 0xc8, 0x54, 0x9e, 0xb0, 0xec, 0xc5, 0x02, 0xc3, 0x84, 0xb0, 0x4a, 0x0a, 0x19, 0xce, + 0x20, 0x80, 0xde, 0x80, 0x4b, 0x96, 0xb3, 0xe5, 0x19, 0x7e, 0xe0, 0x75, 0xd8, 0x45, 0x6c, 0x2f, + 0x2f, 0x41, 0x32, 0x1d, 0xaa, 0x96, 0x81, 0x0e, 0x67, 0x12, 0x41, 0x04, 0x86, 0xf8, 0x2b, 0x33, + 0xd2, 0xbe, 0x5a, 0xc8, 0xd2, 0xc9, 0x5f, 0xaf, 0x89, 0xb8, 0x26, 0xff, 0xed, 0x63, 0x89, 0x9b, + 0x67, 0x79, 0xe2, 0xff, 0x4b, 0xd3, 0xb3, 0x58, 0xf7, 0x95, 0xe2, 0xf4, 0x22, 0x2b, 0x36, 0xcf, + 0xf2, 0x14, 0x2f, 0xc4, 0x49, 0x82, 0xfa, 0x1f, 0x68, 0x30, 0xc0, 0x53, 0x23, 0x9c, 0xbd, 0x04, + 0xf7, 0x23, 0x31, 0x09, 0xae, 0xd0, 0x63, 0x76, 0xac, 0xab, 0xb9, 0xcf, 0xac, 0x7d, 0x51, 0x83, + 0x11, 0x56, 0xe3, 0x1c, 0x44, 0xaa, 0x57, 0xe2, 0x22, 0xd5, 0x33, 0x85, 0x47, 0x93, 0x23, 0x50, + 0xfd, 0x41, 0x9f, 0x18, 0x0b, 0x93, 0x58, 0x6a, 0x70, 0x51, 0x84, 0x5a, 0x2c, 0x5b, 0x5b, 0x84, + 0x2e, 0xf1, 0xaa, 0xb1, 0xcf, 0xbd, 0x0f, 0x06, 0x44, 0x2c, 0x6e, 0x1a, 0x8c, 0xb3, 0xda, 0xa0, + 0xdf, 0xd1, 0xa8, 0x6c, 0x10, 0x78, 0x96, 0xd9, 0xd3, 0xb5, 0x4f, 0xd8, 0xb7, 0xb9, 0x15, 0x8e, + 0x8c, 0x6b, 0x26, 0x1b, 0x91, 0x90, 0xc0, 0x4a, 0xef, 0x1f, 0x94, 0xcb, 0x19, 0x26, 0xb3, 0xe8, + 0x1d, 0x23, 0x3f, 0xf8, 0xf8, 0x9f, 0x74, 0xad, 0xc2, 0xee, 0x40, 0x65, 0x8f, 0xd1, 0x6d, 0x18, + 0xf0, 0x4d, 0xb7, 0x4d, 0x4e, 0xf2, 0x1a, 0x63, 0x38, 0xc1, 0x75, 0xda, 0x12, 0x73, 0x04, 0xb3, + 0xaf, 0xc2, 0x98, 0xda, 0xf3, 0x0c, 0xcd, 0xa7, 0xaa, 0x6a, 0x3e, 0x27, 0x76, 0xa3, 0x50, 0x35, + 0xa5, 0xdf, 0x2d, 0xc1, 0x20, 0xbf, 0xe9, 0x38, 0xc6, 0x4d, 0xaf, 0x25, 0x1f, 0x8c, 0x29, 0x15, + 0x77, 0xe7, 0x56, 0x93, 0x23, 0xbf, 0xec, 0x3a, 0xca, 0x1c, 0xa8, 0x6f, 0xc6, 0x20, 0x27, 0x4c, + 0x99, 0xdd, 0x57, 0xfc, 0xc5, 0x38, 0x3e, 0xb0, 0xb3, 0x4e, 0x92, 0xfd, 0x47, 0x1a, 0x8c, 0xc5, + 0x72, 0x90, 0xb7, 0xa0, 0xcf, 0x0b, 0xdf, 0x12, 0x2d, 0x7a, 0x11, 0x2e, 0x1d, 0x76, 0xaf, 0x74, + 0xa9, 0x84, 0x29, 0x9d, 0x30, 0x5d, 0x79, 0xe9, 0x94, 0xd2, 0x95, 0xeb, 0x9f, 0xd2, 0xe0, 0xb2, + 0x1c, 0x50, 0x3c, 0x19, 0x1f, 0x7a, 0x14, 0x86, 0x8d, 0xb6, 0xc5, 0x4c, 0x6a, 0xaa, 0x51, 0x72, + 0x7e, 0xad, 0xc6, 0xca, 0x70, 0x08, 0x45, 0xef, 0x83, 0x61, 0xb9, 0xf0, 0x84, 0xd8, 0x19, 0xf2, + 0xac, 0xf0, 0x6a, 0x3f, 0xac, 0x81, 0xde, 0xa3, 0xbc, 0xe9, 0x33, 0x10, 0xc9, 0x09, 0x21, 0x61, + 0xee, 0x62, 0xa4, 0x7f, 0x1f, 0x8c, 0xd4, 0xeb, 0xb7, 0xe7, 0x4d, 0x93, 0xf8, 0xfe, 0x09, 0x8c, + 0xcb, 0xfa, 0x9b, 0x7d, 0x30, 0x2e, 0xb2, 0x8a, 0x5a, 0x4e, 0xc3, 0x72, 0x9a, 0xe7, 0x70, 0xa6, + 0xac, 0xc3, 0x08, 0xb7, 0x66, 0x1c, 0xf1, 0xee, 0x6b, 0x5d, 0x56, 0x4a, 0xe6, 0xee, 0x0f, 0x01, + 0x38, 0x42, 0x84, 0xee, 0xc0, 0xe0, 0x6b, 0x94, 0xbf, 0xc9, 0x7d, 0x71, 0x2c, 0x36, 0x13, 0x2e, + 0x7a, 0xc6, 0x1a, 0x7d, 0x2c, 0x50, 0x20, 0x9f, 0x79, 0x94, 0x33, 0x81, 0xab, 0x97, 0x6c, 0x41, + 0xb1, 0x99, 0x0d, 0x5f, 0xf4, 0x1a, 0x13, 0x8e, 0xe9, 0xec, 0x17, 0x0e, 0x09, 0xb1, 0x87, 0x47, + 0x62, 0x2d, 0xde, 0x21, 0x0f, 0x8f, 0xc4, 0xfa, 0x9c, 0x73, 0x34, 0x3e, 0x03, 0xd3, 0x99, 0x93, + 0x71, 0xb4, 0x38, 0xab, 0xff, 0x7a, 0x09, 0xfa, 0xeb, 0x84, 0x34, 0xce, 0x61, 0x65, 0xbe, 0x12, + 0x93, 0x76, 0xbe, 0xbf, 0xf0, 0xd3, 0x27, 0x79, 0xc6, 0xaa, 0xad, 0x84, 0xb1, 0xea, 0x43, 0x85, + 0x29, 0x74, 0xb7, 0x54, 0xfd, 0x52, 0x09, 0x80, 0x56, 0x5b, 0x30, 0xcc, 0x1d, 0xce, 0x71, 0xc2, + 0xd5, 0xac, 0xc5, 0x39, 0x4e, 0x7a, 0x19, 0x9e, 0xe7, 0xe5, 0xad, 0x0e, 0x83, 0xdc, 0x87, 0x40, + 0xdc, 0x7b, 0x30, 0x8b, 0x27, 0x3f, 0x9b, 0xb0, 0x80, 0xc4, 0xb9, 0x45, 0xff, 0x29, 0x71, 0x0b, + 0x7d, 0x0f, 0xd8, 0xeb, 0xd1, 0xd5, 0xd5, 0x3a, 0x6a, 0x29, 0xb3, 0x53, 0x2a, 0x2e, 0xcb, 0x0b, + 0x74, 0x47, 0xee, 0xf2, 0x37, 0x35, 0xb8, 0x90, 0xa8, 0x7b, 0x0c, 0x9d, 0xee, 0x4c, 0x78, 0xa6, + 0xfe, 0xfb, 0x1a, 0x0c, 0xd3, 0xbe, 0x9c, 0x03, 0xa3, 0xf9, 0xff, 0xe3, 0x8c, 0xe6, 0x03, 0x45, + 0xa7, 0x38, 0x87, 0xbf, 0xfc, 0x59, 0x09, 0xd8, 0x1b, 0x43, 0xc2, 0x45, 0x41, 0xb9, 0xf9, 0xd7, + 0x72, 0x6e, 0xfe, 0xaf, 0x0b, 0xc7, 0x81, 0x84, 0x8d, 0x52, 0x71, 0x1e, 0x78, 0x9f, 0xe2, 0x1b, + 0xd0, 0x17, 0xdf, 0x36, 0x19, 0xfe, 0x01, 0xaf, 0xc3, 0xb8, 0xbf, 0xed, 0xba, 0x41, 0x98, 0xd9, + 0xa6, 0xbf, 0xb8, 0x3d, 0x9a, 0x85, 0xef, 0xc8, 0xa1, 0xf0, 0x0b, 0xa8, 0xba, 0x8a, 0x1b, 0xc7, + 0x49, 0xa1, 0x39, 0x80, 0x4d, 0xdb, 0x35, 0x77, 0x2a, 0xb5, 0x2a, 0x96, 0xe1, 0x1a, 0xcc, 0x23, + 0x6a, 0x21, 0x2c, 0xc5, 0x4a, 0x8d, 0x9e, 0x7c, 0x19, 0xbe, 0xa9, 0xf1, 0x99, 0x3e, 0xc1, 0xe2, + 0x3d, 0x47, 0x8e, 0xf2, 0xde, 0x04, 0x47, 0x09, 0x39, 0x64, 0x82, 0xab, 0x94, 0xa5, 0xc0, 0xde, + 0x1f, 0xd9, 0x9f, 0x63, 0x4f, 0x33, 0xfe, 0x96, 0x18, 0x66, 0xf8, 0x4c, 0x55, 0x1b, 0xc6, 0x6d, + 0xf5, 0xb9, 0x6d, 0xb1, 0x47, 0x0a, 0xbd, 0xd4, 0x1d, 0x3a, 0x8e, 0xc5, 0x8a, 0x71, 0x9c, 0x00, + 0x7a, 0x1a, 0xc6, 0xe5, 0xe8, 0xb8, 0x63, 0x55, 0x29, 0x8a, 0xa5, 0x58, 0x53, 0x01, 0x38, 0x5e, + 0x4f, 0x7f, 0xbb, 0x04, 0x0f, 0xf1, 0xbe, 0x33, 0x8b, 0x41, 0x95, 0xb4, 0x89, 0xd3, 0x20, 0x8e, + 0xb9, 0xcf, 0x64, 0xd6, 0x86, 0xdb, 0x44, 0x6f, 0xc0, 0xe0, 0x3d, 0x42, 0x1a, 0xa1, 0x45, 0xfb, + 0xc5, 0xe2, 0xaf, 0x7c, 0xe5, 0x90, 0x78, 0x91, 0xa1, 0xe7, 0x1c, 0x9d, 0xff, 0x8f, 0x05, 0x49, + 0x4a, 0xbc, 0xed, 0xb9, 0x9b, 0xa1, 0x68, 0x75, 0xfa, 0xc4, 0xd7, 0x18, 0x7a, 0x4e, 0x9c, 0xff, + 0x8f, 0x05, 0x49, 0x7d, 0x0d, 0x1e, 0x3e, 0x46, 0xd3, 0x93, 0x88, 0xd0, 0x47, 0x61, 0xe4, 0xa3, + 0x3f, 0x09, 0xc6, 0xaf, 0x6b, 0xf0, 0x88, 0x82, 0x72, 0x71, 0x8f, 0x4a, 0xf5, 0x15, 0xa3, 0x6d, + 0x98, 0x54, 0x47, 0x65, 0xd9, 0x3a, 0x4e, 0xf4, 0xea, 0xd0, 0x9b, 0x1a, 0x0c, 0x71, 0x47, 0x1a, + 0xc9, 0x7e, 0x5f, 0xe9, 0x71, 0xca, 0x73, 0xbb, 0x24, 0xd3, 0xd9, 0xcb, 0xb1, 0xf1, 0xdf, 0x3e, + 0x96, 0xf4, 0xf5, 0x7f, 0x33, 0x00, 0xdf, 0x75, 0x7c, 0x44, 0xe8, 0x9b, 0x5a, 0xfa, 0x8d, 0xf4, + 0xd6, 0xd9, 0x76, 0x3e, 0xb4, 0x62, 0x08, 0xc5, 0xf8, 0xc5, 0xd4, 0x93, 0x61, 0xa7, 0x64, 0x20, + 0x51, 0x1e, 0x64, 0xff, 0xa7, 0x1a, 0x8c, 0xd1, 0x63, 0x29, 0x64, 0x2e, 0xfc, 0x33, 0xb5, 0xcf, + 0x78, 0xa4, 0xab, 0x0a, 0xc9, 0x44, 0x58, 0xbf, 0x0a, 0xc2, 0xb1, 0xbe, 0xa1, 0x8d, 0xf8, 0x6d, + 0x10, 0x57, 0xb7, 0xae, 0x65, 0x49, 0x23, 0x27, 0x79, 0x90, 0x6f, 0xd6, 0x86, 0x89, 0xf8, 0xcc, + 0x9f, 0xa5, 0x79, 0x67, 0xf6, 0x39, 0x98, 0x4a, 0x8d, 0xfe, 0x44, 0xc6, 0x8d, 0xbf, 0xdb, 0x0f, + 0x65, 0x65, 0xaa, 0x63, 0xae, 0x74, 0x52, 0x26, 0xf8, 0x8c, 0x06, 0xa3, 0x86, 0xe3, 0x08, 0x77, + 0x0c, 0xb9, 0x7e, 0x1b, 0x3d, 0x7e, 0xd5, 0x2c, 0x52, 0x73, 0xf3, 0x11, 0x99, 0x84, 0xbf, 0x81, + 0x02, 0xc1, 0x6a, 0x6f, 0xba, 0x38, 0xd5, 0x95, 0xce, 0xcd, 0xa9, 0x0e, 0xfd, 0x98, 0x3c, 0x88, + 0xf9, 0x32, 0x7a, 0xe9, 0x0c, 0xe6, 0x86, 0x9d, 0xeb, 0xd9, 0xd6, 0xb4, 0xd9, 0x0f, 0xc1, 0x64, + 0x72, 0xe6, 0x4e, 0xb4, 0x0a, 0x7e, 0xbd, 0x2f, 0xc6, 0xaa, 0x73, 0xc9, 0x1f, 0xc3, 0x86, 0xf8, + 0xd9, 0xc4, 0x62, 0xe1, 0x2c, 0xc0, 0x3a, 0xab, 0x09, 0x39, 0xdd, 0x15, 0xd3, 0x77, 0x7e, 0x6e, + 0x98, 0xbd, 0x7e, 0xb2, 0x05, 0x98, 0x56, 0xe6, 0x47, 0x79, 0x00, 0xf5, 0x31, 0x18, 0xda, 0xb5, + 0x7c, 0x4b, 0xe6, 0x51, 0x53, 0x4e, 0xe8, 0x17, 0x78, 0x31, 0x96, 0x70, 0x7d, 0x39, 0xb6, 0xf7, + 0xd7, 0xdd, 0xb6, 0x6b, 0xbb, 0xcd, 0xfd, 0xf9, 0x7b, 0x86, 0x47, 0xb0, 0xdb, 0x09, 0x04, 0xb6, + 0xe3, 0x9e, 0xf7, 0x2b, 0x70, 0x5d, 0xc1, 0x96, 0x99, 0x6d, 0xe6, 0x24, 0xe8, 0xbe, 0x34, 0x24, + 0x45, 0x57, 0x11, 0x8e, 0xff, 0x9b, 0x1a, 0x3c, 0x48, 0xf2, 0x8e, 0x02, 0x21, 0xc7, 0xbe, 0x74, + 0x56, 0x47, 0x8d, 0xc8, 0x6c, 0x9d, 0x07, 0xc6, 0xf9, 0x3d, 0x43, 0xfb, 0xb1, 0x67, 0x80, 0x4b, + 0xbd, 0xd8, 0xe1, 0x32, 0xbe, 0x77, 0xb7, 0x47, 0x80, 0xd1, 0x2f, 0x6b, 0x70, 0xc9, 0xce, 0xd8, + 0x3a, 0x42, 0x64, 0xad, 0x9f, 0xc1, 0xae, 0xe4, 0x77, 0x9e, 0x59, 0x10, 0x9c, 0xd9, 0x15, 0xf4, + 0xab, 0xb9, 0x69, 0x90, 0xf8, 0x95, 0xe4, 0x7a, 0x8f, 0x9d, 0x3c, 0xad, 0x8c, 0x48, 0x6f, 0x6b, + 0x80, 0x1a, 0x29, 0xb1, 0x58, 0x78, 0x91, 0x3c, 0x7f, 0xea, 0xc2, 0x3f, 0xbf, 0xb4, 0x4e, 0x97, + 0xe3, 0x8c, 0x4e, 0xb0, 0xef, 0x1c, 0x64, 0x6c, 0x5f, 0x91, 0xf4, 0xbb, 0xd7, 0xef, 0x9c, 0xc5, + 0x19, 0xf8, 0x77, 0xce, 0x82, 0xe0, 0xcc, 0xae, 0xe8, 0xbf, 0x37, 0xc8, 0xad, 0x34, 0xec, 0x56, + 0x71, 0x13, 0x06, 0x37, 0x99, 0x55, 0x4f, 0xec, 0xdb, 0xc2, 0x26, 0x44, 0x6e, 0x1b, 0xe4, 0x3a, + 0x12, 0xff, 0x1f, 0x0b, 0xcc, 0xe8, 0x65, 0xe8, 0x6b, 0x38, 0x32, 0x42, 0xeb, 0x83, 0x3d, 0x18, + 0xc3, 0xa2, 0x38, 0xd1, 0xea, 0x6a, 0x1d, 0x53, 0xa4, 0xc8, 0x81, 0x61, 0x47, 0x18, 0x36, 0x84, + 0xee, 0x59, 0xf8, 0x85, 0xe9, 0xd0, 0x40, 0x12, 0x9a, 0x65, 0x64, 0x09, 0x0e, 0x69, 0x50, 0x7a, + 0x09, 0x4b, 0x7e, 0x61, 0x7a, 0xa1, 0x69, 0xaf, 0x9b, 0xf5, 0x94, 0xc0, 0x60, 0x60, 0x58, 0x4e, + 0x20, 0xc3, 0xa0, 0x9e, 0x2d, 0x4a, 0x6d, 0x9d, 0x62, 0x89, 0xec, 0x17, 0xec, 0xa7, 0x8f, 0x05, + 0x72, 0xba, 0x0c, 0x78, 0x28, 0x94, 0xd8, 0x46, 0x85, 0x97, 0x01, 0x8f, 0xae, 0xe2, 0xcb, 0x80, + 0xff, 0x8f, 0x05, 0x66, 0xf4, 0x2a, 0x0c, 0xfb, 0xd2, 0xc9, 0x61, 0xb8, 0xd7, 0xc7, 0xc0, 0x85, + 0x87, 0x83, 0x88, 0xae, 0x11, 0xae, 0x0d, 0x21, 0x7e, 0xb4, 0x09, 0x43, 0x16, 0x8f, 0x07, 0x11, + 0x39, 0xdc, 0x3e, 0xd8, 0xc3, 0x5b, 0x98, 0x5c, 0x0d, 0x16, 0x3f, 0xb0, 0x44, 0xac, 0x7f, 0x09, + 0xb8, 0x55, 0x5c, 0xf8, 0x91, 0x6d, 0xc1, 0xb0, 0x44, 0xd7, 0x4b, 0x08, 0xb1, 0x7c, 0x7d, 0x98, + 0x0f, 0x2d, 0x7c, 0x8b, 0x38, 0xc4, 0x8d, 0x2a, 0x59, 0xa1, 0xe0, 0xd1, 0x53, 0x28, 0xc7, 0x0b, + 0x03, 0x7f, 0x8d, 0x3d, 0x17, 0x2a, 0x13, 0xb2, 0xf4, 0x15, 0x5f, 0x5a, 0x61, 0xb2, 0x96, 0xd8, + 0x33, 0xa1, 0x32, 0x9f, 0x8b, 0x42, 0x24, 0xc7, 0xcf, 0xae, 0xbf, 0x90, 0x9f, 0xdd, 0xb3, 0x70, + 0x41, 0xf8, 0x35, 0xd4, 0x1a, 0x84, 0xe9, 0x62, 0x22, 0x10, 0x81, 0x79, 0xbc, 0x54, 0xe2, 0x20, + 0x9c, 0xac, 0x8b, 0x7e, 0x57, 0x83, 0x61, 0x53, 0x08, 0x08, 0x62, 0x5f, 0x2d, 0xf7, 0x76, 0x75, + 0x32, 0x27, 0xe5, 0x0d, 0x2e, 0xfa, 0xbe, 0x20, 0x77, 0xb4, 0x2c, 0x3e, 0x25, 0x15, 0x3f, 0xec, + 0x35, 0xfa, 0x43, 0x2a, 0xdd, 0xdb, 0xec, 0x45, 0x64, 0x96, 0xf4, 0x82, 0x47, 0x48, 0xdc, 0xed, + 0x71, 0x14, 0xf3, 0x11, 0x46, 0x3e, 0x90, 0x1f, 0x0c, 0x65, 0xf8, 0x08, 0x72, 0x4a, 0x63, 0x51, + 0xbb, 0x8f, 0xfe, 0xb1, 0x06, 0x8f, 0xf0, 0xb0, 0x94, 0x0a, 0x3d, 0xf3, 0xb7, 0x2c, 0xd3, 0x08, + 0x08, 0xcf, 0x3b, 0x23, 0xbd, 0xf2, 0xb9, 0x57, 0xe0, 0xf0, 0x89, 0xbd, 0x02, 0x1f, 0x3d, 0x3c, + 0x28, 0x3f, 0x52, 0x39, 0x06, 0x6e, 0x7c, 0xac, 0x1e, 0xa0, 0xd7, 0x61, 0xdc, 0x56, 0x13, 0x73, + 0x09, 0x06, 0x53, 0xc8, 0x30, 0x1f, 0xcb, 0xf0, 0xc5, 0x2d, 0xb1, 0xb1, 0x22, 0x1c, 0x27, 0x35, + 0xbb, 0x03, 0xe3, 0xb1, 0x85, 0x76, 0xa6, 0x26, 0x0d, 0x07, 0x26, 0x93, 0xeb, 0xe1, 0x4c, 0x3d, + 0x64, 0xee, 0xc0, 0x48, 0x78, 0x50, 0xa1, 0x87, 0x14, 0x42, 0xd1, 0xb1, 0x7f, 0x87, 0xec, 0x73, + 0xaa, 0xe5, 0x98, 0x3a, 0xc6, 0xed, 0xed, 0x2f, 0xd0, 0x02, 0x81, 0x50, 0xff, 0xb2, 0xb0, 0xb7, + 0xaf, 0x93, 0x56, 0xdb, 0x36, 0x02, 0xf2, 0xce, 0xbf, 0xed, 0xd5, 0xff, 0x9b, 0xc6, 0xcf, 0x1b, + 0x7e, 0xac, 0x22, 0x03, 0x46, 0x5b, 0x3c, 0x41, 0x3c, 0xcb, 0xf3, 0xa2, 0x15, 0xcf, 0x30, 0xb3, + 0x12, 0xa1, 0xc1, 0x2a, 0x4e, 0x74, 0x0f, 0x46, 0xa4, 0x20, 0x22, 0xed, 0x07, 0x4b, 0xbd, 0x09, + 0x06, 0xa1, 0xcc, 0x13, 0x5e, 0x24, 0xca, 0x12, 0x1f, 0x47, 0xb4, 0x74, 0x03, 0x50, 0xba, 0x0d, + 0xd5, 0x59, 0xa5, 0xe3, 0xbb, 0x16, 0x4f, 0xe9, 0x9a, 0x72, 0x7e, 0x97, 0xe6, 0x91, 0x52, 0x9e, + 0x79, 0x44, 0xff, 0x7c, 0x09, 0x32, 0xdf, 0xe3, 0x44, 0x3a, 0x0c, 0xf2, 0x58, 0x34, 0x41, 0x84, + 0x89, 0x32, 0x3c, 0x50, 0x0d, 0x0b, 0x08, 0xba, 0xcb, 0xed, 0x16, 0x4e, 0x83, 0xa5, 0x52, 0x8d, + 0xb8, 0x84, 0x1a, 0xf5, 0xb8, 0x98, 0x55, 0x01, 0x67, 0xb7, 0x43, 0xbb, 0x80, 0x5a, 0xc6, 0x5e, + 0x12, 0x5b, 0x0f, 0x0f, 0xce, 0xad, 0xa4, 0xb0, 0xe1, 0x0c, 0x0a, 0xf4, 0x20, 0x35, 0x4c, 0x93, + 0xb4, 0x03, 0xd2, 0xe0, 0x43, 0x94, 0xd7, 0x7d, 0xec, 0x20, 0x9d, 0x8f, 0x83, 0x70, 0xb2, 0xae, + 0xfe, 0x8d, 0x7e, 0x78, 0x30, 0x3e, 0x89, 0x74, 0x87, 0xca, 0x70, 0xb1, 0xe7, 0xa4, 0x37, 0x3c, + 0x9f, 0xc8, 0xc7, 0x92, 0xde, 0xf0, 0x33, 0x15, 0x8f, 0xb0, 0x23, 0xd9, 0xb0, 0x7d, 0xd9, 0x28, + 0xe6, 0x19, 0xff, 0x2d, 0x88, 0xfd, 0xca, 0x89, 0x71, 0xeb, 0x3b, 0xd3, 0x18, 0xb7, 0xb7, 0x34, + 0x98, 0x8d, 0x17, 0x2f, 0x59, 0x8e, 0xe5, 0x6f, 0x8b, 0x84, 0xa0, 0x27, 0x77, 0xc6, 0x67, 0x4f, + 0xe4, 0x2c, 0xe7, 0x62, 0xc4, 0x5d, 0xa8, 0xa1, 0x4f, 0x68, 0x70, 0x25, 0x31, 0x2f, 0xb1, 0xf4, + 0xa4, 0x27, 0xf7, 0xcb, 0x67, 0xd1, 0xba, 0xcb, 0xf9, 0x28, 0x71, 0x37, 0x7a, 0xfa, 0xbf, 0x2c, + 0xc1, 0x00, 0xbb, 0xad, 0x7e, 0x67, 0xb8, 0x27, 0xb3, 0xae, 0xe6, 0x7a, 0xec, 0x34, 0x13, 0x1e, + 0x3b, 0xcf, 0x15, 0x27, 0xd1, 0xdd, 0x65, 0xe7, 0x07, 0xe1, 0x32, 0xab, 0x36, 0xdf, 0x60, 0x46, + 0x14, 0x9f, 0x34, 0xe6, 0x1b, 0x0d, 0x96, 0x2b, 0xe0, 0x68, 0xcb, 0xf1, 0x43, 0xd0, 0xd7, 0xf1, + 0xec, 0x64, 0x6a, 0xa6, 0x0d, 0xbc, 0x8c, 0x69, 0xb9, 0xfe, 0x96, 0x06, 0x93, 0x0c, 0xb7, 0xb2, + 0x7d, 0xd1, 0x2e, 0x0c, 0x7b, 0x62, 0x0b, 0x8b, 0x6f, 0xb3, 0x5c, 0x78, 0x68, 0x19, 0x6c, 0x41, + 0xbc, 0x18, 0x2c, 0x7e, 0xe1, 0x90, 0x96, 0xfe, 0xb5, 0x41, 0x98, 0xc9, 0x6b, 0x84, 0x3e, 0xa9, + 0xc1, 0x65, 0x33, 0x92, 0xe6, 0xe6, 0x3b, 0xc1, 0xb6, 0xeb, 0x59, 0x81, 0x25, 0xdc, 0x38, 0x0a, + 0xaa, 0xb9, 0x95, 0xf9, 0xb0, 0x57, 0x2c, 0x9d, 0x66, 0x25, 0x93, 0x02, 0xce, 0xa1, 0x8c, 0xde, + 0xe0, 0x69, 0x6b, 0x4c, 0xd5, 0x73, 0xe1, 0x4e, 0xe1, 0xb9, 0x52, 0x72, 0x7c, 0xcb, 0x4e, 0x85, + 0xb9, 0x6b, 0x44, 0xb9, 0x42, 0x8e, 0x12, 0xf7, 0xfd, 0xed, 0x3b, 0x64, 0xbf, 0x6d, 0x58, 0xf2, + 0xb2, 0xbe, 0x38, 0xf1, 0x7a, 0xfd, 0xb6, 0x40, 0x15, 0x27, 0xae, 0x94, 0x2b, 0xe4, 0xd0, 0xc7, + 0x35, 0x18, 0x77, 0xd5, 0xc0, 0xe2, 0x5e, 0x7c, 0x21, 0x33, 0x23, 0x94, 0xb9, 0x08, 0x1d, 0x07, + 0xc5, 0x49, 0xd2, 0x35, 0x31, 0xe5, 0x27, 0x8f, 0x2c, 0xc1, 0xd4, 0x56, 0x7a, 0x7f, 0xee, 0x5b, + 0x39, 0xff, 0xb8, 0x3a, 0x9e, 0x06, 0xa7, 0xc9, 0xb3, 0x4e, 0x91, 0xc0, 0x6c, 0x44, 0x8f, 0x0f, + 0xd3, 0x4e, 0x0d, 0x16, 0xef, 0xd4, 0xe2, 0x7a, 0xa5, 0x1a, 0x43, 0x16, 0xef, 0x54, 0x1a, 0x9c, + 0x26, 0xaf, 0x7f, 0xac, 0x04, 0x0f, 0xe4, 0xac, 0xb1, 0xbf, 0x35, 0x91, 0xe0, 0x5f, 0xd4, 0x60, + 0x84, 0xcd, 0xc1, 0x3b, 0x24, 0x9c, 0x84, 0xf5, 0x35, 0xc7, 0xa7, 0xed, 0xf7, 0x35, 0x98, 0x4a, + 0x25, 0x72, 0x3e, 0x56, 0x30, 0xc2, 0xb9, 0xb9, 0x5b, 0xbd, 0x27, 0x7a, 0xb4, 0xa1, 0x2f, 0x0a, + 0x6d, 0x4d, 0x3e, 0xd8, 0xa0, 0xbf, 0x08, 0xe3, 0x31, 0x97, 0xb6, 0x30, 0x6b, 0x8f, 0x96, 0x99, + 0xb5, 0x47, 0x4d, 0xca, 0x53, 0xea, 0x96, 0x94, 0x27, 0x5a, 0xf2, 0x69, 0xce, 0xf6, 0xb7, 0x66, + 0xc9, 0xff, 0x87, 0x49, 0xb1, 0xe4, 0xd9, 0xfd, 0xc0, 0x2b, 0x30, 0xc8, 0x52, 0x00, 0xc9, 0x13, + 0xf3, 0x66, 0xe1, 0xd4, 0x42, 0x3e, 0xd7, 0xa4, 0xf8, 0xff, 0x58, 0x60, 0x45, 0xd5, 0x78, 0x7e, + 0xab, 0xd5, 0x48, 0x69, 0xcb, 0xcc, 0x4c, 0xc5, 0x96, 0x65, 0xaa, 0x05, 0xc2, 0xfc, 0x86, 0x81, + 0x9f, 0x67, 0x85, 0xd2, 0x0f, 0x57, 0x57, 0xeb, 0xfc, 0x85, 0x9d, 0xf0, 0x66, 0xe1, 0x35, 0x00, + 0x22, 0x17, 0xaf, 0x8c, 0x02, 0x7c, 0xb6, 0x58, 0x62, 0xe5, 0x70, 0x0b, 0x48, 0xe1, 0x33, 0x2c, + 0xf2, 0xb1, 0x42, 0x04, 0x79, 0x30, 0xba, 0x6d, 0x6d, 0x12, 0xcf, 0xe1, 0x72, 0xd4, 0x40, 0x71, + 0x11, 0xf1, 0x76, 0x84, 0x86, 0xeb, 0xf8, 0x4a, 0x01, 0x56, 0x89, 0x20, 0x2f, 0x96, 0x45, 0x6f, + 0xb0, 0xb8, 0x58, 0x14, 0xd9, 0x9d, 0xa3, 0x71, 0xe6, 0x64, 0xd0, 0x73, 0x00, 0x9c, 0x30, 0xf7, + 0x57, 0x2f, 0x37, 0x0e, 0x51, 0x06, 0x31, 0x2e, 0x78, 0x44, 0xbf, 0xb1, 0x42, 0x81, 0xce, 0x6b, + 0x2b, 0xca, 0x54, 0x2a, 0x6c, 0x88, 0xcf, 0xf5, 0x98, 0x2d, 0x56, 0xd8, 0x4e, 0xa2, 0x02, 0xac, + 0x12, 0xa1, 0x63, 0x6c, 0x85, 0xf9, 0x45, 0x85, 0x8d, 0xb0, 0xd0, 0x18, 0xa3, 0x2c, 0xa5, 0xe2, + 0x99, 0xc6, 0xf0, 0x37, 0x56, 0x28, 0xa0, 0x57, 0x95, 0x8b, 0x29, 0x28, 0x6e, 0x81, 0x3a, 0xd6, + 0xa5, 0xd4, 0xfb, 0x23, 0x43, 0xcc, 0x28, 0xdb, 0xab, 0x57, 0x14, 0x23, 0x0c, 0xcb, 0xbb, 0x4a, + 0xf9, 0x47, 0xca, 0x28, 0x13, 0x39, 0xd3, 0x8e, 0x75, 0x75, 0xa6, 0xad, 0x50, 0x09, 0x4d, 0x09, + 0xee, 0x60, 0x4c, 0x61, 0x3c, 0xba, 0xe1, 0xa8, 0x27, 0x81, 0x38, 0x5d, 0x9f, 0x33, 0x7d, 0xd2, + 0x60, 0x6d, 0x27, 0x54, 0xa6, 0xcf, 0xcb, 0x70, 0x08, 0x45, 0xbb, 0x30, 0xe6, 0x2b, 0x9e, 0xb9, + 0xe2, 0x6d, 0xdd, 0x1e, 0xee, 0xa6, 0x84, 0x57, 0x2e, 0x4b, 0x8a, 0xa4, 0x96, 0xe0, 0x18, 0x1d, + 0xf4, 0x86, 0xea, 0x8a, 0x38, 0xd9, 0x5b, 0xf6, 0xcd, 0x74, 0x3e, 0xd9, 0xc8, 0xc2, 0x16, 0x7a, + 0xc1, 0xa9, 0x1e, 0x82, 0x9d, 0xb8, 0xd3, 0xdd, 0xd4, 0xa9, 0x84, 0x9d, 0x1f, 0xe9, 0x94, 0x47, + 0x3f, 0x2d, 0xd9, 0x6b, 0xbb, 0x7e, 0xc7, 0x23, 0x2c, 0x4f, 0x36, 0xfb, 0x3c, 0x28, 0xfa, 0xb4, + 0x8b, 0x49, 0x20, 0x4e, 0xd7, 0x47, 0x3f, 0xa5, 0xc1, 0x24, 0x7f, 0x9a, 0x98, 0x1e, 0x5d, 0xae, + 0x43, 0x9c, 0xc0, 0x67, 0x6f, 0xef, 0x16, 0x8c, 0x94, 0xac, 0x27, 0x70, 0xf1, 0xf7, 0xdc, 0x92, + 0xa5, 0x38, 0x45, 0x93, 0xae, 0x1c, 0x35, 0x70, 0x9d, 0x3d, 0xe1, 0x5b, 0x70, 0xe5, 0xa8, 0x41, + 0xf1, 0x7c, 0xe5, 0xa8, 0x25, 0x38, 0x46, 0x07, 0x3d, 0x0d, 0xe3, 0xbe, 0x7c, 0xc4, 0x8b, 0xcd, + 0xe0, 0x74, 0x94, 0x59, 0xaa, 0xae, 0x02, 0x70, 0xbc, 0x1e, 0xfa, 0x28, 0x8c, 0xa9, 0x67, 0xa7, + 0x78, 0xf8, 0xf7, 0x14, 0x13, 0x5d, 0xf2, 0x9e, 0xab, 0xa0, 0x18, 0x41, 0xfd, 0xdf, 0x6a, 0x00, + 0xa1, 0xf9, 0xe2, 0x3c, 0x8c, 0xf2, 0x8d, 0x98, 0x45, 0x67, 0xa1, 0x27, 0x73, 0x4b, 0x6e, 0xee, + 0x60, 0xfd, 0xab, 0x1a, 0x4c, 0x44, 0xd5, 0xce, 0x41, 0x57, 0x30, 0xe3, 0xba, 0xc2, 0x87, 0x7a, + 0x1b, 0x57, 0x8e, 0xc2, 0xf0, 0x7f, 0x4b, 0xea, 0xa8, 0x98, 0x38, 0xb8, 0x1b, 0xbb, 0xe4, 0xa6, + 0xa4, 0x6f, 0xf7, 0x72, 0xc9, 0xad, 0x46, 0xf3, 0x46, 0xe3, 0xcd, 0xb8, 0xf4, 0xfe, 0x3b, 0x31, + 0x61, 0xac, 0x87, 0x98, 0xf5, 0x50, 0xf2, 0x92, 0xa4, 0xf9, 0x04, 0x1c, 0x25, 0x99, 0xbd, 0xa6, + 0xf2, 0xea, 0x1e, 0xf2, 0xfd, 0xc6, 0x06, 0xdc, 0x95, 0x43, 0xeb, 0x3f, 0x3f, 0x01, 0xa3, 0x8a, + 0xa5, 0x2f, 0x71, 0x65, 0xaf, 0x9d, 0xc7, 0x95, 0x7d, 0x00, 0xa3, 0x66, 0xf8, 0xf0, 0x85, 0x9c, + 0xf6, 0x1e, 0x69, 0x86, 0x67, 0x44, 0xf4, 0xa4, 0x86, 0x8f, 0x55, 0x32, 0x54, 0x92, 0x09, 0xd7, + 0x58, 0xdf, 0x29, 0x38, 0x52, 0x74, 0x5b, 0x57, 0x4f, 0x01, 0x48, 0x61, 0x98, 0x34, 0x44, 0x72, + 0xc9, 0xd0, 0x67, 0xbd, 0xe6, 0xdf, 0x0e, 0x61, 0x58, 0xa9, 0x97, 0xbe, 0x02, 0x1e, 0x38, 0xb7, + 0x2b, 0x60, 0xba, 0x0c, 0x6c, 0xf9, 0xee, 0x5a, 0x4f, 0x4e, 0x41, 0xe1, 0xeb, 0x6d, 0xd1, 0x32, + 0x08, 0x8b, 0x7c, 0xac, 0x10, 0xc9, 0xf1, 0xdc, 0x18, 0x2a, 0xe4, 0xb9, 0xd1, 0x81, 0x8b, 0x1e, + 0x09, 0xbc, 0xfd, 0xca, 0xbe, 0xc9, 0x92, 0x1c, 0x7b, 0x01, 0x53, 0x69, 0x87, 0x8b, 0x25, 0x3b, + 0xc2, 0x69, 0x54, 0x38, 0x0b, 0x7f, 0x4c, 0x1a, 0x1c, 0xe9, 0x2a, 0x0d, 0xbe, 0x1f, 0x46, 0x03, + 0x62, 0x6e, 0x3b, 0x96, 0x69, 0xd8, 0xb5, 0xaa, 0xc8, 0xbc, 0x18, 0x09, 0x36, 0x11, 0x08, 0xab, + 0xf5, 0xd0, 0x02, 0xf4, 0x75, 0xac, 0x86, 0x10, 0x87, 0xbf, 0x27, 0xb4, 0x99, 0xd7, 0xaa, 0xf7, + 0x0f, 0xca, 0xef, 0x8e, 0x5c, 0x21, 0xc2, 0x51, 0xdd, 0x68, 0xef, 0x34, 0x6f, 0x04, 0xfb, 0x6d, + 0xe2, 0xcf, 0x6d, 0xd4, 0xaa, 0x98, 0x36, 0xce, 0xf2, 0x6a, 0x19, 0x3b, 0x81, 0x57, 0xcb, 0xdb, + 0x1a, 0x5c, 0x34, 0x92, 0xe6, 0x7e, 0xe2, 0xcf, 0x8c, 0x17, 0xe7, 0x96, 0xd9, 0x57, 0x08, 0x0b, + 0x57, 0xc4, 0xf8, 0x2e, 0xce, 0xa7, 0xc9, 0xe1, 0xac, 0x3e, 0x20, 0x0f, 0x50, 0xcb, 0x6a, 0x86, + 0x4f, 0xa0, 0x89, 0xaf, 0x3e, 0x51, 0xcc, 0x90, 0xb1, 0x92, 0xc2, 0x84, 0x33, 0xb0, 0xa3, 0x7b, + 0x30, 0x6a, 0x46, 0x97, 0x02, 0x42, 0xac, 0xaf, 0x9e, 0xc6, 0xad, 0x04, 0x57, 0xfd, 0xd4, 0x1b, + 0x07, 0x95, 0x52, 0x78, 0x9d, 0xa7, 0xe8, 0xdc, 0xe2, 0x4a, 0x8b, 0x8d, 0x7a, 0xb2, 0xf8, 0x75, + 0x5e, 0x36, 0x46, 0xdc, 0x85, 0x1a, 0x4b, 0x31, 0x64, 0xc7, 0x5f, 0x2a, 0x9c, 0x99, 0x2a, 0x1e, + 0x96, 0x9c, 0x78, 0xf4, 0x90, 0x2f, 0xcd, 0x44, 0x21, 0x4e, 0x12, 0x44, 0x4b, 0x80, 0x08, 0xb7, + 0x2d, 0x47, 0x9a, 0x8a, 0x3f, 0x83, 0xc2, 0x17, 0x1d, 0xd1, 0x62, 0x0a, 0x8a, 0x33, 0x5a, 0xe8, + 0x5f, 0xd1, 0x84, 0xe5, 0xef, 0x1c, 0xdd, 0x3a, 0xce, 0xfa, 0x4e, 0x50, 0xff, 0x73, 0x0d, 0x52, + 0xca, 0x06, 0xda, 0x84, 0x21, 0x8a, 0xa2, 0xba, 0x5a, 0x17, 0xc3, 0xfa, 0x60, 0xb1, 0x63, 0x97, + 0xa1, 0xe0, 0x66, 0x54, 0xf1, 0x03, 0x4b, 0xc4, 0x54, 0x7d, 0x71, 0x94, 0x24, 0xd2, 0x62, 0x84, + 0x85, 0xe4, 0x1a, 0x35, 0x19, 0x35, 0x57, 0x02, 0xd4, 0x12, 0x1c, 0xa3, 0xa3, 0x2f, 0x03, 0x44, + 0x0a, 0x62, 0xcf, 0x9e, 0x3e, 0xff, 0x62, 0x10, 0xa6, 0x7b, 0x8d, 0x71, 0x60, 0x0f, 0xed, 0x91, + 0x5d, 0xcb, 0x0c, 0xe6, 0xb7, 0x02, 0xe2, 0xdd, 0xbd, 0xbb, 0xb2, 0xbe, 0xed, 0x11, 0x7f, 0xdb, + 0xb5, 0x1b, 0x05, 0x5f, 0xfa, 0x63, 0x37, 0x83, 0x8b, 0x99, 0x18, 0x71, 0x0e, 0x25, 0xa6, 0x1c, + 0x8b, 0xb7, 0xf9, 0x31, 0x15, 0x4a, 0x3b, 0x9e, 0x1f, 0x88, 0x44, 0x2d, 0x5c, 0x39, 0x4e, 0x02, + 0x71, 0xba, 0x7e, 0x12, 0xc9, 0xb2, 0xd5, 0xb2, 0xf8, 0x8b, 0x67, 0x5a, 0x1a, 0x09, 0x03, 0xe2, + 0x74, 0x7d, 0x15, 0x09, 0xff, 0x52, 0x94, 0x6b, 0x0c, 0xa4, 0x91, 0x84, 0x40, 0x9c, 0xae, 0x8f, + 0x1a, 0x70, 0xd5, 0x23, 0xa6, 0xdb, 0x6a, 0x11, 0xa7, 0xc1, 0xdf, 0xb0, 0x35, 0xbc, 0xa6, 0xe5, + 0x2c, 0x79, 0x06, 0xab, 0xc8, 0x6c, 0x8d, 0x1a, 0x7b, 0xb7, 0xe7, 0x2a, 0xee, 0x52, 0x0f, 0x77, + 0xc5, 0x82, 0x5a, 0x70, 0x81, 0x3f, 0x98, 0xe7, 0xd5, 0x9c, 0x80, 0x78, 0xbb, 0x86, 0x2d, 0x0c, + 0x8a, 0x85, 0xde, 0xd7, 0xdf, 0x88, 0xa3, 0xc2, 0x49, 0xdc, 0x68, 0x9f, 0xca, 0x2f, 0xa2, 0x3b, + 0x0a, 0xc9, 0xe1, 0xe2, 0x4f, 0x51, 0xe2, 0x34, 0x3a, 0x9c, 0x45, 0x03, 0xd5, 0xe0, 0x62, 0x60, + 0x78, 0x4d, 0x12, 0x54, 0xd6, 0x36, 0xd6, 0x88, 0x67, 0xd2, 0xe3, 0xc6, 0xe6, 0xe2, 0x8c, 0xc6, + 0x51, 0xad, 0xa7, 0xc1, 0x38, 0xab, 0x8d, 0xfe, 0xb6, 0x06, 0xc2, 0x3b, 0x1b, 0x5d, 0x8d, 0xdd, + 0xff, 0x0c, 0x27, 0xee, 0x7e, 0xe4, 0xbb, 0x0c, 0xa5, 0xcc, 0x77, 0x19, 0xde, 0xab, 0x24, 0x13, + 0x1a, 0x89, 0xd8, 0x28, 0xc7, 0xac, 0x3c, 0x58, 0xf6, 0x38, 0x8c, 0x84, 0xcc, 0x5c, 0x08, 0xd9, + 0x2c, 0x39, 0x68, 0xc4, 0xf5, 0x23, 0xb8, 0xfe, 0x47, 0x1a, 0x40, 0xf4, 0x46, 0xc7, 0xf1, 0x9e, + 0x59, 0x3b, 0xd2, 0xdd, 0x4b, 0x79, 0x1e, 0xae, 0x2f, 0xf7, 0x79, 0xb8, 0x33, 0x7a, 0x35, 0xed, + 0x37, 0x35, 0xb8, 0x10, 0xcf, 0xee, 0xe4, 0xa3, 0xf7, 0xc0, 0x90, 0xc8, 0xff, 0x28, 0x12, 0xb8, + 0xb1, 0xa6, 0x22, 0x01, 0x03, 0x96, 0xb0, 0xb8, 0x89, 0xb0, 0x07, 0xad, 0x37, 0x3b, 0xc9, 0xd4, + 0x11, 0x0a, 0xe8, 0xdb, 0x53, 0x30, 0xc8, 0x93, 0x07, 0x52, 0xf6, 0x98, 0x11, 0x78, 0x7a, 0xa7, + 0x78, 0x8e, 0xc2, 0x22, 0xd1, 0x82, 0x6a, 0x9e, 0xfe, 0x52, 0xd7, 0x3c, 0xfd, 0x98, 0xbf, 0x46, + 0xd9, 0xc3, 0x75, 0x50, 0x05, 0xd7, 0xf8, 0x75, 0x50, 0xf8, 0x12, 0x65, 0x10, 0xbb, 0x27, 0xe9, + 0x2f, 0x2e, 0x4c, 0xf2, 0x09, 0x50, 0x6e, 0x4b, 0x26, 0xba, 0xde, 0x94, 0xc8, 0xec, 0x6c, 0x03, + 0xc5, 0xdd, 0x2f, 0xc5, 0x94, 0x1f, 0x23, 0x3b, 0x5b, 0xb8, 0x91, 0x06, 0x73, 0x37, 0xd2, 0x16, + 0x0c, 0x89, 0xad, 0x20, 0xf8, 0xec, 0x07, 0x7b, 0x78, 0x79, 0x48, 0x49, 0x28, 0xcc, 0x0b, 0xb0, + 0x44, 0x4e, 0x0f, 0xef, 0x96, 0xb1, 0x67, 0xb5, 0x3a, 0x2d, 0xc6, 0x5c, 0x07, 0xd4, 0xaa, 0xac, + 0x18, 0x4b, 0x38, 0xab, 0xca, 0xbd, 0x56, 0x19, 0x33, 0x54, 0xab, 0xf2, 0x62, 0x2c, 0xe1, 0xe8, + 0x65, 0x18, 0x6e, 0x19, 0x7b, 0xf5, 0x8e, 0xd7, 0x24, 0xe2, 0x96, 0x24, 0x5f, 0x5c, 0xec, 0x04, + 0x96, 0x3d, 0x67, 0x39, 0x81, 0x1f, 0x78, 0x73, 0x35, 0x27, 0xb8, 0xeb, 0xd5, 0x03, 0x2f, 0x7c, + 0xdb, 0x6d, 0x45, 0x60, 0xc1, 0x21, 0x3e, 0x64, 0xc3, 0x44, 0xcb, 0xd8, 0xdb, 0x70, 0x0c, 0x9e, + 0x78, 0xcf, 0xe6, 0x97, 0x23, 0x45, 0x28, 0xb0, 0xab, 0xf2, 0x95, 0x18, 0x2e, 0x9c, 0xc0, 0x9d, + 0x71, 0x2b, 0x3f, 0x76, 0x56, 0xb7, 0xf2, 0xf3, 0x61, 0x0c, 0x12, 0x57, 0x25, 0x1f, 0xcc, 0x8c, + 0xcd, 0xef, 0x1a, 0x5f, 0xf4, 0x4a, 0x18, 0x5f, 0x34, 0x51, 0xfc, 0x1a, 0xb9, 0x4b, 0x6c, 0x51, + 0x07, 0x46, 0xa9, 0xb0, 0xce, 0x4b, 0xa9, 0xae, 0x57, 0xd8, 0x2a, 0x5a, 0x0d, 0xd1, 0x28, 0xaf, + 0x92, 0x47, 0xa8, 0xb1, 0x4a, 0x07, 0xdd, 0x85, 0x69, 0xf1, 0x4e, 0x6c, 0x54, 0x85, 0xd9, 0x18, + 0x26, 0xd9, 0xfe, 0x61, 0x7e, 0xc0, 0x77, 0xb2, 0x2a, 0xe0, 0xec, 0x76, 0x51, 0x1e, 0x99, 0xa9, + 0xec, 0x3c, 0x32, 0xe8, 0x67, 0xb3, 0xee, 0x3e, 0x10, 0x9b, 0xd3, 0x1f, 0x28, 0xce, 0x1b, 0x0a, + 0xdf, 0x80, 0xfc, 0x2b, 0x0d, 0x66, 0x5a, 0x39, 0xcf, 0x77, 0x8b, 0x2b, 0x99, 0xf5, 0x1e, 0xf8, + 0x43, 0xee, 0x93, 0xe0, 0x0b, 0x8f, 0x1c, 0x1e, 0x94, 0x8f, 0x7c, 0x38, 0x1c, 0xe7, 0xf6, 0x0d, + 0x79, 0x30, 0xe4, 0xef, 0xfb, 0x66, 0x60, 0xfb, 0x33, 0x97, 0x8a, 0xbf, 0x12, 0x2d, 0x38, 0x6b, + 0x9d, 0x63, 0xe2, 0xac, 0x35, 0x4a, 0x63, 0xcf, 0x4b, 0xb1, 0x24, 0x84, 0x7e, 0x5e, 0x83, 0x29, + 0x61, 0xb4, 0x51, 0x82, 0x6b, 0xa7, 0x8b, 0x7b, 0x4b, 0x56, 0x92, 0xc8, 0xee, 0xb6, 0x79, 0x0e, + 0x74, 0x26, 0xa4, 0xa7, 0xa0, 0x38, 0x4d, 0xbd, 0xd7, 0xe8, 0xf7, 0x1e, 0xd2, 0x79, 0xce, 0xde, + 0x84, 0x31, 0x75, 0xe2, 0x4e, 0x14, 0x74, 0xff, 0x2b, 0x1a, 0x4c, 0x26, 0x0f, 0x52, 0xb4, 0x0d, + 0x43, 0x62, 0x57, 0x09, 0x9d, 0x79, 0xbe, 0xa8, 0x1f, 0x83, 0x4d, 0x44, 0x34, 0x00, 0x97, 0xcb, + 0x44, 0x11, 0x96, 0xe8, 0x55, 0x3f, 0xa5, 0x52, 0x17, 0x3f, 0xa5, 0x67, 0xe1, 0x72, 0xf6, 0xfe, + 0xa2, 0x52, 0xad, 0x61, 0xdb, 0xee, 0x3d, 0xa1, 0x98, 0x46, 0xaf, 0x6e, 0xd1, 0x42, 0xcc, 0x61, + 0xfa, 0x8f, 0x41, 0x32, 0x79, 0x33, 0x7a, 0x15, 0x46, 0x7c, 0x7f, 0x9b, 0xe7, 0xe5, 0x14, 0x83, + 0x2c, 0x66, 0x91, 0x90, 0xc9, 0x3d, 0xb9, 0x20, 0x1e, 0xfe, 0xc4, 0x11, 0xfa, 0x85, 0x97, 0xbe, + 0xf0, 0x8d, 0x6b, 0xef, 0xfa, 0xf2, 0x37, 0xae, 0xbd, 0xeb, 0x6b, 0xdf, 0xb8, 0xf6, 0xae, 0x1f, + 0x3f, 0xbc, 0xa6, 0x7d, 0xe1, 0xf0, 0x9a, 0xf6, 0xe5, 0xc3, 0x6b, 0xda, 0xd7, 0x0e, 0xaf, 0x69, + 0xff, 0xf9, 0xf0, 0x9a, 0xf6, 0x73, 0xff, 0xe5, 0xda, 0xbb, 0x5e, 0x7e, 0x32, 0xa2, 0x7e, 0x43, + 0x12, 0x8d, 0xfe, 0x69, 0xef, 0x34, 0x6f, 0x50, 0xea, 0x32, 0x04, 0x8c, 0x51, 0xff, 0x7f, 0x01, + 0x00, 0x00, 0xff, 0xff, 0x2b, 0x35, 0x14, 0xf0, 0xe9, 0xf4, 0x00, 0x00, } func (m *APIServerLogging) Marshal() (dAtA []byte, err error) { @@ -6792,6 +6947,39 @@ func (m *CloudProfileList) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *CloudProfileReference) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CloudProfileReference) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CloudProfileReference) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x12 + i -= len(m.Kind) + copy(dAtA[i:], m.Kind) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *CloudProfileSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -10289,16 +10477,6 @@ func (m *Kubernetes) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x12 } - if m.AllowPrivilegedContainers != nil { - i-- - if *m.AllowPrivilegedContainers { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x8 - } return len(dAtA) - i, nil } @@ -11196,6 +11374,250 @@ func (m *NamedResourceReference) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } +func (m *NamespacedCloudProfile) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *NamespacedCloudProfile) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NamespacedCloudProfile) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *NamespacedCloudProfileList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *NamespacedCloudProfileList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NamespacedCloudProfileList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *NamespacedCloudProfileSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *NamespacedCloudProfileSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NamespacedCloudProfileSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Parent.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + if len(m.VolumeTypes) > 0 { + for iNdEx := len(m.VolumeTypes) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.VolumeTypes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } + } + if len(m.Regions) > 0 { + for iNdEx := len(m.Regions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Regions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + } + if len(m.MachineTypes) > 0 { + for iNdEx := len(m.MachineTypes) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.MachineTypes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + } + if len(m.MachineImages) > 0 { + for iNdEx := len(m.MachineImages) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.MachineImages[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if m.Kubernetes != nil { + { + size, err := m.Kubernetes.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.CABundle != nil { + i -= len(*m.CABundle) + copy(dAtA[i:], *m.CABundle) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.CABundle))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *NamespacedCloudProfileStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *NamespacedCloudProfileStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NamespacedCloudProfileStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration)) + i-- + dAtA[i] = 0x10 + { + size, err := m.CloudProfileSpec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *Networking) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -14514,6 +14936,20 @@ func (m *ShootSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.CloudProfile != nil { + { + size, err := m.CloudProfile.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xb2 + } if m.SchedulerName != nil { i -= len(*m.SchedulerName) copy(dAtA[i:], *m.SchedulerName) @@ -16268,6 +16704,19 @@ func (m *CloudProfileList) Size() (n int) { return n } +func (m *CloudProfileReference) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Kind) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + func (m *CloudProfileSpec) Size() (n int) { if m == nil { return 0 @@ -17542,9 +17991,6 @@ func (m *Kubernetes) Size() (n int) { } var l int _ = l - if m.AllowPrivilegedContainers != nil { - n += 2 - } if m.ClusterAutoscaler != nil { l = m.ClusterAutoscaler.Size() n += 1 + l + sovGenerated(uint64(l)) @@ -17921,6 +18367,93 @@ func (m *NamedResourceReference) Size() (n int) { return n } +func (m *NamespacedCloudProfile) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *NamespacedCloudProfileList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *NamespacedCloudProfileSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.CABundle != nil { + l = len(*m.CABundle) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Kubernetes != nil { + l = m.Kubernetes.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.MachineImages) > 0 { + for _, e := range m.MachineImages { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.MachineTypes) > 0 { + for _, e := range m.MachineTypes { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Regions) > 0 { + for _, e := range m.Regions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.VolumeTypes) > 0 { + for _, e := range m.VolumeTypes { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = m.Parent.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *NamespacedCloudProfileStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.CloudProfileSpec.Size() + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.ObservedGeneration)) + return n +} + func (m *Networking) Size() (n int) { if m == nil { return 0 @@ -19234,6 +19767,10 @@ func (m *ShootSpec) Size() (n int) { l = len(*m.SchedulerName) n += 2 + l + sovGenerated(uint64(l)) } + if m.CloudProfile != nil { + l = m.CloudProfile.Size() + n += 2 + l + sovGenerated(uint64(l)) + } return n } @@ -19936,6 +20473,17 @@ func (this *CloudProfileList) String() string { }, "") return s } +func (this *CloudProfileReference) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CloudProfileReference{`, + `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `}`, + }, "") + return s +} func (this *CloudProfileSpec) String() string { if this == nil { return "nil" @@ -20766,7 +21314,6 @@ func (this *Kubernetes) String() string { return "nil" } s := strings.Join([]string{`&Kubernetes{`, - `AllowPrivilegedContainers:` + valueToStringGenerated(this.AllowPrivilegedContainers) + `,`, `ClusterAutoscaler:` + strings.Replace(this.ClusterAutoscaler.String(), "ClusterAutoscaler", "ClusterAutoscaler", 1) + `,`, `KubeAPIServer:` + strings.Replace(this.KubeAPIServer.String(), "KubeAPIServerConfig", "KubeAPIServerConfig", 1) + `,`, `KubeControllerManager:` + strings.Replace(this.KubeControllerManager.String(), "KubeControllerManagerConfig", "KubeControllerManagerConfig", 1) + `,`, @@ -21021,6 +21568,81 @@ func (this *NamedResourceReference) String() string { }, "") return s } +func (this *NamespacedCloudProfile) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NamespacedCloudProfile{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v11.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "NamespacedCloudProfileSpec", "NamespacedCloudProfileSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "NamespacedCloudProfileStatus", "NamespacedCloudProfileStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *NamespacedCloudProfileList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]NamespacedCloudProfile{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "NamespacedCloudProfile", "NamespacedCloudProfile", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&NamespacedCloudProfileList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v11.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *NamespacedCloudProfileSpec) String() string { + if this == nil { + return "nil" + } + repeatedStringForMachineImages := "[]MachineImage{" + for _, f := range this.MachineImages { + repeatedStringForMachineImages += strings.Replace(strings.Replace(f.String(), "MachineImage", "MachineImage", 1), `&`, ``, 1) + "," + } + repeatedStringForMachineImages += "}" + repeatedStringForMachineTypes := "[]MachineType{" + for _, f := range this.MachineTypes { + repeatedStringForMachineTypes += strings.Replace(strings.Replace(f.String(), "MachineType", "MachineType", 1), `&`, ``, 1) + "," + } + repeatedStringForMachineTypes += "}" + repeatedStringForRegions := "[]Region{" + for _, f := range this.Regions { + repeatedStringForRegions += strings.Replace(strings.Replace(f.String(), "Region", "Region", 1), `&`, ``, 1) + "," + } + repeatedStringForRegions += "}" + repeatedStringForVolumeTypes := "[]VolumeType{" + for _, f := range this.VolumeTypes { + repeatedStringForVolumeTypes += strings.Replace(strings.Replace(f.String(), "VolumeType", "VolumeType", 1), `&`, ``, 1) + "," + } + repeatedStringForVolumeTypes += "}" + s := strings.Join([]string{`&NamespacedCloudProfileSpec{`, + `CABundle:` + valueToStringGenerated(this.CABundle) + `,`, + `Kubernetes:` + strings.Replace(this.Kubernetes.String(), "KubernetesSettings", "KubernetesSettings", 1) + `,`, + `MachineImages:` + repeatedStringForMachineImages + `,`, + `MachineTypes:` + repeatedStringForMachineTypes + `,`, + `Regions:` + repeatedStringForRegions + `,`, + `VolumeTypes:` + repeatedStringForVolumeTypes + `,`, + `Parent:` + strings.Replace(strings.Replace(this.Parent.String(), "CloudProfileReference", "CloudProfileReference", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *NamespacedCloudProfileStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NamespacedCloudProfileStatus{`, + `CloudProfileSpec:` + strings.Replace(strings.Replace(this.CloudProfileSpec.String(), "CloudProfileSpec", "CloudProfileSpec", 1), `&`, ``, 1) + `,`, + `ObservedGeneration:` + fmt.Sprintf("%v", this.ObservedGeneration) + `,`, + `}`, + }, "") + return s +} func (this *Networking) String() string { if this == nil { return "nil" @@ -21971,6 +22593,7 @@ func (this *ShootSpec) String() string { `SystemComponents:` + strings.Replace(this.SystemComponents.String(), "SystemComponents", "SystemComponents", 1) + `,`, `ControlPlane:` + strings.Replace(this.ControlPlane.String(), "ControlPlane", "ControlPlane", 1) + `,`, `SchedulerName:` + valueToStringGenerated(this.SchedulerName) + `,`, + `CloudProfile:` + strings.Replace(this.CloudProfile.String(), "CloudProfileReference", "CloudProfileReference", 1) + `,`, `}`, }, "") return s @@ -25166,7 +25789,7 @@ func (m *CloudProfileList) Unmarshal(dAtA []byte) error { } return nil } -func (m *CloudProfileSpec) Unmarshal(dAtA []byte) error { +func (m *CloudProfileReference) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -25189,15 +25812,15 @@ func (m *CloudProfileSpec) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: CloudProfileSpec: wiretype end group for non-group") + return fmt.Errorf("proto: CloudProfileReference: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: CloudProfileSpec: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: CloudProfileReference: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CABundle", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -25225,14 +25848,13 @@ func (m *CloudProfileSpec) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - s := string(dAtA[iNdEx:postIndex]) - m.CABundle = &s + m.Kind = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Kubernetes", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -25242,30 +25864,79 @@ func (m *CloudProfileSpec) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Kubernetes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { return err } - iNdEx = postIndex - case 3: + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CloudProfileSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CloudProfileSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CloudProfileSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MachineImages", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field CABundle", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -25275,29 +25946,95 @@ func (m *CloudProfileSpec) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.MachineImages = append(m.MachineImages, MachineImage{}) - if err := m.MachineImages[len(m.MachineImages)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + s := string(dAtA[iNdEx:postIndex]) + m.CABundle = &s iNdEx = postIndex - case 4: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MachineTypes", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Kubernetes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Kubernetes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MachineImages", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MachineImages = append(m.MachineImages, MachineImage{}) + if err := m.MachineImages[len(m.MachineImages)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MachineTypes", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -35066,27 +35803,6 @@ func (m *Kubernetes) Unmarshal(dAtA []byte) error { return fmt.Errorf("proto: Kubernetes: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowPrivilegedContainers", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - b := bool(v != 0) - m.AllowPrivilegedContainers = &b case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ClusterAutoscaler", wireType) @@ -37942,15 +38658,515 @@ func (m *Monitoring) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: Monitoring: wiretype end group for non-group") + return fmt.Errorf("proto: Monitoring: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Monitoring: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Alerting", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Alerting == nil { + m.Alerting = &Alerting{} + } + if err := m.Alerting.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NamedResourceReference) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NamedResourceReference: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NamedResourceReference: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ResourceRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ResourceRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NamespacedCloudProfile) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NamespacedCloudProfile: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NamespacedCloudProfile: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NamespacedCloudProfileList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NamespacedCloudProfileList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NamespacedCloudProfileList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, NamespacedCloudProfile{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NamespacedCloudProfileSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NamespacedCloudProfileSpec: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: Monitoring: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: NamespacedCloudProfileSpec: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Alerting", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field CABundle", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.CABundle = &s + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Kubernetes", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -37977,10 +39193,179 @@ func (m *Monitoring) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Alerting == nil { - m.Alerting = &Alerting{} + if m.Kubernetes == nil { + m.Kubernetes = &KubernetesSettings{} } - if err := m.Alerting.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Kubernetes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MachineImages", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MachineImages = append(m.MachineImages, MachineImage{}) + if err := m.MachineImages[len(m.MachineImages)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MachineTypes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MachineTypes = append(m.MachineTypes, MachineType{}) + if err := m.MachineTypes[len(m.MachineTypes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Regions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Regions = append(m.Regions, Region{}) + if err := m.Regions[len(m.Regions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field VolumeTypes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.VolumeTypes = append(m.VolumeTypes, VolumeType{}) + if err := m.VolumeTypes[len(m.VolumeTypes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Parent", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Parent.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -38005,7 +39390,7 @@ func (m *Monitoring) Unmarshal(dAtA []byte) error { } return nil } -func (m *NamedResourceReference) Unmarshal(dAtA []byte) error { +func (m *NamespacedCloudProfileStatus) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -38028,17 +39413,17 @@ func (m *NamedResourceReference) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: NamedResourceReference: wiretype end group for non-group") + return fmt.Errorf("proto: NamespacedCloudProfileStatus: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: NamedResourceReference: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: NamespacedCloudProfileStatus: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field CloudProfileSpec", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -38048,29 +39433,30 @@ func (m *NamedResourceReference) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Name = string(dAtA[iNdEx:postIndex]) + if err := m.CloudProfileSpec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResourceRef", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ObservedGeneration", wireType) } - var msglen int + m.ObservedGeneration = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -38080,25 +39466,11 @@ func (m *NamedResourceReference) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + m.ObservedGeneration |= int64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ResourceRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -48836,6 +50208,42 @@ func (m *ShootSpec) Unmarshal(dAtA []byte) error { s := string(dAtA[iNdEx:postIndex]) m.SchedulerName = &s iNdEx = postIndex + case 22: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CloudProfile", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.CloudProfile == nil { + m.CloudProfile = &CloudProfileReference{} + } + if err := m.CloudProfile.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.proto b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.proto index a41181a59..02726d0ff 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.proto +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.proto @@ -305,6 +305,15 @@ message CloudProfileList { repeated CloudProfile items = 2; } +// CloudProfileReference holds the information about the parent of the NamespacedCloudProfile. +message CloudProfileReference { + // Kind contains a CloudProfile kind. + optional string kind = 1; + + // Name contains the name of the referenced CloudProfile. + optional string name = 2; +} + // CloudProfileSpec is the specification of a CloudProfile. // It must contain exactly one of its defined keys. message CloudProfileSpec { @@ -687,6 +696,8 @@ message DNS { // Providers is a list of DNS providers that shall be enabled for this shoot cluster. Only relevant if // not a default domain is used. + // Deprecated: Configuring multiple DNS providers is deprecated and will be forbidden in a future release. + // Please use the DNS extension provider config (e.g. shoot-dns-service) for additional providers. // +patchMergeKey=type // +patchStrategy=merge // +optional @@ -708,10 +719,13 @@ message DNSIncludeExclude { message DNSProvider { // Domains contains information about which domains shall be included/excluded for this provider. // Deprecated: This field is deprecated and will be removed in a future release. + // Please use the DNS extension provider config (e.g. shoot-dns-service) for additional configuration. // +optional optional DNSIncludeExclude domains = 1; // Primary indicates that this DNSProvider is used for shoot related domains. + // Deprecated: This field is deprecated and will be removed in a future release. + // Please use the DNS extension provider config (e.g. shoot-dns-service) for additional and non-primary providers. // +optional optional bool primary = 2; @@ -728,6 +742,7 @@ message DNSProvider { // Zones contains information about which hosted zones shall be included/excluded for this provider. // Deprecated: This field is deprecated and will be removed in a future release. + // Please use the DNS extension provider config (e.g. shoot-dns-service) for additional configuration. // +optional optional DNSIncludeExclude zones = 5; } @@ -1421,13 +1436,6 @@ message KubeletConfigReserved { // Kubernetes contains the version and configuration variables for the Shoot control plane. message Kubernetes { - // AllowPrivilegedContainers indicates whether privileged containers are allowed in the Shoot. - // Defaults to true for Kubernetes versions below v1.25. Unusable for Kubernetes versions v1.25 and higher. - // +optional - // - // Deprecated: This field is deprecated and will be removed in a future version. - optional bool allowPrivilegedContainers = 1; - // ClusterAutoscaler contains the configuration flags for the Kubernetes cluster autoscaler. // +optional optional ClusterAutoscaler clusterAutoscaler = 2; @@ -1737,6 +1745,76 @@ message NamedResourceReference { optional k8s.io.api.autoscaling.v1.CrossVersionObjectReference resourceRef = 2; } +// NamespacedCloudProfile represents certain properties about a provider environment. +message NamespacedCloudProfile { + // Standard object metadata. + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Spec defines the provider environment properties. + optional NamespacedCloudProfileSpec spec = 2; + + // Most recently observed status of the NamespacedCloudProfile. + optional NamespacedCloudProfileStatus status = 3; +} + +// NamespacedCloudProfileList is a collection of NamespacedCloudProfiles. +message NamespacedCloudProfileList { + // Standard list object metadata. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is the list of NamespacedCloudProfiles. + repeated NamespacedCloudProfile items = 2; +} + +// NamespacedCloudProfileSpec is the specification of a NamespacedCloudProfile. +message NamespacedCloudProfileSpec { + // CABundle is a certificate bundle which will be installed onto every host machine of shoot cluster targeting this profile. + // +optional + optional string caBundle = 1; + + // Kubernetes contains constraints regarding allowed values of the 'kubernetes' block in the Shoot specification. + // +optional + optional KubernetesSettings kubernetes = 2; + + // MachineImages contains constraints regarding allowed values for machine images in the Shoot specification. + // +patchMergeKey=name + // +patchStrategy=merge + // +optional + repeated MachineImage machineImages = 3; + + // MachineTypes contains constraints regarding allowed values for machine types in the 'workers' block in the Shoot specification. + // +patchMergeKey=name + // +patchStrategy=merge + // +optional + repeated MachineType machineTypes = 4; + + // Regions contains constraints regarding allowed values for regions and zones. + // +patchMergeKey=name + // +patchStrategy=merge + // +optional + repeated Region regions = 5; + + // VolumeTypes contains constraints regarding allowed values for volume types in the 'workers' block in the Shoot specification. + // +patchMergeKey=name + // +patchStrategy=merge + // +optional + repeated VolumeType volumeTypes = 6; + + // Parent contains a reference to a CloudProfile it inherits from. + optional CloudProfileReference parent = 7; +} + +// NamespacedCloudProfileStatus holds the most recently observed status of the NamespacedCloudProfile. +message NamespacedCloudProfileStatus { + // CloudProfile is the most recently generated CloudProfile of the NamespacedCloudProfile. + optional CloudProfileSpec cloudProfileSpec = 1; + + // ObservedGeneration is the most recent generation observed for this project. + // +optional + optional int64 observedGeneration = 2; +} + // Networking defines networking parameters for the shoot cluster. message Networking { // Type identifies the type of the networking plugin. This field is immutable. @@ -2779,6 +2857,10 @@ message ShootSpec { // This field is immutable. // +optional optional string schedulerName = 21; + + // CloudProfile contains a reference to a CloudProfile or a NamespacedCloudProfile. + // +optional + optional CloudProfileReference cloudProfile = 22; } // ShootState contains a snapshot of the Shoot's state required to migrate the Shoot's control plane to a new Seed. @@ -2874,7 +2956,8 @@ message ShootStatus { // +optional optional string clusterIdentity = 12; - // List of addresses on which the Kube API server can be reached. + // List of addresses that are relevant to the shoot. + // These include the Kube API server address and also the service account issuer. // +optional // +patchMergeKey=name // +patchStrategy=merge diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/condition.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/condition.go index b1aeed4c3..1b555a058 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/condition.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/condition.go @@ -107,6 +107,7 @@ func FailedCondition( func UpdatedConditionWithClock(clock clock.Clock, condition gardencorev1beta1.Condition, status gardencorev1beta1.ConditionStatus, reason, message string, codes ...gardencorev1beta1.ErrorCode) gardencorev1beta1.Condition { builder, err := NewConditionBuilder(condition.Type) utilruntime.Must(err) + newCondition, _ := builder. WithOldCondition(condition). WithClock(clock). @@ -159,6 +160,7 @@ func MergeConditions(oldConditions []gardencorev1beta1.Condition, newConditions out[index] = condition continue } + out = append(out, condition) } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/condition_builder.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/condition_builder.go index 9931d17c1..6b073bb1d 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/condition_builder.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/condition_builder.go @@ -15,7 +15,7 @@ package helper import ( - "fmt" + "errors" apiequality "k8s.io/apimachinery/pkg/api/equality" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -49,7 +49,7 @@ type defaultConditionBuilder struct { // NewConditionBuilder returns a ConditionBuilder for a specific condition. func NewConditionBuilder(conditionType gardencorev1beta1.ConditionType) (ConditionBuilder, error) { if conditionType == "" { - return nil, fmt.Errorf("conditionType cannot be empty") + return nil, errors.New("conditionType cannot be empty") } return &defaultConditionBuilder{ @@ -155,6 +155,7 @@ func (b *defaultConditionBuilder) buildMessage() string { // without specifying a message we want to retain this message instead of toggling to `b.old.Message == ""`. return "No message given." } + if b.old.Message == "" { return "The condition has been initialized but its semantic check has not been performed yet." } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/errors.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/errors.go index c139a54fe..7395183d2 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/errors.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/errors.go @@ -64,6 +64,7 @@ type Coder interface { // ExtractErrorCodes extracts all error codes from the given error by using errorsutils.Errors func ExtractErrorCodes(err error) []gardencorev1beta1.ErrorCode { var codes []gardencorev1beta1.ErrorCode + for _, err := range errorsutils.Errors(err) { var coder Coder if errors.As(err, &coder) { @@ -98,6 +99,7 @@ func (m *MultiErrorWithCodes) Append(err error) { if m.errorCodeStr.Has(string(code)) { continue } + m.errorCodeStr.Insert(string(code)) m.codes = append(m.codes, code) } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/helper.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/helper.go index 05969e4c1..486805d5c 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/helper.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/helper.go @@ -15,6 +15,7 @@ package helper import ( + "errors" "fmt" "slices" "strconv" @@ -209,7 +210,7 @@ func parseManagedSeedAPIServerAutoscaler(settings map[string]string) (*ManagedSe return nil, nil } if !ok2 { - return nil, fmt.Errorf("apiSrvMaxReplicas has to be specified for ManagedSeed API server autoscaler") + return nil, errors.New("apiSrvMaxReplicas has to be specified for ManagedSeed API server autoscaler") } var apiServerAutoscaler ManagedSeedAPIServerAutoscaler @@ -219,6 +220,7 @@ func parseManagedSeedAPIServerAutoscaler(settings map[string]string) (*ManagedSe if err != nil { return nil, err } + apiServerAutoscaler.MinReplicas = &minReplicas } @@ -226,6 +228,7 @@ func parseManagedSeedAPIServerAutoscaler(settings map[string]string) (*ManagedSe if err != nil { return nil, err } + apiServerAutoscaler.MaxReplicas = maxReplicas return &apiServerAutoscaler, nil @@ -270,6 +273,7 @@ func setDefaults_ManagedSeedAPIServer(apiServer *ManagedSeedAPIServer) { MaxReplicas: 3, } } + setDefaults_ManagedSeedAPIServerAutoscaler(apiServer.Autoscaler) } @@ -700,11 +704,13 @@ func getVersionForMachineImageForceUpdate(versions []gardencorev1beta1.Expirable } skippedNextMajorMinor := false + if foundVersion { parse, err := semver.NewVersion(qualifyingVersion.Version) if err != nil { return false, "", err } + skippedNextMajorMinor = getMajorOrMinor(*parse) > nextMinorOrMajorVersion } @@ -731,8 +737,10 @@ func getVersionForMachineImageForceUpdate(versions []gardencorev1beta1.Expirable // A version qualifies if its classification is not preview and the optional predicate does not filter out the version. // If the predicate returns true, the version is not considered for the latest qualifying version. func GetLatestQualifyingVersion(versions []gardencorev1beta1.ExpirableVersion, predicate ...VersionPredicate) (qualifyingVersionFound bool, latest *gardencorev1beta1.ExpirableVersion, err error) { - latestSemanticVersion := &semver.Version{} - var latestVersion *gardencorev1beta1.ExpirableVersion + var ( + latestSemanticVersion = &semver.Version{} + latestVersion *gardencorev1beta1.ExpirableVersion + ) OUTER: for _, v := range versions { if v.Classification != nil && *v.Classification == gardencorev1beta1.ClassificationPreview { @@ -1028,6 +1036,7 @@ func BackupBucketIsErroneous(bb *gardencorev1beta1.BackupBucket) (bool, string) if bb == nil { return false, "" } + lastErr := bb.Status.LastError if lastErr == nil { return false, "" @@ -1535,3 +1544,8 @@ func ConvertShootList(list []gardencorev1beta1.Shoot) []*gardencorev1beta1.Shoot } return result } + +// HasManagedIssuer checks if the shoot has managed issuer enabled. +func HasManagedIssuer(shoot *gardencorev1beta1.Shoot) bool { + return shoot.GetAnnotations()[v1beta1constants.AnnotationAuthenticationIssuer] == v1beta1constants.AnnotationAuthenticationIssuerManaged +} diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/shootstate_list.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/shootstate_list.go index 294637c7c..2286fca84 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/shootstate_list.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/shootstate_list.go @@ -55,6 +55,7 @@ func (e *ExtensionResourceStateList) Upsert(extensionResourceState *gardencorev1 return } } + *e = append(*e, *extensionResourceState) } @@ -111,6 +112,7 @@ func (g *GardenerResourceDataList) Upsert(data *gardencorev1beta1.GardenerResour return } } + *g = append(*g, *data) } @@ -154,5 +156,6 @@ func (r *ResourceDataList) Upsert(data *gardencorev1beta1.ResourceData) { return } } + *r = append(*r, *data) } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/register.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/register.go index 15ae55fb4..0aff64907 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/register.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/register.go @@ -63,6 +63,8 @@ func addKnownTypes(scheme *runtime.Scheme) error { &ExposureClassList{}, &InternalSecret{}, &InternalSecretList{}, + &NamespacedCloudProfile{}, + &NamespacedCloudProfileList{}, &Project{}, &ProjectList{}, &Quota{}, @@ -77,6 +79,7 @@ func addKnownTypes(scheme *runtime.Scheme) error { &ShootStateList{}, ) metav1.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types.go index 6d276f00d..fffb4eccf 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types.go @@ -18,6 +18,10 @@ const ( // GardenerSeedLeaseNamespace is the namespace in which Gardenlet will report Seeds' // status using Lease resources for each Seed GardenerSeedLeaseNamespace = "gardener-system-seed-lease" + // GardenerShootIssuerNamespace is the namespace in which Gardenlet + // will sync service account issuer discovery documents + // of Shoot clusters which require managed issuer + GardenerShootIssuerNamespace = "gardener-system-shoot-issuer" ) // IPFamily is a type for specifying an IP protocol version to use in Gardener clusters. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_controllerregistration.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_controllerregistration.go index 70e39b0d3..be5df89b2 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_controllerregistration.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_controllerregistration.go @@ -132,6 +132,8 @@ const ( BeforeKubeAPIServer ControllerResourceLifecycleStrategy = "BeforeKubeAPIServer" // AfterKubeAPIServer specifies that a resource should be handled after the kube-apiserver. AfterKubeAPIServer ControllerResourceLifecycleStrategy = "AfterKubeAPIServer" + // AfterWorker specifies that a resource should be handled after workers. This is only available during reconcile. + AfterWorker ControllerResourceLifecycleStrategy = "AfterWorker" ) // ControllerResourceLifecycle defines the lifecycle of a controller resource. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_namespacedcloudprofile.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_namespacedcloudprofile.go new file mode 100644 index 000000000..030e4bec3 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_namespacedcloudprofile.go @@ -0,0 +1,94 @@ +// Copyright 2024 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package v1beta1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// NamespacedCloudProfile represents certain properties about a provider environment. +type NamespacedCloudProfile struct { + metav1.TypeMeta `json:",inline"` + // Standard object metadata. + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + // Spec defines the provider environment properties. + Spec NamespacedCloudProfileSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` + // Most recently observed status of the NamespacedCloudProfile. + Status NamespacedCloudProfileStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// NamespacedCloudProfileList is a collection of NamespacedCloudProfiles. +type NamespacedCloudProfileList struct { + metav1.TypeMeta `json:",inline"` + // Standard list object metadata. + // +optional + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + // Items is the list of NamespacedCloudProfiles. + Items []NamespacedCloudProfile `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// NamespacedCloudProfileSpec is the specification of a NamespacedCloudProfile. +type NamespacedCloudProfileSpec struct { + // CABundle is a certificate bundle which will be installed onto every host machine of shoot cluster targeting this profile. + // +optional + CABundle *string `json:"caBundle,omitempty" protobuf:"bytes,1,opt,name=caBundle"` + // Kubernetes contains constraints regarding allowed values of the 'kubernetes' block in the Shoot specification. + // +optional + Kubernetes *KubernetesSettings `json:"kubernetes,omitempty" protobuf:"bytes,2,opt,name=kubernetes"` + // MachineImages contains constraints regarding allowed values for machine images in the Shoot specification. + // +patchMergeKey=name + // +patchStrategy=merge + // +optional + MachineImages []MachineImage `json:"machineImages,omitempty" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,3,opt,name=machineImages"` + // MachineTypes contains constraints regarding allowed values for machine types in the 'workers' block in the Shoot specification. + // +patchMergeKey=name + // +patchStrategy=merge + // +optional + MachineTypes []MachineType `json:"machineTypes" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,4,opt,name=machineTypes"` + // Regions contains constraints regarding allowed values for regions and zones. + // +patchMergeKey=name + // +patchStrategy=merge + // +optional + Regions []Region `json:"regions" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,5,opt,name=regions"` + // VolumeTypes contains constraints regarding allowed values for volume types in the 'workers' block in the Shoot specification. + // +patchMergeKey=name + // +patchStrategy=merge + // +optional + VolumeTypes []VolumeType `json:"volumeTypes,omitempty" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,6,opt,name=volumeTypes"` + // Parent contains a reference to a CloudProfile it inherits from. + Parent CloudProfileReference `json:"parent" protobuf:"bytes,7,req,name=parent"` +} + +// NamespacedCloudProfileStatus holds the most recently observed status of the NamespacedCloudProfile. +type NamespacedCloudProfileStatus struct { + // CloudProfile is the most recently generated CloudProfile of the NamespacedCloudProfile. + CloudProfileSpec CloudProfileSpec `json:"cloudProfileSpec,omitempty" protobuf:"bytes,1,req,name=cloudProfileSpec"` + // ObservedGeneration is the most recent generation observed for this project. + // +optional + ObservedGeneration int64 `json:"observedGeneration,omitempty" protobuf:"varint,2,opt,name=observedGeneration"` +} + +// CloudProfileReference holds the information about the parent of the NamespacedCloudProfile. +type CloudProfileReference struct { + // Kind contains a CloudProfile kind. + Kind string `json:"kind" protobuf:"bytes,1,req,name=kind"` + // Name contains the name of the referenced CloudProfile. + Name string `json:"name" protobuf:"bytes,2,req,name=name"` +} diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_shoot.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_shoot.go index 41b16009c..6c09f8b0a 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_shoot.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_shoot.go @@ -24,6 +24,8 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/intstr" + + v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" ) // +genclient @@ -135,6 +137,9 @@ type ShootSpec struct { // This field is immutable. // +optional SchedulerName *string `json:"schedulerName,omitempty" protobuf:"bytes,21,opt,name=schedulerName"` + // CloudProfile contains a reference to a CloudProfile or a NamespacedCloudProfile. + // +optional + CloudProfile *CloudProfileReference `json:"cloudProfile,omitempty" protobuf:"bytes,22,opt,name=cloudProfile"` } // GetProviderType gets the type of the provider. @@ -185,7 +190,8 @@ type ShootStatus struct { // ClusterIdentity is the identity of the Shoot cluster. This field is immutable. // +optional ClusterIdentity *string `json:"clusterIdentity,omitempty" protobuf:"bytes,12,opt,name=clusterIdentity"` - // List of addresses on which the Kube API server can be reached. + // List of addresses that are relevant to the shoot. + // These include the Kube API server address and also the service account issuer. // +optional // +patchMergeKey=name // +patchStrategy=merge @@ -429,21 +435,26 @@ type DNS struct { Domain *string `json:"domain,omitempty" protobuf:"bytes,1,opt,name=domain"` // Providers is a list of DNS providers that shall be enabled for this shoot cluster. Only relevant if // not a default domain is used. + // Deprecated: Configuring multiple DNS providers is deprecated and will be forbidden in a future release. + // Please use the DNS extension provider config (e.g. shoot-dns-service) for additional providers. // +patchMergeKey=type // +patchStrategy=merge // +optional Providers []DNSProvider `json:"providers,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,2,rep,name=providers"` } +// TODO(timuthy): Rework the 'DNSProvider' struct and deprecated fields in the scope of https://github.com/gardener/gardener/issues/9176. + // DNSProvider contains information about a DNS provider. type DNSProvider struct { - // TODO(timuthy): Remove this field in the scope of https://github.com/gardener/gardener/issues/9176. - // Domains contains information about which domains shall be included/excluded for this provider. // Deprecated: This field is deprecated and will be removed in a future release. + // Please use the DNS extension provider config (e.g. shoot-dns-service) for additional configuration. // +optional Domains *DNSIncludeExclude `json:"domains,omitempty" protobuf:"bytes,1,opt,name=domains"` // Primary indicates that this DNSProvider is used for shoot related domains. + // Deprecated: This field is deprecated and will be removed in a future release. + // Please use the DNS extension provider config (e.g. shoot-dns-service) for additional and non-primary providers. // +optional Primary *bool `json:"primary,omitempty" protobuf:"varint,2,opt,name=primary"` // SecretName is a name of a secret containing credentials for the stated domain and the @@ -455,10 +466,10 @@ type DNSProvider struct { // Type is the DNS provider type. // +optional Type *string `json:"type,omitempty" protobuf:"bytes,4,opt,name=type"` - // TODO(timuthy): Remove this field in the scope of https://github.com/gardener/gardener/issues/9176. // Zones contains information about which hosted zones shall be included/excluded for this provider. // Deprecated: This field is deprecated and will be removed in a future release. + // Please use the DNS extension provider config (e.g. shoot-dns-service) for additional configuration. // +optional Zones *DNSIncludeExclude `json:"zones,omitempty" protobuf:"bytes,5,opt,name=zones"` } @@ -524,12 +535,9 @@ type HibernationSchedule struct { // Kubernetes contains the version and configuration variables for the Shoot control plane. type Kubernetes struct { - // AllowPrivilegedContainers indicates whether privileged containers are allowed in the Shoot. - // Defaults to true for Kubernetes versions below v1.25. Unusable for Kubernetes versions v1.25 and higher. - // +optional - // - // Deprecated: This field is deprecated and will be removed in a future version. - AllowPrivilegedContainers *bool `json:"allowPrivilegedContainers,omitempty" protobuf:"varint,1,opt,name=allowPrivilegedContainers"` + // AllowPrivilegedContainers is tombstoned to show why 1 is reserved protobuf tag. + // AllowPrivilegedContainers *bool `json:"allowPrivilegedContainers,omitempty" protobuf:"varint,1,opt,name=allowPrivilegedContainers"` + // ClusterAutoscaler contains the configuration flags for the Kubernetes cluster autoscaler. // +optional ClusterAutoscaler *ClusterAutoscaler `json:"clusterAutoscaler,omitempty" protobuf:"bytes,2,opt,name=clusterAutoscaler"` @@ -1701,7 +1709,7 @@ const ( // ShootControlPlaneHealthy is a constant for a condition type indicating the health of core control plane components. ShootControlPlaneHealthy ConditionType = "ControlPlaneHealthy" // ShootObservabilityComponentsHealthy is a constant for a condition type indicating the health of observability components. - ShootObservabilityComponentsHealthy ConditionType = "ObservabilityComponentsHealthy" + ShootObservabilityComponentsHealthy ConditionType = v1beta1constants.ObservabilityComponentsHealthy // ShootEveryNodeReady is a constant for a condition type indicating the node health. ShootEveryNodeReady ConditionType = "EveryNodeReady" // ShootSystemComponentsHealthy is a constant for a condition type indicating the system components health. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.conversion.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.conversion.go index 64b24969d..69ef02ded 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.conversion.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.conversion.go @@ -250,6 +250,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*CloudProfileReference)(nil), (*core.CloudProfileReference)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_CloudProfileReference_To_core_CloudProfileReference(a.(*CloudProfileReference), b.(*core.CloudProfileReference), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*core.CloudProfileReference)(nil), (*CloudProfileReference)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_core_CloudProfileReference_To_v1beta1_CloudProfileReference(a.(*core.CloudProfileReference), b.(*CloudProfileReference), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*CloudProfileSpec)(nil), (*core.CloudProfileSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_CloudProfileSpec_To_core_CloudProfileSpec(a.(*CloudProfileSpec), b.(*core.CloudProfileSpec), scope) }); err != nil { @@ -975,6 +985,46 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*NamespacedCloudProfile)(nil), (*core.NamespacedCloudProfile)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_NamespacedCloudProfile_To_core_NamespacedCloudProfile(a.(*NamespacedCloudProfile), b.(*core.NamespacedCloudProfile), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*core.NamespacedCloudProfile)(nil), (*NamespacedCloudProfile)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_core_NamespacedCloudProfile_To_v1beta1_NamespacedCloudProfile(a.(*core.NamespacedCloudProfile), b.(*NamespacedCloudProfile), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*NamespacedCloudProfileList)(nil), (*core.NamespacedCloudProfileList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_NamespacedCloudProfileList_To_core_NamespacedCloudProfileList(a.(*NamespacedCloudProfileList), b.(*core.NamespacedCloudProfileList), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*core.NamespacedCloudProfileList)(nil), (*NamespacedCloudProfileList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_core_NamespacedCloudProfileList_To_v1beta1_NamespacedCloudProfileList(a.(*core.NamespacedCloudProfileList), b.(*NamespacedCloudProfileList), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*NamespacedCloudProfileSpec)(nil), (*core.NamespacedCloudProfileSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_NamespacedCloudProfileSpec_To_core_NamespacedCloudProfileSpec(a.(*NamespacedCloudProfileSpec), b.(*core.NamespacedCloudProfileSpec), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*core.NamespacedCloudProfileSpec)(nil), (*NamespacedCloudProfileSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_core_NamespacedCloudProfileSpec_To_v1beta1_NamespacedCloudProfileSpec(a.(*core.NamespacedCloudProfileSpec), b.(*NamespacedCloudProfileSpec), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*NamespacedCloudProfileStatus)(nil), (*core.NamespacedCloudProfileStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_NamespacedCloudProfileStatus_To_core_NamespacedCloudProfileStatus(a.(*NamespacedCloudProfileStatus), b.(*core.NamespacedCloudProfileStatus), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*core.NamespacedCloudProfileStatus)(nil), (*NamespacedCloudProfileStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_core_NamespacedCloudProfileStatus_To_v1beta1_NamespacedCloudProfileStatus(a.(*core.NamespacedCloudProfileStatus), b.(*NamespacedCloudProfileStatus), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*Networking)(nil), (*core.Networking)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_Networking_To_core_Networking(a.(*Networking), b.(*core.Networking), scope) }); err != nil { @@ -2265,6 +2315,28 @@ func Convert_core_CloudProfileList_To_v1beta1_CloudProfileList(in *core.CloudPro return autoConvert_core_CloudProfileList_To_v1beta1_CloudProfileList(in, out, s) } +func autoConvert_v1beta1_CloudProfileReference_To_core_CloudProfileReference(in *CloudProfileReference, out *core.CloudProfileReference, s conversion.Scope) error { + out.Kind = in.Kind + out.Name = in.Name + return nil +} + +// Convert_v1beta1_CloudProfileReference_To_core_CloudProfileReference is an autogenerated conversion function. +func Convert_v1beta1_CloudProfileReference_To_core_CloudProfileReference(in *CloudProfileReference, out *core.CloudProfileReference, s conversion.Scope) error { + return autoConvert_v1beta1_CloudProfileReference_To_core_CloudProfileReference(in, out, s) +} + +func autoConvert_core_CloudProfileReference_To_v1beta1_CloudProfileReference(in *core.CloudProfileReference, out *CloudProfileReference, s conversion.Scope) error { + out.Kind = in.Kind + out.Name = in.Name + return nil +} + +// Convert_core_CloudProfileReference_To_v1beta1_CloudProfileReference is an autogenerated conversion function. +func Convert_core_CloudProfileReference_To_v1beta1_CloudProfileReference(in *core.CloudProfileReference, out *CloudProfileReference, s conversion.Scope) error { + return autoConvert_core_CloudProfileReference_To_v1beta1_CloudProfileReference(in, out, s) +} + func autoConvert_v1beta1_CloudProfileSpec_To_core_CloudProfileSpec(in *CloudProfileSpec, out *core.CloudProfileSpec, s conversion.Scope) error { out.CABundle = (*string)(unsafe.Pointer(in.CABundle)) if err := Convert_v1beta1_KubernetesSettings_To_core_KubernetesSettings(&in.Kubernetes, &out.Kubernetes, s); err != nil { @@ -3768,7 +3840,6 @@ func Convert_core_KubeletConfigReserved_To_v1beta1_KubeletConfigReserved(in *cor } func autoConvert_v1beta1_Kubernetes_To_core_Kubernetes(in *Kubernetes, out *core.Kubernetes, s conversion.Scope) error { - out.AllowPrivilegedContainers = (*bool)(unsafe.Pointer(in.AllowPrivilegedContainers)) out.ClusterAutoscaler = (*core.ClusterAutoscaler)(unsafe.Pointer(in.ClusterAutoscaler)) if in.KubeAPIServer != nil { in, out := &in.KubeAPIServer, &out.KubeAPIServer @@ -3803,7 +3874,6 @@ func Convert_v1beta1_Kubernetes_To_core_Kubernetes(in *Kubernetes, out *core.Kub } func autoConvert_core_Kubernetes_To_v1beta1_Kubernetes(in *core.Kubernetes, out *Kubernetes, s conversion.Scope) error { - out.AllowPrivilegedContainers = (*bool)(unsafe.Pointer(in.AllowPrivilegedContainers)) out.ClusterAutoscaler = (*ClusterAutoscaler)(unsafe.Pointer(in.ClusterAutoscaler)) if in.KubeAPIServer != nil { in, out := &in.KubeAPIServer, &out.KubeAPIServer @@ -4293,6 +4363,122 @@ func Convert_core_NamedResourceReference_To_v1beta1_NamedResourceReference(in *c return autoConvert_core_NamedResourceReference_To_v1beta1_NamedResourceReference(in, out, s) } +func autoConvert_v1beta1_NamespacedCloudProfile_To_core_NamespacedCloudProfile(in *NamespacedCloudProfile, out *core.NamespacedCloudProfile, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + if err := Convert_v1beta1_NamespacedCloudProfileSpec_To_core_NamespacedCloudProfileSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_v1beta1_NamespacedCloudProfileStatus_To_core_NamespacedCloudProfileStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +// Convert_v1beta1_NamespacedCloudProfile_To_core_NamespacedCloudProfile is an autogenerated conversion function. +func Convert_v1beta1_NamespacedCloudProfile_To_core_NamespacedCloudProfile(in *NamespacedCloudProfile, out *core.NamespacedCloudProfile, s conversion.Scope) error { + return autoConvert_v1beta1_NamespacedCloudProfile_To_core_NamespacedCloudProfile(in, out, s) +} + +func autoConvert_core_NamespacedCloudProfile_To_v1beta1_NamespacedCloudProfile(in *core.NamespacedCloudProfile, out *NamespacedCloudProfile, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + if err := Convert_core_NamespacedCloudProfileSpec_To_v1beta1_NamespacedCloudProfileSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_core_NamespacedCloudProfileStatus_To_v1beta1_NamespacedCloudProfileStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +// Convert_core_NamespacedCloudProfile_To_v1beta1_NamespacedCloudProfile is an autogenerated conversion function. +func Convert_core_NamespacedCloudProfile_To_v1beta1_NamespacedCloudProfile(in *core.NamespacedCloudProfile, out *NamespacedCloudProfile, s conversion.Scope) error { + return autoConvert_core_NamespacedCloudProfile_To_v1beta1_NamespacedCloudProfile(in, out, s) +} + +func autoConvert_v1beta1_NamespacedCloudProfileList_To_core_NamespacedCloudProfileList(in *NamespacedCloudProfileList, out *core.NamespacedCloudProfileList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + out.Items = *(*[]core.NamespacedCloudProfile)(unsafe.Pointer(&in.Items)) + return nil +} + +// Convert_v1beta1_NamespacedCloudProfileList_To_core_NamespacedCloudProfileList is an autogenerated conversion function. +func Convert_v1beta1_NamespacedCloudProfileList_To_core_NamespacedCloudProfileList(in *NamespacedCloudProfileList, out *core.NamespacedCloudProfileList, s conversion.Scope) error { + return autoConvert_v1beta1_NamespacedCloudProfileList_To_core_NamespacedCloudProfileList(in, out, s) +} + +func autoConvert_core_NamespacedCloudProfileList_To_v1beta1_NamespacedCloudProfileList(in *core.NamespacedCloudProfileList, out *NamespacedCloudProfileList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + out.Items = *(*[]NamespacedCloudProfile)(unsafe.Pointer(&in.Items)) + return nil +} + +// Convert_core_NamespacedCloudProfileList_To_v1beta1_NamespacedCloudProfileList is an autogenerated conversion function. +func Convert_core_NamespacedCloudProfileList_To_v1beta1_NamespacedCloudProfileList(in *core.NamespacedCloudProfileList, out *NamespacedCloudProfileList, s conversion.Scope) error { + return autoConvert_core_NamespacedCloudProfileList_To_v1beta1_NamespacedCloudProfileList(in, out, s) +} + +func autoConvert_v1beta1_NamespacedCloudProfileSpec_To_core_NamespacedCloudProfileSpec(in *NamespacedCloudProfileSpec, out *core.NamespacedCloudProfileSpec, s conversion.Scope) error { + out.CABundle = (*string)(unsafe.Pointer(in.CABundle)) + out.Kubernetes = (*core.KubernetesSettings)(unsafe.Pointer(in.Kubernetes)) + out.MachineImages = *(*[]core.MachineImage)(unsafe.Pointer(&in.MachineImages)) + out.MachineTypes = *(*[]core.MachineType)(unsafe.Pointer(&in.MachineTypes)) + out.Regions = *(*[]core.Region)(unsafe.Pointer(&in.Regions)) + out.VolumeTypes = *(*[]core.VolumeType)(unsafe.Pointer(&in.VolumeTypes)) + if err := Convert_v1beta1_CloudProfileReference_To_core_CloudProfileReference(&in.Parent, &out.Parent, s); err != nil { + return err + } + return nil +} + +// Convert_v1beta1_NamespacedCloudProfileSpec_To_core_NamespacedCloudProfileSpec is an autogenerated conversion function. +func Convert_v1beta1_NamespacedCloudProfileSpec_To_core_NamespacedCloudProfileSpec(in *NamespacedCloudProfileSpec, out *core.NamespacedCloudProfileSpec, s conversion.Scope) error { + return autoConvert_v1beta1_NamespacedCloudProfileSpec_To_core_NamespacedCloudProfileSpec(in, out, s) +} + +func autoConvert_core_NamespacedCloudProfileSpec_To_v1beta1_NamespacedCloudProfileSpec(in *core.NamespacedCloudProfileSpec, out *NamespacedCloudProfileSpec, s conversion.Scope) error { + out.CABundle = (*string)(unsafe.Pointer(in.CABundle)) + out.Kubernetes = (*KubernetesSettings)(unsafe.Pointer(in.Kubernetes)) + out.MachineImages = *(*[]MachineImage)(unsafe.Pointer(&in.MachineImages)) + out.MachineTypes = *(*[]MachineType)(unsafe.Pointer(&in.MachineTypes)) + out.Regions = *(*[]Region)(unsafe.Pointer(&in.Regions)) + out.VolumeTypes = *(*[]VolumeType)(unsafe.Pointer(&in.VolumeTypes)) + if err := Convert_core_CloudProfileReference_To_v1beta1_CloudProfileReference(&in.Parent, &out.Parent, s); err != nil { + return err + } + return nil +} + +// Convert_core_NamespacedCloudProfileSpec_To_v1beta1_NamespacedCloudProfileSpec is an autogenerated conversion function. +func Convert_core_NamespacedCloudProfileSpec_To_v1beta1_NamespacedCloudProfileSpec(in *core.NamespacedCloudProfileSpec, out *NamespacedCloudProfileSpec, s conversion.Scope) error { + return autoConvert_core_NamespacedCloudProfileSpec_To_v1beta1_NamespacedCloudProfileSpec(in, out, s) +} + +func autoConvert_v1beta1_NamespacedCloudProfileStatus_To_core_NamespacedCloudProfileStatus(in *NamespacedCloudProfileStatus, out *core.NamespacedCloudProfileStatus, s conversion.Scope) error { + if err := Convert_v1beta1_CloudProfileSpec_To_core_CloudProfileSpec(&in.CloudProfileSpec, &out.CloudProfileSpec, s); err != nil { + return err + } + out.ObservedGeneration = in.ObservedGeneration + return nil +} + +// Convert_v1beta1_NamespacedCloudProfileStatus_To_core_NamespacedCloudProfileStatus is an autogenerated conversion function. +func Convert_v1beta1_NamespacedCloudProfileStatus_To_core_NamespacedCloudProfileStatus(in *NamespacedCloudProfileStatus, out *core.NamespacedCloudProfileStatus, s conversion.Scope) error { + return autoConvert_v1beta1_NamespacedCloudProfileStatus_To_core_NamespacedCloudProfileStatus(in, out, s) +} + +func autoConvert_core_NamespacedCloudProfileStatus_To_v1beta1_NamespacedCloudProfileStatus(in *core.NamespacedCloudProfileStatus, out *NamespacedCloudProfileStatus, s conversion.Scope) error { + if err := Convert_core_CloudProfileSpec_To_v1beta1_CloudProfileSpec(&in.CloudProfileSpec, &out.CloudProfileSpec, s); err != nil { + return err + } + out.ObservedGeneration = in.ObservedGeneration + return nil +} + +// Convert_core_NamespacedCloudProfileStatus_To_v1beta1_NamespacedCloudProfileStatus is an autogenerated conversion function. +func Convert_core_NamespacedCloudProfileStatus_To_v1beta1_NamespacedCloudProfileStatus(in *core.NamespacedCloudProfileStatus, out *NamespacedCloudProfileStatus, s conversion.Scope) error { + return autoConvert_core_NamespacedCloudProfileStatus_To_v1beta1_NamespacedCloudProfileStatus(in, out, s) +} + func autoConvert_v1beta1_Networking_To_core_Networking(in *Networking, out *core.Networking, s conversion.Scope) error { out.Type = (*string)(unsafe.Pointer(in.Type)) out.ProviderConfig = (*runtime.RawExtension)(unsafe.Pointer(in.ProviderConfig)) @@ -5878,6 +6064,7 @@ func autoConvert_v1beta1_ShootSpec_To_core_ShootSpec(in *ShootSpec, out *core.Sh out.SystemComponents = (*core.SystemComponents)(unsafe.Pointer(in.SystemComponents)) out.ControlPlane = (*core.ControlPlane)(unsafe.Pointer(in.ControlPlane)) out.SchedulerName = (*string)(unsafe.Pointer(in.SchedulerName)) + out.CloudProfile = (*core.CloudProfileReference)(unsafe.Pointer(in.CloudProfile)) return nil } @@ -5912,6 +6099,7 @@ func autoConvert_core_ShootSpec_To_v1beta1_ShootSpec(in *core.ShootSpec, out *Sh out.SystemComponents = (*SystemComponents)(unsafe.Pointer(in.SystemComponents)) out.ControlPlane = (*ControlPlane)(unsafe.Pointer(in.ControlPlane)) out.SchedulerName = (*string)(unsafe.Pointer(in.SchedulerName)) + out.CloudProfile = (*CloudProfileReference)(unsafe.Pointer(in.CloudProfile)) return nil } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.deepcopy.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.deepcopy.go index c644d815e..b20318003 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.deepcopy.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.deepcopy.go @@ -604,6 +604,22 @@ func (in *CloudProfileList) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CloudProfileReference) DeepCopyInto(out *CloudProfileReference) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CloudProfileReference. +func (in *CloudProfileReference) DeepCopy() *CloudProfileReference { + if in == nil { + return nil + } + out := new(CloudProfileReference) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *CloudProfileSpec) DeepCopyInto(out *CloudProfileSpec) { *out = *in @@ -2429,11 +2445,6 @@ func (in *KubeletConfigReserved) DeepCopy() *KubeletConfigReserved { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Kubernetes) DeepCopyInto(out *Kubernetes) { *out = *in - if in.AllowPrivilegedContainers != nil { - in, out := &in.AllowPrivilegedContainers, &out.AllowPrivilegedContainers - *out = new(bool) - **out = **in - } if in.ClusterAutoscaler != nil { in, out := &in.ClusterAutoscaler, &out.ClusterAutoscaler *out = new(ClusterAutoscaler) @@ -2940,6 +2951,139 @@ func (in *NamedResourceReference) DeepCopy() *NamedResourceReference { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NamespacedCloudProfile) DeepCopyInto(out *NamespacedCloudProfile) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NamespacedCloudProfile. +func (in *NamespacedCloudProfile) DeepCopy() *NamespacedCloudProfile { + if in == nil { + return nil + } + out := new(NamespacedCloudProfile) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *NamespacedCloudProfile) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NamespacedCloudProfileList) DeepCopyInto(out *NamespacedCloudProfileList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]NamespacedCloudProfile, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NamespacedCloudProfileList. +func (in *NamespacedCloudProfileList) DeepCopy() *NamespacedCloudProfileList { + if in == nil { + return nil + } + out := new(NamespacedCloudProfileList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *NamespacedCloudProfileList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NamespacedCloudProfileSpec) DeepCopyInto(out *NamespacedCloudProfileSpec) { + *out = *in + if in.CABundle != nil { + in, out := &in.CABundle, &out.CABundle + *out = new(string) + **out = **in + } + if in.Kubernetes != nil { + in, out := &in.Kubernetes, &out.Kubernetes + *out = new(KubernetesSettings) + (*in).DeepCopyInto(*out) + } + if in.MachineImages != nil { + in, out := &in.MachineImages, &out.MachineImages + *out = make([]MachineImage, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.MachineTypes != nil { + in, out := &in.MachineTypes, &out.MachineTypes + *out = make([]MachineType, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Regions != nil { + in, out := &in.Regions, &out.Regions + *out = make([]Region, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.VolumeTypes != nil { + in, out := &in.VolumeTypes, &out.VolumeTypes + *out = make([]VolumeType, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + out.Parent = in.Parent + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NamespacedCloudProfileSpec. +func (in *NamespacedCloudProfileSpec) DeepCopy() *NamespacedCloudProfileSpec { + if in == nil { + return nil + } + out := new(NamespacedCloudProfileSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NamespacedCloudProfileStatus) DeepCopyInto(out *NamespacedCloudProfileStatus) { + *out = *in + in.CloudProfileSpec.DeepCopyInto(&out.CloudProfileSpec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NamespacedCloudProfileStatus. +func (in *NamespacedCloudProfileStatus) DeepCopy() *NamespacedCloudProfileStatus { + if in == nil { + return nil + } + out := new(NamespacedCloudProfileStatus) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Networking) DeepCopyInto(out *Networking) { *out = *in @@ -4747,6 +4891,11 @@ func (in *ShootSpec) DeepCopyInto(out *ShootSpec) { *out = new(string) **out = **in } + if in.CloudProfile != nil { + in, out := &in.CloudProfile, &out.CloudProfile + *out = new(CloudProfileReference) + **out = **in + } return } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.defaults.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.defaults.go index b023942ae..e5c056b61 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.defaults.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.defaults.go @@ -21,6 +21,8 @@ func RegisterDefaults(scheme *runtime.Scheme) error { scheme.AddTypeDefaultingFunc(&CloudProfileList{}, func(obj interface{}) { SetObjectDefaults_CloudProfileList(obj.(*CloudProfileList)) }) scheme.AddTypeDefaultingFunc(&ControllerRegistration{}, func(obj interface{}) { SetObjectDefaults_ControllerRegistration(obj.(*ControllerRegistration)) }) scheme.AddTypeDefaultingFunc(&ControllerRegistrationList{}, func(obj interface{}) { SetObjectDefaults_ControllerRegistrationList(obj.(*ControllerRegistrationList)) }) + scheme.AddTypeDefaultingFunc(&NamespacedCloudProfile{}, func(obj interface{}) { SetObjectDefaults_NamespacedCloudProfile(obj.(*NamespacedCloudProfile)) }) + scheme.AddTypeDefaultingFunc(&NamespacedCloudProfileList{}, func(obj interface{}) { SetObjectDefaults_NamespacedCloudProfileList(obj.(*NamespacedCloudProfileList)) }) scheme.AddTypeDefaultingFunc(&Project{}, func(obj interface{}) { SetObjectDefaults_Project(obj.(*Project)) }) scheme.AddTypeDefaultingFunc(&ProjectList{}, func(obj interface{}) { SetObjectDefaults_ProjectList(obj.(*ProjectList)) }) scheme.AddTypeDefaultingFunc(&SecretBinding{}, func(obj interface{}) { SetObjectDefaults_SecretBinding(obj.(*SecretBinding)) }) @@ -78,6 +80,48 @@ func SetObjectDefaults_ControllerRegistrationList(in *ControllerRegistrationList } } +func SetObjectDefaults_NamespacedCloudProfile(in *NamespacedCloudProfile) { + for i := range in.Spec.MachineImages { + a := &in.Spec.MachineImages[i] + SetDefaults_MachineImage(a) + for j := range a.Versions { + b := &a.Versions[j] + SetDefaults_MachineImageVersion(b) + } + } + for i := range in.Spec.MachineTypes { + a := &in.Spec.MachineTypes[i] + SetDefaults_MachineType(a) + } + for i := range in.Spec.VolumeTypes { + a := &in.Spec.VolumeTypes[i] + SetDefaults_VolumeType(a) + } + for i := range in.Status.CloudProfileSpec.MachineImages { + a := &in.Status.CloudProfileSpec.MachineImages[i] + SetDefaults_MachineImage(a) + for j := range a.Versions { + b := &a.Versions[j] + SetDefaults_MachineImageVersion(b) + } + } + for i := range in.Status.CloudProfileSpec.MachineTypes { + a := &in.Status.CloudProfileSpec.MachineTypes[i] + SetDefaults_MachineType(a) + } + for i := range in.Status.CloudProfileSpec.VolumeTypes { + a := &in.Status.CloudProfileSpec.VolumeTypes[i] + SetDefaults_VolumeType(a) + } +} + +func SetObjectDefaults_NamespacedCloudProfileList(in *NamespacedCloudProfileList) { + for i := range in.Items { + a := &in.Items[i] + SetObjectDefaults_NamespacedCloudProfile(a) + } +} + func SetObjectDefaults_Project(in *Project) { SetDefaults_Project(in) for i := range in.Spec.Members { diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/zz_generated.deepcopy.go b/vendor/github.com/gardener/gardener/pkg/apis/core/zz_generated.deepcopy.go index b825278b3..95dc187b7 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/zz_generated.deepcopy.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/zz_generated.deepcopy.go @@ -604,6 +604,22 @@ func (in *CloudProfileList) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CloudProfileReference) DeepCopyInto(out *CloudProfileReference) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CloudProfileReference. +func (in *CloudProfileReference) DeepCopy() *CloudProfileReference { + if in == nil { + return nil + } + out := new(CloudProfileReference) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *CloudProfileSpec) DeepCopyInto(out *CloudProfileSpec) { *out = *in @@ -2424,11 +2440,6 @@ func (in *KubeletConfigReserved) DeepCopy() *KubeletConfigReserved { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Kubernetes) DeepCopyInto(out *Kubernetes) { *out = *in - if in.AllowPrivilegedContainers != nil { - in, out := &in.AllowPrivilegedContainers, &out.AllowPrivilegedContainers - *out = new(bool) - **out = **in - } if in.ClusterAutoscaler != nil { in, out := &in.ClusterAutoscaler, &out.ClusterAutoscaler *out = new(ClusterAutoscaler) @@ -2935,6 +2946,139 @@ func (in *NamedResourceReference) DeepCopy() *NamedResourceReference { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NamespacedCloudProfile) DeepCopyInto(out *NamespacedCloudProfile) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NamespacedCloudProfile. +func (in *NamespacedCloudProfile) DeepCopy() *NamespacedCloudProfile { + if in == nil { + return nil + } + out := new(NamespacedCloudProfile) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *NamespacedCloudProfile) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NamespacedCloudProfileList) DeepCopyInto(out *NamespacedCloudProfileList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]NamespacedCloudProfile, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NamespacedCloudProfileList. +func (in *NamespacedCloudProfileList) DeepCopy() *NamespacedCloudProfileList { + if in == nil { + return nil + } + out := new(NamespacedCloudProfileList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *NamespacedCloudProfileList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NamespacedCloudProfileSpec) DeepCopyInto(out *NamespacedCloudProfileSpec) { + *out = *in + if in.CABundle != nil { + in, out := &in.CABundle, &out.CABundle + *out = new(string) + **out = **in + } + if in.Kubernetes != nil { + in, out := &in.Kubernetes, &out.Kubernetes + *out = new(KubernetesSettings) + (*in).DeepCopyInto(*out) + } + if in.MachineImages != nil { + in, out := &in.MachineImages, &out.MachineImages + *out = make([]MachineImage, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.MachineTypes != nil { + in, out := &in.MachineTypes, &out.MachineTypes + *out = make([]MachineType, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Regions != nil { + in, out := &in.Regions, &out.Regions + *out = make([]Region, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.VolumeTypes != nil { + in, out := &in.VolumeTypes, &out.VolumeTypes + *out = make([]VolumeType, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + out.Parent = in.Parent + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NamespacedCloudProfileSpec. +func (in *NamespacedCloudProfileSpec) DeepCopy() *NamespacedCloudProfileSpec { + if in == nil { + return nil + } + out := new(NamespacedCloudProfileSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NamespacedCloudProfileStatus) DeepCopyInto(out *NamespacedCloudProfileStatus) { + *out = *in + in.CloudProfileSpec.DeepCopyInto(&out.CloudProfileSpec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NamespacedCloudProfileStatus. +func (in *NamespacedCloudProfileStatus) DeepCopy() *NamespacedCloudProfileStatus { + if in == nil { + return nil + } + out := new(NamespacedCloudProfileStatus) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Networking) DeepCopyInto(out *Networking) { *out = *in @@ -4737,6 +4881,11 @@ func (in *ShootSpec) DeepCopyInto(out *ShootSpec) { *out = new(string) **out = **in } + if in.CloudProfile != nil { + in, out := &in.CloudProfile, &out.CloudProfile + *out = new(CloudProfileReference) + **out = **in + } return } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/register.go b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/register.go index 246bc2557..5638f8b40 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/register.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/register.go @@ -71,5 +71,6 @@ func addKnownTypes(scheme *runtime.Scheme) error { &WorkerList{}, ) metav1.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_defaults.go b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_defaults.go index 4afb853de..a2ad03f56 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_defaults.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_defaults.go @@ -15,7 +15,7 @@ package v1alpha1 import ( - runtime "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime" gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" ) diff --git a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_operatingsystemconfig.go b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_operatingsystemconfig.go index 3b9c8fc84..de6cd9627 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_operatingsystemconfig.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_operatingsystemconfig.go @@ -81,14 +81,15 @@ type OperatingSystemConfigSpec struct { DefaultSpec `json:",inline"` // Purpose describes how the result of this OperatingSystemConfig is used by Gardener. Either it // gets sent to the `Worker` extension controller to bootstrap a VM, or it is downloaded by the - // cloud-config-downloader script already running on a bootstrapped VM. + // gardener-node-agent already running on a bootstrapped VM. // This field is immutable. Purpose OperatingSystemConfigPurpose `json:"purpose"` // ReloadConfigFilePath is the path to the generated operating system configuration. If set, controllers // are asked to use it when determining the .status.command of this resource. For example, if for CoreOS // the reload-path might be "/var/lib/config"; then the controller shall set .status.command to // "/usr/bin/coreos-cloudinit --from-file=/var/lib/config". - // TODO(rfranzke): Deprecate this field once UseGardenerNodeAgent feature gate is promoted to GA. + // Deprecated: This field is deprecated and has no further usage. + // TODO(rfranzke): Remove this field after v1.95 got released. // +optional ReloadConfigFilePath *string `json:"reloadConfigFilePath,omitempty"` // Units is a list of unit for the operating system configuration (usually, a systemd unit). @@ -221,17 +222,20 @@ type OperatingSystemConfigStatus struct { // Command is the command whose execution renews/reloads the cloud config on an existing VM, e.g. // "/usr/bin/reload-cloud-config -from-file=". The is optionally provided by Gardener // in the .spec.reloadConfigFilePath field. - // TODO(rfranzke): Deprecate this field once UseGardenerNodeAgent feature gate is promoted to GA. + // Deprecated: This field is deprecated and has no further usage. + // TODO(rfranzke): Remove this field after v1.95 got released. // +optional Command *string `json:"command,omitempty"` // Units is a list of systemd unit names that are part of the generated Cloud Config and shall be // restarted when a new version has been downloaded. - // TODO(rfranzke): Deprecate this field once UseGardenerNodeAgent feature gate is promoted to GA. + // Deprecated: This field is deprecated and has no further usage. + // TODO(rfranzke): Remove this field after v1.95 got released. // +optional Units []string `json:"units,omitempty"` // Files is a list of file paths that are part of the generated Cloud Config and shall be // written to the host's file system. - // TODO(rfranzke): Deprecate this field once UseGardenerNodeAgent feature gate is promoted to GA. + // Deprecated: This field is deprecated and has no further usage. + // TODO(rfranzke): Remove this field after v1.95 got released. // +optional Files []string `json:"files,omitempty"` } @@ -251,7 +255,7 @@ const ( // new VM. OperatingSystemConfigPurposeProvision OperatingSystemConfigPurpose = "provision" // OperatingSystemConfigPurposeReconcile describes that the operating system configuration is executed on an already - // provisioned VM by the cloud-config-downloader script. + // provisioned VM by the gardener-node-agent. OperatingSystemConfigPurposeReconcile OperatingSystemConfigPurpose = "reconcile" // OperatingSystemConfigDefaultFilePermission is the default value for a permission of a file. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/operations/register.go b/vendor/github.com/gardener/gardener/pkg/apis/operations/register.go index 13ae6efbc..e2d22d467 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/operations/register.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/operations/register.go @@ -48,5 +48,6 @@ func addKnownTypes(scheme *runtime.Scheme) error { &Bastion{}, &BastionList{}, ) + return nil } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/operations/v1alpha1/register.go b/vendor/github.com/gardener/gardener/pkg/apis/operations/v1alpha1/register.go index f7fe90648..1f19b9a52 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/operations/v1alpha1/register.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/operations/v1alpha1/register.go @@ -51,5 +51,6 @@ func addKnownTypes(scheme *runtime.Scheme) error { &BastionList{}, ) metav1.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/register.go b/vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/register.go index 288f257b9..97ed7b961 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/register.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/register.go @@ -49,5 +49,6 @@ func addKnownTypes(scheme *runtime.Scheme) error { &GardenList{}, ) metav1.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/types.go b/vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/types.go index 949d04dd5..91eeaca47 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/types.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/types.go @@ -80,16 +80,16 @@ type RuntimeCluster struct { // Settings contains certain settings for this cluster. // +optional Settings *Settings `json:"settings,omitempty"` + // Volume contains settings for persistent volumes created in the runtime cluster. + // +optional + Volume *Volume `json:"volume,omitempty"` } // Ingress configures the Ingress specific settings of the runtime cluster. type Ingress struct { - // Deprecated: This field is deprecated and will be removed soon. Please use `Domains` instead. - // TODO(scheererj): Drop this after v1.90 has been released. - // +optional - Domain *string `json:"domain,omitempty"` // Domains specify the ingress domains of the cluster pointing to the ingress controller endpoint. They will be used // to construct ingress URLs for system applications running in runtime cluster. + // +kubebuilder:validation:MinItems=1 // +optional Domains []string `json:"domains,omitempty"` // Controller configures a Gardener managed Ingress Controller listening on the ingressDomain. @@ -169,6 +169,13 @@ type SettingTopologyAwareRouting struct { Enabled bool `json:"enabled"` } +// Volume contains settings for persistent volumes created in the runtime cluster. +type Volume struct { + // MinimumSize defines the minimum size that should be used for PVCs in the runtime cluster. + // +optional + MinimumSize *resource.Quantity `json:"minimumSize,omitempty"` +} + // VirtualCluster contains configuration for the virtual cluster. type VirtualCluster struct { // ControlPlane holds information about the general settings for the control plane of the virtual cluster. @@ -572,7 +579,7 @@ const ( // VirtualGardenAPIServerAvailable is a constant for a condition type indicating that the virtual garden's API server is available. VirtualGardenAPIServerAvailable gardencorev1beta1.ConditionType = "VirtualGardenAPIServerAvailable" // ObservabilityComponentsHealthy is a constant for a condition type indicating the health of observability components. - ObservabilityComponentsHealthy gardencorev1beta1.ConditionType = "ObservabilityComponentsHealthy" + ObservabilityComponentsHealthy gardencorev1beta1.ConditionType = v1beta1constants.ObservabilityComponentsHealthy ) // AvailableOperationAnnotations is the set of available operation annotations for Garden resources. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/zz_generated.deepcopy.go b/vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/zz_generated.deepcopy.go index 5666b51e2..db75ee162 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/zz_generated.deepcopy.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/zz_generated.deepcopy.go @@ -602,11 +602,6 @@ func (in *HighAvailability) DeepCopy() *HighAvailability { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Ingress) DeepCopyInto(out *Ingress) { *out = *in - if in.Domain != nil { - in, out := &in.Domain, &out.Domain - *out = new(string) - **out = **in - } if in.Domains != nil { in, out := &in.Domains, &out.Domains *out = make([]string, len(*in)) @@ -871,6 +866,11 @@ func (in *RuntimeCluster) DeepCopyInto(out *RuntimeCluster) { *out = new(Settings) (*in).DeepCopyInto(*out) } + if in.Volume != nil { + in, out := &in.Volume, &out.Volume + *out = new(Volume) + (*in).DeepCopyInto(*out) + } return } @@ -1078,3 +1078,24 @@ func (in *VirtualCluster) DeepCopy() *VirtualCluster { in.DeepCopyInto(out) return out } + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Volume) DeepCopyInto(out *Volume) { + *out = *in + if in.MinimumSize != nil { + in, out := &in.MinimumSize, &out.MinimumSize + x := (*in).DeepCopy() + *out = &x + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Volume. +func (in *Volume) DeepCopy() *Volume { + if in == nil { + return nil + } + out := new(Volume) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/github.com/gardener/gardener/pkg/apis/resources/v1alpha1/register.go b/vendor/github.com/gardener/gardener/pkg/apis/resources/v1alpha1/register.go index fd8578cd5..b75d6131b 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/resources/v1alpha1/register.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/resources/v1alpha1/register.go @@ -49,5 +49,6 @@ func addKnownTypes(scheme *runtime.Scheme) error { &ManagedResourceList{}, ) metav1.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/encoding/encoding.go b/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/encoding/encoding.go index 14d95075b..5150c60a7 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/encoding/encoding.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/encoding/encoding.go @@ -81,7 +81,9 @@ func EncodeGardenletConfigurationToBytes(cfg *gardenletv1alpha1.GardenletConfigu if err != nil { return nil, err } + var b bytes.Buffer + if err := encoder.Encode(cfg, &b); err != nil { return nil, err } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/register.go b/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/register.go index f41404b48..09dc3718f 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/register.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/register.go @@ -50,5 +50,6 @@ func addKnownTypes(scheme *runtime.Scheme) error { &ManagedSeedSet{}, &ManagedSeedSetList{}, ) + return nil } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/conversions.go b/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/conversions.go index 67a962961..6f157bb91 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/conversions.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/conversions.go @@ -16,6 +16,7 @@ package v1alpha1 import ( + "errors" "fmt" "k8s.io/apimachinery/pkg/conversion" @@ -52,6 +53,7 @@ func Convert_v1alpha1_Gardenlet_To_seedmanagement_Gardenlet(in *Gardenlet, out * if err != nil { return err } + in.Config.Object = cfg } return autoConvert_v1alpha1_Gardenlet_To_seedmanagement_Gardenlet(in, out, s) @@ -64,12 +66,14 @@ func Convert_seedmanagement_Gardenlet_To_v1alpha1_Gardenlet(in *seedmanagement.G if out.Config.Raw == nil { cfg, ok := out.Config.Object.(*gardenletv1alpha1.GardenletConfiguration) if !ok { - return fmt.Errorf("unknown gardenlet config object type") + return errors.New("unknown gardenlet config object type") } + raw, err := encoding.EncodeGardenletConfigurationToBytes(cfg) if err != nil { return err } + out.Config.Raw = raw } return nil diff --git a/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/defaults_managedseed.go b/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/defaults_managedseed.go index 26e55f2b5..3988a7535 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/defaults_managedseed.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/defaults_managedseed.go @@ -15,8 +15,6 @@ package v1alpha1 import ( - "fmt" - corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -39,12 +37,12 @@ func SetDefaults_ManagedSeed(obj *ManagedSeed) { func SetDefaults_GardenletDeployment(obj *GardenletDeployment) { // Set default replica count if obj.ReplicaCount == nil { - obj.ReplicaCount = ptr.To(int32(2)) + obj.ReplicaCount = ptr.To[int32](2) } // Set default revision history limit if obj.RevisionHistoryLimit == nil { - obj.RevisionHistoryLimit = ptr.To(int32(2)) + obj.RevisionHistoryLimit = ptr.To[int32](2) } // Set default image @@ -68,6 +66,7 @@ func SetDefaults_Image(obj *Image) { } else { pullPolicy = corev1.PullIfNotPresent } + obj.PullPolicy = &pullPolicy } } @@ -145,7 +144,7 @@ func setDefaultsResources(obj *gardenletv1alpha1.ResourcesConfiguration) { func setDefaultsSeedSpec(spec *gardencorev1beta1.SeedSpec, name, namespace string) { if spec.Backup != nil && spec.Backup.SecretRef == (corev1.SecretReference{}) { spec.Backup.SecretRef = corev1.SecretReference{ - Name: fmt.Sprintf("backup-%s", name), + Name: "backup-" + name, Namespace: namespace, } } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/defaults_managedseedset.go b/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/defaults_managedseedset.go index 4a5e3ac4e..4489d7ec6 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/defaults_managedseedset.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/defaults_managedseedset.go @@ -22,7 +22,7 @@ import ( func SetDefaults_ManagedSeedSet(obj *ManagedSeedSet) { // Set default replicas if obj.Spec.Replicas == nil { - obj.Spec.Replicas = ptr.To(int32(1)) + obj.Spec.Replicas = ptr.To[int32](1) } // Set update strategy defaults @@ -32,7 +32,7 @@ func SetDefaults_ManagedSeedSet(obj *ManagedSeedSet) { // Set default revision history limit if obj.Spec.RevisionHistoryLimit == nil { - obj.Spec.RevisionHistoryLimit = ptr.To(int32(10)) + obj.Spec.RevisionHistoryLimit = ptr.To[int32](10) } } @@ -49,6 +49,6 @@ func SetDefaults_UpdateStrategy(obj *UpdateStrategy) { func SetDefaults_RollingUpdateStrategy(obj *RollingUpdateStrategy) { // Set default partition if obj.Partition == nil { - obj.Partition = ptr.To(int32(0)) + obj.Partition = ptr.To[int32](0) } } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/register.go b/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/register.go index fcab91d51..d9d36149b 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/register.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/register.go @@ -53,6 +53,7 @@ func addKnownTypes(scheme *runtime.Scheme) error { &ManagedSeedSetList{}, ) metav1.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/settings/register.go b/vendor/github.com/gardener/gardener/pkg/apis/settings/register.go index 8f9b7a0e6..60832f84d 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/settings/register.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/settings/register.go @@ -50,5 +50,6 @@ func addKnownTypes(scheme *runtime.Scheme) error { &OpenIDConnectPreset{}, &OpenIDConnectPresetList{}, ) + return nil } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/settings/v1alpha1/register.go b/vendor/github.com/gardener/gardener/pkg/apis/settings/v1alpha1/register.go index 3ddef0622..1210c4cc2 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/settings/v1alpha1/register.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/settings/v1alpha1/register.go @@ -53,6 +53,7 @@ func addKnownTypes(scheme *runtime.Scheme) error { &OpenIDConnectPresetList{}, ) metav1.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil } diff --git a/vendor/github.com/gardener/gardener/pkg/chartrenderer/default.go b/vendor/github.com/gardener/gardener/pkg/chartrenderer/default.go index e6909341c..7c7b7cb0c 100644 --- a/vendor/github.com/gardener/gardener/pkg/chartrenderer/default.go +++ b/vendor/github.com/gardener/gardener/pkg/chartrenderer/default.go @@ -99,6 +99,7 @@ func (r *chartRenderer) renderRelease(chart *helmchart.Chart, releaseName, names if err != nil { return nil, fmt.Errorf("failed to parse values for chart %s: %w", chart.Metadata.Name, err) } + valuesCopy, err := chartutil.ReadValues(parsedValues) if err != nil { return nil, fmt.Errorf("failed to read values for chart %s: %w", chart.Metadata.Name, err) @@ -166,6 +167,7 @@ func (c *RenderedChart) Manifest() []byte { // and values as the content of the corresponding file. func (c *RenderedChart) Files() map[string]map[string]string { var files = make(map[string]map[string]string) + for _, manifest := range c.Manifests { resourceName := getResourceName(manifest) if resourceName == "" { @@ -184,12 +186,14 @@ func (c *RenderedChart) Files() map[string]map[string]string { // FileContent returns explicitly the content of the provided . func (c *RenderedChart) FileContent(filename string) string { var fileContent strings.Builder + for _, mf := range c.Manifests { if mf.Name == fmt.Sprintf("%s/templates/%s", c.ChartName, filename) { if fileContent.String() != "" { // Add "---" to separate different resources fileContent.WriteString("\n---\n") } + fileContent.WriteString(mf.Content) } } @@ -233,6 +237,7 @@ func loadEmbeddedFS(embeddedFS embed.FS, chartPath string) (*helmchart.Chart, er if err != nil { return nil, err } + rules = r } diff --git a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/cache/aggregator.go b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/cache/aggregator.go index 054a54f2f..6b49b8b67 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/cache/aggregator.go +++ b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/cache/aggregator.go @@ -92,6 +92,7 @@ func (c *aggregator) Start(ctx context.Context) error { } }(gvk, runtimecache) } + go func() { if err := c.fallbackCache.Start(ctx); err != nil { logf.Log.Error(err, "Fallback cache failed to start") diff --git a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/cache/single_object.go b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/cache/single_object.go index 5dca51e8d..a434ed90d 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/cache/single_object.go +++ b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/cache/single_object.go @@ -16,6 +16,7 @@ package cache import ( "context" + "errors" "fmt" "sync" "sync/atomic" @@ -91,7 +92,7 @@ func NewSingleObject( func (s *singleObject) Start(ctx context.Context) error { if s.parentCtx != nil { - return fmt.Errorf("the Start method cannot be called multiple times") + return errors.New("the Start method cannot be called multiple times") } logger := s.log.WithName("garbage-collector").WithValues("interval", s.garbageCollectionInterval, "maxIdleTime", s.maxIdleTime) @@ -182,6 +183,7 @@ func (s *singleObject) getOrCreateCache(key client.ObjectKey) (cache.Cache, erro log.V(1).Info("Cache not found, creating it") var err error + cache, err = s.createAndStartCache(log, key) if err != nil { return nil, err @@ -233,7 +235,7 @@ func (s *singleObject) createAndStartCache(log logr.Logger, key client.ObjectKey log.V(1).Info("Waiting for cache to be synced") if !cache.WaitForCacheSync(waitForSyncCtx) { cancel() - return nil, fmt.Errorf("failed waiting for cache to be synced") + return nil, errors.New("failed waiting for cache to be synced") } // The controller-runtime starts informers (which start the real WATCH on the API servers) only lazily with the @@ -266,9 +268,9 @@ func (s *singleObject) WaitForCacheSync(ctx context.Context) bool { } func (s *singleObject) List(_ context.Context, _ client.ObjectList, _ ...client.ListOption) error { - return fmt.Errorf("the List operation is not supported by singleObject cache") + return errors.New("the List operation is not supported by singleObject cache") } func (s *singleObject) GetInformerForKind(_ context.Context, _ schema.GroupVersionKind, _ ...cache.InformerGetOption) (cache.Informer, error) { - return nil, fmt.Errorf("the GetInformerForKind operation is not supported by singleObject cache") + return nil, errors.New("the GetInformerForKind operation is not supported by singleObject cache") } diff --git a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/client.go b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/client.go index 6a934341d..c46e99fb9 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/client.go +++ b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/client.go @@ -76,6 +76,7 @@ func NewClientFromFile(masterURL, kubeconfigPath string, fns ...ConfigFunc) (Int if err != nil { return nil, err } + opts := append([]ConfigFunc{WithRESTConfig(kubeconfig)}, fns...) return NewWithConfig(opts...) } @@ -97,12 +98,16 @@ func NewClientFromFile(masterURL, kubeconfigPath string, fns ...ConfigFunc) (Int // NewClientFromBytes creates a new Client struct for a given kubeconfig byte slice. func NewClientFromBytes(kubeconfig []byte, fns ...ConfigFunc) (Interface, error) { - config, err := RESTConfigFromClientConnectionConfiguration(nil, kubeconfig) + clientConfig, err := clientcmd.NewClientConfigFromBytes(kubeconfig) + if err != nil { + return nil, err + } + restConfig, err := clientConfig.ClientConfig() if err != nil { return nil, err } - opts := append([]ConfigFunc{WithRESTConfig(config)}, fns...) + opts := append([]ConfigFunc{WithRESTConfig(restConfig)}, fns...) return NewWithConfig(opts...) } diff --git a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/pods.go b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/pods.go index 7d8d952a4..834d8563f 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/pods.go +++ b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/pods.go @@ -96,6 +96,7 @@ func GetPodLogs(ctx context.Context, podInterface corev1client.PodInterface, nam if err != nil { return nil, err } + defer func() { utilruntime.HandleError(stream.Close()) }() return io.ReadAll(stream) diff --git a/vendor/github.com/gardener/gardener/pkg/extensions/customresources.go b/vendor/github.com/gardener/gardener/pkg/extensions/customresources.go index d015a736d..10edb51ea 100644 --- a/vendor/github.com/gardener/gardener/pkg/extensions/customresources.go +++ b/vendor/github.com/gardener/gardener/pkg/extensions/customresources.go @@ -234,13 +234,13 @@ func WaitUntilExtensionObjectDeleted( lastObservedError = v1beta1helper.NewErrorWithCodes(errors.New(lastErr.Description), lastErr.Codes...) } - var message = fmt.Sprintf("%s is still present", extensionKey(kind, namespace, name)) + var message = extensionKey(kind, namespace, name) + " is still present" if lastObservedError != nil { message += fmt.Sprintf(", last observed error: %s", lastObservedError.Error()) } - return retry.MinorError(fmt.Errorf(message)) + return retry.MinorError(errors.New(message)) }); err != nil { - message := fmt.Sprintf("Failed to delete %s", extensionKey(kind, namespace, name)) + message := "Failed to delete " + extensionKey(kind, namespace, name) if lastObservedError != nil { return fmt.Errorf("%s: %w", message, lastObservedError) } diff --git a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/register.go b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/register.go index 0a6599b24..36ac71e8d 100644 --- a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/register.go +++ b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/register.go @@ -47,5 +47,6 @@ func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &GardenletConfiguration{}, ) + return nil } diff --git a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/defaults.go b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/defaults.go index cf6aa93a6..a529fab41 100644 --- a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/defaults.go +++ b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/defaults.go @@ -15,7 +15,6 @@ package v1alpha1 import ( - "fmt" "time" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -96,6 +95,7 @@ func SetDefaults_ServerConfiguration(obj *ServerConfiguration) { // SetDefaults_ExposureClassHandler sets defaults for the configuration for an exposure class handler. func SetDefaults_ExposureClassHandler(obj []ExposureClassHandler) { var defaultSVCName = v1beta1constants.DefaultSNIIngressServiceName + for i, handler := range obj { if obj[i].SNI == nil { obj[i].SNI = &SNI{Ingress: &SNIIngress{}} @@ -104,7 +104,7 @@ func SetDefaults_ExposureClassHandler(obj []ExposureClassHandler) { obj[i].SNI.Ingress = &SNIIngress{} } if obj[i].SNI.Ingress.Namespace == nil { - namespaceName := fmt.Sprintf("istio-ingress-handler-%s", handler.Name) + namespaceName := "istio-ingress-handler-" + handler.Name obj[i].SNI.Ingress.Namespace = &namespaceName } if obj[i].SNI.Ingress.ServiceName == nil { @@ -129,10 +129,10 @@ func SetDefaults_GardenClientConnection(obj *GardenClientConnection) { // SetDefaults_KubeconfigValidity sets defaults for the controller objects. func SetDefaults_KubeconfigValidity(obj *KubeconfigValidity) { if obj.AutoRotationJitterPercentageMin == nil { - obj.AutoRotationJitterPercentageMin = ptr.To(int32(70)) + obj.AutoRotationJitterPercentageMin = ptr.To[int32](70) } if obj.AutoRotationJitterPercentageMax == nil { - obj.AutoRotationJitterPercentageMax = ptr.To(int32(90)) + obj.AutoRotationJitterPercentageMax = ptr.To[int32](90) } } @@ -293,11 +293,11 @@ func SetDefaults_SeedControllerConfiguration(obj *SeedControllerConfiguration) { } if obj.LeaseResyncSeconds == nil { - obj.LeaseResyncSeconds = ptr.To(int32(2)) + obj.LeaseResyncSeconds = ptr.To[int32](2) } if obj.LeaseResyncMissThreshold == nil { - obj.LeaseResyncMissThreshold = ptr.To(int32(10)) + obj.LeaseResyncMissThreshold = ptr.To[int32](10) } } @@ -337,7 +337,7 @@ func SetDefaults_ShootControllerConfiguration(obj *ShootControllerConfiguration) } if obj.DNSEntryTTLSeconds == nil { - obj.DNSEntryTTLSeconds = ptr.To(int64(120)) + obj.DNSEntryTTLSeconds = ptr.To[int64](120) } } @@ -490,27 +490,27 @@ func SetDefaults_ETCDConfig(obj *ETCDConfig) { // SetDefaults_ETCDController sets defaults for the ETCD controller. func SetDefaults_ETCDController(obj *ETCDController) { if obj.Workers == nil { - obj.Workers = ptr.To(int64(50)) + obj.Workers = ptr.To[int64](50) } } // SetDefaults_CustodianController sets defaults for the ETCD custodian controller. func SetDefaults_CustodianController(obj *CustodianController) { if obj.Workers == nil { - obj.Workers = ptr.To(int64(10)) + obj.Workers = ptr.To[int64](10) } } // SetDefaults_BackupCompactionController sets defaults for the ETCD backup compaction controller. func SetDefaults_BackupCompactionController(obj *BackupCompactionController) { if obj.Workers == nil { - obj.Workers = ptr.To(int64(3)) + obj.Workers = ptr.To[int64](3) } if obj.EnableBackupCompaction == nil { obj.EnableBackupCompaction = ptr.To(false) } if obj.EventsThreshold == nil { - obj.EventsThreshold = ptr.To(int64(1000000)) + obj.EventsThreshold = ptr.To[int64](1000000) } if obj.MetricsScrapeWaitDuration == nil { obj.MetricsScrapeWaitDuration = &metav1.Duration{Duration: 60 * time.Second} diff --git a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/register.go b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/register.go index a099191b7..b50375366 100644 --- a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/register.go +++ b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/register.go @@ -50,6 +50,7 @@ func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &GardenletConfiguration{}, ) + return nil } diff --git a/vendor/github.com/gardener/gardener/pkg/logger/zap.go b/vendor/github.com/gardener/gardener/pkg/logger/zap.go index a9d70e44e..50c296362 100644 --- a/vendor/github.com/gardener/gardener/pkg/logger/zap.go +++ b/vendor/github.com/gardener/gardener/pkg/logger/zap.go @@ -33,6 +33,7 @@ func setCommonEncoderConfigOptions(encoderConfig *zapcore.EncoderConfig) { func MustNewZapLogger(level string, format string, additionalOpts ...logzap.Opts) logr.Logger { logger, err := NewZapLogger(level, format, additionalOpts...) utilruntime.Must(err) + return logger } @@ -42,6 +43,7 @@ func NewZapLogger(level string, format string, additionalOpts ...logzap.Opts) (l // map our log levels to zap levels var zapLevel zapcore.LevelEnabler + switch level { case DebugLevel: zapLevel = zap.DebugLevel @@ -52,6 +54,7 @@ func NewZapLogger(level string, format string, additionalOpts ...logzap.Opts) (l default: return logr.Logger{}, fmt.Errorf("invalid log level %q", level) } + opts = append(opts, logzap.Level(zapLevel)) // map our log format to encoder diff --git a/vendor/github.com/gardener/gardener/pkg/resourcemanager/controller/garbagecollector/references/references.go b/vendor/github.com/gardener/gardener/pkg/resourcemanager/controller/garbagecollector/references/references.go index 7714f1ab3..00773d803 100644 --- a/vendor/github.com/gardener/gardener/pkg/resourcemanager/controller/garbagecollector/references/references.go +++ b/vendor/github.com/gardener/gardener/pkg/resourcemanager/controller/garbagecollector/references/references.go @@ -167,6 +167,7 @@ func computeAnnotationsFromLocalObjRefs(refs []corev1.LocalObjectReference, kind for _, ref := range refs { out[AnnotationKey(kind, ref.Name)] = ref.Name } + for _, v := range additional { out[v] = "" } diff --git a/vendor/github.com/gardener/gardener/pkg/utils/checksums.go b/vendor/github.com/gardener/gardener/pkg/utils/checksums.go index 7d2e42694..09f03dcf5 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/checksums.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/checksums.go @@ -24,6 +24,7 @@ func computeChecksum(data map[string][]byte) string { for k := range data { keys = append(keys, k) } + slices.Sort(keys) var hash string diff --git a/vendor/github.com/gardener/gardener/pkg/utils/encoding.go b/vendor/github.com/gardener/gardener/pkg/utils/encoding.go index 098f58b22..dd44f8a0d 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/encoding.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/encoding.go @@ -156,9 +156,11 @@ func ComputeSHA256Hex(in []byte) string { func HashForMap(m map[string]interface{}) string { var hash string keys := make([]string, 0, len(m)) + for k := range m { keys = append(keys, k) } + slices.Sort(keys) for _, k := range keys { diff --git a/vendor/github.com/gardener/gardener/pkg/utils/errors/errors.go b/vendor/github.com/gardener/gardener/pkg/utils/errors/errors.go index a1f54f512..688b2900c 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/errors/errors.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/errors/errors.go @@ -41,6 +41,7 @@ func (w *withSuppressed) Format(s fmt.State, verb rune) { _, _ = fmt.Fprintf(s, "%+v\nsuppressed: %+v", w.Unwrap(), w.suppressed) return } + fallthrough case 's', 'q': _, _ = io.WriteString(s, w.Error()) @@ -111,6 +112,7 @@ func GetID(err error) string { } var id string + if err != nil { if errWithID, ok := err.(errorIDer); ok { id = errWithID.ErrorID() diff --git a/vendor/github.com/gardener/gardener/pkg/utils/flow/flow.go b/vendor/github.com/gardener/gardener/pkg/utils/flow/flow.go index 03d9c54bc..faf006cd5 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/flow/flow.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/flow/flow.go @@ -92,6 +92,7 @@ func (n *node) addTargets(taskIDs ...TaskID) { n.targetIDs = NewTaskIDs(TaskIDSlice(taskIDs)) return } + n.targetIDs.Insert(TaskIDSlice(taskIDs)) } @@ -213,6 +214,7 @@ func (e *execution) runNode(ctx context.Context, id TaskID) { if node.skip { log.V(1).Info("Skipped") e.stats.Skipped.Insert(id) + go func() { e.done <- &nodeResult{TaskID: id, Error: nil, skipped: true} }() @@ -223,10 +225,13 @@ func (e *execution) runNode(ctx context.Context, id TaskID) { if e.errorContext != nil { e.errorContext.AddErrorID(string(id)) } + e.stats.Pending.Delete(id) e.stats.Running.Insert(id) + go func() { start := time.Now().UTC() + log.V(1).Info("Started") err := node.fn(ctx) end := time.Now().UTC() @@ -297,6 +302,7 @@ func (e *execution) run(ctx context.Context) error { e.runNode(ctx, name) } } + e.reportProgress(ctx) for e.stats.Running.Len() > 0 || e.stats.Skipped.Len() > 0 { @@ -320,6 +326,7 @@ func (e *execution) run(ctx context.Context) error { } } } + e.reportProgress(ctx) } diff --git a/vendor/github.com/gardener/gardener/pkg/utils/flow/graph.go b/vendor/github.com/gardener/gardener/pkg/utils/flow/graph.go index 8cba75c52..8b1e65f68 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/flow/graph.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/flow/graph.go @@ -72,6 +72,7 @@ func (g *Graph) Add(task Task) TaskID { if _, ok := g.tasks[id]; ok { panic(fmt.Sprintf("Task with id %q already exists", id)) } + spec := task.Spec() for dependencyID := range spec.Dependencies { if _, ok := g.tasks[dependencyID]; !ok { diff --git a/vendor/github.com/gardener/gardener/pkg/utils/flow/progress_reporter_delaying.go b/vendor/github.com/gardener/gardener/pkg/utils/flow/progress_reporter_delaying.go index 6d4bb0748..f2e686cae 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/flow/progress_reporter_delaying.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/flow/progress_reporter_delaying.go @@ -16,7 +16,7 @@ package flow import ( "context" - "fmt" + "errors" "sync" "time" @@ -50,7 +50,7 @@ func (p *progressReporterDelaying) Start(ctx context.Context) error { defer p.lock.Unlock() if p.timer != nil { - return fmt.Errorf("progress reporter has already been started") + return errors.New("progress reporter has already been started") } // We store the context on the progressReporterDelaying object so that we can call the reporterFn with the original diff --git a/vendor/github.com/gardener/gardener/pkg/utils/flow/taskfn.go b/vendor/github.com/gardener/gardener/pkg/utils/flow/taskfn.go index e9ba736e9..2bbf6862a 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/flow/taskfn.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/flow/taskfn.go @@ -114,11 +114,13 @@ func ParallelN(n int, fns ...TaskFn) TaskFn { for i := 0; i < workers; i++ { wg.Add(1) + go func() { for fn := range fnsCh { fn := fn errCh <- fn(ctx) } + wg.Done() }() } @@ -165,7 +167,9 @@ func ParallelExitOnError(fns ...TaskFn) TaskFn { for _, fn := range fns { t := fn + wg.Add(1) + go func() { defer wg.Done() errors <- t(subCtx) diff --git a/vendor/github.com/gardener/gardener/pkg/utils/flow/taskid.go b/vendor/github.com/gardener/gardener/pkg/utils/flow/taskid.go index 914773c03..be986e4e0 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/flow/taskid.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/flow/taskid.go @@ -116,6 +116,7 @@ func (t TaskIDs) List() TaskIDSlice { for k := range t { out = append(out, k) } + slices.Sort(out) return out } diff --git a/vendor/github.com/gardener/gardener/pkg/utils/gardener/backupentry.go b/vendor/github.com/gardener/gardener/pkg/utils/gardener/backupentry.go index c2c4abeda..2fb372756 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/gardener/backupentry.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/gardener/backupentry.go @@ -15,7 +15,7 @@ package gardener import ( - "fmt" + "errors" "strings" "k8s.io/apimachinery/pkg/types" @@ -30,10 +30,10 @@ var backupEntryDelimiter = "--" // GenerateBackupEntryName returns BackupEntry resource name created from provided and . func GenerateBackupEntryName(shootTechnicalID string, shootUID types.UID) (string, error) { if shootTechnicalID == "" { - return "", fmt.Errorf("can't generate backup entry name with an empty shoot technical ID") + return "", errors.New("can't generate backup entry name with an empty shoot technical ID") } if shootUID == "" { - return "", fmt.Errorf("can't generate backup entry name with an empty shoot UID") + return "", errors.New("can't generate backup entry name with an empty shoot UID") } return shootTechnicalID + backupEntryDelimiter + string(shootUID), nil } diff --git a/vendor/github.com/gardener/gardener/pkg/utils/gardener/controllerinstallation.go b/vendor/github.com/gardener/gardener/pkg/utils/gardener/controllerinstallation.go index 088a50f80..1b5d38c5d 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/gardener/controllerinstallation.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/gardener/controllerinstallation.go @@ -15,12 +15,10 @@ package gardener import ( - "fmt" - gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" ) // NamespaceNameForControllerInstallation returns the name of the namespace that will be used for the extension controller in the seed. func NamespaceNameForControllerInstallation(controllerInstallation *gardencorev1beta1.ControllerInstallation) string { - return fmt.Sprintf("extension-%s", controllerInstallation.Name) + return "extension-" + controllerInstallation.Name } diff --git a/vendor/github.com/gardener/gardener/pkg/utils/gardener/dns.go b/vendor/github.com/gardener/gardener/pkg/utils/gardener/dns.go index 5df54b393..bce9ae393 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/gardener/dns.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/gardener/dns.go @@ -15,6 +15,7 @@ package gardener import ( + "errors" "fmt" "slices" @@ -66,7 +67,7 @@ const ( // GetDomainInfoFromAnnotations returns the provider, domain, and zones that are specified in the given annotations. func GetDomainInfoFromAnnotations(annotations map[string]string) (provider string, domain string, zone string, err error) { if annotations == nil { - return "", "", "", fmt.Errorf("domain secret has no annotations") + return "", "", "", errors.New("domain secret has no annotations") } if providerAnnotation, ok := annotations[DNSProvider]; ok { diff --git a/vendor/github.com/gardener/gardener/pkg/utils/gardener/garden.go b/vendor/github.com/gardener/gardener/pkg/utils/gardener/garden.go index f8f1dba9d..bf5b70884 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/gardener/garden.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/gardener/garden.go @@ -118,12 +118,12 @@ func ReadGardenSecrets( error, ) { var ( - logInfo []string - secretsMap = make(map[string]*corev1.Secret) - numberOfInternalDomainSecrets = 0 - numberOfOpenVPNDiffieHellmanSecrets = 0 - numberOfAlertingSecrets = 0 - numberOfGlobalMonitoringSecrets = 0 + logInfo []string + secretsMap = make(map[string]*corev1.Secret) + numberOfInternalDomainSecrets = 0 + numberOfAlertingSecrets = 0 + numberOfGlobalMonitoringSecrets = 0 + numberOfShootServiceAccountIssuerSecrets = 0 ) secretList := &corev1.SecretList{} @@ -161,19 +161,6 @@ func ReadGardenSecrets( numberOfInternalDomainSecrets++ } - // Retrieving Diffie-Hellman secret for OpenVPN based on all secrets in the Garden namespace which have - // a label indicating the Garden role openvpn-diffie-hellman. - if secret.Labels[v1beta1constants.GardenRole] == v1beta1constants.GardenRoleOpenVPNDiffieHellman { - openvpnDiffieHellman := secret - key := "dh2048.pem" - if _, ok := secret.Data[key]; !ok { - return nil, fmt.Errorf("cannot use OpenVPN Diffie Hellman secret '%s' as it does not contain key '%s' (whose value should be the actual Diffie Hellman key)", secret.Name, key) - } - secretsMap[v1beta1constants.GardenRoleOpenVPNDiffieHellman] = &openvpnDiffieHellman - logInfo = append(logInfo, fmt.Sprintf("OpenVPN Diffie Hellman secret %q", secret.Name)) - numberOfOpenVPNDiffieHellmanSecrets++ - } - // Retrieve the alerting secret to configure alerting. Either in cluster email alerting or // external alertmanager configuration. if secret.Labels[v1beta1constants.GardenRole] == v1beta1constants.GardenRoleAlerting { @@ -203,6 +190,18 @@ func ReadGardenSecrets( secretsMap[v1beta1constants.GardenRoleGlobalShootRemoteWriteMonitoring] = &monitoringSecret logInfo = append(logInfo, fmt.Sprintf("monitoring basic auth secret %q", secret.Name)) } + + if secret.Labels[v1beta1constants.GardenRole] == v1beta1constants.GardenRoleShootServiceAccountIssuer { + shootIssuer := secret + if hostname, ok := secret.Data["hostname"]; !ok { + return nil, fmt.Errorf("cannot use Shoot Service Account Issuer secret '%s' as it does not contain key 'hostname'", secret.Name) + } else if strings.TrimSpace(string(hostname)) == "" { + return nil, fmt.Errorf("cannot use Shoot Service Account Issuer secret '%s' as it does contain an empty 'hostname' key", secret.Name) + } + secretsMap[v1beta1constants.GardenRoleShootServiceAccountIssuer] = &shootIssuer + logInfo = append(logInfo, fmt.Sprintf("Shoot Service Account Issuer secret %q", secret.Name)) + numberOfShootServiceAccountIssuerSecrets++ + } } // For each Shoot we create a LoadBalancer(LB) pointing to the API server of the Shoot. Because the technical address @@ -217,15 +216,6 @@ func ReadGardenSecrets( return nil, fmt.Errorf("need an internal domain secret but found none") } - // The VPN bridge from a Shoot's control plane running in the Seed cluster to the worker nodes of the Shoots is based - // on OpenVPN. It requires a Diffie Hellman key. If no such key is explicitly provided as secret in the garden namespace - // then the Gardener will use a default one (not recommended, but useful for local development). If a secret is specified - // its key will be used for all Shoots. However, at most only one of such a secret is allowed to be specified (otherwise, - // the Gardener cannot determine which to choose). - if numberOfOpenVPNDiffieHellmanSecrets > 1 { - return nil, fmt.Errorf("can only accept at most one OpenVPN Diffie Hellman secret, but found %d", numberOfOpenVPNDiffieHellmanSecrets) - } - // Operators can configure gardener to send email alerts or send the alerts to an external alertmanager. If no configuration // is provided then no alerts will be sent. if numberOfAlertingSecrets > 1 { @@ -236,6 +226,12 @@ func ReadGardenSecrets( return nil, fmt.Errorf("can only accept at most one global monitoring secret, but found %d", numberOfGlobalMonitoringSecrets) } + // The managed shoot service account issuer is configured centrally per Garden cluster. + // The presence of more than one secret is an ambiguous behaviour and should be disallowed. + if numberOfShootServiceAccountIssuerSecrets > 1 { + return nil, fmt.Errorf("can only accept at most one shoot service account issuer secret, but found %d", numberOfShootServiceAccountIssuerSecrets) + } + log.Info("Found secrets", "namespace", namespace, "secrets", logInfo) return secretsMap, nil } diff --git a/vendor/github.com/gardener/gardener/pkg/utils/gardener/identity.go b/vendor/github.com/gardener/gardener/pkg/utils/gardener/identity.go index 3a2d800d8..2220ebf07 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/gardener/identity.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/gardener/identity.go @@ -55,6 +55,7 @@ func DetermineIdentity() (*gardencorev1beta1.Gardener, error) { reader := bufio.NewReader(cGroupFile) var cgroupV1 string + for { line, err := reader.ReadString('\n') if err != nil { diff --git a/vendor/github.com/gardener/gardener/pkg/utils/gardener/machines.go b/vendor/github.com/gardener/gardener/pkg/utils/gardener/machines.go index 4525ce3c6..1c97e16c7 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/gardener/machines.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/gardener/machines.go @@ -88,6 +88,7 @@ func WaitUntilMachineResourcesDeleted(ctx context.Context, log logr.Logger, read countMachineClasses = -1 countMachineClassSecrets = -1 ) + log.Info("Waiting until all machine resources have been deleted") return retryutils.UntilTimeout(ctx, 5*time.Second, 5*time.Minute, func(ctx context.Context) (bool, error) { @@ -151,6 +152,7 @@ func WaitUntilMachineResourcesDeleted(ctx context.Context, log logr.Logger, read if err := reader.List(ctx, machineClassSecretsList, client.InNamespace(namespace), client.MatchingLabels(map[string]string{v1beta1constants.GardenerPurpose: v1beta1constants.GardenPurposeMachineClass})); err != nil { return retryutils.SevereError(err) } + for _, machineClassSecret := range machineClassSecretsList.Items { if len(machineClassSecret.Finalizers) != 0 { count++ diff --git a/vendor/github.com/gardener/gardener/pkg/utils/gardener/shoot.go b/vendor/github.com/gardener/gardener/pkg/utils/gardener/shoot.go index 7e06d88c9..c75a63123 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/gardener/shoot.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/gardener/shoot.go @@ -28,6 +28,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/sets" clientcmdlatest "k8s.io/client-go/tools/clientcmd/api/latest" clientcmdv1 "k8s.io/client-go/tools/clientcmd/api/v1" @@ -279,6 +280,13 @@ func IsShootProjectInternalSecret(secretName string) (string, bool) { return "", false } +// ComputeManagedShootIssuerSecretName returns the name that should be used for +// storing the service account public keys of a shoot's kube-apiserver +// in the gardener-system-shoot-issuer namespace in the Garden cluster. +func ComputeManagedShootIssuerSecretName(projectName string, shootUID types.UID) string { + return projectName + "--" + string(shootUID) +} + // IsShootProjectConfigMap checks if the given name matches the name of a shoot-related project config map. If no, it returns // an empty string and . Otherwise, it returns the shoot name and . func IsShootProjectConfigMap(configMapName string) (string, bool) { @@ -460,7 +468,7 @@ func injectGenericKubeconfig(obj runtime.Object, genericKubeconfigName, accessSe Name: volumeName, VolumeSource: corev1.VolumeSource{ Projected: &corev1.ProjectedVolumeSource{ - DefaultMode: ptr.To(int32(420)), + DefaultMode: ptr.To[int32](420), Sources: []corev1.VolumeProjection{ { Secret: &corev1.SecretProjection{ diff --git a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/certificate.go b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/certificate.go new file mode 100644 index 000000000..16aa114e4 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/certificate.go @@ -0,0 +1,67 @@ +// Copyright 2024 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package health + +import ( + "fmt" + + certv1alpha1 "github.com/gardener/cert-management/pkg/apis/cert/v1alpha1" + corev1 "k8s.io/api/core/v1" +) + +// CheckCertificate checks whether the given certificate object is healthy. +func CheckCertificate(cert *certv1alpha1.Certificate) error { + for _, condition := range cert.Status.Conditions { + if condition.Type == certv1alpha1.CertificateConditionReady { + if err := checkConditionState(condition.Type, string(corev1.ConditionTrue), string(condition.Status), condition.Reason, condition.Message); err != nil { + return err + } + + break + } + } + + if certState := cert.Status.State; certState != certv1alpha1.StateReady { + return fmt.Errorf("certificate state is %q (%q expected)", certState, certv1alpha1.StateReady) + } + return nil +} + +// IsCertificateProgressing returns false if the Certificate's generation matches the observed generation. +func IsCertificateProgressing(cert *certv1alpha1.Certificate) (bool, string) { + if cert.Status.ObservedGeneration < cert.Generation { + return true, fmt.Sprintf("observed generation outdated (%d/%d)", cert.Status.ObservedGeneration, cert.Generation) + } + + return false, "Certificate is fully rolled out" +} + +// CheckCertificateIssuer checks whether the given issuer object is healthy. +func CheckCertificateIssuer(issuer *certv1alpha1.Issuer) error { + if issuerState := issuer.Status.State; issuerState != certv1alpha1.StateReady { + return fmt.Errorf("issuer state is %q (%q expected)", issuerState, certv1alpha1.StateReady) + } + + return nil +} + +// IsCertificateIssuerProgressing returns false if the Issuer's generation matches the observed generation. +func IsCertificateIssuerProgressing(issuer *certv1alpha1.Issuer) (bool, string) { + if issuer.Status.ObservedGeneration < issuer.Generation { + return true, fmt.Sprintf("observed generation outdated (%d/%d)", issuer.Status.ObservedGeneration, issuer.Generation) + } + + return false, "Issuer is fully rolled out" +} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/healthz.go b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/healthz.go index c57c142dc..f422a9852 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/healthz.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/healthz.go @@ -46,13 +46,14 @@ func CheckAPIServerAvailability( // Determine the status code of the response. var statusCode int + response.StatusCode(&statusCode) if statusCode != http.StatusOK { var body string bodyRaw, err := response.Raw() if err != nil { - body = fmt.Sprintf("Could not parse response body: %s", err.Error()) + body = "Could not parse response body: " + err.Error() } else { body = string(bodyRaw) } diff --git a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/pod.go b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/pod.go index f86ea7b5a..1113ae224 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/pod.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/pod.go @@ -46,6 +46,7 @@ func GetPodCondition(status *corev1.PodStatus, conditionType corev1.PodCondition if status == nil { return -1, nil } + for i := range status.Conditions { if status.Conditions[i].Type == conditionType { return i, &status.Conditions[i] diff --git a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/vpa.go b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/vpa.go index 48d845d39..4aa0ac86c 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/vpa.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/vpa.go @@ -26,6 +26,7 @@ func CheckVerticalPodAutoscaler(vpa *vpaautoscalingv1.VerticalPodAutoscaler) err if err := checkConditionState(string(condition.Type), string(corev1.ConditionFalse), string(condition.Status), condition.Reason, condition.Message); err != nil { return err } + break } } diff --git a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/highavailability.go b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/highavailability.go index 6fa231dd2..c7666530d 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/highavailability.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/highavailability.go @@ -32,10 +32,10 @@ func GetReplicaCount(failureToleranceType *gardencorev1beta1.FailureToleranceTyp if failureToleranceType != nil && *failureToleranceType == "" && componentType == resourcesv1alpha1.HighAvailabilityConfigTypeController { - return ptr.To(int32(1)) + return ptr.To[int32](1) } - return ptr.To(int32(2)) + return ptr.To[int32](2) } // GetNodeSelectorRequirementForZones returns a node selector requirement to ensure all pods are scheduled only on diff --git a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/kubernetes.go b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/kubernetes.go index a4dec7d93..43b39b152 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/kubernetes.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/kubernetes.go @@ -297,6 +297,7 @@ func MapStringBoolToCommandLineParameter(m map[string]bool, param string) string for k := range m { keys = append(keys, k) } + slices.Sort(keys) out := param @@ -690,7 +691,7 @@ func ClientCertificateFromRESTConfig(restConfig *rest.Config) (*tls.Certificate, } if len(cert.Certificate) < 1 { - return nil, fmt.Errorf("the X509 certificate is invalid, no cert/key data found") + return nil, errors.New("the X509 certificate is invalid, no cert/key data found") } certs, err := x509.ParseCertificates(cert.Certificate[0]) @@ -699,7 +700,7 @@ func ClientCertificateFromRESTConfig(restConfig *rest.Config) (*tls.Certificate, } if len(certs) < 1 { - return nil, fmt.Errorf("the X509 certificate bundle does not contain exactly one certificate") + return nil, errors.New("the X509 certificate bundle does not contain exactly one certificate") } cert.Leaf = certs[0] diff --git a/vendor/github.com/gardener/gardener/pkg/utils/miscellaneous.go b/vendor/github.com/gardener/gardener/pkg/utils/miscellaneous.go index 99fb94c73..39a3e64a5 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/miscellaneous.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/miscellaneous.go @@ -15,6 +15,7 @@ package utils import ( + "errors" "fmt" "math/big" "net" @@ -101,6 +102,7 @@ func FindFreePort() (int, error) { if err != nil { return 0, err } + defer l.Close() return l.Addr().(*net.TCPAddr).Port, nil } @@ -195,7 +197,7 @@ func FilterEntriesByFilterFn(entries []string, filterFn func(entry string) bool) // IPv6 and IPv4 is supported. func ComputeOffsetIP(subnet *net.IPNet, offset int64) (net.IP, error) { if subnet == nil { - return nil, fmt.Errorf("subnet is nil") + return nil, errors.New("subnet is nil") } isIPv6 := false diff --git a/vendor/github.com/gardener/gardener/pkg/utils/random.go b/vendor/github.com/gardener/gardener/pkg/utils/random.go index 1da804352..c2c59c3dd 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/random.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/random.go @@ -36,6 +36,7 @@ func GenerateRandomString(n int) (string, error) { func GenerateRandomStringFromCharset(n int, allowedCharacters string) (string, error) { output := make([]byte, n) max := new(big.Int).SetInt64(int64(len(allowedCharacters))) + for i := range output { randomCharacter, err := cryptorand.Int(cryptorand.Reader, max) if err != nil { diff --git a/vendor/github.com/gardener/gardener/pkg/utils/secrets/control_plane.go b/vendor/github.com/gardener/gardener/pkg/utils/secrets/control_plane.go index b74d4a214..1a1f76ce1 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/secrets/control_plane.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/secrets/control_plane.go @@ -24,11 +24,11 @@ import ( // ControlPlaneSecretDataKeyCertificatePEM returns the data key inside a Secret of type ControlPlane whose value // contains the certificate PEM. -func ControlPlaneSecretDataKeyCertificatePEM(name string) string { return fmt.Sprintf("%s.crt", name) } +func ControlPlaneSecretDataKeyCertificatePEM(name string) string { return name + ".crt" } // ControlPlaneSecretDataKeyPrivateKey returns the data key inside a Secret of type ControlPlane whose value // contains the private key PEM. -func ControlPlaneSecretDataKeyPrivateKey(name string) string { return fmt.Sprintf("%s.key", name) } +func ControlPlaneSecretDataKeyPrivateKey(name string) string { return name + ".key" } // ControlPlaneSecretConfig is a struct which inherits from CertificateSecretConfig and is extended with a couple of additional // properties. A control plane secret will always contain a server/client certificate and optionally a kubeconfig. diff --git a/vendor/github.com/gardener/gardener/pkg/utils/test/matchers/deep.go b/vendor/github.com/gardener/gardener/pkg/utils/test/matchers/deep.go index f0c9c5e59..31d092471 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/test/matchers/deep.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/test/matchers/deep.go @@ -15,7 +15,7 @@ package matchers import ( - "fmt" + "errors" "github.com/onsi/gomega/format" gomegatypes "github.com/onsi/gomega/types" @@ -53,7 +53,7 @@ func newDeepEqualMatcher(expected interface{}) gomegatypes.GomegaMatcher { func (m *deepMatcher) Match(actual interface{}) (success bool, err error) { if actual == nil && m.expected == nil { - return false, fmt.Errorf(deepMatcherNilError) + return false, errors.New(deepMatcherNilError) } return m.compareFn(m.expected, actual), nil diff --git a/vendor/github.com/gardener/gardener/pkg/utils/test/matchers/managedresource.go b/vendor/github.com/gardener/gardener/pkg/utils/test/matchers/managedresource.go new file mode 100644 index 000000000..4b2a9d69a --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/utils/test/matchers/managedresource.go @@ -0,0 +1,194 @@ +// Copyright 2024 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package matchers + +import ( + "context" + "fmt" + "strings" + + "github.com/onsi/gomega/format" + "golang.org/x/exp/maps" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/sets" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/client/apiutil" + + resourcesv1alpha1 "github.com/gardener/gardener/pkg/apis/resources/v1alpha1" +) + +type managedResourceObjectsMatcher struct { + ctx context.Context + cl client.Client + expectedObjToSerialized map[client.Object]string + extraObjectsCheck bool + + extraObjects []string + missingObjects []string + mismatchExpectedToActual map[string]string +} + +func (m *managedResourceObjectsMatcher) FailureMessage(actual interface{}) string { + return m.createMessage(actual, "not to be") +} + +func (m *managedResourceObjectsMatcher) NegatedFailureMessage(actual interface{}) string { + return m.createMessage(actual, "to be") +} + +func (m *managedResourceObjectsMatcher) createMessage(actual interface{}, addition string) string { + managedResource, ok := actual.(*resourcesv1alpha1.ManagedResource) + if !ok { + return fmt.Sprintf("expected *resourcesv1alpha1.ManagedResource. got:\n%s", format.Object(actual, 1)) + } + + var message string + + switch { + case len(m.mismatchExpectedToActual) > 0: + message = fmt.Sprintf("Expected for ManagedResource %s/%s the following object mismathes %s found:\n", managedResource.Namespace, managedResource.Name, addition) + for expected, actual := range m.mismatchExpectedToActual { + message += format.MessageWithDiff(actual, "to equal", expected) + } + case len(m.missingObjects) > 0: + message = fmt.Sprintf("Expected for ManagedResource %s/%s the following missing elements %s found:\n", managedResource.Namespace, managedResource.Name, addition) + for _, missingObject := range m.missingObjects { + message += format.IndentString(missingObject, 2) + } + case len(m.extraObjects) > 0: + message = fmt.Sprintf("Expected for ManagedResource %s/%s the following extra and unexpected elements %s found:\n", managedResource.Namespace, managedResource.Name, addition) + for _, extraObject := range m.extraObjects { + message += format.IndentString(extraObject, 2) + } + } + + return message +} + +func (m *managedResourceObjectsMatcher) Match(actual interface{}) (bool, error) { + if actual == nil { + return false, nil + } + + managedResource, ok := actual.(*resourcesv1alpha1.ManagedResource) + if !ok { + return false, fmt.Errorf("expected *resourcesv1alpha1.ManagedResource. got:\n%s", format.Object(actual, 1)) + } + + // Retrieve managed resource secrets. + var secrets = make([]*corev1.Secret, 0, len(managedResource.Spec.SecretRefs)) + for _, secretRef := range managedResource.Spec.SecretRefs { + secret := &corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: secretRef.Name, + Namespace: managedResource.Namespace, + }, + } + + if err := m.cl.Get(m.ctx, client.ObjectKeyFromObject(secret), secret); err != nil { + return false, fmt.Errorf("error when retrieving managed resource secret: %w", err) + } + secrets = append(secrets, secret) + } + + dataKeyToExpected := make(map[string]string) + + // Compare expected and actual results. + for expectedObj, expectedObjSerialized := range m.expectedObjToSerialized { + gvk, err := apiutil.GVKForObject(expectedObj, m.cl.Scheme()) + if err != nil { + return false, fmt.Errorf("error when extracting object kind: %w", err) + } + + dataKey := fmt.Sprintf( + "%s__%s__%s.yaml", + strings.ToLower(gvk.Kind), + expectedObj.GetNamespace(), + strings.ReplaceAll(expectedObj.GetName(), ":", "_"), + ) + if _, ok := dataKeyToExpected[dataKey]; ok { + return false, fmt.Errorf("object is already specified for data key %s", dataKey) + } + dataKeyToExpected[dataKey] = expectedObjSerialized + } + + dataKeys := sets.New(maps.Keys(dataKeyToExpected)...) + + // Use early returns for the following checks to not overwhelm Gomega output. + m.mismatchExpectedToActual = findMismatchObjects(secrets, dataKeyToExpected) + if len(m.mismatchExpectedToActual) > 0 { + return false, nil + } + + m.missingObjects = findMissingObjects(secrets, dataKeyToExpected) + if len(m.missingObjects) > 0 { + return false, nil + } + + if m.extraObjectsCheck { + m.extraObjects = findExtraObjects(secrets, dataKeys) + if len(m.extraObjects) > 0 { + return false, nil + } + } + + return true, nil +} + +func findMismatchObjects(secrets []*corev1.Secret, keysToExpected map[string]string) map[string]string { + mismatches := make(map[string]string) + + for _, secret := range secrets { + for dataKey, expected := range keysToExpected { + if actual, ok := secret.Data[dataKey]; ok && string(actual) != expected { + mismatches[expected] = string(actual) + } + } + } + + return mismatches +} + +func findMissingObjects(secrets []*corev1.Secret, keysToExpected map[string]string) []string { + var ( + keysToBeFound = sets.New(maps.Keys(keysToExpected)...) + missingObjects []string + ) + + for _, secret := range secrets { + keysToBeFound = keysToBeFound.Difference(sets.New(maps.Keys(secret.Data)...)) + } + + for notFoundKey := range keysToBeFound { + missingObjects = append(missingObjects, keysToExpected[notFoundKey]) + } + + return missingObjects +} + +func findExtraObjects(secrets []*corev1.Secret, keys sets.Set[string]) []string { + var extraObjects []string + + for _, secret := range secrets { + extraKeys := sets.New(maps.Keys(secret.Data)...).Difference(keys) + + for extraKey := range extraKeys { + extraObjects = append(extraObjects, string(secret.Data[extraKey])) + } + } + + return extraObjects +} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/test/matchers/matchers.go b/vendor/github.com/gardener/gardener/pkg/utils/test/matchers/matchers.go index a5506f297..5c846be5c 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/test/matchers/matchers.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/test/matchers/matchers.go @@ -15,11 +15,16 @@ package matchers import ( + "context" + "github.com/onsi/gomega/format" "github.com/onsi/gomega/types" apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/runtime" + "sigs.k8s.io/controller-runtime/pkg/client" + + testruntime "github.com/gardener/gardener/pkg/utils/test/runtime" ) func init() { @@ -125,3 +130,43 @@ func ShareSameReferenceAs(expected interface{}) types.GomegaMatcher { expected: expected, } } + +// NewManagedResourceContainsObjectsMatcher returns a function for a matcher that checks +// if the given objects are handled by the given managed resource. +// It is expected that the data keys of referenced secret(s) follow the semantics of `managedresources.Registry`. +func NewManagedResourceContainsObjectsMatcher(cl client.Client) func(...client.Object) types.GomegaMatcher { + return func(objs ...client.Object) types.GomegaMatcher { + expectedObjToSerialized := make(map[client.Object]string) + for _, o := range objs { + obj := o + expectedObjToSerialized[obj] = testruntime.Serialize(obj, cl.Scheme()) + } + + return &managedResourceObjectsMatcher{ + ctx: context.Background(), + cl: cl, + expectedObjToSerialized: expectedObjToSerialized, + } + } +} + +// NewManagedResourceConsistOfObjectsMatcher returns a function for a matcher that checks +// if the exact list of given objects are handled by the given managed resource. +// Any extra objects found through the ManagedResource let the matcher fail. +// It is expected that the data keys of referenced secret(s) follow the semantics of `managedresources.Registry`. +func NewManagedResourceConsistOfObjectsMatcher(cl client.Client) func(...client.Object) types.GomegaMatcher { + return func(objs ...client.Object) types.GomegaMatcher { + expectedObjToSerialized := make(map[client.Object]string) + for _, o := range objs { + obj := o + expectedObjToSerialized[obj] = testruntime.Serialize(obj, cl.Scheme()) + } + + return &managedResourceObjectsMatcher{ + ctx: context.Background(), + cl: cl, + expectedObjToSerialized: expectedObjToSerialized, + extraObjectsCheck: true, + } + } +} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/test/options.go b/vendor/github.com/gardener/gardener/pkg/utils/test/options.go index 06d615c27..af0e8ba31 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/test/options.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/test/options.go @@ -15,7 +15,7 @@ package test import ( - "fmt" + "strconv" "strings" ) @@ -26,7 +26,7 @@ type Flag interface { } func keyToFlag(key string) string { - return fmt.Sprintf("--%s", key) + return "--" + key } type intFlag struct { @@ -35,7 +35,7 @@ type intFlag struct { } func (f *intFlag) Slice() []string { - return []string{keyToFlag(f.key), fmt.Sprintf("%d", f.value)} + return []string{keyToFlag(f.key), strconv.Itoa(f.value)} } type stringFlag struct { @@ -132,6 +132,7 @@ func (c *Command) Slice() []string { for _, flag := range c.Flags { out = append(out, flag.Slice()...) } + out = append(out, c.Args...) return out } diff --git a/vendor/github.com/gardener/gardener/pkg/utils/test/runtime/seralize.go b/vendor/github.com/gardener/gardener/pkg/utils/test/runtime/seralize.go new file mode 100644 index 000000000..e38f9fe16 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/utils/test/runtime/seralize.go @@ -0,0 +1,52 @@ +// Copyright 2022 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package runtime + +import ( + . "github.com/onsi/gomega" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/runtime/serializer" + "k8s.io/apimachinery/pkg/runtime/serializer/json" + "sigs.k8s.io/controller-runtime/pkg/client" + + forkedyaml "github.com/gardener/gardener/third_party/gopkg.in/yaml.v2" +) + +// Serialize serializes and encodes the passed object. +func Serialize(obj client.Object, scheme *runtime.Scheme) string { + var groupVersions []schema.GroupVersion + for k := range scheme.AllKnownTypes() { + groupVersions = append(groupVersions, k.GroupVersion()) + } + + var ( + ser = json.NewSerializerWithOptions(json.DefaultMetaFactory, scheme, scheme, json.SerializerOptions{Yaml: true, Pretty: false, Strict: false}) + codec = serializer.NewCodecFactory(scheme).CodecForVersions(ser, ser, schema.GroupVersions(groupVersions), schema.GroupVersions(groupVersions)) + ) + + serializationYAML, err := runtime.Encode(codec, obj) + ExpectWithOffset(1, err).NotTo(HaveOccurred()) + + // Keep this in sync with pkg/utils/managedresources/registry.go + // See https://github.com/gardener/gardener/pull/8312 + var anyObj interface{} + Expect(forkedyaml.Unmarshal(serializationYAML, &anyObj)).To(Succeed()) + + serBytes, err := forkedyaml.Marshal(anyObj) + Expect(err).NotTo(HaveOccurred()) + + return string(serBytes) +} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/test/test_resources.go b/vendor/github.com/gardener/gardener/pkg/utils/test/test_resources.go index c58948612..127d49360 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/test/test_resources.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/test/test_resources.go @@ -116,8 +116,11 @@ func readDocuments(fp string) ([][]byte, error) { return nil, err } - var docs [][]byte - reader := utilyaml.NewYAMLReader(bufio.NewReader(bytes.NewReader(b))) + var ( + docs [][]byte + reader = utilyaml.NewYAMLReader(bufio.NewReader(bytes.NewReader(b))) + ) + for { // Read document doc, err := reader.Read() diff --git a/vendor/github.com/gardener/gardener/pkg/utils/timewindow/timewindow.go b/vendor/github.com/gardener/gardener/pkg/utils/timewindow/timewindow.go index fd8760971..082c44480 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/timewindow/timewindow.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/timewindow/timewindow.go @@ -41,6 +41,7 @@ func NewMaintenanceTime(hour, minute, second int) *MaintenanceTime { if second >= 60 { panic(fmt.Sprintf("invalid second %d", second)) } + return &MaintenanceTime{hour, minute, second} } @@ -51,6 +52,7 @@ func ParseMaintenanceTime(value string) (*MaintenanceTime, error) { if err != nil { return nil, fmt.Errorf("could not parse the value into the maintenanceTime format: %s", err.Error()) } + return timeToMaintenanceTime(t), nil } @@ -66,6 +68,7 @@ func RandomMaintenanceTimeWindow() *MaintenanceTimeWindow { begin = NewMaintenanceTime(hour, 0, 0) end = NewMaintenanceTime(hour+1, 0, 0) ) + return NewMaintenanceTimeWindow(begin, end) } @@ -144,6 +147,7 @@ func ParseMaintenanceTimeWindow(begin, end string) (*MaintenanceTimeWindow, erro if err != nil { return nil, fmt.Errorf("could not parse begin time: %s", err.Error()) } + maintenanceWindowEnd, err := ParseMaintenanceTime(end) if err != nil { return nil, fmt.Errorf("could not parse end time: %s", err.Error()) diff --git a/vendor/github.com/gardener/gardener/pkg/utils/values.go b/vendor/github.com/gardener/gardener/pkg/utils/values.go index 722709989..89d0051f0 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/values.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/values.go @@ -179,11 +179,14 @@ func getFromValues(values interface{}, keys ...interface{}) (interface{}, error) if len(keys) == 0 { return values, nil } + var ok bool + switch keys[0].(type) { case string: key := keys[0].(string) var m map[string]interface{} + if m, ok = values.(map[string]interface{}); !ok { return nil, fmt.Errorf("cannot use key '%s' with a non-map value", key) } @@ -192,8 +195,11 @@ func getFromValues(values interface{}, keys ...interface{}) (interface{}, error) } return getFromValues(m[key], keys[1:]...) case int: - index := keys[0].(int) - var s []interface{} + var ( + index = keys[0].(int) + s []interface{} + ) + if s, ok = values.([]interface{}); !ok { return nil, fmt.Errorf("cannot use index '%d' with a non-slice value", index) } @@ -216,13 +222,17 @@ func setToValues(values interface{}, v interface{}, keys ...interface{}) (interf if len(keys) == 0 { return values, nil } + var ok bool + switch keys[0].(type) { case string: key := keys[0].(string) + if values == nil { values = map[string]interface{}{} } + var m map[string]interface{} if m, ok = values.(map[string]interface{}); !ok { return values, fmt.Errorf("cannot use key '%s' with a non-map value", key) @@ -239,10 +249,13 @@ func setToValues(values interface{}, v interface{}, keys ...interface{}) (interf return m, nil case int: index := keys[0].(int) + if values == nil { values = []interface{}{} } + var s []interface{} + if s, ok = values.([]interface{}); !ok { return values, fmt.Errorf("cannot use index '%d' with a non-slice value", index) } @@ -264,6 +277,7 @@ func setToValues(values interface{}, v interface{}, keys ...interface{}) (interf if err != nil { return s, err } + s = append(s, x) } } else { @@ -287,11 +301,14 @@ func deleteFromValues(values interface{}, keys ...interface{}) (interface{}, err if len(keys) == 0 { return values, nil } + var ok bool + switch keys[0].(type) { case string: key := keys[0].(string) var m map[string]interface{} + if m, ok = values.(map[string]interface{}); !ok { return values, fmt.Errorf("cannot use key '%s' with a non-map value", key) } @@ -310,6 +327,7 @@ func deleteFromValues(values interface{}, keys ...interface{}) (interface{}, err case int: index := keys[0].(int) var s []interface{} + if s, ok = values.([]interface{}); !ok { return values, fmt.Errorf("cannot use index '%d' with a non-slice value", index) } diff --git a/vendor/github.com/gardener/gardener/pkg/utils/version/version.go b/vendor/github.com/gardener/gardener/pkg/utils/version/version.go index bf3aef594..9f928bc87 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/version/version.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/version/version.go @@ -91,6 +91,7 @@ func normalize(version string) string { if idx != -1 { v = v[:idx] } + return v } @@ -105,16 +106,18 @@ type VersionRange struct { // and less than RemovedInVersion (always true if RemovedInVersion is empty). func (r *VersionRange) Contains(version string) (bool, error) { var constraint string + switch { case r.AddedInVersion != "" && r.RemovedInVersion == "": - constraint = fmt.Sprintf(">= %s", r.AddedInVersion) + constraint = ">= " + r.AddedInVersion case r.AddedInVersion == "" && r.RemovedInVersion != "": - constraint = fmt.Sprintf("< %s", r.RemovedInVersion) + constraint = "< " + r.RemovedInVersion case r.AddedInVersion != "" && r.RemovedInVersion != "": constraint = fmt.Sprintf(">= %s, < %s", r.AddedInVersion, r.RemovedInVersion) default: constraint = "*" } + return CheckVersionMeetsConstraint(version, constraint) } @@ -122,9 +125,9 @@ func (r *VersionRange) Contains(version string) (bool, error) { func (r *VersionRange) SupportedVersionRange() string { switch { case r.AddedInVersion != "" && r.RemovedInVersion == "": - return fmt.Sprintf("versions >= %s", r.AddedInVersion) + return "versions >= " + r.AddedInVersion case r.AddedInVersion == "" && r.RemovedInVersion != "": - return fmt.Sprintf("versions < %s", r.RemovedInVersion) + return "versions < " + r.RemovedInVersion case r.AddedInVersion != "" && r.RemovedInVersion != "": return fmt.Sprintf("versions >= %s, < %s", r.AddedInVersion, r.RemovedInVersion) default: diff --git a/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/LICENSE b/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/LICENSE new file mode 100644 index 000000000..8dada3eda --- /dev/null +++ b/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/LICENSE.libyaml b/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/LICENSE.libyaml new file mode 100644 index 000000000..8da58fbf6 --- /dev/null +++ b/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/LICENSE.libyaml @@ -0,0 +1,31 @@ +The following files were ported to Go from C files of libyaml, and thus +are still covered by their original copyright and license: + + apic.go + emitterc.go + parserc.go + readerc.go + scannerc.go + writerc.go + yamlh.go + yamlprivateh.go + +Copyright (c) 2006 Kirill Simonov + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/NOTICE b/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/NOTICE new file mode 100644 index 000000000..866d74a7a --- /dev/null +++ b/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/NOTICE @@ -0,0 +1,13 @@ +Copyright 2011-2016 Canonical Ltd. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/README.md b/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/README.md new file mode 100644 index 000000000..c8e3376fb --- /dev/null +++ b/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/README.md @@ -0,0 +1 @@ +Forked from https://github.com/go-yaml/yaml/commit/7649d4548cb53a614db133b2a8ac1f31859dda8c and includes https://github.com/go-yaml/yaml/pull/736. diff --git a/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/apic.go b/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/apic.go new file mode 100644 index 000000000..acf71402c --- /dev/null +++ b/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/apic.go @@ -0,0 +1,744 @@ +package yaml + +import ( + "io" +) + +func yaml_insert_token(parser *yaml_parser_t, pos int, token *yaml_token_t) { + //fmt.Println("yaml_insert_token", "pos:", pos, "typ:", token.typ, "head:", parser.tokens_head, "len:", len(parser.tokens)) + + // Check if we can move the queue at the beginning of the buffer. + if parser.tokens_head > 0 && len(parser.tokens) == cap(parser.tokens) { + if parser.tokens_head != len(parser.tokens) { + copy(parser.tokens, parser.tokens[parser.tokens_head:]) + } + parser.tokens = parser.tokens[:len(parser.tokens)-parser.tokens_head] + parser.tokens_head = 0 + } + parser.tokens = append(parser.tokens, *token) + if pos < 0 { + return + } + copy(parser.tokens[parser.tokens_head+pos+1:], parser.tokens[parser.tokens_head+pos:]) + parser.tokens[parser.tokens_head+pos] = *token +} + +// Create a new parser object. +func yaml_parser_initialize(parser *yaml_parser_t) bool { + *parser = yaml_parser_t{ + raw_buffer: make([]byte, 0, input_raw_buffer_size), + buffer: make([]byte, 0, input_buffer_size), + } + return true +} + +// Destroy a parser object. +func yaml_parser_delete(parser *yaml_parser_t) { + *parser = yaml_parser_t{} +} + +// String read handler. +func yaml_string_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) { + if parser.input_pos == len(parser.input) { + return 0, io.EOF + } + n = copy(buffer, parser.input[parser.input_pos:]) + parser.input_pos += n + return n, nil +} + +// Reader read handler. +func yaml_reader_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) { + return parser.input_reader.Read(buffer) +} + +// Set a string input. +func yaml_parser_set_input_string(parser *yaml_parser_t, input []byte) { + if parser.read_handler != nil { + panic("must set the input source only once") + } + parser.read_handler = yaml_string_read_handler + parser.input = input + parser.input_pos = 0 +} + +// Set a file input. +func yaml_parser_set_input_reader(parser *yaml_parser_t, r io.Reader) { + if parser.read_handler != nil { + panic("must set the input source only once") + } + parser.read_handler = yaml_reader_read_handler + parser.input_reader = r +} + +// Set the source encoding. +func yaml_parser_set_encoding(parser *yaml_parser_t, encoding yaml_encoding_t) { + if parser.encoding != yaml_ANY_ENCODING { + panic("must set the encoding only once") + } + parser.encoding = encoding +} + +var disableLineWrapping = false + +// Create a new emitter object. +func yaml_emitter_initialize(emitter *yaml_emitter_t) { + *emitter = yaml_emitter_t{ + buffer: make([]byte, output_buffer_size), + raw_buffer: make([]byte, 0, output_raw_buffer_size), + states: make([]yaml_emitter_state_t, 0, initial_stack_size), + events: make([]yaml_event_t, 0, initial_queue_size), + } + if disableLineWrapping { + emitter.best_width = -1 + } +} + +// Destroy an emitter object. +func yaml_emitter_delete(emitter *yaml_emitter_t) { + *emitter = yaml_emitter_t{} +} + +// String write handler. +func yaml_string_write_handler(emitter *yaml_emitter_t, buffer []byte) error { + *emitter.output_buffer = append(*emitter.output_buffer, buffer...) + return nil +} + +// yaml_writer_write_handler uses emitter.output_writer to write the +// emitted text. +func yaml_writer_write_handler(emitter *yaml_emitter_t, buffer []byte) error { + _, err := emitter.output_writer.Write(buffer) + return err +} + +// Set a string output. +func yaml_emitter_set_output_string(emitter *yaml_emitter_t, output_buffer *[]byte) { + if emitter.write_handler != nil { + panic("must set the output target only once") + } + emitter.write_handler = yaml_string_write_handler + emitter.output_buffer = output_buffer +} + +// Set a file output. +func yaml_emitter_set_output_writer(emitter *yaml_emitter_t, w io.Writer) { + if emitter.write_handler != nil { + panic("must set the output target only once") + } + emitter.write_handler = yaml_writer_write_handler + emitter.output_writer = w +} + +// Set the output encoding. +func yaml_emitter_set_encoding(emitter *yaml_emitter_t, encoding yaml_encoding_t) { + if emitter.encoding != yaml_ANY_ENCODING { + panic("must set the output encoding only once") + } + emitter.encoding = encoding +} + +// Set the canonical output style. +func yaml_emitter_set_canonical(emitter *yaml_emitter_t, canonical bool) { + emitter.canonical = canonical +} + +//// Set the indentation increment. +func yaml_emitter_set_indent(emitter *yaml_emitter_t, indent int) { + if indent < 2 || indent > 9 { + indent = 2 + } + emitter.best_indent = indent +} + +// Set the preferred line width. +func yaml_emitter_set_width(emitter *yaml_emitter_t, width int) { + if width < 0 { + width = -1 + } + emitter.best_width = width +} + +// Set if unescaped non-ASCII characters are allowed. +func yaml_emitter_set_unicode(emitter *yaml_emitter_t, unicode bool) { + emitter.unicode = unicode +} + +// Set the preferred line break character. +func yaml_emitter_set_break(emitter *yaml_emitter_t, line_break yaml_break_t) { + emitter.line_break = line_break +} + +///* +// * Destroy a token object. +// */ +// +//YAML_DECLARE(void) +//yaml_token_delete(yaml_token_t *token) +//{ +// assert(token); // Non-NULL token object expected. +// +// switch (token.type) +// { +// case YAML_TAG_DIRECTIVE_TOKEN: +// yaml_free(token.data.tag_directive.handle); +// yaml_free(token.data.tag_directive.prefix); +// break; +// +// case YAML_ALIAS_TOKEN: +// yaml_free(token.data.alias.value); +// break; +// +// case YAML_ANCHOR_TOKEN: +// yaml_free(token.data.anchor.value); +// break; +// +// case YAML_TAG_TOKEN: +// yaml_free(token.data.tag.handle); +// yaml_free(token.data.tag.suffix); +// break; +// +// case YAML_SCALAR_TOKEN: +// yaml_free(token.data.scalar.value); +// break; +// +// default: +// break; +// } +// +// memset(token, 0, sizeof(yaml_token_t)); +//} +// +///* +// * Check if a string is a valid UTF-8 sequence. +// * +// * Check 'reader.c' for more details on UTF-8 encoding. +// */ +// +//static int +//yaml_check_utf8(yaml_char_t *start, size_t length) +//{ +// yaml_char_t *end = start+length; +// yaml_char_t *pointer = start; +// +// while (pointer < end) { +// unsigned char octet; +// unsigned int width; +// unsigned int value; +// size_t k; +// +// octet = pointer[0]; +// width = (octet & 0x80) == 0x00 ? 1 : +// (octet & 0xE0) == 0xC0 ? 2 : +// (octet & 0xF0) == 0xE0 ? 3 : +// (octet & 0xF8) == 0xF0 ? 4 : 0; +// value = (octet & 0x80) == 0x00 ? octet & 0x7F : +// (octet & 0xE0) == 0xC0 ? octet & 0x1F : +// (octet & 0xF0) == 0xE0 ? octet & 0x0F : +// (octet & 0xF8) == 0xF0 ? octet & 0x07 : 0; +// if (!width) return 0; +// if (pointer+width > end) return 0; +// for (k = 1; k < width; k ++) { +// octet = pointer[k]; +// if ((octet & 0xC0) != 0x80) return 0; +// value = (value << 6) + (octet & 0x3F); +// } +// if (!((width == 1) || +// (width == 2 && value >= 0x80) || +// (width == 3 && value >= 0x800) || +// (width == 4 && value >= 0x10000))) return 0; +// +// pointer += width; +// } +// +// return 1; +//} +// + +// Create STREAM-START. +func yaml_stream_start_event_initialize(event *yaml_event_t, encoding yaml_encoding_t) { + *event = yaml_event_t{ + typ: yaml_STREAM_START_EVENT, + encoding: encoding, + } +} + +// Create STREAM-END. +func yaml_stream_end_event_initialize(event *yaml_event_t) { + *event = yaml_event_t{ + typ: yaml_STREAM_END_EVENT, + } +} + +// Create DOCUMENT-START. +func yaml_document_start_event_initialize( + event *yaml_event_t, + version_directive *yaml_version_directive_t, + tag_directives []yaml_tag_directive_t, + implicit bool, +) { + *event = yaml_event_t{ + typ: yaml_DOCUMENT_START_EVENT, + version_directive: version_directive, + tag_directives: tag_directives, + implicit: implicit, + } +} + +// Create DOCUMENT-END. +func yaml_document_end_event_initialize(event *yaml_event_t, implicit bool) { + *event = yaml_event_t{ + typ: yaml_DOCUMENT_END_EVENT, + implicit: implicit, + } +} + +///* +// * Create ALIAS. +// */ +// +//YAML_DECLARE(int) +//yaml_alias_event_initialize(event *yaml_event_t, anchor *yaml_char_t) +//{ +// mark yaml_mark_t = { 0, 0, 0 } +// anchor_copy *yaml_char_t = NULL +// +// assert(event) // Non-NULL event object is expected. +// assert(anchor) // Non-NULL anchor is expected. +// +// if (!yaml_check_utf8(anchor, strlen((char *)anchor))) return 0 +// +// anchor_copy = yaml_strdup(anchor) +// if (!anchor_copy) +// return 0 +// +// ALIAS_EVENT_INIT(*event, anchor_copy, mark, mark) +// +// return 1 +//} + +// Create SCALAR. +func yaml_scalar_event_initialize(event *yaml_event_t, anchor, tag, value []byte, plain_implicit, quoted_implicit bool, style yaml_scalar_style_t) bool { + *event = yaml_event_t{ + typ: yaml_SCALAR_EVENT, + anchor: anchor, + tag: tag, + value: value, + implicit: plain_implicit, + quoted_implicit: quoted_implicit, + style: yaml_style_t(style), + } + return true +} + +// Create SEQUENCE-START. +func yaml_sequence_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_sequence_style_t) bool { + *event = yaml_event_t{ + typ: yaml_SEQUENCE_START_EVENT, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(style), + } + return true +} + +// Create SEQUENCE-END. +func yaml_sequence_end_event_initialize(event *yaml_event_t) bool { + *event = yaml_event_t{ + typ: yaml_SEQUENCE_END_EVENT, + } + return true +} + +// Create MAPPING-START. +func yaml_mapping_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_mapping_style_t) { + *event = yaml_event_t{ + typ: yaml_MAPPING_START_EVENT, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(style), + } +} + +// Create MAPPING-END. +func yaml_mapping_end_event_initialize(event *yaml_event_t) { + *event = yaml_event_t{ + typ: yaml_MAPPING_END_EVENT, + } +} + +// Destroy an event object. +func yaml_event_delete(event *yaml_event_t) { + *event = yaml_event_t{} +} + +///* +// * Create a document object. +// */ +// +//YAML_DECLARE(int) +//yaml_document_initialize(document *yaml_document_t, +// version_directive *yaml_version_directive_t, +// tag_directives_start *yaml_tag_directive_t, +// tag_directives_end *yaml_tag_directive_t, +// start_implicit int, end_implicit int) +//{ +// struct { +// error yaml_error_type_t +// } context +// struct { +// start *yaml_node_t +// end *yaml_node_t +// top *yaml_node_t +// } nodes = { NULL, NULL, NULL } +// version_directive_copy *yaml_version_directive_t = NULL +// struct { +// start *yaml_tag_directive_t +// end *yaml_tag_directive_t +// top *yaml_tag_directive_t +// } tag_directives_copy = { NULL, NULL, NULL } +// value yaml_tag_directive_t = { NULL, NULL } +// mark yaml_mark_t = { 0, 0, 0 } +// +// assert(document) // Non-NULL document object is expected. +// assert((tag_directives_start && tag_directives_end) || +// (tag_directives_start == tag_directives_end)) +// // Valid tag directives are expected. +// +// if (!STACK_INIT(&context, nodes, INITIAL_STACK_SIZE)) goto error +// +// if (version_directive) { +// version_directive_copy = yaml_malloc(sizeof(yaml_version_directive_t)) +// if (!version_directive_copy) goto error +// version_directive_copy.major = version_directive.major +// version_directive_copy.minor = version_directive.minor +// } +// +// if (tag_directives_start != tag_directives_end) { +// tag_directive *yaml_tag_directive_t +// if (!STACK_INIT(&context, tag_directives_copy, INITIAL_STACK_SIZE)) +// goto error +// for (tag_directive = tag_directives_start +// tag_directive != tag_directives_end; tag_directive ++) { +// assert(tag_directive.handle) +// assert(tag_directive.prefix) +// if (!yaml_check_utf8(tag_directive.handle, +// strlen((char *)tag_directive.handle))) +// goto error +// if (!yaml_check_utf8(tag_directive.prefix, +// strlen((char *)tag_directive.prefix))) +// goto error +// value.handle = yaml_strdup(tag_directive.handle) +// value.prefix = yaml_strdup(tag_directive.prefix) +// if (!value.handle || !value.prefix) goto error +// if (!PUSH(&context, tag_directives_copy, value)) +// goto error +// value.handle = NULL +// value.prefix = NULL +// } +// } +// +// DOCUMENT_INIT(*document, nodes.start, nodes.end, version_directive_copy, +// tag_directives_copy.start, tag_directives_copy.top, +// start_implicit, end_implicit, mark, mark) +// +// return 1 +// +//error: +// STACK_DEL(&context, nodes) +// yaml_free(version_directive_copy) +// while (!STACK_EMPTY(&context, tag_directives_copy)) { +// value yaml_tag_directive_t = POP(&context, tag_directives_copy) +// yaml_free(value.handle) +// yaml_free(value.prefix) +// } +// STACK_DEL(&context, tag_directives_copy) +// yaml_free(value.handle) +// yaml_free(value.prefix) +// +// return 0 +//} +// +///* +// * Destroy a document object. +// */ +// +//YAML_DECLARE(void) +//yaml_document_delete(document *yaml_document_t) +//{ +// struct { +// error yaml_error_type_t +// } context +// tag_directive *yaml_tag_directive_t +// +// context.error = YAML_NO_ERROR // Eliminate a compiler warning. +// +// assert(document) // Non-NULL document object is expected. +// +// while (!STACK_EMPTY(&context, document.nodes)) { +// node yaml_node_t = POP(&context, document.nodes) +// yaml_free(node.tag) +// switch (node.type) { +// case YAML_SCALAR_NODE: +// yaml_free(node.data.scalar.value) +// break +// case YAML_SEQUENCE_NODE: +// STACK_DEL(&context, node.data.sequence.items) +// break +// case YAML_MAPPING_NODE: +// STACK_DEL(&context, node.data.mapping.pairs) +// break +// default: +// assert(0) // Should not happen. +// } +// } +// STACK_DEL(&context, document.nodes) +// +// yaml_free(document.version_directive) +// for (tag_directive = document.tag_directives.start +// tag_directive != document.tag_directives.end +// tag_directive++) { +// yaml_free(tag_directive.handle) +// yaml_free(tag_directive.prefix) +// } +// yaml_free(document.tag_directives.start) +// +// memset(document, 0, sizeof(yaml_document_t)) +//} +// +///** +// * Get a document node. +// */ +// +//YAML_DECLARE(yaml_node_t *) +//yaml_document_get_node(document *yaml_document_t, index int) +//{ +// assert(document) // Non-NULL document object is expected. +// +// if (index > 0 && document.nodes.start + index <= document.nodes.top) { +// return document.nodes.start + index - 1 +// } +// return NULL +//} +// +///** +// * Get the root object. +// */ +// +//YAML_DECLARE(yaml_node_t *) +//yaml_document_get_root_node(document *yaml_document_t) +//{ +// assert(document) // Non-NULL document object is expected. +// +// if (document.nodes.top != document.nodes.start) { +// return document.nodes.start +// } +// return NULL +//} +// +///* +// * Add a scalar node to a document. +// */ +// +//YAML_DECLARE(int) +//yaml_document_add_scalar(document *yaml_document_t, +// tag *yaml_char_t, value *yaml_char_t, length int, +// style yaml_scalar_style_t) +//{ +// struct { +// error yaml_error_type_t +// } context +// mark yaml_mark_t = { 0, 0, 0 } +// tag_copy *yaml_char_t = NULL +// value_copy *yaml_char_t = NULL +// node yaml_node_t +// +// assert(document) // Non-NULL document object is expected. +// assert(value) // Non-NULL value is expected. +// +// if (!tag) { +// tag = (yaml_char_t *)YAML_DEFAULT_SCALAR_TAG +// } +// +// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error +// tag_copy = yaml_strdup(tag) +// if (!tag_copy) goto error +// +// if (length < 0) { +// length = strlen((char *)value) +// } +// +// if (!yaml_check_utf8(value, length)) goto error +// value_copy = yaml_malloc(length+1) +// if (!value_copy) goto error +// memcpy(value_copy, value, length) +// value_copy[length] = '\0' +// +// SCALAR_NODE_INIT(node, tag_copy, value_copy, length, style, mark, mark) +// if (!PUSH(&context, document.nodes, node)) goto error +// +// return document.nodes.top - document.nodes.start +// +//error: +// yaml_free(tag_copy) +// yaml_free(value_copy) +// +// return 0 +//} +// +///* +// * Add a sequence node to a document. +// */ +// +//YAML_DECLARE(int) +//yaml_document_add_sequence(document *yaml_document_t, +// tag *yaml_char_t, style yaml_sequence_style_t) +//{ +// struct { +// error yaml_error_type_t +// } context +// mark yaml_mark_t = { 0, 0, 0 } +// tag_copy *yaml_char_t = NULL +// struct { +// start *yaml_node_item_t +// end *yaml_node_item_t +// top *yaml_node_item_t +// } items = { NULL, NULL, NULL } +// node yaml_node_t +// +// assert(document) // Non-NULL document object is expected. +// +// if (!tag) { +// tag = (yaml_char_t *)YAML_DEFAULT_SEQUENCE_TAG +// } +// +// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error +// tag_copy = yaml_strdup(tag) +// if (!tag_copy) goto error +// +// if (!STACK_INIT(&context, items, INITIAL_STACK_SIZE)) goto error +// +// SEQUENCE_NODE_INIT(node, tag_copy, items.start, items.end, +// style, mark, mark) +// if (!PUSH(&context, document.nodes, node)) goto error +// +// return document.nodes.top - document.nodes.start +// +//error: +// STACK_DEL(&context, items) +// yaml_free(tag_copy) +// +// return 0 +//} +// +///* +// * Add a mapping node to a document. +// */ +// +//YAML_DECLARE(int) +//yaml_document_add_mapping(document *yaml_document_t, +// tag *yaml_char_t, style yaml_mapping_style_t) +//{ +// struct { +// error yaml_error_type_t +// } context +// mark yaml_mark_t = { 0, 0, 0 } +// tag_copy *yaml_char_t = NULL +// struct { +// start *yaml_node_pair_t +// end *yaml_node_pair_t +// top *yaml_node_pair_t +// } pairs = { NULL, NULL, NULL } +// node yaml_node_t +// +// assert(document) // Non-NULL document object is expected. +// +// if (!tag) { +// tag = (yaml_char_t *)YAML_DEFAULT_MAPPING_TAG +// } +// +// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error +// tag_copy = yaml_strdup(tag) +// if (!tag_copy) goto error +// +// if (!STACK_INIT(&context, pairs, INITIAL_STACK_SIZE)) goto error +// +// MAPPING_NODE_INIT(node, tag_copy, pairs.start, pairs.end, +// style, mark, mark) +// if (!PUSH(&context, document.nodes, node)) goto error +// +// return document.nodes.top - document.nodes.start +// +//error: +// STACK_DEL(&context, pairs) +// yaml_free(tag_copy) +// +// return 0 +//} +// +///* +// * Append an item to a sequence node. +// */ +// +//YAML_DECLARE(int) +//yaml_document_append_sequence_item(document *yaml_document_t, +// sequence int, item int) +//{ +// struct { +// error yaml_error_type_t +// } context +// +// assert(document) // Non-NULL document is required. +// assert(sequence > 0 +// && document.nodes.start + sequence <= document.nodes.top) +// // Valid sequence id is required. +// assert(document.nodes.start[sequence-1].type == YAML_SEQUENCE_NODE) +// // A sequence node is required. +// assert(item > 0 && document.nodes.start + item <= document.nodes.top) +// // Valid item id is required. +// +// if (!PUSH(&context, +// document.nodes.start[sequence-1].data.sequence.items, item)) +// return 0 +// +// return 1 +//} +// +///* +// * Append a pair of a key and a value to a mapping node. +// */ +// +//YAML_DECLARE(int) +//yaml_document_append_mapping_pair(document *yaml_document_t, +// mapping int, key int, value int) +//{ +// struct { +// error yaml_error_type_t +// } context +// +// pair yaml_node_pair_t +// +// assert(document) // Non-NULL document is required. +// assert(mapping > 0 +// && document.nodes.start + mapping <= document.nodes.top) +// // Valid mapping id is required. +// assert(document.nodes.start[mapping-1].type == YAML_MAPPING_NODE) +// // A mapping node is required. +// assert(key > 0 && document.nodes.start + key <= document.nodes.top) +// // Valid key id is required. +// assert(value > 0 && document.nodes.start + value <= document.nodes.top) +// // Valid value id is required. +// +// pair.key = key +// pair.value = value +// +// if (!PUSH(&context, +// document.nodes.start[mapping-1].data.mapping.pairs, pair)) +// return 0 +// +// return 1 +//} +// +// diff --git a/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/decode.go b/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/decode.go new file mode 100644 index 000000000..129bc2a97 --- /dev/null +++ b/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/decode.go @@ -0,0 +1,815 @@ +package yaml + +import ( + "encoding" + "encoding/base64" + "fmt" + "io" + "math" + "reflect" + "strconv" + "time" +) + +const ( + documentNode = 1 << iota + mappingNode + sequenceNode + scalarNode + aliasNode +) + +type node struct { + kind int + line, column int + tag string + // For an alias node, alias holds the resolved alias. + alias *node + value string + implicit bool + children []*node + anchors map[string]*node +} + +// ---------------------------------------------------------------------------- +// Parser, produces a node tree out of a libyaml event stream. + +type parser struct { + parser yaml_parser_t + event yaml_event_t + doc *node + doneInit bool +} + +func newParser(b []byte) *parser { + p := parser{} + if !yaml_parser_initialize(&p.parser) { + panic("failed to initialize YAML emitter") + } + if len(b) == 0 { + b = []byte{'\n'} + } + yaml_parser_set_input_string(&p.parser, b) + return &p +} + +func newParserFromReader(r io.Reader) *parser { + p := parser{} + if !yaml_parser_initialize(&p.parser) { + panic("failed to initialize YAML emitter") + } + yaml_parser_set_input_reader(&p.parser, r) + return &p +} + +func (p *parser) init() { + if p.doneInit { + return + } + p.expect(yaml_STREAM_START_EVENT) + p.doneInit = true +} + +func (p *parser) destroy() { + if p.event.typ != yaml_NO_EVENT { + yaml_event_delete(&p.event) + } + yaml_parser_delete(&p.parser) +} + +// expect consumes an event from the event stream and +// checks that it's of the expected type. +func (p *parser) expect(e yaml_event_type_t) { + if p.event.typ == yaml_NO_EVENT { + if !yaml_parser_parse(&p.parser, &p.event) { + p.fail() + } + } + if p.event.typ == yaml_STREAM_END_EVENT { + failf("attempted to go past the end of stream; corrupted value?") + } + if p.event.typ != e { + p.parser.problem = fmt.Sprintf("expected %s event but got %s", e, p.event.typ) + p.fail() + } + yaml_event_delete(&p.event) + p.event.typ = yaml_NO_EVENT +} + +// peek peeks at the next event in the event stream, +// puts the results into p.event and returns the event type. +func (p *parser) peek() yaml_event_type_t { + if p.event.typ != yaml_NO_EVENT { + return p.event.typ + } + if !yaml_parser_parse(&p.parser, &p.event) { + p.fail() + } + return p.event.typ +} + +func (p *parser) fail() { + var where string + var line int + if p.parser.problem_mark.line != 0 { + line = p.parser.problem_mark.line + // Scanner errors don't iterate line before returning error + if p.parser.error == yaml_SCANNER_ERROR { + line++ + } + } else if p.parser.context_mark.line != 0 { + line = p.parser.context_mark.line + } + if line != 0 { + where = "line " + strconv.Itoa(line) + ": " + } + var msg string + if len(p.parser.problem) > 0 { + msg = p.parser.problem + } else { + msg = "unknown problem parsing YAML content" + } + failf("%s%s", where, msg) +} + +func (p *parser) anchor(n *node, anchor []byte) { + if anchor != nil { + p.doc.anchors[string(anchor)] = n + } +} + +func (p *parser) parse() *node { + p.init() + switch p.peek() { + case yaml_SCALAR_EVENT: + return p.scalar() + case yaml_ALIAS_EVENT: + return p.alias() + case yaml_MAPPING_START_EVENT: + return p.mapping() + case yaml_SEQUENCE_START_EVENT: + return p.sequence() + case yaml_DOCUMENT_START_EVENT: + return p.document() + case yaml_STREAM_END_EVENT: + // Happens when attempting to decode an empty buffer. + return nil + default: + panic("attempted to parse unknown event: " + p.event.typ.String()) + } +} + +func (p *parser) node(kind int) *node { + return &node{ + kind: kind, + line: p.event.start_mark.line, + column: p.event.start_mark.column, + } +} + +func (p *parser) document() *node { + n := p.node(documentNode) + n.anchors = make(map[string]*node) + p.doc = n + p.expect(yaml_DOCUMENT_START_EVENT) + n.children = append(n.children, p.parse()) + p.expect(yaml_DOCUMENT_END_EVENT) + return n +} + +func (p *parser) alias() *node { + n := p.node(aliasNode) + n.value = string(p.event.anchor) + n.alias = p.doc.anchors[n.value] + if n.alias == nil { + failf("unknown anchor '%s' referenced", n.value) + } + p.expect(yaml_ALIAS_EVENT) + return n +} + +func (p *parser) scalar() *node { + n := p.node(scalarNode) + n.value = string(p.event.value) + n.tag = string(p.event.tag) + n.implicit = p.event.implicit + p.anchor(n, p.event.anchor) + p.expect(yaml_SCALAR_EVENT) + return n +} + +func (p *parser) sequence() *node { + n := p.node(sequenceNode) + p.anchor(n, p.event.anchor) + p.expect(yaml_SEQUENCE_START_EVENT) + for p.peek() != yaml_SEQUENCE_END_EVENT { + n.children = append(n.children, p.parse()) + } + p.expect(yaml_SEQUENCE_END_EVENT) + return n +} + +func (p *parser) mapping() *node { + n := p.node(mappingNode) + p.anchor(n, p.event.anchor) + p.expect(yaml_MAPPING_START_EVENT) + for p.peek() != yaml_MAPPING_END_EVENT { + n.children = append(n.children, p.parse(), p.parse()) + } + p.expect(yaml_MAPPING_END_EVENT) + return n +} + +// ---------------------------------------------------------------------------- +// Decoder, unmarshals a node into a provided value. + +type decoder struct { + doc *node + aliases map[*node]bool + mapType reflect.Type + terrors []string + strict bool + + decodeCount int + aliasCount int + aliasDepth int +} + +var ( + mapItemType = reflect.TypeOf(MapItem{}) + durationType = reflect.TypeOf(time.Duration(0)) + defaultMapType = reflect.TypeOf(map[interface{}]interface{}{}) + ifaceType = defaultMapType.Elem() + timeType = reflect.TypeOf(time.Time{}) + ptrTimeType = reflect.TypeOf(&time.Time{}) +) + +func newDecoder(strict bool) *decoder { + d := &decoder{mapType: defaultMapType, strict: strict} + d.aliases = make(map[*node]bool) + return d +} + +func (d *decoder) terror(n *node, tag string, out reflect.Value) { + if n.tag != "" { + tag = n.tag + } + value := n.value + if tag != yaml_SEQ_TAG && tag != yaml_MAP_TAG { + if len(value) > 10 { + value = " `" + value[:7] + "...`" + } else { + value = " `" + value + "`" + } + } + d.terrors = append(d.terrors, fmt.Sprintf("line %d: cannot unmarshal %s%s into %s", n.line+1, shortTag(tag), value, out.Type())) +} + +func (d *decoder) callUnmarshaler(n *node, u Unmarshaler) (good bool) { + terrlen := len(d.terrors) + err := u.UnmarshalYAML(func(v interface{}) (err error) { + defer handleErr(&err) + d.unmarshal(n, reflect.ValueOf(v)) + if len(d.terrors) > terrlen { + issues := d.terrors[terrlen:] + d.terrors = d.terrors[:terrlen] + return &TypeError{issues} + } + return nil + }) + if e, ok := err.(*TypeError); ok { + d.terrors = append(d.terrors, e.Errors...) + return false + } + if err != nil { + fail(err) + } + return true +} + +// d.prepare initializes and dereferences pointers and calls UnmarshalYAML +// if a value is found to implement it. +// It returns the initialized and dereferenced out value, whether +// unmarshalling was already done by UnmarshalYAML, and if so whether +// its types unmarshalled appropriately. +// +// If n holds a null value, prepare returns before doing anything. +func (d *decoder) prepare(n *node, out reflect.Value) (newout reflect.Value, unmarshaled, good bool) { + if n.tag == yaml_NULL_TAG || n.kind == scalarNode && n.tag == "" && (n.value == "null" || n.value == "~" || n.value == "" && n.implicit) { + return out, false, false + } + again := true + for again { + again = false + if out.Kind() == reflect.Ptr { + if out.IsNil() { + out.Set(reflect.New(out.Type().Elem())) + } + out = out.Elem() + again = true + } + if out.CanAddr() { + if u, ok := out.Addr().Interface().(Unmarshaler); ok { + good = d.callUnmarshaler(n, u) + return out, true, good + } + } + } + return out, false, false +} + +const ( + // 400,000 decode operations is ~500kb of dense object declarations, or + // ~5kb of dense object declarations with 10000% alias expansion + alias_ratio_range_low = 400000 + + // 4,000,000 decode operations is ~5MB of dense object declarations, or + // ~4.5MB of dense object declarations with 10% alias expansion + alias_ratio_range_high = 4000000 + + // alias_ratio_range is the range over which we scale allowed alias ratios + alias_ratio_range = float64(alias_ratio_range_high - alias_ratio_range_low) +) + +func allowedAliasRatio(decodeCount int) float64 { + switch { + case decodeCount <= alias_ratio_range_low: + // allow 99% to come from alias expansion for small-to-medium documents + return 0.99 + case decodeCount >= alias_ratio_range_high: + // allow 10% to come from alias expansion for very large documents + return 0.10 + default: + // scale smoothly from 99% down to 10% over the range. + // this maps to 396,000 - 400,000 allowed alias-driven decodes over the range. + // 400,000 decode operations is ~100MB of allocations in worst-case scenarios (single-item maps). + return 0.99 - 0.89*(float64(decodeCount-alias_ratio_range_low)/alias_ratio_range) + } +} + +func (d *decoder) unmarshal(n *node, out reflect.Value) (good bool) { + d.decodeCount++ + if d.aliasDepth > 0 { + d.aliasCount++ + } + if d.aliasCount > 100 && d.decodeCount > 1000 && float64(d.aliasCount)/float64(d.decodeCount) > allowedAliasRatio(d.decodeCount) { + failf("document contains excessive aliasing") + } + switch n.kind { + case documentNode: + return d.document(n, out) + case aliasNode: + return d.alias(n, out) + } + out, unmarshaled, good := d.prepare(n, out) + if unmarshaled { + return good + } + switch n.kind { + case scalarNode: + good = d.scalar(n, out) + case mappingNode: + good = d.mapping(n, out) + case sequenceNode: + good = d.sequence(n, out) + default: + panic("internal error: unknown node kind: " + strconv.Itoa(n.kind)) + } + return good +} + +func (d *decoder) document(n *node, out reflect.Value) (good bool) { + if len(n.children) == 1 { + d.doc = n + d.unmarshal(n.children[0], out) + return true + } + return false +} + +func (d *decoder) alias(n *node, out reflect.Value) (good bool) { + if d.aliases[n] { + // TODO this could actually be allowed in some circumstances. + failf("anchor '%s' value contains itself", n.value) + } + d.aliases[n] = true + d.aliasDepth++ + good = d.unmarshal(n.alias, out) + d.aliasDepth-- + delete(d.aliases, n) + return good +} + +var zeroValue reflect.Value + +func resetMap(out reflect.Value) { + for _, k := range out.MapKeys() { + out.SetMapIndex(k, zeroValue) + } +} + +func (d *decoder) scalar(n *node, out reflect.Value) bool { + var tag string + var resolved interface{} + if n.tag == "" && !n.implicit { + tag = yaml_STR_TAG + resolved = n.value + } else { + tag, resolved = resolve(n.tag, n.value) + if tag == yaml_BINARY_TAG { + data, err := base64.StdEncoding.DecodeString(resolved.(string)) + if err != nil { + failf("!!binary value contains invalid base64 data") + } + resolved = string(data) + } + } + if resolved == nil { + if out.Kind() == reflect.Map && !out.CanAddr() { + resetMap(out) + } else { + out.Set(reflect.Zero(out.Type())) + } + return true + } + if resolvedv := reflect.ValueOf(resolved); out.Type() == resolvedv.Type() { + // We've resolved to exactly the type we want, so use that. + out.Set(resolvedv) + return true + } + // Perhaps we can use the value as a TextUnmarshaler to + // set its value. + if out.CanAddr() { + u, ok := out.Addr().Interface().(encoding.TextUnmarshaler) + if ok { + var text []byte + if tag == yaml_BINARY_TAG { + text = []byte(resolved.(string)) + } else { + // We let any value be unmarshaled into TextUnmarshaler. + // That might be more lax than we'd like, but the + // TextUnmarshaler itself should bowl out any dubious values. + text = []byte(n.value) + } + err := u.UnmarshalText(text) + if err != nil { + fail(err) + } + return true + } + } + switch out.Kind() { + case reflect.String: + if tag == yaml_BINARY_TAG { + out.SetString(resolved.(string)) + return true + } + if resolved != nil { + out.SetString(n.value) + return true + } + case reflect.Interface: + if resolved == nil { + out.Set(reflect.Zero(out.Type())) + } else if tag == yaml_TIMESTAMP_TAG { + // It looks like a timestamp but for backward compatibility + // reasons we set it as a string, so that code that unmarshals + // timestamp-like values into interface{} will continue to + // see a string and not a time.Time. + // TODO(v3) Drop this. + out.Set(reflect.ValueOf(n.value)) + } else { + out.Set(reflect.ValueOf(resolved)) + } + return true + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + switch resolved := resolved.(type) { + case int: + if !out.OverflowInt(int64(resolved)) { + out.SetInt(int64(resolved)) + return true + } + case int64: + if !out.OverflowInt(resolved) { + out.SetInt(resolved) + return true + } + case uint64: + if resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) { + out.SetInt(int64(resolved)) + return true + } + case float64: + if resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) { + out.SetInt(int64(resolved)) + return true + } + case string: + if out.Type() == durationType { + d, err := time.ParseDuration(resolved) + if err == nil { + out.SetInt(int64(d)) + return true + } + } + } + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + switch resolved := resolved.(type) { + case int: + if resolved >= 0 && !out.OverflowUint(uint64(resolved)) { + out.SetUint(uint64(resolved)) + return true + } + case int64: + if resolved >= 0 && !out.OverflowUint(uint64(resolved)) { + out.SetUint(uint64(resolved)) + return true + } + case uint64: + if !out.OverflowUint(uint64(resolved)) { + out.SetUint(uint64(resolved)) + return true + } + case float64: + if resolved <= math.MaxUint64 && !out.OverflowUint(uint64(resolved)) { + out.SetUint(uint64(resolved)) + return true + } + } + case reflect.Bool: + switch resolved := resolved.(type) { + case bool: + out.SetBool(resolved) + return true + } + case reflect.Float32, reflect.Float64: + switch resolved := resolved.(type) { + case int: + out.SetFloat(float64(resolved)) + return true + case int64: + out.SetFloat(float64(resolved)) + return true + case uint64: + out.SetFloat(float64(resolved)) + return true + case float64: + out.SetFloat(resolved) + return true + } + case reflect.Struct: + if resolvedv := reflect.ValueOf(resolved); out.Type() == resolvedv.Type() { + out.Set(resolvedv) + return true + } + case reflect.Ptr: + if out.Type().Elem() == reflect.TypeOf(resolved) { + // TODO DOes this make sense? When is out a Ptr except when decoding a nil value? + elem := reflect.New(out.Type().Elem()) + elem.Elem().Set(reflect.ValueOf(resolved)) + out.Set(elem) + return true + } + } + d.terror(n, tag, out) + return false +} + +func settableValueOf(i interface{}) reflect.Value { + v := reflect.ValueOf(i) + sv := reflect.New(v.Type()).Elem() + sv.Set(v) + return sv +} + +func (d *decoder) sequence(n *node, out reflect.Value) (good bool) { + l := len(n.children) + + var iface reflect.Value + switch out.Kind() { + case reflect.Slice: + out.Set(reflect.MakeSlice(out.Type(), l, l)) + case reflect.Array: + if l != out.Len() { + failf("invalid array: want %d elements but got %d", out.Len(), l) + } + case reflect.Interface: + // No type hints. Will have to use a generic sequence. + iface = out + out = settableValueOf(make([]interface{}, l)) + default: + d.terror(n, yaml_SEQ_TAG, out) + return false + } + et := out.Type().Elem() + + j := 0 + for i := 0; i < l; i++ { + e := reflect.New(et).Elem() + if ok := d.unmarshal(n.children[i], e); ok { + out.Index(j).Set(e) + j++ + } + } + if out.Kind() != reflect.Array { + out.Set(out.Slice(0, j)) + } + if iface.IsValid() { + iface.Set(out) + } + return true +} + +func (d *decoder) mapping(n *node, out reflect.Value) (good bool) { + switch out.Kind() { + case reflect.Struct: + return d.mappingStruct(n, out) + case reflect.Slice: + return d.mappingSlice(n, out) + case reflect.Map: + // okay + case reflect.Interface: + if d.mapType.Kind() == reflect.Map { + iface := out + out = reflect.MakeMap(d.mapType) + iface.Set(out) + } else { + slicev := reflect.New(d.mapType).Elem() + if !d.mappingSlice(n, slicev) { + return false + } + out.Set(slicev) + return true + } + default: + d.terror(n, yaml_MAP_TAG, out) + return false + } + outt := out.Type() + kt := outt.Key() + et := outt.Elem() + + mapType := d.mapType + if outt.Key() == ifaceType && outt.Elem() == ifaceType { + d.mapType = outt + } + + if out.IsNil() { + out.Set(reflect.MakeMap(outt)) + } + l := len(n.children) + for i := 0; i < l; i += 2 { + if isMerge(n.children[i]) { + d.merge(n.children[i+1], out) + continue + } + k := reflect.New(kt).Elem() + if d.unmarshal(n.children[i], k) { + kkind := k.Kind() + if kkind == reflect.Interface { + kkind = k.Elem().Kind() + } + if kkind == reflect.Map || kkind == reflect.Slice { + failf("invalid map key: %#v", k.Interface()) + } + e := reflect.New(et).Elem() + if d.unmarshal(n.children[i+1], e) { + d.setMapIndex(n.children[i+1], out, k, e) + } + } + } + d.mapType = mapType + return true +} + +func (d *decoder) setMapIndex(n *node, out, k, v reflect.Value) { + if d.strict && out.MapIndex(k) != zeroValue { + d.terrors = append(d.terrors, fmt.Sprintf("line %d: key %#v already set in map", n.line+1, k.Interface())) + return + } + out.SetMapIndex(k, v) +} + +func (d *decoder) mappingSlice(n *node, out reflect.Value) (good bool) { + outt := out.Type() + if outt.Elem() != mapItemType { + d.terror(n, yaml_MAP_TAG, out) + return false + } + + mapType := d.mapType + d.mapType = outt + + var slice []MapItem + var l = len(n.children) + for i := 0; i < l; i += 2 { + if isMerge(n.children[i]) { + d.merge(n.children[i+1], out) + continue + } + item := MapItem{} + k := reflect.ValueOf(&item.Key).Elem() + if d.unmarshal(n.children[i], k) { + v := reflect.ValueOf(&item.Value).Elem() + if d.unmarshal(n.children[i+1], v) { + slice = append(slice, item) + } + } + } + out.Set(reflect.ValueOf(slice)) + d.mapType = mapType + return true +} + +func (d *decoder) mappingStruct(n *node, out reflect.Value) (good bool) { + sinfo, err := getStructInfo(out.Type()) + if err != nil { + panic(err) + } + name := settableValueOf("") + l := len(n.children) + + var inlineMap reflect.Value + var elemType reflect.Type + if sinfo.InlineMap != -1 { + inlineMap = out.Field(sinfo.InlineMap) + inlineMap.Set(reflect.New(inlineMap.Type()).Elem()) + elemType = inlineMap.Type().Elem() + } + + var doneFields []bool + if d.strict { + doneFields = make([]bool, len(sinfo.FieldsList)) + } + for i := 0; i < l; i += 2 { + ni := n.children[i] + if isMerge(ni) { + d.merge(n.children[i+1], out) + continue + } + if !d.unmarshal(ni, name) { + continue + } + if info, ok := sinfo.FieldsMap[name.String()]; ok { + if d.strict { + if doneFields[info.Id] { + d.terrors = append(d.terrors, fmt.Sprintf("line %d: field %s already set in type %s", ni.line+1, name.String(), out.Type())) + continue + } + doneFields[info.Id] = true + } + var field reflect.Value + if info.Inline == nil { + field = out.Field(info.Num) + } else { + field = out.FieldByIndex(info.Inline) + } + d.unmarshal(n.children[i+1], field) + } else if sinfo.InlineMap != -1 { + if inlineMap.IsNil() { + inlineMap.Set(reflect.MakeMap(inlineMap.Type())) + } + value := reflect.New(elemType).Elem() + d.unmarshal(n.children[i+1], value) + d.setMapIndex(n.children[i+1], inlineMap, name, value) + } else if d.strict { + d.terrors = append(d.terrors, fmt.Sprintf("line %d: field %s not found in type %s", ni.line+1, name.String(), out.Type())) + } + } + return true +} + +func failWantMap() { + failf("map merge requires map or sequence of maps as the value") +} + +func (d *decoder) merge(n *node, out reflect.Value) { + switch n.kind { + case mappingNode: + d.unmarshal(n, out) + case aliasNode: + if n.alias != nil && n.alias.kind != mappingNode { + failWantMap() + } + d.unmarshal(n, out) + case sequenceNode: + // Step backwards as earlier nodes take precedence. + for i := len(n.children) - 1; i >= 0; i-- { + ni := n.children[i] + if ni.kind == aliasNode { + if ni.alias != nil && ni.alias.kind != mappingNode { + failWantMap() + } + } else if ni.kind != mappingNode { + failWantMap() + } + d.unmarshal(ni, out) + } + default: + failWantMap() + } +} + +func isMerge(n *node) bool { + return n.kind == scalarNode && n.value == "<<" && (n.implicit == true || n.tag == yaml_MERGE_TAG) +} diff --git a/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/emitterc.go b/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/emitterc.go new file mode 100644 index 000000000..a1c2cc526 --- /dev/null +++ b/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/emitterc.go @@ -0,0 +1,1685 @@ +package yaml + +import ( + "bytes" + "fmt" +) + +// Flush the buffer if needed. +func flush(emitter *yaml_emitter_t) bool { + if emitter.buffer_pos+5 >= len(emitter.buffer) { + return yaml_emitter_flush(emitter) + } + return true +} + +// Put a character to the output buffer. +func put(emitter *yaml_emitter_t, value byte) bool { + if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) { + return false + } + emitter.buffer[emitter.buffer_pos] = value + emitter.buffer_pos++ + emitter.column++ + return true +} + +// Put a line break to the output buffer. +func put_break(emitter *yaml_emitter_t) bool { + if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) { + return false + } + switch emitter.line_break { + case yaml_CR_BREAK: + emitter.buffer[emitter.buffer_pos] = '\r' + emitter.buffer_pos += 1 + case yaml_LN_BREAK: + emitter.buffer[emitter.buffer_pos] = '\n' + emitter.buffer_pos += 1 + case yaml_CRLN_BREAK: + emitter.buffer[emitter.buffer_pos+0] = '\r' + emitter.buffer[emitter.buffer_pos+1] = '\n' + emitter.buffer_pos += 2 + default: + panic("unknown line break setting") + } + emitter.column = 0 + emitter.line++ + return true +} + +// Copy a character from a string into buffer. +func write(emitter *yaml_emitter_t, s []byte, i *int) bool { + if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) { + return false + } + p := emitter.buffer_pos + w := width(s[*i]) + switch w { + case 4: + emitter.buffer[p+3] = s[*i+3] + fallthrough + case 3: + emitter.buffer[p+2] = s[*i+2] + fallthrough + case 2: + emitter.buffer[p+1] = s[*i+1] + fallthrough + case 1: + emitter.buffer[p+0] = s[*i+0] + default: + panic("unknown character width") + } + emitter.column++ + emitter.buffer_pos += w + *i += w + return true +} + +// Write a whole string into buffer. +func write_all(emitter *yaml_emitter_t, s []byte) bool { + for i := 0; i < len(s); { + if !write(emitter, s, &i) { + return false + } + } + return true +} + +// Copy a line break character from a string into buffer. +func write_break(emitter *yaml_emitter_t, s []byte, i *int) bool { + if s[*i] == '\n' { + if !put_break(emitter) { + return false + } + *i++ + } else { + if !write(emitter, s, i) { + return false + } + emitter.column = 0 + emitter.line++ + } + return true +} + +// Set an emitter error and return false. +func yaml_emitter_set_emitter_error(emitter *yaml_emitter_t, problem string) bool { + emitter.error = yaml_EMITTER_ERROR + emitter.problem = problem + return false +} + +// Emit an event. +func yaml_emitter_emit(emitter *yaml_emitter_t, event *yaml_event_t) bool { + emitter.events = append(emitter.events, *event) + for !yaml_emitter_need_more_events(emitter) { + event := &emitter.events[emitter.events_head] + if !yaml_emitter_analyze_event(emitter, event) { + return false + } + if !yaml_emitter_state_machine(emitter, event) { + return false + } + yaml_event_delete(event) + emitter.events_head++ + } + return true +} + +// Check if we need to accumulate more events before emitting. +// +// We accumulate extra +// - 1 event for DOCUMENT-START +// - 2 events for SEQUENCE-START +// - 3 events for MAPPING-START +// +func yaml_emitter_need_more_events(emitter *yaml_emitter_t) bool { + if emitter.events_head == len(emitter.events) { + return true + } + var accumulate int + switch emitter.events[emitter.events_head].typ { + case yaml_DOCUMENT_START_EVENT: + accumulate = 1 + break + case yaml_SEQUENCE_START_EVENT: + accumulate = 2 + break + case yaml_MAPPING_START_EVENT: + accumulate = 3 + break + default: + return false + } + if len(emitter.events)-emitter.events_head > accumulate { + return false + } + var level int + for i := emitter.events_head; i < len(emitter.events); i++ { + switch emitter.events[i].typ { + case yaml_STREAM_START_EVENT, yaml_DOCUMENT_START_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT: + level++ + case yaml_STREAM_END_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_END_EVENT, yaml_MAPPING_END_EVENT: + level-- + } + if level == 0 { + return false + } + } + return true +} + +// Append a directive to the directives stack. +func yaml_emitter_append_tag_directive(emitter *yaml_emitter_t, value *yaml_tag_directive_t, allow_duplicates bool) bool { + for i := 0; i < len(emitter.tag_directives); i++ { + if bytes.Equal(value.handle, emitter.tag_directives[i].handle) { + if allow_duplicates { + return true + } + return yaml_emitter_set_emitter_error(emitter, "duplicate %TAG directive") + } + } + + // [Go] Do we actually need to copy this given garbage collection + // and the lack of deallocating destructors? + tag_copy := yaml_tag_directive_t{ + handle: make([]byte, len(value.handle)), + prefix: make([]byte, len(value.prefix)), + } + copy(tag_copy.handle, value.handle) + copy(tag_copy.prefix, value.prefix) + emitter.tag_directives = append(emitter.tag_directives, tag_copy) + return true +} + +// Increase the indentation level. +func yaml_emitter_increase_indent(emitter *yaml_emitter_t, flow, indentless bool) bool { + emitter.indents = append(emitter.indents, emitter.indent) + if emitter.indent < 0 { + if flow { + emitter.indent = emitter.best_indent + } else { + emitter.indent = 0 + } + } else if !indentless { + emitter.indent += emitter.best_indent + } + return true +} + +// State dispatcher. +func yaml_emitter_state_machine(emitter *yaml_emitter_t, event *yaml_event_t) bool { + switch emitter.state { + default: + case yaml_EMIT_STREAM_START_STATE: + return yaml_emitter_emit_stream_start(emitter, event) + + case yaml_EMIT_FIRST_DOCUMENT_START_STATE: + return yaml_emitter_emit_document_start(emitter, event, true) + + case yaml_EMIT_DOCUMENT_START_STATE: + return yaml_emitter_emit_document_start(emitter, event, false) + + case yaml_EMIT_DOCUMENT_CONTENT_STATE: + return yaml_emitter_emit_document_content(emitter, event) + + case yaml_EMIT_DOCUMENT_END_STATE: + return yaml_emitter_emit_document_end(emitter, event) + + case yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE: + return yaml_emitter_emit_flow_sequence_item(emitter, event, true) + + case yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE: + return yaml_emitter_emit_flow_sequence_item(emitter, event, false) + + case yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE: + return yaml_emitter_emit_flow_mapping_key(emitter, event, true) + + case yaml_EMIT_FLOW_MAPPING_KEY_STATE: + return yaml_emitter_emit_flow_mapping_key(emitter, event, false) + + case yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE: + return yaml_emitter_emit_flow_mapping_value(emitter, event, true) + + case yaml_EMIT_FLOW_MAPPING_VALUE_STATE: + return yaml_emitter_emit_flow_mapping_value(emitter, event, false) + + case yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE: + return yaml_emitter_emit_block_sequence_item(emitter, event, true) + + case yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE: + return yaml_emitter_emit_block_sequence_item(emitter, event, false) + + case yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE: + return yaml_emitter_emit_block_mapping_key(emitter, event, true) + + case yaml_EMIT_BLOCK_MAPPING_KEY_STATE: + return yaml_emitter_emit_block_mapping_key(emitter, event, false) + + case yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE: + return yaml_emitter_emit_block_mapping_value(emitter, event, true) + + case yaml_EMIT_BLOCK_MAPPING_VALUE_STATE: + return yaml_emitter_emit_block_mapping_value(emitter, event, false) + + case yaml_EMIT_END_STATE: + return yaml_emitter_set_emitter_error(emitter, "expected nothing after STREAM-END") + } + panic("invalid emitter state") +} + +// Expect STREAM-START. +func yaml_emitter_emit_stream_start(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if event.typ != yaml_STREAM_START_EVENT { + return yaml_emitter_set_emitter_error(emitter, "expected STREAM-START") + } + if emitter.encoding == yaml_ANY_ENCODING { + emitter.encoding = event.encoding + if emitter.encoding == yaml_ANY_ENCODING { + emitter.encoding = yaml_UTF8_ENCODING + } + } + if emitter.best_indent < 2 || emitter.best_indent > 9 { + emitter.best_indent = 2 + } + if emitter.best_width >= 0 && emitter.best_width <= emitter.best_indent*2 { + emitter.best_width = 80 + } + if emitter.best_width < 0 { + emitter.best_width = 1<<31 - 1 + } + if emitter.line_break == yaml_ANY_BREAK { + emitter.line_break = yaml_LN_BREAK + } + + emitter.indent = -1 + emitter.line = 0 + emitter.column = 0 + emitter.whitespace = true + emitter.indention = true + + if emitter.encoding != yaml_UTF8_ENCODING { + if !yaml_emitter_write_bom(emitter) { + return false + } + } + emitter.state = yaml_EMIT_FIRST_DOCUMENT_START_STATE + return true +} + +// Expect DOCUMENT-START or STREAM-END. +func yaml_emitter_emit_document_start(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { + + if event.typ == yaml_DOCUMENT_START_EVENT { + + if event.version_directive != nil { + if !yaml_emitter_analyze_version_directive(emitter, event.version_directive) { + return false + } + } + + for i := 0; i < len(event.tag_directives); i++ { + tag_directive := &event.tag_directives[i] + if !yaml_emitter_analyze_tag_directive(emitter, tag_directive) { + return false + } + if !yaml_emitter_append_tag_directive(emitter, tag_directive, false) { + return false + } + } + + for i := 0; i < len(default_tag_directives); i++ { + tag_directive := &default_tag_directives[i] + if !yaml_emitter_append_tag_directive(emitter, tag_directive, true) { + return false + } + } + + implicit := event.implicit + if !first || emitter.canonical { + implicit = false + } + + if emitter.open_ended && (event.version_directive != nil || len(event.tag_directives) > 0) { + if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + + if event.version_directive != nil { + implicit = false + if !yaml_emitter_write_indicator(emitter, []byte("%YAML"), true, false, false) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte("1.1"), true, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + + if len(event.tag_directives) > 0 { + implicit = false + for i := 0; i < len(event.tag_directives); i++ { + tag_directive := &event.tag_directives[i] + if !yaml_emitter_write_indicator(emitter, []byte("%TAG"), true, false, false) { + return false + } + if !yaml_emitter_write_tag_handle(emitter, tag_directive.handle) { + return false + } + if !yaml_emitter_write_tag_content(emitter, tag_directive.prefix, true) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + } + + if yaml_emitter_check_empty_document(emitter) { + implicit = false + } + if !implicit { + if !yaml_emitter_write_indent(emitter) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte("---"), true, false, false) { + return false + } + if emitter.canonical { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + } + + emitter.state = yaml_EMIT_DOCUMENT_CONTENT_STATE + return true + } + + if event.typ == yaml_STREAM_END_EVENT { + if emitter.open_ended { + if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_flush(emitter) { + return false + } + emitter.state = yaml_EMIT_END_STATE + return true + } + + return yaml_emitter_set_emitter_error(emitter, "expected DOCUMENT-START or STREAM-END") +} + +// Expect the root node. +func yaml_emitter_emit_document_content(emitter *yaml_emitter_t, event *yaml_event_t) bool { + emitter.states = append(emitter.states, yaml_EMIT_DOCUMENT_END_STATE) + return yaml_emitter_emit_node(emitter, event, true, false, false, false) +} + +// Expect DOCUMENT-END. +func yaml_emitter_emit_document_end(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if event.typ != yaml_DOCUMENT_END_EVENT { + return yaml_emitter_set_emitter_error(emitter, "expected DOCUMENT-END") + } + if !yaml_emitter_write_indent(emitter) { + return false + } + if !event.implicit { + // [Go] Allocate the slice elsewhere. + if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_flush(emitter) { + return false + } + emitter.state = yaml_EMIT_DOCUMENT_START_STATE + emitter.tag_directives = emitter.tag_directives[:0] + return true +} + +// Expect a flow item node. +func yaml_emitter_emit_flow_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { + if first { + if !yaml_emitter_write_indicator(emitter, []byte{'['}, true, true, false) { + return false + } + if !yaml_emitter_increase_indent(emitter, true, false) { + return false + } + emitter.flow_level++ + } + + if event.typ == yaml_SEQUENCE_END_EVENT { + emitter.flow_level-- + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + if emitter.canonical && !first { + if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{']'}, false, false, false) { + return false + } + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + + return true + } + + if !first { + if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { + return false + } + } + + if emitter.canonical || emitter.column > emitter.best_width { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + emitter.states = append(emitter.states, yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE) + return yaml_emitter_emit_node(emitter, event, false, true, false, false) +} + +// Expect a flow key node. +func yaml_emitter_emit_flow_mapping_key(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { + if first { + if !yaml_emitter_write_indicator(emitter, []byte{'{'}, true, true, false) { + return false + } + if !yaml_emitter_increase_indent(emitter, true, false) { + return false + } + emitter.flow_level++ + } + + if event.typ == yaml_MAPPING_END_EVENT { + emitter.flow_level-- + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + if emitter.canonical && !first { + if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{'}'}, false, false, false) { + return false + } + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true + } + + if !first { + if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { + return false + } + } + if emitter.canonical || emitter.column > emitter.best_width { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + + if !emitter.canonical && yaml_emitter_check_simple_key(emitter) { + emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, true) + } + if !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, false) { + return false + } + emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_VALUE_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, false) +} + +// Expect a flow value node. +func yaml_emitter_emit_flow_mapping_value(emitter *yaml_emitter_t, event *yaml_event_t, simple bool) bool { + if simple { + if !yaml_emitter_write_indicator(emitter, []byte{':'}, false, false, false) { + return false + } + } else { + if emitter.canonical || emitter.column > emitter.best_width { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{':'}, true, false, false) { + return false + } + } + emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_KEY_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, false) +} + +// Expect a block item node. +func yaml_emitter_emit_block_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { + if first { + if !yaml_emitter_increase_indent(emitter, false, emitter.mapping_context && !emitter.indention) { + return false + } + } + if event.typ == yaml_SEQUENCE_END_EVENT { + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true + } + if !yaml_emitter_write_indent(emitter) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte{'-'}, true, false, true) { + return false + } + emitter.states = append(emitter.states, yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE) + return yaml_emitter_emit_node(emitter, event, false, true, false, false) +} + +// Expect a block key node. +func yaml_emitter_emit_block_mapping_key(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { + if first { + if !yaml_emitter_increase_indent(emitter, false, false) { + return false + } + } + if event.typ == yaml_MAPPING_END_EVENT { + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true + } + if !yaml_emitter_write_indent(emitter) { + return false + } + if yaml_emitter_check_simple_key(emitter) { + emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, true) + } + if !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, true) { + return false + } + emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_VALUE_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, false) +} + +// Expect a block value node. +func yaml_emitter_emit_block_mapping_value(emitter *yaml_emitter_t, event *yaml_event_t, simple bool) bool { + if simple { + if !yaml_emitter_write_indicator(emitter, []byte{':'}, false, false, false) { + return false + } + } else { + if !yaml_emitter_write_indent(emitter) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte{':'}, true, false, true) { + return false + } + } + emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_KEY_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, false) +} + +// Expect a node. +func yaml_emitter_emit_node(emitter *yaml_emitter_t, event *yaml_event_t, + root bool, sequence bool, mapping bool, simple_key bool) bool { + + emitter.root_context = root + emitter.sequence_context = sequence + emitter.mapping_context = mapping + emitter.simple_key_context = simple_key + + switch event.typ { + case yaml_ALIAS_EVENT: + return yaml_emitter_emit_alias(emitter, event) + case yaml_SCALAR_EVENT: + return yaml_emitter_emit_scalar(emitter, event) + case yaml_SEQUENCE_START_EVENT: + return yaml_emitter_emit_sequence_start(emitter, event) + case yaml_MAPPING_START_EVENT: + return yaml_emitter_emit_mapping_start(emitter, event) + default: + return yaml_emitter_set_emitter_error(emitter, + fmt.Sprintf("expected SCALAR, SEQUENCE-START, MAPPING-START, or ALIAS, but got %v", event.typ)) + } +} + +// Expect ALIAS. +func yaml_emitter_emit_alias(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if !yaml_emitter_process_anchor(emitter) { + return false + } + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true +} + +// Expect SCALAR. +func yaml_emitter_emit_scalar(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if !yaml_emitter_select_scalar_style(emitter, event) { + return false + } + if !yaml_emitter_process_anchor(emitter) { + return false + } + if !yaml_emitter_process_tag(emitter) { + return false + } + if !yaml_emitter_increase_indent(emitter, true, false) { + return false + } + if !yaml_emitter_process_scalar(emitter) { + return false + } + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true +} + +// Expect SEQUENCE-START. +func yaml_emitter_emit_sequence_start(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if !yaml_emitter_process_anchor(emitter) { + return false + } + if !yaml_emitter_process_tag(emitter) { + return false + } + if emitter.flow_level > 0 || emitter.canonical || event.sequence_style() == yaml_FLOW_SEQUENCE_STYLE || + yaml_emitter_check_empty_sequence(emitter) { + emitter.state = yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE + } else { + emitter.state = yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE + } + return true +} + +// Expect MAPPING-START. +func yaml_emitter_emit_mapping_start(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if !yaml_emitter_process_anchor(emitter) { + return false + } + if !yaml_emitter_process_tag(emitter) { + return false + } + if emitter.flow_level > 0 || emitter.canonical || event.mapping_style() == yaml_FLOW_MAPPING_STYLE || + yaml_emitter_check_empty_mapping(emitter) { + emitter.state = yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE + } else { + emitter.state = yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE + } + return true +} + +// Check if the document content is an empty scalar. +func yaml_emitter_check_empty_document(emitter *yaml_emitter_t) bool { + return false // [Go] Huh? +} + +// Check if the next events represent an empty sequence. +func yaml_emitter_check_empty_sequence(emitter *yaml_emitter_t) bool { + if len(emitter.events)-emitter.events_head < 2 { + return false + } + return emitter.events[emitter.events_head].typ == yaml_SEQUENCE_START_EVENT && + emitter.events[emitter.events_head+1].typ == yaml_SEQUENCE_END_EVENT +} + +// Check if the next events represent an empty mapping. +func yaml_emitter_check_empty_mapping(emitter *yaml_emitter_t) bool { + if len(emitter.events)-emitter.events_head < 2 { + return false + } + return emitter.events[emitter.events_head].typ == yaml_MAPPING_START_EVENT && + emitter.events[emitter.events_head+1].typ == yaml_MAPPING_END_EVENT +} + +// Check if the next node can be expressed as a simple key. +func yaml_emitter_check_simple_key(emitter *yaml_emitter_t) bool { + length := 0 + switch emitter.events[emitter.events_head].typ { + case yaml_ALIAS_EVENT: + length += len(emitter.anchor_data.anchor) + case yaml_SCALAR_EVENT: + if emitter.scalar_data.multiline { + return false + } + length += len(emitter.anchor_data.anchor) + + len(emitter.tag_data.handle) + + len(emitter.tag_data.suffix) + + len(emitter.scalar_data.value) + case yaml_SEQUENCE_START_EVENT: + if !yaml_emitter_check_empty_sequence(emitter) { + return false + } + length += len(emitter.anchor_data.anchor) + + len(emitter.tag_data.handle) + + len(emitter.tag_data.suffix) + case yaml_MAPPING_START_EVENT: + if !yaml_emitter_check_empty_mapping(emitter) { + return false + } + length += len(emitter.anchor_data.anchor) + + len(emitter.tag_data.handle) + + len(emitter.tag_data.suffix) + default: + return false + } + return length <= 128 +} + +// Determine an acceptable scalar style. +func yaml_emitter_select_scalar_style(emitter *yaml_emitter_t, event *yaml_event_t) bool { + + no_tag := len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0 + if no_tag && !event.implicit && !event.quoted_implicit { + return yaml_emitter_set_emitter_error(emitter, "neither tag nor implicit flags are specified") + } + + style := event.scalar_style() + if style == yaml_ANY_SCALAR_STYLE { + style = yaml_PLAIN_SCALAR_STYLE + } + if emitter.canonical { + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + if emitter.simple_key_context && emitter.scalar_data.multiline { + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + + if style == yaml_PLAIN_SCALAR_STYLE { + if emitter.flow_level > 0 && !emitter.scalar_data.flow_plain_allowed || + emitter.flow_level == 0 && !emitter.scalar_data.block_plain_allowed { + style = yaml_SINGLE_QUOTED_SCALAR_STYLE + } + if len(emitter.scalar_data.value) == 0 && (emitter.flow_level > 0 || emitter.simple_key_context) { + style = yaml_SINGLE_QUOTED_SCALAR_STYLE + } + if no_tag && !event.implicit { + style = yaml_SINGLE_QUOTED_SCALAR_STYLE + } + } + if style == yaml_SINGLE_QUOTED_SCALAR_STYLE { + if !emitter.scalar_data.single_quoted_allowed { + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + } + if style == yaml_LITERAL_SCALAR_STYLE || style == yaml_FOLDED_SCALAR_STYLE { + if !emitter.scalar_data.block_allowed || emitter.flow_level > 0 || emitter.simple_key_context { + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + } + + if no_tag && !event.quoted_implicit && style != yaml_PLAIN_SCALAR_STYLE { + emitter.tag_data.handle = []byte{'!'} + } + emitter.scalar_data.style = style + return true +} + +// Write an anchor. +func yaml_emitter_process_anchor(emitter *yaml_emitter_t) bool { + if emitter.anchor_data.anchor == nil { + return true + } + c := []byte{'&'} + if emitter.anchor_data.alias { + c[0] = '*' + } + if !yaml_emitter_write_indicator(emitter, c, true, false, false) { + return false + } + return yaml_emitter_write_anchor(emitter, emitter.anchor_data.anchor) +} + +// Write a tag. +func yaml_emitter_process_tag(emitter *yaml_emitter_t) bool { + if len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0 { + return true + } + if len(emitter.tag_data.handle) > 0 { + if !yaml_emitter_write_tag_handle(emitter, emitter.tag_data.handle) { + return false + } + if len(emitter.tag_data.suffix) > 0 { + if !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) { + return false + } + } + } else { + // [Go] Allocate these slices elsewhere. + if !yaml_emitter_write_indicator(emitter, []byte("!<"), true, false, false) { + return false + } + if !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte{'>'}, false, false, false) { + return false + } + } + return true +} + +// Write a scalar. +func yaml_emitter_process_scalar(emitter *yaml_emitter_t) bool { + switch emitter.scalar_data.style { + case yaml_PLAIN_SCALAR_STYLE: + return yaml_emitter_write_plain_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context) + + case yaml_SINGLE_QUOTED_SCALAR_STYLE: + return yaml_emitter_write_single_quoted_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context) + + case yaml_DOUBLE_QUOTED_SCALAR_STYLE: + return yaml_emitter_write_double_quoted_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context) + + case yaml_LITERAL_SCALAR_STYLE: + return yaml_emitter_write_literal_scalar(emitter, emitter.scalar_data.value) + + case yaml_FOLDED_SCALAR_STYLE: + return yaml_emitter_write_folded_scalar(emitter, emitter.scalar_data.value) + } + panic("unknown scalar style") +} + +// Check if a %YAML directive is valid. +func yaml_emitter_analyze_version_directive(emitter *yaml_emitter_t, version_directive *yaml_version_directive_t) bool { + if version_directive.major != 1 || version_directive.minor != 1 { + return yaml_emitter_set_emitter_error(emitter, "incompatible %YAML directive") + } + return true +} + +// Check if a %TAG directive is valid. +func yaml_emitter_analyze_tag_directive(emitter *yaml_emitter_t, tag_directive *yaml_tag_directive_t) bool { + handle := tag_directive.handle + prefix := tag_directive.prefix + if len(handle) == 0 { + return yaml_emitter_set_emitter_error(emitter, "tag handle must not be empty") + } + if handle[0] != '!' { + return yaml_emitter_set_emitter_error(emitter, "tag handle must start with '!'") + } + if handle[len(handle)-1] != '!' { + return yaml_emitter_set_emitter_error(emitter, "tag handle must end with '!'") + } + for i := 1; i < len(handle)-1; i += width(handle[i]) { + if !is_alpha(handle, i) { + return yaml_emitter_set_emitter_error(emitter, "tag handle must contain alphanumerical characters only") + } + } + if len(prefix) == 0 { + return yaml_emitter_set_emitter_error(emitter, "tag prefix must not be empty") + } + return true +} + +// Check if an anchor is valid. +func yaml_emitter_analyze_anchor(emitter *yaml_emitter_t, anchor []byte, alias bool) bool { + if len(anchor) == 0 { + problem := "anchor value must not be empty" + if alias { + problem = "alias value must not be empty" + } + return yaml_emitter_set_emitter_error(emitter, problem) + } + for i := 0; i < len(anchor); i += width(anchor[i]) { + if !is_alpha(anchor, i) { + problem := "anchor value must contain alphanumerical characters only" + if alias { + problem = "alias value must contain alphanumerical characters only" + } + return yaml_emitter_set_emitter_error(emitter, problem) + } + } + emitter.anchor_data.anchor = anchor + emitter.anchor_data.alias = alias + return true +} + +// Check if a tag is valid. +func yaml_emitter_analyze_tag(emitter *yaml_emitter_t, tag []byte) bool { + if len(tag) == 0 { + return yaml_emitter_set_emitter_error(emitter, "tag value must not be empty") + } + for i := 0; i < len(emitter.tag_directives); i++ { + tag_directive := &emitter.tag_directives[i] + if bytes.HasPrefix(tag, tag_directive.prefix) { + emitter.tag_data.handle = tag_directive.handle + emitter.tag_data.suffix = tag[len(tag_directive.prefix):] + return true + } + } + emitter.tag_data.suffix = tag + return true +} + +// Check if a scalar is valid. +func yaml_emitter_analyze_scalar(emitter *yaml_emitter_t, value []byte) bool { + var ( + block_indicators = false + flow_indicators = false + line_breaks = false + special_characters = false + + leading_space = false + leading_break = false + trailing_space = false + trailing_break = false + break_space = false + space_break = false + + preceded_by_whitespace = false + followed_by_whitespace = false + previous_space = false + previous_break = false + ) + + emitter.scalar_data.value = value + + if len(value) == 0 { + emitter.scalar_data.multiline = false + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = true + emitter.scalar_data.single_quoted_allowed = true + emitter.scalar_data.block_allowed = false + return true + } + + if len(value) >= 3 && ((value[0] == '-' && value[1] == '-' && value[2] == '-') || (value[0] == '.' && value[1] == '.' && value[2] == '.')) { + block_indicators = true + flow_indicators = true + } + + preceded_by_whitespace = true + for i, w := 0, 0; i < len(value); i += w { + w = width(value[i]) + followed_by_whitespace = i+w >= len(value) || is_blank(value, i+w) + + if i == 0 { + switch value[i] { + case '#', ',', '[', ']', '{', '}', '&', '*', '!', '|', '>', '\'', '"', '%', '@', '`': + flow_indicators = true + block_indicators = true + case '?', ':': + flow_indicators = true + if followed_by_whitespace { + block_indicators = true + } + case '-': + if followed_by_whitespace { + flow_indicators = true + block_indicators = true + } + } + } else { + switch value[i] { + case ',', '?', '[', ']', '{', '}': + flow_indicators = true + case ':': + flow_indicators = true + if followed_by_whitespace { + block_indicators = true + } + case '#': + if preceded_by_whitespace { + flow_indicators = true + block_indicators = true + } + } + } + + if !is_printable(value, i) || !is_ascii(value, i) && !emitter.unicode { + special_characters = true + } + if is_space(value, i) { + if i == 0 { + leading_space = true + } + if i+width(value[i]) == len(value) { + trailing_space = true + } + if previous_break { + break_space = true + } + previous_space = true + previous_break = false + } else if is_break(value, i) { + line_breaks = true + if i == 0 { + leading_break = true + } + if i+width(value[i]) == len(value) { + trailing_break = true + } + if previous_space { + space_break = true + } + previous_space = false + previous_break = true + } else { + previous_space = false + previous_break = false + } + + // [Go]: Why 'z'? Couldn't be the end of the string as that's the loop condition. + preceded_by_whitespace = is_blankz(value, i) + } + + emitter.scalar_data.multiline = line_breaks + emitter.scalar_data.flow_plain_allowed = true + emitter.scalar_data.block_plain_allowed = true + emitter.scalar_data.single_quoted_allowed = true + emitter.scalar_data.block_allowed = true + + if leading_space || leading_break || trailing_space || trailing_break { + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = false + } + if trailing_space { + emitter.scalar_data.block_allowed = false + } + if break_space { + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = false + emitter.scalar_data.single_quoted_allowed = false + } + if space_break || special_characters { + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = false + emitter.scalar_data.single_quoted_allowed = false + emitter.scalar_data.block_allowed = false + } + if line_breaks { + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = false + } + if flow_indicators { + emitter.scalar_data.flow_plain_allowed = false + } + if block_indicators { + emitter.scalar_data.block_plain_allowed = false + } + return true +} + +// Check if the event data is valid. +func yaml_emitter_analyze_event(emitter *yaml_emitter_t, event *yaml_event_t) bool { + + emitter.anchor_data.anchor = nil + emitter.tag_data.handle = nil + emitter.tag_data.suffix = nil + emitter.scalar_data.value = nil + + switch event.typ { + case yaml_ALIAS_EVENT: + if !yaml_emitter_analyze_anchor(emitter, event.anchor, true) { + return false + } + + case yaml_SCALAR_EVENT: + if len(event.anchor) > 0 { + if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) { + return false + } + } + if len(event.tag) > 0 && (emitter.canonical || (!event.implicit && !event.quoted_implicit)) { + if !yaml_emitter_analyze_tag(emitter, event.tag) { + return false + } + } + if !yaml_emitter_analyze_scalar(emitter, event.value) { + return false + } + + case yaml_SEQUENCE_START_EVENT: + if len(event.anchor) > 0 { + if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) { + return false + } + } + if len(event.tag) > 0 && (emitter.canonical || !event.implicit) { + if !yaml_emitter_analyze_tag(emitter, event.tag) { + return false + } + } + + case yaml_MAPPING_START_EVENT: + if len(event.anchor) > 0 { + if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) { + return false + } + } + if len(event.tag) > 0 && (emitter.canonical || !event.implicit) { + if !yaml_emitter_analyze_tag(emitter, event.tag) { + return false + } + } + } + return true +} + +// Write the BOM character. +func yaml_emitter_write_bom(emitter *yaml_emitter_t) bool { + if !flush(emitter) { + return false + } + pos := emitter.buffer_pos + emitter.buffer[pos+0] = '\xEF' + emitter.buffer[pos+1] = '\xBB' + emitter.buffer[pos+2] = '\xBF' + emitter.buffer_pos += 3 + return true +} + +func yaml_emitter_write_indent(emitter *yaml_emitter_t) bool { + indent := emitter.indent + if indent < 0 { + indent = 0 + } + if !emitter.indention || emitter.column > indent || (emitter.column == indent && !emitter.whitespace) { + if !put_break(emitter) { + return false + } + } + for emitter.column < indent { + if !put(emitter, ' ') { + return false + } + } + emitter.whitespace = true + emitter.indention = true + return true +} + +func yaml_emitter_write_indicator(emitter *yaml_emitter_t, indicator []byte, need_whitespace, is_whitespace, is_indention bool) bool { + if need_whitespace && !emitter.whitespace { + if !put(emitter, ' ') { + return false + } + } + if !write_all(emitter, indicator) { + return false + } + emitter.whitespace = is_whitespace + emitter.indention = (emitter.indention && is_indention) + emitter.open_ended = false + return true +} + +func yaml_emitter_write_anchor(emitter *yaml_emitter_t, value []byte) bool { + if !write_all(emitter, value) { + return false + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_tag_handle(emitter *yaml_emitter_t, value []byte) bool { + if !emitter.whitespace { + if !put(emitter, ' ') { + return false + } + } + if !write_all(emitter, value) { + return false + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_tag_content(emitter *yaml_emitter_t, value []byte, need_whitespace bool) bool { + if need_whitespace && !emitter.whitespace { + if !put(emitter, ' ') { + return false + } + } + for i := 0; i < len(value); { + var must_write bool + switch value[i] { + case ';', '/', '?', ':', '@', '&', '=', '+', '$', ',', '_', '.', '~', '*', '\'', '(', ')', '[', ']': + must_write = true + default: + must_write = is_alpha(value, i) + } + if must_write { + if !write(emitter, value, &i) { + return false + } + } else { + w := width(value[i]) + for k := 0; k < w; k++ { + octet := value[i] + i++ + if !put(emitter, '%') { + return false + } + + c := octet >> 4 + if c < 10 { + c += '0' + } else { + c += 'A' - 10 + } + if !put(emitter, c) { + return false + } + + c = octet & 0x0f + if c < 10 { + c += '0' + } else { + c += 'A' - 10 + } + if !put(emitter, c) { + return false + } + } + } + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_plain_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool { + if !emitter.whitespace { + if !put(emitter, ' ') { + return false + } + } + + spaces := false + breaks := false + for i := 0; i < len(value); { + if is_space(value, i) { + if allow_breaks && !spaces && emitter.column > emitter.best_width && !is_space(value, i+1) { + if !yaml_emitter_write_indent(emitter) { + return false + } + i += width(value[i]) + } else { + if !write(emitter, value, &i) { + return false + } + } + spaces = true + } else if is_break(value, i) { + if !breaks && value[i] == '\n' { + if !put_break(emitter) { + return false + } + } + if !write_break(emitter, value, &i) { + return false + } + emitter.indention = true + breaks = true + } else { + if breaks { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !write(emitter, value, &i) { + return false + } + emitter.indention = false + spaces = false + breaks = false + } + } + + emitter.whitespace = false + emitter.indention = false + if emitter.root_context { + emitter.open_ended = true + } + + return true +} + +func yaml_emitter_write_single_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool { + + if !yaml_emitter_write_indicator(emitter, []byte{'\''}, true, false, false) { + return false + } + + spaces := false + breaks := false + for i := 0; i < len(value); { + if is_space(value, i) { + if allow_breaks && !spaces && emitter.column > emitter.best_width && i > 0 && i < len(value)-1 && !is_space(value, i+1) { + if !yaml_emitter_write_indent(emitter) { + return false + } + i += width(value[i]) + } else { + if !write(emitter, value, &i) { + return false + } + } + spaces = true + } else if is_break(value, i) { + if !breaks && value[i] == '\n' { + if !put_break(emitter) { + return false + } + } + if !write_break(emitter, value, &i) { + return false + } + emitter.indention = true + breaks = true + } else { + if breaks { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if value[i] == '\'' { + if !put(emitter, '\'') { + return false + } + } + if !write(emitter, value, &i) { + return false + } + emitter.indention = false + spaces = false + breaks = false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{'\''}, false, false, false) { + return false + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_double_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool { + spaces := false + if !yaml_emitter_write_indicator(emitter, []byte{'"'}, true, false, false) { + return false + } + + for i := 0; i < len(value); { + if !is_printable(value, i) || (!emitter.unicode && !is_ascii(value, i)) || + is_bom(value, i) || is_break(value, i) || + value[i] == '"' || value[i] == '\\' { + + octet := value[i] + + var w int + var v rune + switch { + case octet&0x80 == 0x00: + w, v = 1, rune(octet&0x7F) + case octet&0xE0 == 0xC0: + w, v = 2, rune(octet&0x1F) + case octet&0xF0 == 0xE0: + w, v = 3, rune(octet&0x0F) + case octet&0xF8 == 0xF0: + w, v = 4, rune(octet&0x07) + } + for k := 1; k < w; k++ { + octet = value[i+k] + v = (v << 6) + (rune(octet) & 0x3F) + } + i += w + + if !put(emitter, '\\') { + return false + } + + var ok bool + switch v { + case 0x00: + ok = put(emitter, '0') + case 0x07: + ok = put(emitter, 'a') + case 0x08: + ok = put(emitter, 'b') + case 0x09: + ok = put(emitter, 't') + case 0x0A: + ok = put(emitter, 'n') + case 0x0b: + ok = put(emitter, 'v') + case 0x0c: + ok = put(emitter, 'f') + case 0x0d: + ok = put(emitter, 'r') + case 0x1b: + ok = put(emitter, 'e') + case 0x22: + ok = put(emitter, '"') + case 0x5c: + ok = put(emitter, '\\') + case 0x85: + ok = put(emitter, 'N') + case 0xA0: + ok = put(emitter, '_') + case 0x2028: + ok = put(emitter, 'L') + case 0x2029: + ok = put(emitter, 'P') + default: + if v <= 0xFF { + ok = put(emitter, 'x') + w = 2 + } else if v <= 0xFFFF { + ok = put(emitter, 'u') + w = 4 + } else { + ok = put(emitter, 'U') + w = 8 + } + for k := (w - 1) * 4; ok && k >= 0; k -= 4 { + digit := byte((v >> uint(k)) & 0x0F) + if digit < 10 { + ok = put(emitter, digit+'0') + } else { + ok = put(emitter, digit+'A'-10) + } + } + } + if !ok { + return false + } + spaces = false + } else if is_space(value, i) { + if allow_breaks && !spaces && emitter.column > emitter.best_width && i > 0 && i < len(value)-1 { + if !yaml_emitter_write_indent(emitter) { + return false + } + if is_space(value, i+1) { + if !put(emitter, '\\') { + return false + } + } + i += width(value[i]) + } else if !write(emitter, value, &i) { + return false + } + spaces = true + } else { + if !write(emitter, value, &i) { + return false + } + spaces = false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{'"'}, false, false, false) { + return false + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_block_scalar_hints(emitter *yaml_emitter_t, value []byte) bool { + if is_space(value, 0) || is_break(value, 0) { + indent_hint := []byte{'0' + byte(emitter.best_indent)} + if !yaml_emitter_write_indicator(emitter, indent_hint, false, false, false) { + return false + } + } + + emitter.open_ended = false + + var chomp_hint [1]byte + if len(value) == 0 { + chomp_hint[0] = '-' + } else { + i := len(value) - 1 + for value[i]&0xC0 == 0x80 { + i-- + } + if !is_break(value, i) { + chomp_hint[0] = '-' + } else if i == 0 { + chomp_hint[0] = '+' + emitter.open_ended = true + } else { + i-- + for value[i]&0xC0 == 0x80 { + i-- + } + if is_break(value, i) { + chomp_hint[0] = '+' + emitter.open_ended = true + } + } + } + if chomp_hint[0] != 0 { + if !yaml_emitter_write_indicator(emitter, chomp_hint[:], false, false, false) { + return false + } + } + return true +} + +func yaml_emitter_write_literal_scalar(emitter *yaml_emitter_t, value []byte) bool { + if !yaml_emitter_write_indicator(emitter, []byte{'|'}, true, false, false) { + return false + } + if !yaml_emitter_write_block_scalar_hints(emitter, value) { + return false + } + if !put_break(emitter) { + return false + } + emitter.indention = true + emitter.whitespace = true + breaks := true + for i := 0; i < len(value); { + if is_break(value, i) { + if !write_break(emitter, value, &i) { + return false + } + emitter.indention = true + breaks = true + } else { + if breaks { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !write(emitter, value, &i) { + return false + } + emitter.indention = false + breaks = false + } + } + + return true +} + +func yaml_emitter_write_folded_scalar(emitter *yaml_emitter_t, value []byte) bool { + if !yaml_emitter_write_indicator(emitter, []byte{'>'}, true, false, false) { + return false + } + if !yaml_emitter_write_block_scalar_hints(emitter, value) { + return false + } + + if !put_break(emitter) { + return false + } + emitter.indention = true + emitter.whitespace = true + + breaks := true + leading_spaces := true + for i := 0; i < len(value); { + if is_break(value, i) { + if !breaks && !leading_spaces && value[i] == '\n' { + k := 0 + for is_break(value, k) { + k += width(value[k]) + } + if !is_blankz(value, k) { + if !put_break(emitter) { + return false + } + } + } + if !write_break(emitter, value, &i) { + return false + } + emitter.indention = true + breaks = true + } else { + if breaks { + if !yaml_emitter_write_indent(emitter) { + return false + } + leading_spaces = is_blank(value, i) + } + if !breaks && is_space(value, i) && !is_space(value, i+1) && emitter.column > emitter.best_width { + if !yaml_emitter_write_indent(emitter) { + return false + } + i += width(value[i]) + } else { + if !write(emitter, value, &i) { + return false + } + } + emitter.indention = false + breaks = false + } + } + return true +} diff --git a/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/encode.go b/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/encode.go new file mode 100644 index 000000000..0ee738e11 --- /dev/null +++ b/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/encode.go @@ -0,0 +1,390 @@ +package yaml + +import ( + "encoding" + "fmt" + "io" + "reflect" + "regexp" + "sort" + "strconv" + "strings" + "time" + "unicode/utf8" +) + +// jsonNumber is the interface of the encoding/json.Number datatype. +// Repeating the interface here avoids a dependency on encoding/json, and also +// supports other libraries like jsoniter, which use a similar datatype with +// the same interface. Detecting this interface is useful when dealing with +// structures containing json.Number, which is a string under the hood. The +// encoder should prefer the use of Int64(), Float64() and string(), in that +// order, when encoding this type. +type jsonNumber interface { + Float64() (float64, error) + Int64() (int64, error) + String() string +} + +type encoder struct { + emitter yaml_emitter_t + event yaml_event_t + out []byte + flow bool + // doneInit holds whether the initial stream_start_event has been + // emitted. + doneInit bool +} + +func newEncoder() *encoder { + e := &encoder{} + yaml_emitter_initialize(&e.emitter) + yaml_emitter_set_output_string(&e.emitter, &e.out) + yaml_emitter_set_unicode(&e.emitter, true) + return e +} + +func newEncoderWithWriter(w io.Writer) *encoder { + e := &encoder{} + yaml_emitter_initialize(&e.emitter) + yaml_emitter_set_output_writer(&e.emitter, w) + yaml_emitter_set_unicode(&e.emitter, true) + return e +} + +func (e *encoder) init() { + if e.doneInit { + return + } + yaml_stream_start_event_initialize(&e.event, yaml_UTF8_ENCODING) + e.emit() + e.doneInit = true +} + +func (e *encoder) finish() { + e.emitter.open_ended = false + yaml_stream_end_event_initialize(&e.event) + e.emit() +} + +func (e *encoder) destroy() { + yaml_emitter_delete(&e.emitter) +} + +func (e *encoder) emit() { + // This will internally delete the e.event value. + e.must(yaml_emitter_emit(&e.emitter, &e.event)) +} + +func (e *encoder) must(ok bool) { + if !ok { + msg := e.emitter.problem + if msg == "" { + msg = "unknown problem generating YAML content" + } + failf("%s", msg) + } +} + +func (e *encoder) marshalDoc(tag string, in reflect.Value) { + e.init() + yaml_document_start_event_initialize(&e.event, nil, nil, true) + e.emit() + e.marshal(tag, in) + yaml_document_end_event_initialize(&e.event, true) + e.emit() +} + +func (e *encoder) marshal(tag string, in reflect.Value) { + if !in.IsValid() || in.Kind() == reflect.Ptr && in.IsNil() { + e.nilv() + return + } + iface := in.Interface() + switch m := iface.(type) { + case jsonNumber: + integer, err := m.Int64() + if err == nil { + // In this case the json.Number is a valid int64 + in = reflect.ValueOf(integer) + break + } + float, err := m.Float64() + if err == nil { + // In this case the json.Number is a valid float64 + in = reflect.ValueOf(float) + break + } + // fallback case - no number could be obtained + in = reflect.ValueOf(m.String()) + case time.Time, *time.Time: + // Although time.Time implements TextMarshaler, + // we don't want to treat it as a string for YAML + // purposes because YAML has special support for + // timestamps. + case Marshaler: + v, err := m.MarshalYAML() + if err != nil { + fail(err) + } + if v == nil { + e.nilv() + return + } + in = reflect.ValueOf(v) + case encoding.TextMarshaler: + text, err := m.MarshalText() + if err != nil { + fail(err) + } + in = reflect.ValueOf(string(text)) + case nil: + e.nilv() + return + } + switch in.Kind() { + case reflect.Interface: + e.marshal(tag, in.Elem()) + case reflect.Map: + e.mapv(tag, in) + case reflect.Ptr: + if in.Type() == ptrTimeType { + e.timev(tag, in.Elem()) + } else { + e.marshal(tag, in.Elem()) + } + case reflect.Struct: + if in.Type() == timeType { + e.timev(tag, in) + } else { + e.structv(tag, in) + } + case reflect.Slice, reflect.Array: + if in.Type().Elem() == mapItemType { + e.itemsv(tag, in) + } else { + e.slicev(tag, in) + } + case reflect.String: + e.stringv(tag, in) + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + if in.Type() == durationType { + e.stringv(tag, reflect.ValueOf(iface.(time.Duration).String())) + } else { + e.intv(tag, in) + } + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + e.uintv(tag, in) + case reflect.Float32, reflect.Float64: + e.floatv(tag, in) + case reflect.Bool: + e.boolv(tag, in) + default: + panic("cannot marshal type: " + in.Type().String()) + } +} + +func (e *encoder) mapv(tag string, in reflect.Value) { + e.mappingv(tag, func() { + keys := keyList(in.MapKeys()) + sort.Sort(keys) + for _, k := range keys { + e.marshal("", k) + e.marshal("", in.MapIndex(k)) + } + }) +} + +func (e *encoder) itemsv(tag string, in reflect.Value) { + e.mappingv(tag, func() { + slice := in.Convert(reflect.TypeOf([]MapItem{})).Interface().([]MapItem) + for _, item := range slice { + e.marshal("", reflect.ValueOf(item.Key)) + e.marshal("", reflect.ValueOf(item.Value)) + } + }) +} + +func (e *encoder) structv(tag string, in reflect.Value) { + sinfo, err := getStructInfo(in.Type()) + if err != nil { + panic(err) + } + e.mappingv(tag, func() { + for _, info := range sinfo.FieldsList { + var value reflect.Value + if info.Inline == nil { + value = in.Field(info.Num) + } else { + value = in.FieldByIndex(info.Inline) + } + if info.OmitEmpty && isZero(value) { + continue + } + e.marshal("", reflect.ValueOf(info.Key)) + e.flow = info.Flow + e.marshal("", value) + } + if sinfo.InlineMap >= 0 { + m := in.Field(sinfo.InlineMap) + if m.Len() > 0 { + e.flow = false + keys := keyList(m.MapKeys()) + sort.Sort(keys) + for _, k := range keys { + if _, found := sinfo.FieldsMap[k.String()]; found { + panic(fmt.Sprintf("Can't have key %q in inlined map; conflicts with struct field", k.String())) + } + e.marshal("", k) + e.flow = false + e.marshal("", m.MapIndex(k)) + } + } + } + }) +} + +func (e *encoder) mappingv(tag string, f func()) { + implicit := tag == "" + style := yaml_BLOCK_MAPPING_STYLE + if e.flow { + e.flow = false + style = yaml_FLOW_MAPPING_STYLE + } + yaml_mapping_start_event_initialize(&e.event, nil, []byte(tag), implicit, style) + e.emit() + f() + yaml_mapping_end_event_initialize(&e.event) + e.emit() +} + +func (e *encoder) slicev(tag string, in reflect.Value) { + implicit := tag == "" + style := yaml_BLOCK_SEQUENCE_STYLE + if e.flow { + e.flow = false + style = yaml_FLOW_SEQUENCE_STYLE + } + e.must(yaml_sequence_start_event_initialize(&e.event, nil, []byte(tag), implicit, style)) + e.emit() + n := in.Len() + for i := 0; i < n; i++ { + e.marshal("", in.Index(i)) + } + e.must(yaml_sequence_end_event_initialize(&e.event)) + e.emit() +} + +// isBase60 returns whether s is in base 60 notation as defined in YAML 1.1. +// +// The base 60 float notation in YAML 1.1 is a terrible idea and is unsupported +// in YAML 1.2 and by this package, but these should be marshalled quoted for +// the time being for compatibility with other parsers. +func isBase60Float(s string) (result bool) { + // Fast path. + if s == "" { + return false + } + c := s[0] + if !(c == '+' || c == '-' || c >= '0' && c <= '9') || strings.IndexByte(s, ':') < 0 { + return false + } + // Do the full match. + return base60float.MatchString(s) +} + +// From http://yaml.org/type/float.html, except the regular expression there +// is bogus. In practice parsers do not enforce the "\.[0-9_]*" suffix. +var base60float = regexp.MustCompile(`^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+(?:\.[0-9_]*)?$`) + +func (e *encoder) stringv(tag string, in reflect.Value) { + var style yaml_scalar_style_t + s := in.String() + canUsePlain := true + switch { + case !utf8.ValidString(s): + if tag == yaml_BINARY_TAG { + failf("explicitly tagged !!binary data must be base64-encoded") + } + if tag != "" { + failf("cannot marshal invalid UTF-8 data as %s", shortTag(tag)) + } + // It can't be encoded directly as YAML so use a binary tag + // and encode it as base64. + tag = yaml_BINARY_TAG + s = encodeBase64(s) + case tag == "": + // Check to see if it would resolve to a specific + // tag when encoded unquoted. If it doesn't, + // there's no need to quote it. + rtag, _ := resolve("", s) + canUsePlain = rtag == yaml_STR_TAG && !isBase60Float(s) + } + // Note: it's possible for user code to emit invalid YAML + // if they explicitly specify a tag and a string containing + // text that's incompatible with that tag. + switch { + case strings.Contains(s, "\n"): + style = yaml_LITERAL_SCALAR_STYLE + case canUsePlain: + style = yaml_PLAIN_SCALAR_STYLE + default: + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + e.emitScalar(s, "", tag, style) +} + +func (e *encoder) boolv(tag string, in reflect.Value) { + var s string + if in.Bool() { + s = "true" + } else { + s = "false" + } + e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) +} + +func (e *encoder) intv(tag string, in reflect.Value) { + s := strconv.FormatInt(in.Int(), 10) + e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) +} + +func (e *encoder) uintv(tag string, in reflect.Value) { + s := strconv.FormatUint(in.Uint(), 10) + e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) +} + +func (e *encoder) timev(tag string, in reflect.Value) { + t := in.Interface().(time.Time) + s := t.Format(time.RFC3339Nano) + e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) +} + +func (e *encoder) floatv(tag string, in reflect.Value) { + // Issue #352: When formatting, use the precision of the underlying value + precision := 64 + if in.Kind() == reflect.Float32 { + precision = 32 + } + + s := strconv.FormatFloat(in.Float(), 'g', -1, precision) + switch s { + case "+Inf": + s = ".inf" + case "-Inf": + s = "-.inf" + case "NaN": + s = ".nan" + } + e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) +} + +func (e *encoder) nilv() { + e.emitScalar("null", "", "", yaml_PLAIN_SCALAR_STYLE) +} + +func (e *encoder) emitScalar(value, anchor, tag string, style yaml_scalar_style_t) { + implicit := tag == "" + e.must(yaml_scalar_event_initialize(&e.event, []byte(anchor), []byte(tag), []byte(value), implicit, implicit, style)) + e.emit() +} diff --git a/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/parserc.go b/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/parserc.go new file mode 100644 index 000000000..81d05dfe5 --- /dev/null +++ b/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/parserc.go @@ -0,0 +1,1095 @@ +package yaml + +import ( + "bytes" +) + +// The parser implements the following grammar: +// +// stream ::= STREAM-START implicit_document? explicit_document* STREAM-END +// implicit_document ::= block_node DOCUMENT-END* +// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* +// block_node_or_indentless_sequence ::= +// ALIAS +// | properties (block_content | indentless_block_sequence)? +// | block_content +// | indentless_block_sequence +// block_node ::= ALIAS +// | properties block_content? +// | block_content +// flow_node ::= ALIAS +// | properties flow_content? +// | flow_content +// properties ::= TAG ANCHOR? | ANCHOR TAG? +// block_content ::= block_collection | flow_collection | SCALAR +// flow_content ::= flow_collection | SCALAR +// block_collection ::= block_sequence | block_mapping +// flow_collection ::= flow_sequence | flow_mapping +// block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END +// indentless_sequence ::= (BLOCK-ENTRY block_node?)+ +// block_mapping ::= BLOCK-MAPPING_START +// ((KEY block_node_or_indentless_sequence?)? +// (VALUE block_node_or_indentless_sequence?)?)* +// BLOCK-END +// flow_sequence ::= FLOW-SEQUENCE-START +// (flow_sequence_entry FLOW-ENTRY)* +// flow_sequence_entry? +// FLOW-SEQUENCE-END +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// flow_mapping ::= FLOW-MAPPING-START +// (flow_mapping_entry FLOW-ENTRY)* +// flow_mapping_entry? +// FLOW-MAPPING-END +// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? + +// Peek the next token in the token queue. +func peek_token(parser *yaml_parser_t) *yaml_token_t { + if parser.token_available || yaml_parser_fetch_more_tokens(parser) { + return &parser.tokens[parser.tokens_head] + } + return nil +} + +// Remove the next token from the queue (must be called after peek_token). +func skip_token(parser *yaml_parser_t) { + parser.token_available = false + parser.tokens_parsed++ + parser.stream_end_produced = parser.tokens[parser.tokens_head].typ == yaml_STREAM_END_TOKEN + parser.tokens_head++ +} + +// Get the next event. +func yaml_parser_parse(parser *yaml_parser_t, event *yaml_event_t) bool { + // Erase the event object. + *event = yaml_event_t{} + + // No events after the end of the stream or error. + if parser.stream_end_produced || parser.error != yaml_NO_ERROR || parser.state == yaml_PARSE_END_STATE { + return true + } + + // Generate the next event. + return yaml_parser_state_machine(parser, event) +} + +// Set parser error. +func yaml_parser_set_parser_error(parser *yaml_parser_t, problem string, problem_mark yaml_mark_t) bool { + parser.error = yaml_PARSER_ERROR + parser.problem = problem + parser.problem_mark = problem_mark + return false +} + +func yaml_parser_set_parser_error_context(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string, problem_mark yaml_mark_t) bool { + parser.error = yaml_PARSER_ERROR + parser.context = context + parser.context_mark = context_mark + parser.problem = problem + parser.problem_mark = problem_mark + return false +} + +// State dispatcher. +func yaml_parser_state_machine(parser *yaml_parser_t, event *yaml_event_t) bool { + //trace("yaml_parser_state_machine", "state:", parser.state.String()) + + switch parser.state { + case yaml_PARSE_STREAM_START_STATE: + return yaml_parser_parse_stream_start(parser, event) + + case yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE: + return yaml_parser_parse_document_start(parser, event, true) + + case yaml_PARSE_DOCUMENT_START_STATE: + return yaml_parser_parse_document_start(parser, event, false) + + case yaml_PARSE_DOCUMENT_CONTENT_STATE: + return yaml_parser_parse_document_content(parser, event) + + case yaml_PARSE_DOCUMENT_END_STATE: + return yaml_parser_parse_document_end(parser, event) + + case yaml_PARSE_BLOCK_NODE_STATE: + return yaml_parser_parse_node(parser, event, true, false) + + case yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE: + return yaml_parser_parse_node(parser, event, true, true) + + case yaml_PARSE_FLOW_NODE_STATE: + return yaml_parser_parse_node(parser, event, false, false) + + case yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE: + return yaml_parser_parse_block_sequence_entry(parser, event, true) + + case yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE: + return yaml_parser_parse_block_sequence_entry(parser, event, false) + + case yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE: + return yaml_parser_parse_indentless_sequence_entry(parser, event) + + case yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE: + return yaml_parser_parse_block_mapping_key(parser, event, true) + + case yaml_PARSE_BLOCK_MAPPING_KEY_STATE: + return yaml_parser_parse_block_mapping_key(parser, event, false) + + case yaml_PARSE_BLOCK_MAPPING_VALUE_STATE: + return yaml_parser_parse_block_mapping_value(parser, event) + + case yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE: + return yaml_parser_parse_flow_sequence_entry(parser, event, true) + + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE: + return yaml_parser_parse_flow_sequence_entry(parser, event, false) + + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE: + return yaml_parser_parse_flow_sequence_entry_mapping_key(parser, event) + + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE: + return yaml_parser_parse_flow_sequence_entry_mapping_value(parser, event) + + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE: + return yaml_parser_parse_flow_sequence_entry_mapping_end(parser, event) + + case yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE: + return yaml_parser_parse_flow_mapping_key(parser, event, true) + + case yaml_PARSE_FLOW_MAPPING_KEY_STATE: + return yaml_parser_parse_flow_mapping_key(parser, event, false) + + case yaml_PARSE_FLOW_MAPPING_VALUE_STATE: + return yaml_parser_parse_flow_mapping_value(parser, event, false) + + case yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE: + return yaml_parser_parse_flow_mapping_value(parser, event, true) + + default: + panic("invalid parser state") + } +} + +// Parse the production: +// stream ::= STREAM-START implicit_document? explicit_document* STREAM-END +// ************ +func yaml_parser_parse_stream_start(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_STREAM_START_TOKEN { + return yaml_parser_set_parser_error(parser, "did not find expected ", token.start_mark) + } + parser.state = yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE + *event = yaml_event_t{ + typ: yaml_STREAM_START_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + encoding: token.encoding, + } + skip_token(parser) + return true +} + +// Parse the productions: +// implicit_document ::= block_node DOCUMENT-END* +// * +// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* +// ************************* +func yaml_parser_parse_document_start(parser *yaml_parser_t, event *yaml_event_t, implicit bool) bool { + + token := peek_token(parser) + if token == nil { + return false + } + + // Parse extra document end indicators. + if !implicit { + for token.typ == yaml_DOCUMENT_END_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } + } + + if implicit && token.typ != yaml_VERSION_DIRECTIVE_TOKEN && + token.typ != yaml_TAG_DIRECTIVE_TOKEN && + token.typ != yaml_DOCUMENT_START_TOKEN && + token.typ != yaml_STREAM_END_TOKEN { + // Parse an implicit document. + if !yaml_parser_process_directives(parser, nil, nil) { + return false + } + parser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE) + parser.state = yaml_PARSE_BLOCK_NODE_STATE + + *event = yaml_event_t{ + typ: yaml_DOCUMENT_START_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + + } else if token.typ != yaml_STREAM_END_TOKEN { + // Parse an explicit document. + var version_directive *yaml_version_directive_t + var tag_directives []yaml_tag_directive_t + start_mark := token.start_mark + if !yaml_parser_process_directives(parser, &version_directive, &tag_directives) { + return false + } + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_DOCUMENT_START_TOKEN { + yaml_parser_set_parser_error(parser, + "did not find expected ", token.start_mark) + return false + } + parser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE) + parser.state = yaml_PARSE_DOCUMENT_CONTENT_STATE + end_mark := token.end_mark + + *event = yaml_event_t{ + typ: yaml_DOCUMENT_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + version_directive: version_directive, + tag_directives: tag_directives, + implicit: false, + } + skip_token(parser) + + } else { + // Parse the stream end. + parser.state = yaml_PARSE_END_STATE + *event = yaml_event_t{ + typ: yaml_STREAM_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + skip_token(parser) + } + + return true +} + +// Parse the productions: +// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* +// *********** +// +func yaml_parser_parse_document_content(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + if token.typ == yaml_VERSION_DIRECTIVE_TOKEN || + token.typ == yaml_TAG_DIRECTIVE_TOKEN || + token.typ == yaml_DOCUMENT_START_TOKEN || + token.typ == yaml_DOCUMENT_END_TOKEN || + token.typ == yaml_STREAM_END_TOKEN { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + return yaml_parser_process_empty_scalar(parser, event, + token.start_mark) + } + return yaml_parser_parse_node(parser, event, true, false) +} + +// Parse the productions: +// implicit_document ::= block_node DOCUMENT-END* +// ************* +// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* +// +func yaml_parser_parse_document_end(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + + start_mark := token.start_mark + end_mark := token.start_mark + + implicit := true + if token.typ == yaml_DOCUMENT_END_TOKEN { + end_mark = token.end_mark + skip_token(parser) + implicit = false + } + + parser.tag_directives = parser.tag_directives[:0] + + parser.state = yaml_PARSE_DOCUMENT_START_STATE + *event = yaml_event_t{ + typ: yaml_DOCUMENT_END_EVENT, + start_mark: start_mark, + end_mark: end_mark, + implicit: implicit, + } + return true +} + +// Parse the productions: +// block_node_or_indentless_sequence ::= +// ALIAS +// ***** +// | properties (block_content | indentless_block_sequence)? +// ********** * +// | block_content | indentless_block_sequence +// * +// block_node ::= ALIAS +// ***** +// | properties block_content? +// ********** * +// | block_content +// * +// flow_node ::= ALIAS +// ***** +// | properties flow_content? +// ********** * +// | flow_content +// * +// properties ::= TAG ANCHOR? | ANCHOR TAG? +// ************************* +// block_content ::= block_collection | flow_collection | SCALAR +// ****** +// flow_content ::= flow_collection | SCALAR +// ****** +func yaml_parser_parse_node(parser *yaml_parser_t, event *yaml_event_t, block, indentless_sequence bool) bool { + //defer trace("yaml_parser_parse_node", "block:", block, "indentless_sequence:", indentless_sequence)() + + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ == yaml_ALIAS_TOKEN { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + *event = yaml_event_t{ + typ: yaml_ALIAS_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + anchor: token.value, + } + skip_token(parser) + return true + } + + start_mark := token.start_mark + end_mark := token.start_mark + + var tag_token bool + var tag_handle, tag_suffix, anchor []byte + var tag_mark yaml_mark_t + if token.typ == yaml_ANCHOR_TOKEN { + anchor = token.value + start_mark = token.start_mark + end_mark = token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ == yaml_TAG_TOKEN { + tag_token = true + tag_handle = token.value + tag_suffix = token.suffix + tag_mark = token.start_mark + end_mark = token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } + } else if token.typ == yaml_TAG_TOKEN { + tag_token = true + tag_handle = token.value + tag_suffix = token.suffix + start_mark = token.start_mark + tag_mark = token.start_mark + end_mark = token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ == yaml_ANCHOR_TOKEN { + anchor = token.value + end_mark = token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } + } + + var tag []byte + if tag_token { + if len(tag_handle) == 0 { + tag = tag_suffix + tag_suffix = nil + } else { + for i := range parser.tag_directives { + if bytes.Equal(parser.tag_directives[i].handle, tag_handle) { + tag = append([]byte(nil), parser.tag_directives[i].prefix...) + tag = append(tag, tag_suffix...) + break + } + } + if len(tag) == 0 { + yaml_parser_set_parser_error_context(parser, + "while parsing a node", start_mark, + "found undefined tag handle", tag_mark) + return false + } + } + } + + implicit := len(tag) == 0 + if indentless_sequence && token.typ == yaml_BLOCK_ENTRY_TOKEN { + end_mark = token.end_mark + parser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE + *event = yaml_event_t{ + typ: yaml_SEQUENCE_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE), + } + return true + } + if token.typ == yaml_SCALAR_TOKEN { + var plain_implicit, quoted_implicit bool + end_mark = token.end_mark + if (len(tag) == 0 && token.style == yaml_PLAIN_SCALAR_STYLE) || (len(tag) == 1 && tag[0] == '!') { + plain_implicit = true + } else if len(tag) == 0 { + quoted_implicit = true + } + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + + *event = yaml_event_t{ + typ: yaml_SCALAR_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + value: token.value, + implicit: plain_implicit, + quoted_implicit: quoted_implicit, + style: yaml_style_t(token.style), + } + skip_token(parser) + return true + } + if token.typ == yaml_FLOW_SEQUENCE_START_TOKEN { + // [Go] Some of the events below can be merged as they differ only on style. + end_mark = token.end_mark + parser.state = yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE + *event = yaml_event_t{ + typ: yaml_SEQUENCE_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_FLOW_SEQUENCE_STYLE), + } + return true + } + if token.typ == yaml_FLOW_MAPPING_START_TOKEN { + end_mark = token.end_mark + parser.state = yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE + *event = yaml_event_t{ + typ: yaml_MAPPING_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_FLOW_MAPPING_STYLE), + } + return true + } + if block && token.typ == yaml_BLOCK_SEQUENCE_START_TOKEN { + end_mark = token.end_mark + parser.state = yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE + *event = yaml_event_t{ + typ: yaml_SEQUENCE_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE), + } + return true + } + if block && token.typ == yaml_BLOCK_MAPPING_START_TOKEN { + end_mark = token.end_mark + parser.state = yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE + *event = yaml_event_t{ + typ: yaml_MAPPING_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_BLOCK_MAPPING_STYLE), + } + return true + } + if len(anchor) > 0 || len(tag) > 0 { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + + *event = yaml_event_t{ + typ: yaml_SCALAR_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + quoted_implicit: false, + style: yaml_style_t(yaml_PLAIN_SCALAR_STYLE), + } + return true + } + + context := "while parsing a flow node" + if block { + context = "while parsing a block node" + } + yaml_parser_set_parser_error_context(parser, context, start_mark, + "did not find expected node content", token.start_mark) + return false +} + +// Parse the productions: +// block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END +// ******************** *********** * ********* +// +func yaml_parser_parse_block_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { + if first { + token := peek_token(parser) + parser.marks = append(parser.marks, token.start_mark) + skip_token(parser) + } + + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ == yaml_BLOCK_ENTRY_TOKEN { + mark := token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_BLOCK_ENTRY_TOKEN && token.typ != yaml_BLOCK_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE) + return yaml_parser_parse_node(parser, event, true, false) + } else { + parser.state = yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) + } + } + if token.typ == yaml_BLOCK_END_TOKEN { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + + *event = yaml_event_t{ + typ: yaml_SEQUENCE_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + + skip_token(parser) + return true + } + + context_mark := parser.marks[len(parser.marks)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + return yaml_parser_set_parser_error_context(parser, + "while parsing a block collection", context_mark, + "did not find expected '-' indicator", token.start_mark) +} + +// Parse the productions: +// indentless_sequence ::= (BLOCK-ENTRY block_node?)+ +// *********** * +func yaml_parser_parse_indentless_sequence_entry(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ == yaml_BLOCK_ENTRY_TOKEN { + mark := token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_BLOCK_ENTRY_TOKEN && + token.typ != yaml_KEY_TOKEN && + token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_BLOCK_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE) + return yaml_parser_parse_node(parser, event, true, false) + } + parser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) + } + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + + *event = yaml_event_t{ + typ: yaml_SEQUENCE_END_EVENT, + start_mark: token.start_mark, + end_mark: token.start_mark, // [Go] Shouldn't this be token.end_mark? + } + return true +} + +// Parse the productions: +// block_mapping ::= BLOCK-MAPPING_START +// ******************* +// ((KEY block_node_or_indentless_sequence?)? +// *** * +// (VALUE block_node_or_indentless_sequence?)?)* +// +// BLOCK-END +// ********* +// +func yaml_parser_parse_block_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { + if first { + token := peek_token(parser) + parser.marks = append(parser.marks, token.start_mark) + skip_token(parser) + } + + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ == yaml_KEY_TOKEN { + mark := token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_KEY_TOKEN && + token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_BLOCK_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_VALUE_STATE) + return yaml_parser_parse_node(parser, event, true, true) + } else { + parser.state = yaml_PARSE_BLOCK_MAPPING_VALUE_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) + } + } else if token.typ == yaml_BLOCK_END_TOKEN { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + *event = yaml_event_t{ + typ: yaml_MAPPING_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + skip_token(parser) + return true + } + + context_mark := parser.marks[len(parser.marks)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + return yaml_parser_set_parser_error_context(parser, + "while parsing a block mapping", context_mark, + "did not find expected key", token.start_mark) +} + +// Parse the productions: +// block_mapping ::= BLOCK-MAPPING_START +// +// ((KEY block_node_or_indentless_sequence?)? +// +// (VALUE block_node_or_indentless_sequence?)?)* +// ***** * +// BLOCK-END +// +// +func yaml_parser_parse_block_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + if token.typ == yaml_VALUE_TOKEN { + mark := token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_KEY_TOKEN && + token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_BLOCK_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_KEY_STATE) + return yaml_parser_parse_node(parser, event, true, true) + } + parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) + } + parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) +} + +// Parse the productions: +// flow_sequence ::= FLOW-SEQUENCE-START +// ******************* +// (flow_sequence_entry FLOW-ENTRY)* +// * ********** +// flow_sequence_entry? +// * +// FLOW-SEQUENCE-END +// ***************** +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// * +// +func yaml_parser_parse_flow_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { + if first { + token := peek_token(parser) + parser.marks = append(parser.marks, token.start_mark) + skip_token(parser) + } + token := peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { + if !first { + if token.typ == yaml_FLOW_ENTRY_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } else { + context_mark := parser.marks[len(parser.marks)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + return yaml_parser_set_parser_error_context(parser, + "while parsing a flow sequence", context_mark, + "did not find expected ',' or ']'", token.start_mark) + } + } + + if token.typ == yaml_KEY_TOKEN { + parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE + *event = yaml_event_t{ + typ: yaml_MAPPING_START_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + implicit: true, + style: yaml_style_t(yaml_FLOW_MAPPING_STYLE), + } + skip_token(parser) + return true + } else if token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + } + + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + + *event = yaml_event_t{ + typ: yaml_SEQUENCE_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + + skip_token(parser) + return true +} + +// +// Parse the productions: +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// *** * +// +func yaml_parser_parse_flow_sequence_entry_mapping_key(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_FLOW_ENTRY_TOKEN && + token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + mark := token.end_mark + skip_token(parser) + parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) +} + +// Parse the productions: +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// ***** * +// +func yaml_parser_parse_flow_sequence_entry_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + if token.typ == yaml_VALUE_TOKEN { + skip_token(parser) + token := peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + } + parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) +} + +// Parse the productions: +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// * +// +func yaml_parser_parse_flow_sequence_entry_mapping_end(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE + *event = yaml_event_t{ + typ: yaml_MAPPING_END_EVENT, + start_mark: token.start_mark, + end_mark: token.start_mark, // [Go] Shouldn't this be end_mark? + } + return true +} + +// Parse the productions: +// flow_mapping ::= FLOW-MAPPING-START +// ****************** +// (flow_mapping_entry FLOW-ENTRY)* +// * ********** +// flow_mapping_entry? +// ****************** +// FLOW-MAPPING-END +// **************** +// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// * *** * +// +func yaml_parser_parse_flow_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { + if first { + token := peek_token(parser) + parser.marks = append(parser.marks, token.start_mark) + skip_token(parser) + } + + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ != yaml_FLOW_MAPPING_END_TOKEN { + if !first { + if token.typ == yaml_FLOW_ENTRY_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } else { + context_mark := parser.marks[len(parser.marks)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + return yaml_parser_set_parser_error_context(parser, + "while parsing a flow mapping", context_mark, + "did not find expected ',' or '}'", token.start_mark) + } + } + + if token.typ == yaml_KEY_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_FLOW_ENTRY_TOKEN && + token.typ != yaml_FLOW_MAPPING_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_VALUE_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } else { + parser.state = yaml_PARSE_FLOW_MAPPING_VALUE_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) + } + } else if token.typ != yaml_FLOW_MAPPING_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + } + + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + *event = yaml_event_t{ + typ: yaml_MAPPING_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + skip_token(parser) + return true +} + +// Parse the productions: +// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// * ***** * +// +func yaml_parser_parse_flow_mapping_value(parser *yaml_parser_t, event *yaml_event_t, empty bool) bool { + token := peek_token(parser) + if token == nil { + return false + } + if empty { + parser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) + } + if token.typ == yaml_VALUE_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_MAPPING_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_KEY_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + } + parser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) +} + +// Generate an empty scalar event. +func yaml_parser_process_empty_scalar(parser *yaml_parser_t, event *yaml_event_t, mark yaml_mark_t) bool { + *event = yaml_event_t{ + typ: yaml_SCALAR_EVENT, + start_mark: mark, + end_mark: mark, + value: nil, // Empty + implicit: true, + style: yaml_style_t(yaml_PLAIN_SCALAR_STYLE), + } + return true +} + +var default_tag_directives = []yaml_tag_directive_t{ + {[]byte("!"), []byte("!")}, + {[]byte("!!"), []byte("tag:yaml.org,2002:")}, +} + +// Parse directives. +func yaml_parser_process_directives(parser *yaml_parser_t, + version_directive_ref **yaml_version_directive_t, + tag_directives_ref *[]yaml_tag_directive_t) bool { + + var version_directive *yaml_version_directive_t + var tag_directives []yaml_tag_directive_t + + token := peek_token(parser) + if token == nil { + return false + } + + for token.typ == yaml_VERSION_DIRECTIVE_TOKEN || token.typ == yaml_TAG_DIRECTIVE_TOKEN { + if token.typ == yaml_VERSION_DIRECTIVE_TOKEN { + if version_directive != nil { + yaml_parser_set_parser_error(parser, + "found duplicate %YAML directive", token.start_mark) + return false + } + if token.major != 1 || token.minor != 1 { + yaml_parser_set_parser_error(parser, + "found incompatible YAML document", token.start_mark) + return false + } + version_directive = &yaml_version_directive_t{ + major: token.major, + minor: token.minor, + } + } else if token.typ == yaml_TAG_DIRECTIVE_TOKEN { + value := yaml_tag_directive_t{ + handle: token.value, + prefix: token.prefix, + } + if !yaml_parser_append_tag_directive(parser, value, false, token.start_mark) { + return false + } + tag_directives = append(tag_directives, value) + } + + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } + + for i := range default_tag_directives { + if !yaml_parser_append_tag_directive(parser, default_tag_directives[i], true, token.start_mark) { + return false + } + } + + if version_directive_ref != nil { + *version_directive_ref = version_directive + } + if tag_directives_ref != nil { + *tag_directives_ref = tag_directives + } + return true +} + +// Append a tag directive to the directives stack. +func yaml_parser_append_tag_directive(parser *yaml_parser_t, value yaml_tag_directive_t, allow_duplicates bool, mark yaml_mark_t) bool { + for i := range parser.tag_directives { + if bytes.Equal(value.handle, parser.tag_directives[i].handle) { + if allow_duplicates { + return true + } + return yaml_parser_set_parser_error(parser, "found duplicate %TAG directive", mark) + } + } + + // [Go] I suspect the copy is unnecessary. This was likely done + // because there was no way to track ownership of the data. + value_copy := yaml_tag_directive_t{ + handle: make([]byte, len(value.handle)), + prefix: make([]byte, len(value.prefix)), + } + copy(value_copy.handle, value.handle) + copy(value_copy.prefix, value.prefix) + parser.tag_directives = append(parser.tag_directives, value_copy) + return true +} diff --git a/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/readerc.go b/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/readerc.go new file mode 100644 index 000000000..7c1f5fac3 --- /dev/null +++ b/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/readerc.go @@ -0,0 +1,412 @@ +package yaml + +import ( + "io" +) + +// Set the reader error and return 0. +func yaml_parser_set_reader_error(parser *yaml_parser_t, problem string, offset int, value int) bool { + parser.error = yaml_READER_ERROR + parser.problem = problem + parser.problem_offset = offset + parser.problem_value = value + return false +} + +// Byte order marks. +const ( + bom_UTF8 = "\xef\xbb\xbf" + bom_UTF16LE = "\xff\xfe" + bom_UTF16BE = "\xfe\xff" +) + +// Determine the input stream encoding by checking the BOM symbol. If no BOM is +// found, the UTF-8 encoding is assumed. Return 1 on success, 0 on failure. +func yaml_parser_determine_encoding(parser *yaml_parser_t) bool { + // Ensure that we had enough bytes in the raw buffer. + for !parser.eof && len(parser.raw_buffer)-parser.raw_buffer_pos < 3 { + if !yaml_parser_update_raw_buffer(parser) { + return false + } + } + + // Determine the encoding. + buf := parser.raw_buffer + pos := parser.raw_buffer_pos + avail := len(buf) - pos + if avail >= 2 && buf[pos] == bom_UTF16LE[0] && buf[pos+1] == bom_UTF16LE[1] { + parser.encoding = yaml_UTF16LE_ENCODING + parser.raw_buffer_pos += 2 + parser.offset += 2 + } else if avail >= 2 && buf[pos] == bom_UTF16BE[0] && buf[pos+1] == bom_UTF16BE[1] { + parser.encoding = yaml_UTF16BE_ENCODING + parser.raw_buffer_pos += 2 + parser.offset += 2 + } else if avail >= 3 && buf[pos] == bom_UTF8[0] && buf[pos+1] == bom_UTF8[1] && buf[pos+2] == bom_UTF8[2] { + parser.encoding = yaml_UTF8_ENCODING + parser.raw_buffer_pos += 3 + parser.offset += 3 + } else { + parser.encoding = yaml_UTF8_ENCODING + } + return true +} + +// Update the raw buffer. +func yaml_parser_update_raw_buffer(parser *yaml_parser_t) bool { + size_read := 0 + + // Return if the raw buffer is full. + if parser.raw_buffer_pos == 0 && len(parser.raw_buffer) == cap(parser.raw_buffer) { + return true + } + + // Return on EOF. + if parser.eof { + return true + } + + // Move the remaining bytes in the raw buffer to the beginning. + if parser.raw_buffer_pos > 0 && parser.raw_buffer_pos < len(parser.raw_buffer) { + copy(parser.raw_buffer, parser.raw_buffer[parser.raw_buffer_pos:]) + } + parser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)-parser.raw_buffer_pos] + parser.raw_buffer_pos = 0 + + // Call the read handler to fill the buffer. + size_read, err := parser.read_handler(parser, parser.raw_buffer[len(parser.raw_buffer):cap(parser.raw_buffer)]) + parser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)+size_read] + if err == io.EOF { + parser.eof = true + } else if err != nil { + return yaml_parser_set_reader_error(parser, "input error: "+err.Error(), parser.offset, -1) + } + return true +} + +// Ensure that the buffer contains at least `length` characters. +// Return true on success, false on failure. +// +// The length is supposed to be significantly less that the buffer size. +func yaml_parser_update_buffer(parser *yaml_parser_t, length int) bool { + if parser.read_handler == nil { + panic("read handler must be set") + } + + // [Go] This function was changed to guarantee the requested length size at EOF. + // The fact we need to do this is pretty awful, but the description above implies + // for that to be the case, and there are tests + + // If the EOF flag is set and the raw buffer is empty, do nothing. + if parser.eof && parser.raw_buffer_pos == len(parser.raw_buffer) { + // [Go] ACTUALLY! Read the documentation of this function above. + // This is just broken. To return true, we need to have the + // given length in the buffer. Not doing that means every single + // check that calls this function to make sure the buffer has a + // given length is Go) panicking; or C) accessing invalid memory. + //return true + } + + // Return if the buffer contains enough characters. + if parser.unread >= length { + return true + } + + // Determine the input encoding if it is not known yet. + if parser.encoding == yaml_ANY_ENCODING { + if !yaml_parser_determine_encoding(parser) { + return false + } + } + + // Move the unread characters to the beginning of the buffer. + buffer_len := len(parser.buffer) + if parser.buffer_pos > 0 && parser.buffer_pos < buffer_len { + copy(parser.buffer, parser.buffer[parser.buffer_pos:]) + buffer_len -= parser.buffer_pos + parser.buffer_pos = 0 + } else if parser.buffer_pos == buffer_len { + buffer_len = 0 + parser.buffer_pos = 0 + } + + // Open the whole buffer for writing, and cut it before returning. + parser.buffer = parser.buffer[:cap(parser.buffer)] + + // Fill the buffer until it has enough characters. + first := true + for parser.unread < length { + + // Fill the raw buffer if necessary. + if !first || parser.raw_buffer_pos == len(parser.raw_buffer) { + if !yaml_parser_update_raw_buffer(parser) { + parser.buffer = parser.buffer[:buffer_len] + return false + } + } + first = false + + // Decode the raw buffer. + inner: + for parser.raw_buffer_pos != len(parser.raw_buffer) { + var value rune + var width int + + raw_unread := len(parser.raw_buffer) - parser.raw_buffer_pos + + // Decode the next character. + switch parser.encoding { + case yaml_UTF8_ENCODING: + // Decode a UTF-8 character. Check RFC 3629 + // (http://www.ietf.org/rfc/rfc3629.txt) for more details. + // + // The following table (taken from the RFC) is used for + // decoding. + // + // Char. number range | UTF-8 octet sequence + // (hexadecimal) | (binary) + // --------------------+------------------------------------ + // 0000 0000-0000 007F | 0xxxxxxx + // 0000 0080-0000 07FF | 110xxxxx 10xxxxxx + // 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx + // 0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + // + // Additionally, the characters in the range 0xD800-0xDFFF + // are prohibited as they are reserved for use with UTF-16 + // surrogate pairs. + + // Determine the length of the UTF-8 sequence. + octet := parser.raw_buffer[parser.raw_buffer_pos] + switch { + case octet&0x80 == 0x00: + width = 1 + case octet&0xE0 == 0xC0: + width = 2 + case octet&0xF0 == 0xE0: + width = 3 + case octet&0xF8 == 0xF0: + width = 4 + default: + // The leading octet is invalid. + return yaml_parser_set_reader_error(parser, + "invalid leading UTF-8 octet", + parser.offset, int(octet)) + } + + // Check if the raw buffer contains an incomplete character. + if width > raw_unread { + if parser.eof { + return yaml_parser_set_reader_error(parser, + "incomplete UTF-8 octet sequence", + parser.offset, -1) + } + break inner + } + + // Decode the leading octet. + switch { + case octet&0x80 == 0x00: + value = rune(octet & 0x7F) + case octet&0xE0 == 0xC0: + value = rune(octet & 0x1F) + case octet&0xF0 == 0xE0: + value = rune(octet & 0x0F) + case octet&0xF8 == 0xF0: + value = rune(octet & 0x07) + default: + value = 0 + } + + // Check and decode the trailing octets. + for k := 1; k < width; k++ { + octet = parser.raw_buffer[parser.raw_buffer_pos+k] + + // Check if the octet is valid. + if (octet & 0xC0) != 0x80 { + return yaml_parser_set_reader_error(parser, + "invalid trailing UTF-8 octet", + parser.offset+k, int(octet)) + } + + // Decode the octet. + value = (value << 6) + rune(octet&0x3F) + } + + // Check the length of the sequence against the value. + switch { + case width == 1: + case width == 2 && value >= 0x80: + case width == 3 && value >= 0x800: + case width == 4 && value >= 0x10000: + default: + return yaml_parser_set_reader_error(parser, + "invalid length of a UTF-8 sequence", + parser.offset, -1) + } + + // Check the range of the value. + if value >= 0xD800 && value <= 0xDFFF || value > 0x10FFFF { + return yaml_parser_set_reader_error(parser, + "invalid Unicode character", + parser.offset, int(value)) + } + + case yaml_UTF16LE_ENCODING, yaml_UTF16BE_ENCODING: + var low, high int + if parser.encoding == yaml_UTF16LE_ENCODING { + low, high = 0, 1 + } else { + low, high = 1, 0 + } + + // The UTF-16 encoding is not as simple as one might + // naively think. Check RFC 2781 + // (http://www.ietf.org/rfc/rfc2781.txt). + // + // Normally, two subsequent bytes describe a Unicode + // character. However a special technique (called a + // surrogate pair) is used for specifying character + // values larger than 0xFFFF. + // + // A surrogate pair consists of two pseudo-characters: + // high surrogate area (0xD800-0xDBFF) + // low surrogate area (0xDC00-0xDFFF) + // + // The following formulas are used for decoding + // and encoding characters using surrogate pairs: + // + // U = U' + 0x10000 (0x01 00 00 <= U <= 0x10 FF FF) + // U' = yyyyyyyyyyxxxxxxxxxx (0 <= U' <= 0x0F FF FF) + // W1 = 110110yyyyyyyyyy + // W2 = 110111xxxxxxxxxx + // + // where U is the character value, W1 is the high surrogate + // area, W2 is the low surrogate area. + + // Check for incomplete UTF-16 character. + if raw_unread < 2 { + if parser.eof { + return yaml_parser_set_reader_error(parser, + "incomplete UTF-16 character", + parser.offset, -1) + } + break inner + } + + // Get the character. + value = rune(parser.raw_buffer[parser.raw_buffer_pos+low]) + + (rune(parser.raw_buffer[parser.raw_buffer_pos+high]) << 8) + + // Check for unexpected low surrogate area. + if value&0xFC00 == 0xDC00 { + return yaml_parser_set_reader_error(parser, + "unexpected low surrogate area", + parser.offset, int(value)) + } + + // Check for a high surrogate area. + if value&0xFC00 == 0xD800 { + width = 4 + + // Check for incomplete surrogate pair. + if raw_unread < 4 { + if parser.eof { + return yaml_parser_set_reader_error(parser, + "incomplete UTF-16 surrogate pair", + parser.offset, -1) + } + break inner + } + + // Get the next character. + value2 := rune(parser.raw_buffer[parser.raw_buffer_pos+low+2]) + + (rune(parser.raw_buffer[parser.raw_buffer_pos+high+2]) << 8) + + // Check for a low surrogate area. + if value2&0xFC00 != 0xDC00 { + return yaml_parser_set_reader_error(parser, + "expected low surrogate area", + parser.offset+2, int(value2)) + } + + // Generate the value of the surrogate pair. + value = 0x10000 + ((value & 0x3FF) << 10) + (value2 & 0x3FF) + } else { + width = 2 + } + + default: + panic("impossible") + } + + // Check if the character is in the allowed range: + // #x9 | #xA | #xD | [#x20-#x7E] (8 bit) + // | #x85 | [#xA0-#xD7FF] | [#xE000-#xFFFD] (16 bit) + // | [#x10000-#x10FFFF] (32 bit) + switch { + case value == 0x09: + case value == 0x0A: + case value == 0x0D: + case value >= 0x20 && value <= 0x7E: + case value == 0x85: + case value >= 0xA0 && value <= 0xD7FF: + case value >= 0xE000 && value <= 0xFFFD: + case value >= 0x10000 && value <= 0x10FFFF: + default: + return yaml_parser_set_reader_error(parser, + "control characters are not allowed", + parser.offset, int(value)) + } + + // Move the raw pointers. + parser.raw_buffer_pos += width + parser.offset += width + + // Finally put the character into the buffer. + if value <= 0x7F { + // 0000 0000-0000 007F . 0xxxxxxx + parser.buffer[buffer_len+0] = byte(value) + buffer_len += 1 + } else if value <= 0x7FF { + // 0000 0080-0000 07FF . 110xxxxx 10xxxxxx + parser.buffer[buffer_len+0] = byte(0xC0 + (value >> 6)) + parser.buffer[buffer_len+1] = byte(0x80 + (value & 0x3F)) + buffer_len += 2 + } else if value <= 0xFFFF { + // 0000 0800-0000 FFFF . 1110xxxx 10xxxxxx 10xxxxxx + parser.buffer[buffer_len+0] = byte(0xE0 + (value >> 12)) + parser.buffer[buffer_len+1] = byte(0x80 + ((value >> 6) & 0x3F)) + parser.buffer[buffer_len+2] = byte(0x80 + (value & 0x3F)) + buffer_len += 3 + } else { + // 0001 0000-0010 FFFF . 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + parser.buffer[buffer_len+0] = byte(0xF0 + (value >> 18)) + parser.buffer[buffer_len+1] = byte(0x80 + ((value >> 12) & 0x3F)) + parser.buffer[buffer_len+2] = byte(0x80 + ((value >> 6) & 0x3F)) + parser.buffer[buffer_len+3] = byte(0x80 + (value & 0x3F)) + buffer_len += 4 + } + + parser.unread++ + } + + // On EOF, put NUL into the buffer and return. + if parser.eof { + parser.buffer[buffer_len] = 0 + buffer_len++ + parser.unread++ + break + } + } + // [Go] Read the documentation of this function above. To return true, + // we need to have the given length in the buffer. Not doing that means + // every single check that calls this function to make sure the buffer + // has a given length is Go) panicking; or C) accessing invalid memory. + // This happens here due to the EOF above breaking early. + for buffer_len < length { + parser.buffer[buffer_len] = 0 + buffer_len++ + } + parser.buffer = parser.buffer[:buffer_len] + return true +} diff --git a/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/resolve.go b/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/resolve.go new file mode 100644 index 000000000..4120e0c91 --- /dev/null +++ b/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/resolve.go @@ -0,0 +1,258 @@ +package yaml + +import ( + "encoding/base64" + "math" + "regexp" + "strconv" + "strings" + "time" +) + +type resolveMapItem struct { + value interface{} + tag string +} + +var resolveTable = make([]byte, 256) +var resolveMap = make(map[string]resolveMapItem) + +func init() { + t := resolveTable + t[int('+')] = 'S' // Sign + t[int('-')] = 'S' + for _, c := range "0123456789" { + t[int(c)] = 'D' // Digit + } + for _, c := range "yYnNtTfFoO~" { + t[int(c)] = 'M' // In map + } + t[int('.')] = '.' // Float (potentially in map) + + var resolveMapList = []struct { + v interface{} + tag string + l []string + }{ + {true, yaml_BOOL_TAG, []string{"y", "Y", "yes", "Yes", "YES"}}, + {true, yaml_BOOL_TAG, []string{"true", "True", "TRUE"}}, + {true, yaml_BOOL_TAG, []string{"on", "On", "ON"}}, + {false, yaml_BOOL_TAG, []string{"n", "N", "no", "No", "NO"}}, + {false, yaml_BOOL_TAG, []string{"false", "False", "FALSE"}}, + {false, yaml_BOOL_TAG, []string{"off", "Off", "OFF"}}, + {nil, yaml_NULL_TAG, []string{"", "~", "null", "Null", "NULL"}}, + {math.NaN(), yaml_FLOAT_TAG, []string{".nan", ".NaN", ".NAN"}}, + {math.Inf(+1), yaml_FLOAT_TAG, []string{".inf", ".Inf", ".INF"}}, + {math.Inf(+1), yaml_FLOAT_TAG, []string{"+.inf", "+.Inf", "+.INF"}}, + {math.Inf(-1), yaml_FLOAT_TAG, []string{"-.inf", "-.Inf", "-.INF"}}, + {"<<", yaml_MERGE_TAG, []string{"<<"}}, + } + + m := resolveMap + for _, item := range resolveMapList { + for _, s := range item.l { + m[s] = resolveMapItem{item.v, item.tag} + } + } +} + +const longTagPrefix = "tag:yaml.org,2002:" + +func shortTag(tag string) string { + // TODO This can easily be made faster and produce less garbage. + if strings.HasPrefix(tag, longTagPrefix) { + return "!!" + tag[len(longTagPrefix):] + } + return tag +} + +func longTag(tag string) string { + if strings.HasPrefix(tag, "!!") { + return longTagPrefix + tag[2:] + } + return tag +} + +func resolvableTag(tag string) bool { + switch tag { + case "", yaml_STR_TAG, yaml_BOOL_TAG, yaml_INT_TAG, yaml_FLOAT_TAG, yaml_NULL_TAG, yaml_TIMESTAMP_TAG: + return true + } + return false +} + +var yamlStyleFloat = regexp.MustCompile(`^[-+]?(\.[0-9]+|[0-9]+(\.[0-9]*)?)([eE][-+]?[0-9]+)?$`) + +func resolve(tag string, in string) (rtag string, out interface{}) { + if !resolvableTag(tag) { + return tag, in + } + + defer func() { + switch tag { + case "", rtag, yaml_STR_TAG, yaml_BINARY_TAG: + return + case yaml_FLOAT_TAG: + if rtag == yaml_INT_TAG { + switch v := out.(type) { + case int64: + rtag = yaml_FLOAT_TAG + out = float64(v) + return + case int: + rtag = yaml_FLOAT_TAG + out = float64(v) + return + } + } + } + failf("cannot decode %s `%s` as a %s", shortTag(rtag), in, shortTag(tag)) + }() + + // Any data is accepted as a !!str or !!binary. + // Otherwise, the prefix is enough of a hint about what it might be. + hint := byte('N') + if in != "" { + hint = resolveTable[in[0]] + } + if hint != 0 && tag != yaml_STR_TAG && tag != yaml_BINARY_TAG { + // Handle things we can lookup in a map. + if item, ok := resolveMap[in]; ok { + return item.tag, item.value + } + + // Base 60 floats are a bad idea, were dropped in YAML 1.2, and + // are purposefully unsupported here. They're still quoted on + // the way out for compatibility with other parser, though. + + switch hint { + case 'M': + // We've already checked the map above. + + case '.': + // Not in the map, so maybe a normal float. + floatv, err := strconv.ParseFloat(in, 64) + if err == nil { + return yaml_FLOAT_TAG, floatv + } + + case 'D', 'S': + // Int, float, or timestamp. + // Only try values as a timestamp if the value is unquoted or there's an explicit + // !!timestamp tag. + if tag == "" || tag == yaml_TIMESTAMP_TAG { + t, ok := parseTimestamp(in) + if ok { + return yaml_TIMESTAMP_TAG, t + } + } + + plain := strings.Replace(in, "_", "", -1) + intv, err := strconv.ParseInt(plain, 0, 64) + if err == nil { + if intv == int64(int(intv)) { + return yaml_INT_TAG, int(intv) + } else { + return yaml_INT_TAG, intv + } + } + uintv, err := strconv.ParseUint(plain, 0, 64) + if err == nil { + return yaml_INT_TAG, uintv + } + if yamlStyleFloat.MatchString(plain) { + floatv, err := strconv.ParseFloat(plain, 64) + if err == nil { + return yaml_FLOAT_TAG, floatv + } + } + if strings.HasPrefix(plain, "0b") { + intv, err := strconv.ParseInt(plain[2:], 2, 64) + if err == nil { + if intv == int64(int(intv)) { + return yaml_INT_TAG, int(intv) + } else { + return yaml_INT_TAG, intv + } + } + uintv, err := strconv.ParseUint(plain[2:], 2, 64) + if err == nil { + return yaml_INT_TAG, uintv + } + } else if strings.HasPrefix(plain, "-0b") { + intv, err := strconv.ParseInt("-" + plain[3:], 2, 64) + if err == nil { + if true || intv == int64(int(intv)) { + return yaml_INT_TAG, int(intv) + } else { + return yaml_INT_TAG, intv + } + } + } + default: + panic("resolveTable item not yet handled: " + string(rune(hint)) + " (with " + in + ")") + } + } + return yaml_STR_TAG, in +} + +// encodeBase64 encodes s as base64 that is broken up into multiple lines +// as appropriate for the resulting length. +func encodeBase64(s string) string { + const lineLen = 70 + encLen := base64.StdEncoding.EncodedLen(len(s)) + lines := encLen/lineLen + 1 + buf := make([]byte, encLen*2+lines) + in := buf[0:encLen] + out := buf[encLen:] + base64.StdEncoding.Encode(in, []byte(s)) + k := 0 + for i := 0; i < len(in); i += lineLen { + j := i + lineLen + if j > len(in) { + j = len(in) + } + k += copy(out[k:], in[i:j]) + if lines > 1 { + out[k] = '\n' + k++ + } + } + return string(out[:k]) +} + +// This is a subset of the formats allowed by the regular expression +// defined at http://yaml.org/type/timestamp.html. +var allowedTimestampFormats = []string{ + "2006-1-2T15:4:5.999999999Z07:00", // RCF3339Nano with short date fields. + "2006-1-2t15:4:5.999999999Z07:00", // RFC3339Nano with short date fields and lower-case "t". + "2006-1-2 15:4:5.999999999", // space separated with no time zone + "2006-1-2", // date only + // Notable exception: time.Parse cannot handle: "2001-12-14 21:59:43.10 -5" + // from the set of examples. +} + +// parseTimestamp parses s as a timestamp string and +// returns the timestamp and reports whether it succeeded. +// Timestamp formats are defined at http://yaml.org/type/timestamp.html +func parseTimestamp(s string) (time.Time, bool) { + // TODO write code to check all the formats supported by + // http://yaml.org/type/timestamp.html instead of using time.Parse. + + // Quick check: all date formats start with YYYY-. + i := 0 + for ; i < len(s); i++ { + if c := s[i]; c < '0' || c > '9' { + break + } + } + if i != 4 || i == len(s) || s[i] != '-' { + return time.Time{}, false + } + for _, format := range allowedTimestampFormats { + if t, err := time.Parse(format, s); err == nil { + return t, true + } + } + return time.Time{}, false +} diff --git a/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/scannerc.go b/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/scannerc.go new file mode 100644 index 000000000..0b9bb6030 --- /dev/null +++ b/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/scannerc.go @@ -0,0 +1,2711 @@ +package yaml + +import ( + "bytes" + "fmt" +) + +// Introduction +// ************ +// +// The following notes assume that you are familiar with the YAML specification +// (http://yaml.org/spec/1.2/spec.html). We mostly follow it, although in +// some cases we are less restrictive that it requires. +// +// The process of transforming a YAML stream into a sequence of events is +// divided on two steps: Scanning and Parsing. +// +// The Scanner transforms the input stream into a sequence of tokens, while the +// parser transform the sequence of tokens produced by the Scanner into a +// sequence of parsing events. +// +// The Scanner is rather clever and complicated. The Parser, on the contrary, +// is a straightforward implementation of a recursive-descendant parser (or, +// LL(1) parser, as it is usually called). +// +// Actually there are two issues of Scanning that might be called "clever", the +// rest is quite straightforward. The issues are "block collection start" and +// "simple keys". Both issues are explained below in details. +// +// Here the Scanning step is explained and implemented. We start with the list +// of all the tokens produced by the Scanner together with short descriptions. +// +// Now, tokens: +// +// STREAM-START(encoding) # The stream start. +// STREAM-END # The stream end. +// VERSION-DIRECTIVE(major,minor) # The '%YAML' directive. +// TAG-DIRECTIVE(handle,prefix) # The '%TAG' directive. +// DOCUMENT-START # '---' +// DOCUMENT-END # '...' +// BLOCK-SEQUENCE-START # Indentation increase denoting a block +// BLOCK-MAPPING-START # sequence or a block mapping. +// BLOCK-END # Indentation decrease. +// FLOW-SEQUENCE-START # '[' +// FLOW-SEQUENCE-END # ']' +// BLOCK-SEQUENCE-START # '{' +// BLOCK-SEQUENCE-END # '}' +// BLOCK-ENTRY # '-' +// FLOW-ENTRY # ',' +// KEY # '?' or nothing (simple keys). +// VALUE # ':' +// ALIAS(anchor) # '*anchor' +// ANCHOR(anchor) # '&anchor' +// TAG(handle,suffix) # '!handle!suffix' +// SCALAR(value,style) # A scalar. +// +// The following two tokens are "virtual" tokens denoting the beginning and the +// end of the stream: +// +// STREAM-START(encoding) +// STREAM-END +// +// We pass the information about the input stream encoding with the +// STREAM-START token. +// +// The next two tokens are responsible for tags: +// +// VERSION-DIRECTIVE(major,minor) +// TAG-DIRECTIVE(handle,prefix) +// +// Example: +// +// %YAML 1.1 +// %TAG ! !foo +// %TAG !yaml! tag:yaml.org,2002: +// --- +// +// The correspoding sequence of tokens: +// +// STREAM-START(utf-8) +// VERSION-DIRECTIVE(1,1) +// TAG-DIRECTIVE("!","!foo") +// TAG-DIRECTIVE("!yaml","tag:yaml.org,2002:") +// DOCUMENT-START +// STREAM-END +// +// Note that the VERSION-DIRECTIVE and TAG-DIRECTIVE tokens occupy a whole +// line. +// +// The document start and end indicators are represented by: +// +// DOCUMENT-START +// DOCUMENT-END +// +// Note that if a YAML stream contains an implicit document (without '---' +// and '...' indicators), no DOCUMENT-START and DOCUMENT-END tokens will be +// produced. +// +// In the following examples, we present whole documents together with the +// produced tokens. +// +// 1. An implicit document: +// +// 'a scalar' +// +// Tokens: +// +// STREAM-START(utf-8) +// SCALAR("a scalar",single-quoted) +// STREAM-END +// +// 2. An explicit document: +// +// --- +// 'a scalar' +// ... +// +// Tokens: +// +// STREAM-START(utf-8) +// DOCUMENT-START +// SCALAR("a scalar",single-quoted) +// DOCUMENT-END +// STREAM-END +// +// 3. Several documents in a stream: +// +// 'a scalar' +// --- +// 'another scalar' +// --- +// 'yet another scalar' +// +// Tokens: +// +// STREAM-START(utf-8) +// SCALAR("a scalar",single-quoted) +// DOCUMENT-START +// SCALAR("another scalar",single-quoted) +// DOCUMENT-START +// SCALAR("yet another scalar",single-quoted) +// STREAM-END +// +// We have already introduced the SCALAR token above. The following tokens are +// used to describe aliases, anchors, tag, and scalars: +// +// ALIAS(anchor) +// ANCHOR(anchor) +// TAG(handle,suffix) +// SCALAR(value,style) +// +// The following series of examples illustrate the usage of these tokens: +// +// 1. A recursive sequence: +// +// &A [ *A ] +// +// Tokens: +// +// STREAM-START(utf-8) +// ANCHOR("A") +// FLOW-SEQUENCE-START +// ALIAS("A") +// FLOW-SEQUENCE-END +// STREAM-END +// +// 2. A tagged scalar: +// +// !!float "3.14" # A good approximation. +// +// Tokens: +// +// STREAM-START(utf-8) +// TAG("!!","float") +// SCALAR("3.14",double-quoted) +// STREAM-END +// +// 3. Various scalar styles: +// +// --- # Implicit empty plain scalars do not produce tokens. +// --- a plain scalar +// --- 'a single-quoted scalar' +// --- "a double-quoted scalar" +// --- |- +// a literal scalar +// --- >- +// a folded +// scalar +// +// Tokens: +// +// STREAM-START(utf-8) +// DOCUMENT-START +// DOCUMENT-START +// SCALAR("a plain scalar",plain) +// DOCUMENT-START +// SCALAR("a single-quoted scalar",single-quoted) +// DOCUMENT-START +// SCALAR("a double-quoted scalar",double-quoted) +// DOCUMENT-START +// SCALAR("a literal scalar",literal) +// DOCUMENT-START +// SCALAR("a folded scalar",folded) +// STREAM-END +// +// Now it's time to review collection-related tokens. We will start with +// flow collections: +// +// FLOW-SEQUENCE-START +// FLOW-SEQUENCE-END +// FLOW-MAPPING-START +// FLOW-MAPPING-END +// FLOW-ENTRY +// KEY +// VALUE +// +// The tokens FLOW-SEQUENCE-START, FLOW-SEQUENCE-END, FLOW-MAPPING-START, and +// FLOW-MAPPING-END represent the indicators '[', ']', '{', and '}' +// correspondingly. FLOW-ENTRY represent the ',' indicator. Finally the +// indicators '?' and ':', which are used for denoting mapping keys and values, +// are represented by the KEY and VALUE tokens. +// +// The following examples show flow collections: +// +// 1. A flow sequence: +// +// [item 1, item 2, item 3] +// +// Tokens: +// +// STREAM-START(utf-8) +// FLOW-SEQUENCE-START +// SCALAR("item 1",plain) +// FLOW-ENTRY +// SCALAR("item 2",plain) +// FLOW-ENTRY +// SCALAR("item 3",plain) +// FLOW-SEQUENCE-END +// STREAM-END +// +// 2. A flow mapping: +// +// { +// a simple key: a value, # Note that the KEY token is produced. +// ? a complex key: another value, +// } +// +// Tokens: +// +// STREAM-START(utf-8) +// FLOW-MAPPING-START +// KEY +// SCALAR("a simple key",plain) +// VALUE +// SCALAR("a value",plain) +// FLOW-ENTRY +// KEY +// SCALAR("a complex key",plain) +// VALUE +// SCALAR("another value",plain) +// FLOW-ENTRY +// FLOW-MAPPING-END +// STREAM-END +// +// A simple key is a key which is not denoted by the '?' indicator. Note that +// the Scanner still produce the KEY token whenever it encounters a simple key. +// +// For scanning block collections, the following tokens are used (note that we +// repeat KEY and VALUE here): +// +// BLOCK-SEQUENCE-START +// BLOCK-MAPPING-START +// BLOCK-END +// BLOCK-ENTRY +// KEY +// VALUE +// +// The tokens BLOCK-SEQUENCE-START and BLOCK-MAPPING-START denote indentation +// increase that precedes a block collection (cf. the INDENT token in Python). +// The token BLOCK-END denote indentation decrease that ends a block collection +// (cf. the DEDENT token in Python). However YAML has some syntax pecularities +// that makes detections of these tokens more complex. +// +// The tokens BLOCK-ENTRY, KEY, and VALUE are used to represent the indicators +// '-', '?', and ':' correspondingly. +// +// The following examples show how the tokens BLOCK-SEQUENCE-START, +// BLOCK-MAPPING-START, and BLOCK-END are emitted by the Scanner: +// +// 1. Block sequences: +// +// - item 1 +// - item 2 +// - +// - item 3.1 +// - item 3.2 +// - +// key 1: value 1 +// key 2: value 2 +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-ENTRY +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 3.1",plain) +// BLOCK-ENTRY +// SCALAR("item 3.2",plain) +// BLOCK-END +// BLOCK-ENTRY +// BLOCK-MAPPING-START +// KEY +// SCALAR("key 1",plain) +// VALUE +// SCALAR("value 1",plain) +// KEY +// SCALAR("key 2",plain) +// VALUE +// SCALAR("value 2",plain) +// BLOCK-END +// BLOCK-END +// STREAM-END +// +// 2. Block mappings: +// +// a simple key: a value # The KEY token is produced here. +// ? a complex key +// : another value +// a mapping: +// key 1: value 1 +// key 2: value 2 +// a sequence: +// - item 1 +// - item 2 +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-MAPPING-START +// KEY +// SCALAR("a simple key",plain) +// VALUE +// SCALAR("a value",plain) +// KEY +// SCALAR("a complex key",plain) +// VALUE +// SCALAR("another value",plain) +// KEY +// SCALAR("a mapping",plain) +// BLOCK-MAPPING-START +// KEY +// SCALAR("key 1",plain) +// VALUE +// SCALAR("value 1",plain) +// KEY +// SCALAR("key 2",plain) +// VALUE +// SCALAR("value 2",plain) +// BLOCK-END +// KEY +// SCALAR("a sequence",plain) +// VALUE +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-END +// BLOCK-END +// STREAM-END +// +// YAML does not always require to start a new block collection from a new +// line. If the current line contains only '-', '?', and ':' indicators, a new +// block collection may start at the current line. The following examples +// illustrate this case: +// +// 1. Collections in a sequence: +// +// - - item 1 +// - item 2 +// - key 1: value 1 +// key 2: value 2 +// - ? complex key +// : complex value +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-END +// BLOCK-ENTRY +// BLOCK-MAPPING-START +// KEY +// SCALAR("key 1",plain) +// VALUE +// SCALAR("value 1",plain) +// KEY +// SCALAR("key 2",plain) +// VALUE +// SCALAR("value 2",plain) +// BLOCK-END +// BLOCK-ENTRY +// BLOCK-MAPPING-START +// KEY +// SCALAR("complex key") +// VALUE +// SCALAR("complex value") +// BLOCK-END +// BLOCK-END +// STREAM-END +// +// 2. Collections in a mapping: +// +// ? a sequence +// : - item 1 +// - item 2 +// ? a mapping +// : key 1: value 1 +// key 2: value 2 +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-MAPPING-START +// KEY +// SCALAR("a sequence",plain) +// VALUE +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-END +// KEY +// SCALAR("a mapping",plain) +// VALUE +// BLOCK-MAPPING-START +// KEY +// SCALAR("key 1",plain) +// VALUE +// SCALAR("value 1",plain) +// KEY +// SCALAR("key 2",plain) +// VALUE +// SCALAR("value 2",plain) +// BLOCK-END +// BLOCK-END +// STREAM-END +// +// YAML also permits non-indented sequences if they are included into a block +// mapping. In this case, the token BLOCK-SEQUENCE-START is not produced: +// +// key: +// - item 1 # BLOCK-SEQUENCE-START is NOT produced here. +// - item 2 +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-MAPPING-START +// KEY +// SCALAR("key",plain) +// VALUE +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-END +// + +// Ensure that the buffer contains the required number of characters. +// Return true on success, false on failure (reader error or memory error). +func cache(parser *yaml_parser_t, length int) bool { + // [Go] This was inlined: !cache(A, B) -> unread < B && !update(A, B) + return parser.unread >= length || yaml_parser_update_buffer(parser, length) +} + +// Advance the buffer pointer. +func skip(parser *yaml_parser_t) { + parser.mark.index++ + parser.mark.column++ + parser.unread-- + parser.buffer_pos += width(parser.buffer[parser.buffer_pos]) +} + +func skip_line(parser *yaml_parser_t) { + if is_crlf(parser.buffer, parser.buffer_pos) { + parser.mark.index += 2 + parser.mark.column = 0 + parser.mark.line++ + parser.unread -= 2 + parser.buffer_pos += 2 + } else if is_break(parser.buffer, parser.buffer_pos) { + parser.mark.index++ + parser.mark.column = 0 + parser.mark.line++ + parser.unread-- + parser.buffer_pos += width(parser.buffer[parser.buffer_pos]) + } +} + +// Copy a character to a string buffer and advance pointers. +func read(parser *yaml_parser_t, s []byte) []byte { + w := width(parser.buffer[parser.buffer_pos]) + if w == 0 { + panic("invalid character sequence") + } + if len(s) == 0 { + s = make([]byte, 0, 32) + } + if w == 1 && len(s)+w <= cap(s) { + s = s[:len(s)+1] + s[len(s)-1] = parser.buffer[parser.buffer_pos] + parser.buffer_pos++ + } else { + s = append(s, parser.buffer[parser.buffer_pos:parser.buffer_pos+w]...) + parser.buffer_pos += w + } + parser.mark.index++ + parser.mark.column++ + parser.unread-- + return s +} + +// Copy a line break character to a string buffer and advance pointers. +func read_line(parser *yaml_parser_t, s []byte) []byte { + buf := parser.buffer + pos := parser.buffer_pos + switch { + case buf[pos] == '\r' && buf[pos+1] == '\n': + // CR LF . LF + s = append(s, '\n') + parser.buffer_pos += 2 + parser.mark.index++ + parser.unread-- + case buf[pos] == '\r' || buf[pos] == '\n': + // CR|LF . LF + s = append(s, '\n') + parser.buffer_pos += 1 + case buf[pos] == '\xC2' && buf[pos+1] == '\x85': + // NEL . LF + s = append(s, '\n') + parser.buffer_pos += 2 + case buf[pos] == '\xE2' && buf[pos+1] == '\x80' && (buf[pos+2] == '\xA8' || buf[pos+2] == '\xA9'): + // LS|PS . LS|PS + s = append(s, buf[parser.buffer_pos:pos+3]...) + parser.buffer_pos += 3 + default: + return s + } + parser.mark.index++ + parser.mark.column = 0 + parser.mark.line++ + parser.unread-- + return s +} + +// Get the next token. +func yaml_parser_scan(parser *yaml_parser_t, token *yaml_token_t) bool { + // Erase the token object. + *token = yaml_token_t{} // [Go] Is this necessary? + + // No tokens after STREAM-END or error. + if parser.stream_end_produced || parser.error != yaml_NO_ERROR { + return true + } + + // Ensure that the tokens queue contains enough tokens. + if !parser.token_available { + if !yaml_parser_fetch_more_tokens(parser) { + return false + } + } + + // Fetch the next token from the queue. + *token = parser.tokens[parser.tokens_head] + parser.tokens_head++ + parser.tokens_parsed++ + parser.token_available = false + + if token.typ == yaml_STREAM_END_TOKEN { + parser.stream_end_produced = true + } + return true +} + +// Set the scanner error and return false. +func yaml_parser_set_scanner_error(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string) bool { + parser.error = yaml_SCANNER_ERROR + parser.context = context + parser.context_mark = context_mark + parser.problem = problem + parser.problem_mark = parser.mark + return false +} + +func yaml_parser_set_scanner_tag_error(parser *yaml_parser_t, directive bool, context_mark yaml_mark_t, problem string) bool { + context := "while parsing a tag" + if directive { + context = "while parsing a %TAG directive" + } + return yaml_parser_set_scanner_error(parser, context, context_mark, problem) +} + +func trace(args ...interface{}) func() { + pargs := append([]interface{}{"+++"}, args...) + fmt.Println(pargs...) + pargs = append([]interface{}{"---"}, args...) + return func() { fmt.Println(pargs...) } +} + +// Ensure that the tokens queue contains at least one token which can be +// returned to the Parser. +func yaml_parser_fetch_more_tokens(parser *yaml_parser_t) bool { + // While we need more tokens to fetch, do it. + for { + if parser.tokens_head != len(parser.tokens) { + // If queue is non-empty, check if any potential simple key may + // occupy the head position. + head_tok_idx, ok := parser.simple_keys_by_tok[parser.tokens_parsed] + if !ok { + break + } else if valid, ok := yaml_simple_key_is_valid(parser, &parser.simple_keys[head_tok_idx]); !ok { + return false + } else if !valid { + break + } + } + // Fetch the next token. + if !yaml_parser_fetch_next_token(parser) { + return false + } + } + + parser.token_available = true + return true +} + +// The dispatcher for token fetchers. +func yaml_parser_fetch_next_token(parser *yaml_parser_t) bool { + // Ensure that the buffer is initialized. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + // Check if we just started scanning. Fetch STREAM-START then. + if !parser.stream_start_produced { + return yaml_parser_fetch_stream_start(parser) + } + + // Eat whitespaces and comments until we reach the next token. + if !yaml_parser_scan_to_next_token(parser) { + return false + } + + // Check the indentation level against the current column. + if !yaml_parser_unroll_indent(parser, parser.mark.column) { + return false + } + + // Ensure that the buffer contains at least 4 characters. 4 is the length + // of the longest indicators ('--- ' and '... '). + if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) { + return false + } + + // Is it the end of the stream? + if is_z(parser.buffer, parser.buffer_pos) { + return yaml_parser_fetch_stream_end(parser) + } + + // Is it a directive? + if parser.mark.column == 0 && parser.buffer[parser.buffer_pos] == '%' { + return yaml_parser_fetch_directive(parser) + } + + buf := parser.buffer + pos := parser.buffer_pos + + // Is it the document start indicator? + if parser.mark.column == 0 && buf[pos] == '-' && buf[pos+1] == '-' && buf[pos+2] == '-' && is_blankz(buf, pos+3) { + return yaml_parser_fetch_document_indicator(parser, yaml_DOCUMENT_START_TOKEN) + } + + // Is it the document end indicator? + if parser.mark.column == 0 && buf[pos] == '.' && buf[pos+1] == '.' && buf[pos+2] == '.' && is_blankz(buf, pos+3) { + return yaml_parser_fetch_document_indicator(parser, yaml_DOCUMENT_END_TOKEN) + } + + // Is it the flow sequence start indicator? + if buf[pos] == '[' { + return yaml_parser_fetch_flow_collection_start(parser, yaml_FLOW_SEQUENCE_START_TOKEN) + } + + // Is it the flow mapping start indicator? + if parser.buffer[parser.buffer_pos] == '{' { + return yaml_parser_fetch_flow_collection_start(parser, yaml_FLOW_MAPPING_START_TOKEN) + } + + // Is it the flow sequence end indicator? + if parser.buffer[parser.buffer_pos] == ']' { + return yaml_parser_fetch_flow_collection_end(parser, + yaml_FLOW_SEQUENCE_END_TOKEN) + } + + // Is it the flow mapping end indicator? + if parser.buffer[parser.buffer_pos] == '}' { + return yaml_parser_fetch_flow_collection_end(parser, + yaml_FLOW_MAPPING_END_TOKEN) + } + + // Is it the flow entry indicator? + if parser.buffer[parser.buffer_pos] == ',' { + return yaml_parser_fetch_flow_entry(parser) + } + + // Is it the block entry indicator? + if parser.buffer[parser.buffer_pos] == '-' && is_blankz(parser.buffer, parser.buffer_pos+1) { + return yaml_parser_fetch_block_entry(parser) + } + + // Is it the key indicator? + if parser.buffer[parser.buffer_pos] == '?' && (parser.flow_level > 0 || is_blankz(parser.buffer, parser.buffer_pos+1)) { + return yaml_parser_fetch_key(parser) + } + + // Is it the value indicator? + if parser.buffer[parser.buffer_pos] == ':' && (parser.flow_level > 0 || is_blankz(parser.buffer, parser.buffer_pos+1)) { + return yaml_parser_fetch_value(parser) + } + + // Is it an alias? + if parser.buffer[parser.buffer_pos] == '*' { + return yaml_parser_fetch_anchor(parser, yaml_ALIAS_TOKEN) + } + + // Is it an anchor? + if parser.buffer[parser.buffer_pos] == '&' { + return yaml_parser_fetch_anchor(parser, yaml_ANCHOR_TOKEN) + } + + // Is it a tag? + if parser.buffer[parser.buffer_pos] == '!' { + return yaml_parser_fetch_tag(parser) + } + + // Is it a literal scalar? + if parser.buffer[parser.buffer_pos] == '|' && parser.flow_level == 0 { + return yaml_parser_fetch_block_scalar(parser, true) + } + + // Is it a folded scalar? + if parser.buffer[parser.buffer_pos] == '>' && parser.flow_level == 0 { + return yaml_parser_fetch_block_scalar(parser, false) + } + + // Is it a single-quoted scalar? + if parser.buffer[parser.buffer_pos] == '\'' { + return yaml_parser_fetch_flow_scalar(parser, true) + } + + // Is it a double-quoted scalar? + if parser.buffer[parser.buffer_pos] == '"' { + return yaml_parser_fetch_flow_scalar(parser, false) + } + + // Is it a plain scalar? + // + // A plain scalar may start with any non-blank characters except + // + // '-', '?', ':', ',', '[', ']', '{', '}', + // '#', '&', '*', '!', '|', '>', '\'', '\"', + // '%', '@', '`'. + // + // In the block context (and, for the '-' indicator, in the flow context + // too), it may also start with the characters + // + // '-', '?', ':' + // + // if it is followed by a non-space character. + // + // The last rule is more restrictive than the specification requires. + // [Go] Make this logic more reasonable. + //switch parser.buffer[parser.buffer_pos] { + //case '-', '?', ':', ',', '?', '-', ',', ':', ']', '[', '}', '{', '&', '#', '!', '*', '>', '|', '"', '\'', '@', '%', '-', '`': + //} + if !(is_blankz(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == '-' || + parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == ':' || + parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '[' || + parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' || + parser.buffer[parser.buffer_pos] == '}' || parser.buffer[parser.buffer_pos] == '#' || + parser.buffer[parser.buffer_pos] == '&' || parser.buffer[parser.buffer_pos] == '*' || + parser.buffer[parser.buffer_pos] == '!' || parser.buffer[parser.buffer_pos] == '|' || + parser.buffer[parser.buffer_pos] == '>' || parser.buffer[parser.buffer_pos] == '\'' || + parser.buffer[parser.buffer_pos] == '"' || parser.buffer[parser.buffer_pos] == '%' || + parser.buffer[parser.buffer_pos] == '@' || parser.buffer[parser.buffer_pos] == '`') || + (parser.buffer[parser.buffer_pos] == '-' && !is_blank(parser.buffer, parser.buffer_pos+1)) || + (parser.flow_level == 0 && + (parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == ':') && + !is_blankz(parser.buffer, parser.buffer_pos+1)) { + return yaml_parser_fetch_plain_scalar(parser) + } + + // If we don't determine the token type so far, it is an error. + return yaml_parser_set_scanner_error(parser, + "while scanning for the next token", parser.mark, + "found character that cannot start any token") +} + +func yaml_simple_key_is_valid(parser *yaml_parser_t, simple_key *yaml_simple_key_t) (valid, ok bool) { + if !simple_key.possible { + return false, true + } + + // The 1.2 specification says: + // + // "If the ? indicator is omitted, parsing needs to see past the + // implicit key to recognize it as such. To limit the amount of + // lookahead required, the “:” indicator must appear at most 1024 + // Unicode characters beyond the start of the key. In addition, the key + // is restricted to a single line." + // + if simple_key.mark.line < parser.mark.line || simple_key.mark.index+1024 < parser.mark.index { + // Check if the potential simple key to be removed is required. + if simple_key.required { + return false, yaml_parser_set_scanner_error(parser, + "while scanning a simple key", simple_key.mark, + "could not find expected ':'") + } + simple_key.possible = false + return false, true + } + return true, true +} + +// Check if a simple key may start at the current position and add it if +// needed. +func yaml_parser_save_simple_key(parser *yaml_parser_t) bool { + // A simple key is required at the current position if the scanner is in + // the block context and the current column coincides with the indentation + // level. + + required := parser.flow_level == 0 && parser.indent == parser.mark.column + + // + // If the current position may start a simple key, save it. + // + if parser.simple_key_allowed { + simple_key := yaml_simple_key_t{ + possible: true, + required: required, + token_number: parser.tokens_parsed + (len(parser.tokens) - parser.tokens_head), + mark: parser.mark, + } + + if !yaml_parser_remove_simple_key(parser) { + return false + } + parser.simple_keys[len(parser.simple_keys)-1] = simple_key + parser.simple_keys_by_tok[simple_key.token_number] = len(parser.simple_keys) - 1 + } + return true +} + +// Remove a potential simple key at the current flow level. +func yaml_parser_remove_simple_key(parser *yaml_parser_t) bool { + i := len(parser.simple_keys) - 1 + if parser.simple_keys[i].possible { + // If the key is required, it is an error. + if parser.simple_keys[i].required { + return yaml_parser_set_scanner_error(parser, + "while scanning a simple key", parser.simple_keys[i].mark, + "could not find expected ':'") + } + // Remove the key from the stack. + parser.simple_keys[i].possible = false + delete(parser.simple_keys_by_tok, parser.simple_keys[i].token_number) + } + return true +} + +// max_flow_level limits the flow_level +const max_flow_level = 10000 + +// Increase the flow level and resize the simple key list if needed. +func yaml_parser_increase_flow_level(parser *yaml_parser_t) bool { + // Reset the simple key on the next level. + parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{ + possible: false, + required: false, + token_number: parser.tokens_parsed + (len(parser.tokens) - parser.tokens_head), + mark: parser.mark, + }) + + // Increase the flow level. + parser.flow_level++ + if parser.flow_level > max_flow_level { + return yaml_parser_set_scanner_error(parser, + "while increasing flow level", parser.simple_keys[len(parser.simple_keys)-1].mark, + fmt.Sprintf("exceeded max depth of %d", max_flow_level)) + } + return true +} + +// Decrease the flow level. +func yaml_parser_decrease_flow_level(parser *yaml_parser_t) bool { + if parser.flow_level > 0 { + parser.flow_level-- + last := len(parser.simple_keys) - 1 + delete(parser.simple_keys_by_tok, parser.simple_keys[last].token_number) + parser.simple_keys = parser.simple_keys[:last] + } + return true +} + +// max_indents limits the indents stack size +const max_indents = 10000 + +// Push the current indentation level to the stack and set the new level +// the current column is greater than the indentation level. In this case, +// append or insert the specified token into the token queue. +func yaml_parser_roll_indent(parser *yaml_parser_t, column, number int, typ yaml_token_type_t, mark yaml_mark_t) bool { + // In the flow context, do nothing. + if parser.flow_level > 0 { + return true + } + + if parser.indent < column { + // Push the current indentation level to the stack and set the new + // indentation level. + parser.indents = append(parser.indents, parser.indent) + parser.indent = column + if len(parser.indents) > max_indents { + return yaml_parser_set_scanner_error(parser, + "while increasing indent level", parser.simple_keys[len(parser.simple_keys)-1].mark, + fmt.Sprintf("exceeded max depth of %d", max_indents)) + } + + // Create a token and insert it into the queue. + token := yaml_token_t{ + typ: typ, + start_mark: mark, + end_mark: mark, + } + if number > -1 { + number -= parser.tokens_parsed + } + yaml_insert_token(parser, number, &token) + } + return true +} + +// Pop indentation levels from the indents stack until the current level +// becomes less or equal to the column. For each indentation level, append +// the BLOCK-END token. +func yaml_parser_unroll_indent(parser *yaml_parser_t, column int) bool { + // In the flow context, do nothing. + if parser.flow_level > 0 { + return true + } + + // Loop through the indentation levels in the stack. + for parser.indent > column { + // Create a token and append it to the queue. + token := yaml_token_t{ + typ: yaml_BLOCK_END_TOKEN, + start_mark: parser.mark, + end_mark: parser.mark, + } + yaml_insert_token(parser, -1, &token) + + // Pop the indentation level. + parser.indent = parser.indents[len(parser.indents)-1] + parser.indents = parser.indents[:len(parser.indents)-1] + } + return true +} + +// Initialize the scanner and produce the STREAM-START token. +func yaml_parser_fetch_stream_start(parser *yaml_parser_t) bool { + + // Set the initial indentation. + parser.indent = -1 + + // Initialize the simple key stack. + parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{}) + + parser.simple_keys_by_tok = make(map[int]int) + + // A simple key is allowed at the beginning of the stream. + parser.simple_key_allowed = true + + // We have started. + parser.stream_start_produced = true + + // Create the STREAM-START token and append it to the queue. + token := yaml_token_t{ + typ: yaml_STREAM_START_TOKEN, + start_mark: parser.mark, + end_mark: parser.mark, + encoding: parser.encoding, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the STREAM-END token and shut down the scanner. +func yaml_parser_fetch_stream_end(parser *yaml_parser_t) bool { + + // Force new line. + if parser.mark.column != 0 { + parser.mark.column = 0 + parser.mark.line++ + } + + // Reset the indentation level. + if !yaml_parser_unroll_indent(parser, -1) { + return false + } + + // Reset simple keys. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + parser.simple_key_allowed = false + + // Create the STREAM-END token and append it to the queue. + token := yaml_token_t{ + typ: yaml_STREAM_END_TOKEN, + start_mark: parser.mark, + end_mark: parser.mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce a VERSION-DIRECTIVE or TAG-DIRECTIVE token. +func yaml_parser_fetch_directive(parser *yaml_parser_t) bool { + // Reset the indentation level. + if !yaml_parser_unroll_indent(parser, -1) { + return false + } + + // Reset simple keys. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + parser.simple_key_allowed = false + + // Create the YAML-DIRECTIVE or TAG-DIRECTIVE token. + token := yaml_token_t{} + if !yaml_parser_scan_directive(parser, &token) { + return false + } + // Append the token to the queue. + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the DOCUMENT-START or DOCUMENT-END token. +func yaml_parser_fetch_document_indicator(parser *yaml_parser_t, typ yaml_token_type_t) bool { + // Reset the indentation level. + if !yaml_parser_unroll_indent(parser, -1) { + return false + } + + // Reset simple keys. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + parser.simple_key_allowed = false + + // Consume the token. + start_mark := parser.mark + + skip(parser) + skip(parser) + skip(parser) + + end_mark := parser.mark + + // Create the DOCUMENT-START or DOCUMENT-END token. + token := yaml_token_t{ + typ: typ, + start_mark: start_mark, + end_mark: end_mark, + } + // Append the token to the queue. + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the FLOW-SEQUENCE-START or FLOW-MAPPING-START token. +func yaml_parser_fetch_flow_collection_start(parser *yaml_parser_t, typ yaml_token_type_t) bool { + // The indicators '[' and '{' may start a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // Increase the flow level. + if !yaml_parser_increase_flow_level(parser) { + return false + } + + // A simple key may follow the indicators '[' and '{'. + parser.simple_key_allowed = true + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the FLOW-SEQUENCE-START of FLOW-MAPPING-START token. + token := yaml_token_t{ + typ: typ, + start_mark: start_mark, + end_mark: end_mark, + } + // Append the token to the queue. + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the FLOW-SEQUENCE-END or FLOW-MAPPING-END token. +func yaml_parser_fetch_flow_collection_end(parser *yaml_parser_t, typ yaml_token_type_t) bool { + // Reset any potential simple key on the current flow level. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // Decrease the flow level. + if !yaml_parser_decrease_flow_level(parser) { + return false + } + + // No simple keys after the indicators ']' and '}'. + parser.simple_key_allowed = false + + // Consume the token. + + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the FLOW-SEQUENCE-END of FLOW-MAPPING-END token. + token := yaml_token_t{ + typ: typ, + start_mark: start_mark, + end_mark: end_mark, + } + // Append the token to the queue. + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the FLOW-ENTRY token. +func yaml_parser_fetch_flow_entry(parser *yaml_parser_t) bool { + // Reset any potential simple keys on the current flow level. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // Simple keys are allowed after ','. + parser.simple_key_allowed = true + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the FLOW-ENTRY token and append it to the queue. + token := yaml_token_t{ + typ: yaml_FLOW_ENTRY_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the BLOCK-ENTRY token. +func yaml_parser_fetch_block_entry(parser *yaml_parser_t) bool { + // Check if the scanner is in the block context. + if parser.flow_level == 0 { + // Check if we are allowed to start a new entry. + if !parser.simple_key_allowed { + return yaml_parser_set_scanner_error(parser, "", parser.mark, + "block sequence entries are not allowed in this context") + } + // Add the BLOCK-SEQUENCE-START token if needed. + if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_SEQUENCE_START_TOKEN, parser.mark) { + return false + } + } else { + // It is an error for the '-' indicator to occur in the flow context, + // but we let the Parser detect and report about it because the Parser + // is able to point to the context. + } + + // Reset any potential simple keys on the current flow level. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // Simple keys are allowed after '-'. + parser.simple_key_allowed = true + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the BLOCK-ENTRY token and append it to the queue. + token := yaml_token_t{ + typ: yaml_BLOCK_ENTRY_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the KEY token. +func yaml_parser_fetch_key(parser *yaml_parser_t) bool { + + // In the block context, additional checks are required. + if parser.flow_level == 0 { + // Check if we are allowed to start a new key (not nessesary simple). + if !parser.simple_key_allowed { + return yaml_parser_set_scanner_error(parser, "", parser.mark, + "mapping keys are not allowed in this context") + } + // Add the BLOCK-MAPPING-START token if needed. + if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) { + return false + } + } + + // Reset any potential simple keys on the current flow level. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // Simple keys are allowed after '?' in the block context. + parser.simple_key_allowed = parser.flow_level == 0 + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the KEY token and append it to the queue. + token := yaml_token_t{ + typ: yaml_KEY_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the VALUE token. +func yaml_parser_fetch_value(parser *yaml_parser_t) bool { + + simple_key := &parser.simple_keys[len(parser.simple_keys)-1] + + // Have we found a simple key? + if valid, ok := yaml_simple_key_is_valid(parser, simple_key); !ok { + return false + + } else if valid { + + // Create the KEY token and insert it into the queue. + token := yaml_token_t{ + typ: yaml_KEY_TOKEN, + start_mark: simple_key.mark, + end_mark: simple_key.mark, + } + yaml_insert_token(parser, simple_key.token_number-parser.tokens_parsed, &token) + + // In the block context, we may need to add the BLOCK-MAPPING-START token. + if !yaml_parser_roll_indent(parser, simple_key.mark.column, + simple_key.token_number, + yaml_BLOCK_MAPPING_START_TOKEN, simple_key.mark) { + return false + } + + // Remove the simple key. + simple_key.possible = false + delete(parser.simple_keys_by_tok, simple_key.token_number) + + // A simple key cannot follow another simple key. + parser.simple_key_allowed = false + + } else { + // The ':' indicator follows a complex key. + + // In the block context, extra checks are required. + if parser.flow_level == 0 { + + // Check if we are allowed to start a complex value. + if !parser.simple_key_allowed { + return yaml_parser_set_scanner_error(parser, "", parser.mark, + "mapping values are not allowed in this context") + } + + // Add the BLOCK-MAPPING-START token if needed. + if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) { + return false + } + } + + // Simple keys after ':' are allowed in the block context. + parser.simple_key_allowed = parser.flow_level == 0 + } + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the VALUE token and append it to the queue. + token := yaml_token_t{ + typ: yaml_VALUE_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the ALIAS or ANCHOR token. +func yaml_parser_fetch_anchor(parser *yaml_parser_t, typ yaml_token_type_t) bool { + // An anchor or an alias could be a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // A simple key cannot follow an anchor or an alias. + parser.simple_key_allowed = false + + // Create the ALIAS or ANCHOR token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_anchor(parser, &token, typ) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the TAG token. +func yaml_parser_fetch_tag(parser *yaml_parser_t) bool { + // A tag could be a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // A simple key cannot follow a tag. + parser.simple_key_allowed = false + + // Create the TAG token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_tag(parser, &token) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the SCALAR(...,literal) or SCALAR(...,folded) tokens. +func yaml_parser_fetch_block_scalar(parser *yaml_parser_t, literal bool) bool { + // Remove any potential simple keys. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // A simple key may follow a block scalar. + parser.simple_key_allowed = true + + // Create the SCALAR token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_block_scalar(parser, &token, literal) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the SCALAR(...,single-quoted) or SCALAR(...,double-quoted) tokens. +func yaml_parser_fetch_flow_scalar(parser *yaml_parser_t, single bool) bool { + // A plain scalar could be a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // A simple key cannot follow a flow scalar. + parser.simple_key_allowed = false + + // Create the SCALAR token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_flow_scalar(parser, &token, single) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the SCALAR(...,plain) token. +func yaml_parser_fetch_plain_scalar(parser *yaml_parser_t) bool { + // A plain scalar could be a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // A simple key cannot follow a flow scalar. + parser.simple_key_allowed = false + + // Create the SCALAR token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_plain_scalar(parser, &token) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Eat whitespaces and comments until the next token is found. +func yaml_parser_scan_to_next_token(parser *yaml_parser_t) bool { + + // Until the next token is not found. + for { + // Allow the BOM mark to start a line. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if parser.mark.column == 0 && is_bom(parser.buffer, parser.buffer_pos) { + skip(parser) + } + + // Eat whitespaces. + // Tabs are allowed: + // - in the flow context + // - in the block context, but not at the beginning of the line or + // after '-', '?', or ':' (complex value). + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for parser.buffer[parser.buffer_pos] == ' ' || ((parser.flow_level > 0 || !parser.simple_key_allowed) && parser.buffer[parser.buffer_pos] == '\t') { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Eat a comment until a line break. + if parser.buffer[parser.buffer_pos] == '#' { + for !is_breakz(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + } + + // If it is a line break, eat it. + if is_break(parser.buffer, parser.buffer_pos) { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + skip_line(parser) + + // In the block context, a new line may start a simple key. + if parser.flow_level == 0 { + parser.simple_key_allowed = true + } + } else { + break // We have found a token. + } + } + + return true +} + +// Scan a YAML-DIRECTIVE or TAG-DIRECTIVE token. +// +// Scope: +// %YAML 1.1 # a comment \n +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +// %TAG !yaml! tag:yaml.org,2002: \n +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +// +func yaml_parser_scan_directive(parser *yaml_parser_t, token *yaml_token_t) bool { + // Eat '%'. + start_mark := parser.mark + skip(parser) + + // Scan the directive name. + var name []byte + if !yaml_parser_scan_directive_name(parser, start_mark, &name) { + return false + } + + // Is it a YAML directive? + if bytes.Equal(name, []byte("YAML")) { + // Scan the VERSION directive value. + var major, minor int8 + if !yaml_parser_scan_version_directive_value(parser, start_mark, &major, &minor) { + return false + } + end_mark := parser.mark + + // Create a VERSION-DIRECTIVE token. + *token = yaml_token_t{ + typ: yaml_VERSION_DIRECTIVE_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + major: major, + minor: minor, + } + + // Is it a TAG directive? + } else if bytes.Equal(name, []byte("TAG")) { + // Scan the TAG directive value. + var handle, prefix []byte + if !yaml_parser_scan_tag_directive_value(parser, start_mark, &handle, &prefix) { + return false + } + end_mark := parser.mark + + // Create a TAG-DIRECTIVE token. + *token = yaml_token_t{ + typ: yaml_TAG_DIRECTIVE_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: handle, + prefix: prefix, + } + + // Unknown directive. + } else { + yaml_parser_set_scanner_error(parser, "while scanning a directive", + start_mark, "found unknown directive name") + return false + } + + // Eat the rest of the line including any comments. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + if parser.buffer[parser.buffer_pos] == '#' { + for !is_breakz(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + } + + // Check if we are at the end of the line. + if !is_breakz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a directive", + start_mark, "did not find expected comment or line break") + return false + } + + // Eat a line break. + if is_break(parser.buffer, parser.buffer_pos) { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + skip_line(parser) + } + + return true +} + +// Scan the directive name. +// +// Scope: +// %YAML 1.1 # a comment \n +// ^^^^ +// %TAG !yaml! tag:yaml.org,2002: \n +// ^^^ +// +func yaml_parser_scan_directive_name(parser *yaml_parser_t, start_mark yaml_mark_t, name *[]byte) bool { + // Consume the directive name. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + var s []byte + for is_alpha(parser.buffer, parser.buffer_pos) { + s = read(parser, s) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Check if the name is empty. + if len(s) == 0 { + yaml_parser_set_scanner_error(parser, "while scanning a directive", + start_mark, "could not find expected directive name") + return false + } + + // Check for an blank character after the name. + if !is_blankz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a directive", + start_mark, "found unexpected non-alphabetical character") + return false + } + *name = s + return true +} + +// Scan the value of VERSION-DIRECTIVE. +// +// Scope: +// %YAML 1.1 # a comment \n +// ^^^^^^ +func yaml_parser_scan_version_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, major, minor *int8) bool { + // Eat whitespaces. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Consume the major version number. + if !yaml_parser_scan_version_directive_number(parser, start_mark, major) { + return false + } + + // Eat '.'. + if parser.buffer[parser.buffer_pos] != '.' { + return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive", + start_mark, "did not find expected digit or '.' character") + } + + skip(parser) + + // Consume the minor version number. + if !yaml_parser_scan_version_directive_number(parser, start_mark, minor) { + return false + } + return true +} + +const max_number_length = 2 + +// Scan the version number of VERSION-DIRECTIVE. +// +// Scope: +// %YAML 1.1 # a comment \n +// ^ +// %YAML 1.1 # a comment \n +// ^ +func yaml_parser_scan_version_directive_number(parser *yaml_parser_t, start_mark yaml_mark_t, number *int8) bool { + + // Repeat while the next character is digit. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + var value, length int8 + for is_digit(parser.buffer, parser.buffer_pos) { + // Check if the number is too long. + length++ + if length > max_number_length { + return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive", + start_mark, "found extremely long version number") + } + value = value*10 + int8(as_digit(parser.buffer, parser.buffer_pos)) + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Check if the number was present. + if length == 0 { + return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive", + start_mark, "did not find expected version number") + } + *number = value + return true +} + +// Scan the value of a TAG-DIRECTIVE token. +// +// Scope: +// %TAG !yaml! tag:yaml.org,2002: \n +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +// +func yaml_parser_scan_tag_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, handle, prefix *[]byte) bool { + var handle_value, prefix_value []byte + + // Eat whitespaces. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Scan a handle. + if !yaml_parser_scan_tag_handle(parser, true, start_mark, &handle_value) { + return false + } + + // Expect a whitespace. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if !is_blank(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a %TAG directive", + start_mark, "did not find expected whitespace") + return false + } + + // Eat whitespaces. + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Scan a prefix. + if !yaml_parser_scan_tag_uri(parser, true, nil, start_mark, &prefix_value) { + return false + } + + // Expect a whitespace or line break. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if !is_blankz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a %TAG directive", + start_mark, "did not find expected whitespace or line break") + return false + } + + *handle = handle_value + *prefix = prefix_value + return true +} + +func yaml_parser_scan_anchor(parser *yaml_parser_t, token *yaml_token_t, typ yaml_token_type_t) bool { + var s []byte + + // Eat the indicator character. + start_mark := parser.mark + skip(parser) + + // Consume the value. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for is_alpha(parser.buffer, parser.buffer_pos) { + s = read(parser, s) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + end_mark := parser.mark + + /* + * Check if length of the anchor is greater than 0 and it is followed by + * a whitespace character or one of the indicators: + * + * '?', ':', ',', ']', '}', '%', '@', '`'. + */ + + if len(s) == 0 || + !(is_blankz(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == '?' || + parser.buffer[parser.buffer_pos] == ':' || parser.buffer[parser.buffer_pos] == ',' || + parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '}' || + parser.buffer[parser.buffer_pos] == '%' || parser.buffer[parser.buffer_pos] == '@' || + parser.buffer[parser.buffer_pos] == '`') { + context := "while scanning an alias" + if typ == yaml_ANCHOR_TOKEN { + context = "while scanning an anchor" + } + yaml_parser_set_scanner_error(parser, context, start_mark, + "did not find expected alphabetic or numeric character") + return false + } + + // Create a token. + *token = yaml_token_t{ + typ: typ, + start_mark: start_mark, + end_mark: end_mark, + value: s, + } + + return true +} + +/* + * Scan a TAG token. + */ + +func yaml_parser_scan_tag(parser *yaml_parser_t, token *yaml_token_t) bool { + var handle, suffix []byte + + start_mark := parser.mark + + // Check if the tag is in the canonical form. + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + + if parser.buffer[parser.buffer_pos+1] == '<' { + // Keep the handle as '' + + // Eat '!<' + skip(parser) + skip(parser) + + // Consume the tag value. + if !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) { + return false + } + + // Check for '>' and eat it. + if parser.buffer[parser.buffer_pos] != '>' { + yaml_parser_set_scanner_error(parser, "while scanning a tag", + start_mark, "did not find the expected '>'") + return false + } + + skip(parser) + } else { + // The tag has either the '!suffix' or the '!handle!suffix' form. + + // First, try to scan a handle. + if !yaml_parser_scan_tag_handle(parser, false, start_mark, &handle) { + return false + } + + // Check if it is, indeed, handle. + if handle[0] == '!' && len(handle) > 1 && handle[len(handle)-1] == '!' { + // Scan the suffix now. + if !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) { + return false + } + } else { + // It wasn't a handle after all. Scan the rest of the tag. + if !yaml_parser_scan_tag_uri(parser, false, handle, start_mark, &suffix) { + return false + } + + // Set the handle to '!'. + handle = []byte{'!'} + + // A special case: the '!' tag. Set the handle to '' and the + // suffix to '!'. + if len(suffix) == 0 { + handle, suffix = suffix, handle + } + } + } + + // Check the character which ends the tag. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if !is_blankz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a tag", + start_mark, "did not find expected whitespace or line break") + return false + } + + end_mark := parser.mark + + // Create a token. + *token = yaml_token_t{ + typ: yaml_TAG_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: handle, + suffix: suffix, + } + return true +} + +// Scan a tag handle. +func yaml_parser_scan_tag_handle(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, handle *[]byte) bool { + // Check the initial '!' character. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if parser.buffer[parser.buffer_pos] != '!' { + yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "did not find expected '!'") + return false + } + + var s []byte + + // Copy the '!' character. + s = read(parser, s) + + // Copy all subsequent alphabetical and numerical characters. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + for is_alpha(parser.buffer, parser.buffer_pos) { + s = read(parser, s) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Check if the trailing character is '!' and copy it. + if parser.buffer[parser.buffer_pos] == '!' { + s = read(parser, s) + } else { + // It's either the '!' tag or not really a tag handle. If it's a %TAG + // directive, it's an error. If it's a tag token, it must be a part of URI. + if directive && string(s) != "!" { + yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "did not find expected '!'") + return false + } + } + + *handle = s + return true +} + +// Scan a tag. +func yaml_parser_scan_tag_uri(parser *yaml_parser_t, directive bool, head []byte, start_mark yaml_mark_t, uri *[]byte) bool { + //size_t length = head ? strlen((char *)head) : 0 + var s []byte + hasTag := len(head) > 0 + + // Copy the head if needed. + // + // Note that we don't copy the leading '!' character. + if len(head) > 1 { + s = append(s, head[1:]...) + } + + // Scan the tag. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + // The set of characters that may appear in URI is as follows: + // + // '0'-'9', 'A'-'Z', 'a'-'z', '_', '-', ';', '/', '?', ':', '@', '&', + // '=', '+', '$', ',', '.', '!', '~', '*', '\'', '(', ')', '[', ']', + // '%'. + // [Go] Convert this into more reasonable logic. + for is_alpha(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == ';' || + parser.buffer[parser.buffer_pos] == '/' || parser.buffer[parser.buffer_pos] == '?' || + parser.buffer[parser.buffer_pos] == ':' || parser.buffer[parser.buffer_pos] == '@' || + parser.buffer[parser.buffer_pos] == '&' || parser.buffer[parser.buffer_pos] == '=' || + parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '$' || + parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '.' || + parser.buffer[parser.buffer_pos] == '!' || parser.buffer[parser.buffer_pos] == '~' || + parser.buffer[parser.buffer_pos] == '*' || parser.buffer[parser.buffer_pos] == '\'' || + parser.buffer[parser.buffer_pos] == '(' || parser.buffer[parser.buffer_pos] == ')' || + parser.buffer[parser.buffer_pos] == '[' || parser.buffer[parser.buffer_pos] == ']' || + parser.buffer[parser.buffer_pos] == '%' { + // Check if it is a URI-escape sequence. + if parser.buffer[parser.buffer_pos] == '%' { + if !yaml_parser_scan_uri_escapes(parser, directive, start_mark, &s) { + return false + } + } else { + s = read(parser, s) + } + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + hasTag = true + } + + if !hasTag { + yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "did not find expected tag URI") + return false + } + *uri = s + return true +} + +// Decode an URI-escape sequence corresponding to a single UTF-8 character. +func yaml_parser_scan_uri_escapes(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, s *[]byte) bool { + + // Decode the required number of characters. + w := 1024 + for w > 0 { + // Check for a URI-escaped octet. + if parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) { + return false + } + + if !(parser.buffer[parser.buffer_pos] == '%' && + is_hex(parser.buffer, parser.buffer_pos+1) && + is_hex(parser.buffer, parser.buffer_pos+2)) { + return yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "did not find URI escaped octet") + } + + // Get the octet. + octet := byte((as_hex(parser.buffer, parser.buffer_pos+1) << 4) + as_hex(parser.buffer, parser.buffer_pos+2)) + + // If it is the leading octet, determine the length of the UTF-8 sequence. + if w == 1024 { + w = width(octet) + if w == 0 { + return yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "found an incorrect leading UTF-8 octet") + } + } else { + // Check if the trailing octet is correct. + if octet&0xC0 != 0x80 { + return yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "found an incorrect trailing UTF-8 octet") + } + } + + // Copy the octet and move the pointers. + *s = append(*s, octet) + skip(parser) + skip(parser) + skip(parser) + w-- + } + return true +} + +// Scan a block scalar. +func yaml_parser_scan_block_scalar(parser *yaml_parser_t, token *yaml_token_t, literal bool) bool { + // Eat the indicator '|' or '>'. + start_mark := parser.mark + skip(parser) + + // Scan the additional block scalar indicators. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + // Check for a chomping indicator. + var chomping, increment int + if parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' { + // Set the chomping method and eat the indicator. + if parser.buffer[parser.buffer_pos] == '+' { + chomping = +1 + } else { + chomping = -1 + } + skip(parser) + + // Check for an indentation indicator. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if is_digit(parser.buffer, parser.buffer_pos) { + // Check that the indentation is greater than 0. + if parser.buffer[parser.buffer_pos] == '0' { + yaml_parser_set_scanner_error(parser, "while scanning a block scalar", + start_mark, "found an indentation indicator equal to 0") + return false + } + + // Get the indentation level and eat the indicator. + increment = as_digit(parser.buffer, parser.buffer_pos) + skip(parser) + } + + } else if is_digit(parser.buffer, parser.buffer_pos) { + // Do the same as above, but in the opposite order. + + if parser.buffer[parser.buffer_pos] == '0' { + yaml_parser_set_scanner_error(parser, "while scanning a block scalar", + start_mark, "found an indentation indicator equal to 0") + return false + } + increment = as_digit(parser.buffer, parser.buffer_pos) + skip(parser) + + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' { + if parser.buffer[parser.buffer_pos] == '+' { + chomping = +1 + } else { + chomping = -1 + } + skip(parser) + } + } + + // Eat whitespaces and comments to the end of the line. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + if parser.buffer[parser.buffer_pos] == '#' { + for !is_breakz(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + } + + // Check if we are at the end of the line. + if !is_breakz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a block scalar", + start_mark, "did not find expected comment or line break") + return false + } + + // Eat a line break. + if is_break(parser.buffer, parser.buffer_pos) { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + skip_line(parser) + } + + end_mark := parser.mark + + // Set the indentation level if it was specified. + var indent int + if increment > 0 { + if parser.indent >= 0 { + indent = parser.indent + increment + } else { + indent = increment + } + } + + // Scan the leading line breaks and determine the indentation level if needed. + var s, leading_break, trailing_breaks []byte + if !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, start_mark, &end_mark) { + return false + } + + // Scan the block scalar content. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + var leading_blank, trailing_blank bool + for parser.mark.column == indent && !is_z(parser.buffer, parser.buffer_pos) { + // We are at the beginning of a non-empty line. + + // Is it a trailing whitespace? + trailing_blank = is_blank(parser.buffer, parser.buffer_pos) + + // Check if we need to fold the leading line break. + if !literal && !leading_blank && !trailing_blank && len(leading_break) > 0 && leading_break[0] == '\n' { + // Do we need to join the lines by space? + if len(trailing_breaks) == 0 { + s = append(s, ' ') + } + } else { + s = append(s, leading_break...) + } + leading_break = leading_break[:0] + + // Append the remaining line breaks. + s = append(s, trailing_breaks...) + trailing_breaks = trailing_breaks[:0] + + // Is it a leading whitespace? + leading_blank = is_blank(parser.buffer, parser.buffer_pos) + + // Consume the current line. + for !is_breakz(parser.buffer, parser.buffer_pos) { + s = read(parser, s) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Consume the line break. + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + + leading_break = read_line(parser, leading_break) + + // Eat the following indentation spaces and line breaks. + if !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, start_mark, &end_mark) { + return false + } + } + + // Chomp the tail. + if chomping != -1 { + s = append(s, leading_break...) + } + if chomping == 1 { + s = append(s, trailing_breaks...) + } + + // Create a token. + *token = yaml_token_t{ + typ: yaml_SCALAR_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: s, + style: yaml_LITERAL_SCALAR_STYLE, + } + if !literal { + token.style = yaml_FOLDED_SCALAR_STYLE + } + return true +} + +// Scan indentation spaces and line breaks for a block scalar. Determine the +// indentation level if needed. +func yaml_parser_scan_block_scalar_breaks(parser *yaml_parser_t, indent *int, breaks *[]byte, start_mark yaml_mark_t, end_mark *yaml_mark_t) bool { + *end_mark = parser.mark + + // Eat the indentation spaces and line breaks. + max_indent := 0 + for { + // Eat the indentation spaces. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + for (*indent == 0 || parser.mark.column < *indent) && is_space(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + if parser.mark.column > max_indent { + max_indent = parser.mark.column + } + + // Check for a tab character messing the indentation. + if (*indent == 0 || parser.mark.column < *indent) && is_tab(parser.buffer, parser.buffer_pos) { + return yaml_parser_set_scanner_error(parser, "while scanning a block scalar", + start_mark, "found a tab character where an indentation space is expected") + } + + // Have we found a non-empty line? + if !is_break(parser.buffer, parser.buffer_pos) { + break + } + + // Consume the line break. + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + // [Go] Should really be returning breaks instead. + *breaks = read_line(parser, *breaks) + *end_mark = parser.mark + } + + // Determine the indentation level if needed. + if *indent == 0 { + *indent = max_indent + if *indent < parser.indent+1 { + *indent = parser.indent + 1 + } + if *indent < 1 { + *indent = 1 + } + } + return true +} + +// Scan a quoted scalar. +func yaml_parser_scan_flow_scalar(parser *yaml_parser_t, token *yaml_token_t, single bool) bool { + // Eat the left quote. + start_mark := parser.mark + skip(parser) + + // Consume the content of the quoted scalar. + var s, leading_break, trailing_breaks, whitespaces []byte + for { + // Check that there are no document indicators at the beginning of the line. + if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) { + return false + } + + if parser.mark.column == 0 && + ((parser.buffer[parser.buffer_pos+0] == '-' && + parser.buffer[parser.buffer_pos+1] == '-' && + parser.buffer[parser.buffer_pos+2] == '-') || + (parser.buffer[parser.buffer_pos+0] == '.' && + parser.buffer[parser.buffer_pos+1] == '.' && + parser.buffer[parser.buffer_pos+2] == '.')) && + is_blankz(parser.buffer, parser.buffer_pos+3) { + yaml_parser_set_scanner_error(parser, "while scanning a quoted scalar", + start_mark, "found unexpected document indicator") + return false + } + + // Check for EOF. + if is_z(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a quoted scalar", + start_mark, "found unexpected end of stream") + return false + } + + // Consume non-blank characters. + leading_blanks := false + for !is_blankz(parser.buffer, parser.buffer_pos) { + if single && parser.buffer[parser.buffer_pos] == '\'' && parser.buffer[parser.buffer_pos+1] == '\'' { + // Is is an escaped single quote. + s = append(s, '\'') + skip(parser) + skip(parser) + + } else if single && parser.buffer[parser.buffer_pos] == '\'' { + // It is a right single quote. + break + } else if !single && parser.buffer[parser.buffer_pos] == '"' { + // It is a right double quote. + break + + } else if !single && parser.buffer[parser.buffer_pos] == '\\' && is_break(parser.buffer, parser.buffer_pos+1) { + // It is an escaped line break. + if parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) { + return false + } + skip(parser) + skip_line(parser) + leading_blanks = true + break + + } else if !single && parser.buffer[parser.buffer_pos] == '\\' { + // It is an escape sequence. + code_length := 0 + + // Check the escape character. + switch parser.buffer[parser.buffer_pos+1] { + case '0': + s = append(s, 0) + case 'a': + s = append(s, '\x07') + case 'b': + s = append(s, '\x08') + case 't', '\t': + s = append(s, '\x09') + case 'n': + s = append(s, '\x0A') + case 'v': + s = append(s, '\x0B') + case 'f': + s = append(s, '\x0C') + case 'r': + s = append(s, '\x0D') + case 'e': + s = append(s, '\x1B') + case ' ': + s = append(s, '\x20') + case '"': + s = append(s, '"') + case '\'': + s = append(s, '\'') + case '\\': + s = append(s, '\\') + case 'N': // NEL (#x85) + s = append(s, '\xC2') + s = append(s, '\x85') + case '_': // #xA0 + s = append(s, '\xC2') + s = append(s, '\xA0') + case 'L': // LS (#x2028) + s = append(s, '\xE2') + s = append(s, '\x80') + s = append(s, '\xA8') + case 'P': // PS (#x2029) + s = append(s, '\xE2') + s = append(s, '\x80') + s = append(s, '\xA9') + case 'x': + code_length = 2 + case 'u': + code_length = 4 + case 'U': + code_length = 8 + default: + yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar", + start_mark, "found unknown escape character") + return false + } + + skip(parser) + skip(parser) + + // Consume an arbitrary escape code. + if code_length > 0 { + var value int + + // Scan the character value. + if parser.unread < code_length && !yaml_parser_update_buffer(parser, code_length) { + return false + } + for k := 0; k < code_length; k++ { + if !is_hex(parser.buffer, parser.buffer_pos+k) { + yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar", + start_mark, "did not find expected hexdecimal number") + return false + } + value = (value << 4) + as_hex(parser.buffer, parser.buffer_pos+k) + } + + // Check the value and write the character. + if (value >= 0xD800 && value <= 0xDFFF) || value > 0x10FFFF { + yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar", + start_mark, "found invalid Unicode character escape code") + return false + } + if value <= 0x7F { + s = append(s, byte(value)) + } else if value <= 0x7FF { + s = append(s, byte(0xC0+(value>>6))) + s = append(s, byte(0x80+(value&0x3F))) + } else if value <= 0xFFFF { + s = append(s, byte(0xE0+(value>>12))) + s = append(s, byte(0x80+((value>>6)&0x3F))) + s = append(s, byte(0x80+(value&0x3F))) + } else { + s = append(s, byte(0xF0+(value>>18))) + s = append(s, byte(0x80+((value>>12)&0x3F))) + s = append(s, byte(0x80+((value>>6)&0x3F))) + s = append(s, byte(0x80+(value&0x3F))) + } + + // Advance the pointer. + for k := 0; k < code_length; k++ { + skip(parser) + } + } + } else { + // It is a non-escaped non-blank character. + s = read(parser, s) + } + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + } + + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + // Check if we are at the end of the scalar. + if single { + if parser.buffer[parser.buffer_pos] == '\'' { + break + } + } else { + if parser.buffer[parser.buffer_pos] == '"' { + break + } + } + + // Consume blank characters. + for is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) { + if is_blank(parser.buffer, parser.buffer_pos) { + // Consume a space or a tab character. + if !leading_blanks { + whitespaces = read(parser, whitespaces) + } else { + skip(parser) + } + } else { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + + // Check if it is a first line break. + if !leading_blanks { + whitespaces = whitespaces[:0] + leading_break = read_line(parser, leading_break) + leading_blanks = true + } else { + trailing_breaks = read_line(parser, trailing_breaks) + } + } + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Join the whitespaces or fold line breaks. + if leading_blanks { + // Do we need to fold line breaks? + if len(leading_break) > 0 && leading_break[0] == '\n' { + if len(trailing_breaks) == 0 { + s = append(s, ' ') + } else { + s = append(s, trailing_breaks...) + } + } else { + s = append(s, leading_break...) + s = append(s, trailing_breaks...) + } + trailing_breaks = trailing_breaks[:0] + leading_break = leading_break[:0] + } else { + s = append(s, whitespaces...) + whitespaces = whitespaces[:0] + } + } + + // Eat the right quote. + skip(parser) + end_mark := parser.mark + + // Create a token. + *token = yaml_token_t{ + typ: yaml_SCALAR_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: s, + style: yaml_SINGLE_QUOTED_SCALAR_STYLE, + } + if !single { + token.style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + return true +} + +// Scan a plain scalar. +func yaml_parser_scan_plain_scalar(parser *yaml_parser_t, token *yaml_token_t) bool { + + var s, leading_break, trailing_breaks, whitespaces []byte + var leading_blanks bool + var indent = parser.indent + 1 + + start_mark := parser.mark + end_mark := parser.mark + + // Consume the content of the plain scalar. + for { + // Check for a document indicator. + if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) { + return false + } + if parser.mark.column == 0 && + ((parser.buffer[parser.buffer_pos+0] == '-' && + parser.buffer[parser.buffer_pos+1] == '-' && + parser.buffer[parser.buffer_pos+2] == '-') || + (parser.buffer[parser.buffer_pos+0] == '.' && + parser.buffer[parser.buffer_pos+1] == '.' && + parser.buffer[parser.buffer_pos+2] == '.')) && + is_blankz(parser.buffer, parser.buffer_pos+3) { + break + } + + // Check for a comment. + if parser.buffer[parser.buffer_pos] == '#' { + break + } + + // Consume non-blank characters. + for !is_blankz(parser.buffer, parser.buffer_pos) { + + // Check for indicators that may end a plain scalar. + if (parser.buffer[parser.buffer_pos] == ':' && is_blankz(parser.buffer, parser.buffer_pos+1)) || + (parser.flow_level > 0 && + (parser.buffer[parser.buffer_pos] == ',' || + parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == '[' || + parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' || + parser.buffer[parser.buffer_pos] == '}')) { + break + } + + // Check if we need to join whitespaces and breaks. + if leading_blanks || len(whitespaces) > 0 { + if leading_blanks { + // Do we need to fold line breaks? + if leading_break[0] == '\n' { + if len(trailing_breaks) == 0 { + s = append(s, ' ') + } else { + s = append(s, trailing_breaks...) + } + } else { + s = append(s, leading_break...) + s = append(s, trailing_breaks...) + } + trailing_breaks = trailing_breaks[:0] + leading_break = leading_break[:0] + leading_blanks = false + } else { + s = append(s, whitespaces...) + whitespaces = whitespaces[:0] + } + } + + // Copy the character. + s = read(parser, s) + + end_mark = parser.mark + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + } + + // Is it the end? + if !(is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos)) { + break + } + + // Consume blank characters. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) { + if is_blank(parser.buffer, parser.buffer_pos) { + + // Check for tab characters that abuse indentation. + if leading_blanks && parser.mark.column < indent && is_tab(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a plain scalar", + start_mark, "found a tab character that violates indentation") + return false + } + + // Consume a space or a tab character. + if !leading_blanks { + whitespaces = read(parser, whitespaces) + } else { + skip(parser) + } + } else { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + + // Check if it is a first line break. + if !leading_blanks { + whitespaces = whitespaces[:0] + leading_break = read_line(parser, leading_break) + leading_blanks = true + } else { + trailing_breaks = read_line(parser, trailing_breaks) + } + } + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Check indentation level. + if parser.flow_level == 0 && parser.mark.column < indent { + break + } + } + + // Create a token. + *token = yaml_token_t{ + typ: yaml_SCALAR_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: s, + style: yaml_PLAIN_SCALAR_STYLE, + } + + // Note that we change the 'simple_key_allowed' flag. + if leading_blanks { + parser.simple_key_allowed = true + } + return true +} diff --git a/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/sorter.go b/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/sorter.go new file mode 100644 index 000000000..8a33da7bf --- /dev/null +++ b/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/sorter.go @@ -0,0 +1,119 @@ +package yaml + +import ( + "reflect" + "unicode" +) + +type keyList []reflect.Value + +func (l keyList) Len() int { return len(l) } +func (l keyList) Swap(i, j int) { l[i], l[j] = l[j], l[i] } +func (l keyList) Less(i, j int) bool { + a := l[i] + b := l[j] + ak := a.Kind() + bk := b.Kind() + for (ak == reflect.Interface || ak == reflect.Ptr) && !a.IsNil() { + a = a.Elem() + ak = a.Kind() + } + for (bk == reflect.Interface || bk == reflect.Ptr) && !b.IsNil() { + b = b.Elem() + bk = b.Kind() + } + af, aok := keyFloat(a) + bf, bok := keyFloat(b) + if aok && bok { + if af != bf { + return af < bf + } + if ak != bk { + return ak < bk + } + return numLess(a, b) + } + if ak != reflect.String || bk != reflect.String { + return ak < bk + } + ar, br := []rune(a.String()), []rune(b.String()) + digits := false + for i := 0; i < len(ar) && i < len(br); i++ { + if ar[i] == br[i] { + digits = unicode.IsDigit(ar[i]) + continue + } + al := unicode.IsLetter(ar[i]) + bl := unicode.IsLetter(br[i]) + if al && bl { + return ar[i] < br[i] + } + if al || bl { + if digits { + return al + } else { + return bl + } + } + var ai, bi int + var an, bn int64 + if ar[i] == '0' || br[i] == '0' { + for j := i - 1; j >= 0 && unicode.IsDigit(ar[j]); j-- { + if ar[j] != '0' { + an = 1 + bn = 1 + break + } + } + } + for ai = i; ai < len(ar) && unicode.IsDigit(ar[ai]); ai++ { + an = an*10 + int64(ar[ai]-'0') + } + for bi = i; bi < len(br) && unicode.IsDigit(br[bi]); bi++ { + bn = bn*10 + int64(br[bi]-'0') + } + if an != bn { + return an < bn + } + if ai != bi { + return ai < bi + } + return ar[i] < br[i] + } + return len(ar) < len(br) +} + +// keyFloat returns a float value for v if it is a number/bool +// and whether it is a number/bool or not. +func keyFloat(v reflect.Value) (f float64, ok bool) { + switch v.Kind() { + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return float64(v.Int()), true + case reflect.Float32, reflect.Float64: + return v.Float(), true + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return float64(v.Uint()), true + case reflect.Bool: + if v.Bool() { + return 1, true + } + return 0, true + } + return 0, false +} + +// numLess returns whether a < b. +// a and b must necessarily have the same kind. +func numLess(a, b reflect.Value) bool { + switch a.Kind() { + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return a.Int() < b.Int() + case reflect.Float32, reflect.Float64: + return a.Float() < b.Float() + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return a.Uint() < b.Uint() + case reflect.Bool: + return !a.Bool() && b.Bool() + } + panic("not a number") +} diff --git a/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/writerc.go b/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/writerc.go new file mode 100644 index 000000000..a2dde608c --- /dev/null +++ b/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/writerc.go @@ -0,0 +1,26 @@ +package yaml + +// Set the writer error and return false. +func yaml_emitter_set_writer_error(emitter *yaml_emitter_t, problem string) bool { + emitter.error = yaml_WRITER_ERROR + emitter.problem = problem + return false +} + +// Flush the output buffer. +func yaml_emitter_flush(emitter *yaml_emitter_t) bool { + if emitter.write_handler == nil { + panic("write handler not set") + } + + // Check if the buffer is empty. + if emitter.buffer_pos == 0 { + return true + } + + if err := emitter.write_handler(emitter, emitter.buffer[:emitter.buffer_pos]); err != nil { + return yaml_emitter_set_writer_error(emitter, "write error: "+err.Error()) + } + emitter.buffer_pos = 0 + return true +} diff --git a/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/yaml.go b/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/yaml.go new file mode 100644 index 000000000..30813884c --- /dev/null +++ b/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/yaml.go @@ -0,0 +1,478 @@ +// Package yaml implements YAML support for the Go language. +// +// Source code and other details for the project are available at GitHub: +// +// https://github.com/go-yaml/yaml +// +package yaml + +import ( + "errors" + "fmt" + "io" + "reflect" + "strings" + "sync" +) + +// MapSlice encodes and decodes as a YAML map. +// The order of keys is preserved when encoding and decoding. +type MapSlice []MapItem + +// MapItem is an item in a MapSlice. +type MapItem struct { + Key, Value interface{} +} + +// The Unmarshaler interface may be implemented by types to customize their +// behavior when being unmarshaled from a YAML document. The UnmarshalYAML +// method receives a function that may be called to unmarshal the original +// YAML value into a field or variable. It is safe to call the unmarshal +// function parameter more than once if necessary. +type Unmarshaler interface { + UnmarshalYAML(unmarshal func(interface{}) error) error +} + +// The Marshaler interface may be implemented by types to customize their +// behavior when being marshaled into a YAML document. The returned value +// is marshaled in place of the original value implementing Marshaler. +// +// If an error is returned by MarshalYAML, the marshaling procedure stops +// and returns with the provided error. +type Marshaler interface { + MarshalYAML() (interface{}, error) +} + +// Unmarshal decodes the first document found within the in byte slice +// and assigns decoded values into the out value. +// +// Maps and pointers (to a struct, string, int, etc) are accepted as out +// values. If an internal pointer within a struct is not initialized, +// the yaml package will initialize it if necessary for unmarshalling +// the provided data. The out parameter must not be nil. +// +// The type of the decoded values should be compatible with the respective +// values in out. If one or more values cannot be decoded due to a type +// mismatches, decoding continues partially until the end of the YAML +// content, and a *yaml.TypeError is returned with details for all +// missed values. +// +// Struct fields are only unmarshalled if they are exported (have an +// upper case first letter), and are unmarshalled using the field name +// lowercased as the default key. Custom keys may be defined via the +// "yaml" name in the field tag: the content preceding the first comma +// is used as the key, and the following comma-separated options are +// used to tweak the marshalling process (see Marshal). +// Conflicting names result in a runtime error. +// +// For example: +// +// type T struct { +// F int `yaml:"a,omitempty"` +// B int +// } +// var t T +// yaml.Unmarshal([]byte("a: 1\nb: 2"), &t) +// +// See the documentation of Marshal for the format of tags and a list of +// supported tag options. +// +func Unmarshal(in []byte, out interface{}) (err error) { + return unmarshal(in, out, false) +} + +// UnmarshalStrict is like Unmarshal except that any fields that are found +// in the data that do not have corresponding struct members, or mapping +// keys that are duplicates, will result in +// an error. +func UnmarshalStrict(in []byte, out interface{}) (err error) { + return unmarshal(in, out, true) +} + +// A Decoder reads and decodes YAML values from an input stream. +type Decoder struct { + strict bool + parser *parser +} + +// NewDecoder returns a new decoder that reads from r. +// +// The decoder introduces its own buffering and may read +// data from r beyond the YAML values requested. +func NewDecoder(r io.Reader) *Decoder { + return &Decoder{ + parser: newParserFromReader(r), + } +} + +// SetStrict sets whether strict decoding behaviour is enabled when +// decoding items in the data (see UnmarshalStrict). By default, decoding is not strict. +func (dec *Decoder) SetStrict(strict bool) { + dec.strict = strict +} + +// Decode reads the next YAML-encoded value from its input +// and stores it in the value pointed to by v. +// +// See the documentation for Unmarshal for details about the +// conversion of YAML into a Go value. +func (dec *Decoder) Decode(v interface{}) (err error) { + d := newDecoder(dec.strict) + defer handleErr(&err) + node := dec.parser.parse() + if node == nil { + return io.EOF + } + out := reflect.ValueOf(v) + if out.Kind() == reflect.Ptr && !out.IsNil() { + out = out.Elem() + } + d.unmarshal(node, out) + if len(d.terrors) > 0 { + return &TypeError{d.terrors} + } + return nil +} + +func unmarshal(in []byte, out interface{}, strict bool) (err error) { + defer handleErr(&err) + d := newDecoder(strict) + p := newParser(in) + defer p.destroy() + node := p.parse() + if node != nil { + v := reflect.ValueOf(out) + if v.Kind() == reflect.Ptr && !v.IsNil() { + v = v.Elem() + } + d.unmarshal(node, v) + } + if len(d.terrors) > 0 { + return &TypeError{d.terrors} + } + return nil +} + +// Marshal serializes the value provided into a YAML document. The structure +// of the generated document will reflect the structure of the value itself. +// Maps and pointers (to struct, string, int, etc) are accepted as the in value. +// +// Struct fields are only marshalled if they are exported (have an upper case +// first letter), and are marshalled using the field name lowercased as the +// default key. Custom keys may be defined via the "yaml" name in the field +// tag: the content preceding the first comma is used as the key, and the +// following comma-separated options are used to tweak the marshalling process. +// Conflicting names result in a runtime error. +// +// The field tag format accepted is: +// +// `(...) yaml:"[][,[,]]" (...)` +// +// The following flags are currently supported: +// +// omitempty Only include the field if it's not set to the zero +// value for the type or to empty slices or maps. +// Zero valued structs will be omitted if all their public +// fields are zero, unless they implement an IsZero +// method (see the IsZeroer interface type), in which +// case the field will be excluded if IsZero returns true. +// +// flow Marshal using a flow style (useful for structs, +// sequences and maps). +// +// inline Inline the field, which must be a struct or a map, +// causing all of its fields or keys to be processed as if +// they were part of the outer struct. For maps, keys must +// not conflict with the yaml keys of other struct fields. +// +// In addition, if the key is "-", the field is ignored. +// +// For example: +// +// type T struct { +// F int `yaml:"a,omitempty"` +// B int +// } +// yaml.Marshal(&T{B: 2}) // Returns "b: 2\n" +// yaml.Marshal(&T{F: 1}} // Returns "a: 1\nb: 0\n" +// +func Marshal(in interface{}) (out []byte, err error) { + defer handleErr(&err) + e := newEncoder() + defer e.destroy() + e.marshalDoc("", reflect.ValueOf(in)) + e.finish() + out = e.out + return +} + +// An Encoder writes YAML values to an output stream. +type Encoder struct { + encoder *encoder +} + +// NewEncoder returns a new encoder that writes to w. +// The Encoder should be closed after use to flush all data +// to w. +func NewEncoder(w io.Writer) *Encoder { + return &Encoder{ + encoder: newEncoderWithWriter(w), + } +} + +// Encode writes the YAML encoding of v to the stream. +// If multiple items are encoded to the stream, the +// second and subsequent document will be preceded +// with a "---" document separator, but the first will not. +// +// See the documentation for Marshal for details about the conversion of Go +// values to YAML. +func (e *Encoder) Encode(v interface{}) (err error) { + defer handleErr(&err) + e.encoder.marshalDoc("", reflect.ValueOf(v)) + return nil +} + +// Close closes the encoder by writing any remaining data. +// It does not write a stream terminating string "...". +func (e *Encoder) Close() (err error) { + defer handleErr(&err) + e.encoder.finish() + return nil +} + +func handleErr(err *error) { + if v := recover(); v != nil { + if e, ok := v.(yamlError); ok { + *err = e.err + } else { + panic(v) + } + } +} + +type yamlError struct { + err error +} + +func fail(err error) { + panic(yamlError{err}) +} + +func failf(format string, args ...interface{}) { + panic(yamlError{fmt.Errorf("yaml: "+format, args...)}) +} + +// A TypeError is returned by Unmarshal when one or more fields in +// the YAML document cannot be properly decoded into the requested +// types. When this error is returned, the value is still +// unmarshaled partially. +type TypeError struct { + Errors []string +} + +func (e *TypeError) Error() string { + return fmt.Sprintf("yaml: unmarshal errors:\n %s", strings.Join(e.Errors, "\n ")) +} + +// -------------------------------------------------------------------------- +// Maintain a mapping of keys to structure field indexes + +// The code in this section was copied from mgo/bson. + +// structInfo holds details for the serialization of fields of +// a given struct. +type structInfo struct { + FieldsMap map[string]fieldInfo + FieldsList []fieldInfo + + // InlineMap is the number of the field in the struct that + // contains an ,inline map, or -1 if there's none. + InlineMap int +} + +type fieldInfo struct { + Key string + Num int + OmitEmpty bool + Flow bool + // Id holds the unique field identifier, so we can cheaply + // check for field duplicates without maintaining an extra map. + Id int + + // Inline holds the field index if the field is part of an inlined struct. + Inline []int +} + +var structMap = make(map[reflect.Type]*structInfo) +var fieldMapMutex sync.RWMutex + +func getStructInfo(st reflect.Type) (*structInfo, error) { + fieldMapMutex.RLock() + sinfo, found := structMap[st] + fieldMapMutex.RUnlock() + if found { + return sinfo, nil + } + + n := st.NumField() + fieldsMap := make(map[string]fieldInfo) + fieldsList := make([]fieldInfo, 0, n) + inlineMap := -1 + for i := 0; i != n; i++ { + field := st.Field(i) + if field.PkgPath != "" && !field.Anonymous { + continue // Private field + } + + info := fieldInfo{Num: i} + + tag := field.Tag.Get("yaml") + if tag == "" && strings.Index(string(field.Tag), ":") < 0 { + tag = string(field.Tag) + } + if tag == "-" { + continue + } + + inline := false + fields := strings.Split(tag, ",") + if len(fields) > 1 { + for _, flag := range fields[1:] { + switch flag { + case "omitempty": + info.OmitEmpty = true + case "flow": + info.Flow = true + case "inline": + inline = true + default: + return nil, errors.New(fmt.Sprintf("Unsupported flag %q in tag %q of type %s", flag, tag, st)) + } + } + tag = fields[0] + } + + if inline { + switch field.Type.Kind() { + case reflect.Map: + if inlineMap >= 0 { + return nil, errors.New("Multiple ,inline maps in struct " + st.String()) + } + if field.Type.Key() != reflect.TypeOf("") { + return nil, errors.New("Option ,inline needs a map with string keys in struct " + st.String()) + } + inlineMap = info.Num + case reflect.Struct: + sinfo, err := getStructInfo(field.Type) + if err != nil { + return nil, err + } + for _, finfo := range sinfo.FieldsList { + if _, found := fieldsMap[finfo.Key]; found { + msg := "Duplicated key '" + finfo.Key + "' in struct " + st.String() + return nil, errors.New(msg) + } + if finfo.Inline == nil { + finfo.Inline = []int{i, finfo.Num} + } else { + finfo.Inline = append([]int{i}, finfo.Inline...) + } + finfo.Id = len(fieldsList) + fieldsMap[finfo.Key] = finfo + fieldsList = append(fieldsList, finfo) + } + default: + //return nil, errors.New("Option ,inline needs a struct value or map field") + return nil, errors.New("Option ,inline needs a struct value field") + } + continue + } + + if tag != "" { + info.Key = tag + } else { + info.Key = strings.ToLower(field.Name) + } + + if _, found = fieldsMap[info.Key]; found { + msg := "Duplicated key '" + info.Key + "' in struct " + st.String() + return nil, errors.New(msg) + } + + info.Id = len(fieldsList) + fieldsList = append(fieldsList, info) + fieldsMap[info.Key] = info + } + + sinfo = &structInfo{ + FieldsMap: fieldsMap, + FieldsList: fieldsList, + InlineMap: inlineMap, + } + + fieldMapMutex.Lock() + structMap[st] = sinfo + fieldMapMutex.Unlock() + return sinfo, nil +} + +// IsZeroer is used to check whether an object is zero to +// determine whether it should be omitted when marshaling +// with the omitempty flag. One notable implementation +// is time.Time. +type IsZeroer interface { + IsZero() bool +} + +func isZero(v reflect.Value) bool { + kind := v.Kind() + if z, ok := v.Interface().(IsZeroer); ok { + if (kind == reflect.Ptr || kind == reflect.Interface) && v.IsNil() { + return true + } + return z.IsZero() + } + switch kind { + case reflect.String: + return len(v.String()) == 0 + case reflect.Interface, reflect.Ptr: + return v.IsNil() + case reflect.Slice: + return v.Len() == 0 + case reflect.Map: + return v.Len() == 0 + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return v.Int() == 0 + case reflect.Float32, reflect.Float64: + return v.Float() == 0 + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return v.Uint() == 0 + case reflect.Bool: + return !v.Bool() + case reflect.Struct: + vt := v.Type() + for i := v.NumField() - 1; i >= 0; i-- { + if vt.Field(i).PkgPath != "" { + continue // Private field + } + if !isZero(v.Field(i)) { + return false + } + } + return true + } + return false +} + +// FutureLineWrap globally disables line wrapping when encoding long strings. +// This is a temporary and thus deprecated method introduced to faciliate +// migration towards v3, which offers more control of line lengths on +// individual encodings, and has a default matching the behavior introduced +// by this function. +// +// The default formatting of v2 was erroneously changed in v2.3.0 and reverted +// in v2.4.0, at which point this function was introduced to help migration. +func FutureLineWrap() { + disableLineWrapping = true +} diff --git a/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/yamlh.go b/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/yamlh.go new file mode 100644 index 000000000..f6a9c8e34 --- /dev/null +++ b/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/yamlh.go @@ -0,0 +1,739 @@ +package yaml + +import ( + "fmt" + "io" +) + +// The version directive data. +type yaml_version_directive_t struct { + major int8 // The major version number. + minor int8 // The minor version number. +} + +// The tag directive data. +type yaml_tag_directive_t struct { + handle []byte // The tag handle. + prefix []byte // The tag prefix. +} + +type yaml_encoding_t int + +// The stream encoding. +const ( + // Let the parser choose the encoding. + yaml_ANY_ENCODING yaml_encoding_t = iota + + yaml_UTF8_ENCODING // The default UTF-8 encoding. + yaml_UTF16LE_ENCODING // The UTF-16-LE encoding with BOM. + yaml_UTF16BE_ENCODING // The UTF-16-BE encoding with BOM. +) + +type yaml_break_t int + +// Line break types. +const ( + // Let the parser choose the break type. + yaml_ANY_BREAK yaml_break_t = iota + + yaml_CR_BREAK // Use CR for line breaks (Mac style). + yaml_LN_BREAK // Use LN for line breaks (Unix style). + yaml_CRLN_BREAK // Use CR LN for line breaks (DOS style). +) + +type yaml_error_type_t int + +// Many bad things could happen with the parser and emitter. +const ( + // No error is produced. + yaml_NO_ERROR yaml_error_type_t = iota + + yaml_MEMORY_ERROR // Cannot allocate or reallocate a block of memory. + yaml_READER_ERROR // Cannot read or decode the input stream. + yaml_SCANNER_ERROR // Cannot scan the input stream. + yaml_PARSER_ERROR // Cannot parse the input stream. + yaml_COMPOSER_ERROR // Cannot compose a YAML document. + yaml_WRITER_ERROR // Cannot write to the output stream. + yaml_EMITTER_ERROR // Cannot emit a YAML stream. +) + +// The pointer position. +type yaml_mark_t struct { + index int // The position index. + line int // The position line. + column int // The position column. +} + +// Node Styles + +type yaml_style_t int8 + +type yaml_scalar_style_t yaml_style_t + +// Scalar styles. +const ( + // Let the emitter choose the style. + yaml_ANY_SCALAR_STYLE yaml_scalar_style_t = iota + + yaml_PLAIN_SCALAR_STYLE // The plain scalar style. + yaml_SINGLE_QUOTED_SCALAR_STYLE // The single-quoted scalar style. + yaml_DOUBLE_QUOTED_SCALAR_STYLE // The double-quoted scalar style. + yaml_LITERAL_SCALAR_STYLE // The literal scalar style. + yaml_FOLDED_SCALAR_STYLE // The folded scalar style. +) + +type yaml_sequence_style_t yaml_style_t + +// Sequence styles. +const ( + // Let the emitter choose the style. + yaml_ANY_SEQUENCE_STYLE yaml_sequence_style_t = iota + + yaml_BLOCK_SEQUENCE_STYLE // The block sequence style. + yaml_FLOW_SEQUENCE_STYLE // The flow sequence style. +) + +type yaml_mapping_style_t yaml_style_t + +// Mapping styles. +const ( + // Let the emitter choose the style. + yaml_ANY_MAPPING_STYLE yaml_mapping_style_t = iota + + yaml_BLOCK_MAPPING_STYLE // The block mapping style. + yaml_FLOW_MAPPING_STYLE // The flow mapping style. +) + +// Tokens + +type yaml_token_type_t int + +// Token types. +const ( + // An empty token. + yaml_NO_TOKEN yaml_token_type_t = iota + + yaml_STREAM_START_TOKEN // A STREAM-START token. + yaml_STREAM_END_TOKEN // A STREAM-END token. + + yaml_VERSION_DIRECTIVE_TOKEN // A VERSION-DIRECTIVE token. + yaml_TAG_DIRECTIVE_TOKEN // A TAG-DIRECTIVE token. + yaml_DOCUMENT_START_TOKEN // A DOCUMENT-START token. + yaml_DOCUMENT_END_TOKEN // A DOCUMENT-END token. + + yaml_BLOCK_SEQUENCE_START_TOKEN // A BLOCK-SEQUENCE-START token. + yaml_BLOCK_MAPPING_START_TOKEN // A BLOCK-SEQUENCE-END token. + yaml_BLOCK_END_TOKEN // A BLOCK-END token. + + yaml_FLOW_SEQUENCE_START_TOKEN // A FLOW-SEQUENCE-START token. + yaml_FLOW_SEQUENCE_END_TOKEN // A FLOW-SEQUENCE-END token. + yaml_FLOW_MAPPING_START_TOKEN // A FLOW-MAPPING-START token. + yaml_FLOW_MAPPING_END_TOKEN // A FLOW-MAPPING-END token. + + yaml_BLOCK_ENTRY_TOKEN // A BLOCK-ENTRY token. + yaml_FLOW_ENTRY_TOKEN // A FLOW-ENTRY token. + yaml_KEY_TOKEN // A KEY token. + yaml_VALUE_TOKEN // A VALUE token. + + yaml_ALIAS_TOKEN // An ALIAS token. + yaml_ANCHOR_TOKEN // An ANCHOR token. + yaml_TAG_TOKEN // A TAG token. + yaml_SCALAR_TOKEN // A SCALAR token. +) + +func (tt yaml_token_type_t) String() string { + switch tt { + case yaml_NO_TOKEN: + return "yaml_NO_TOKEN" + case yaml_STREAM_START_TOKEN: + return "yaml_STREAM_START_TOKEN" + case yaml_STREAM_END_TOKEN: + return "yaml_STREAM_END_TOKEN" + case yaml_VERSION_DIRECTIVE_TOKEN: + return "yaml_VERSION_DIRECTIVE_TOKEN" + case yaml_TAG_DIRECTIVE_TOKEN: + return "yaml_TAG_DIRECTIVE_TOKEN" + case yaml_DOCUMENT_START_TOKEN: + return "yaml_DOCUMENT_START_TOKEN" + case yaml_DOCUMENT_END_TOKEN: + return "yaml_DOCUMENT_END_TOKEN" + case yaml_BLOCK_SEQUENCE_START_TOKEN: + return "yaml_BLOCK_SEQUENCE_START_TOKEN" + case yaml_BLOCK_MAPPING_START_TOKEN: + return "yaml_BLOCK_MAPPING_START_TOKEN" + case yaml_BLOCK_END_TOKEN: + return "yaml_BLOCK_END_TOKEN" + case yaml_FLOW_SEQUENCE_START_TOKEN: + return "yaml_FLOW_SEQUENCE_START_TOKEN" + case yaml_FLOW_SEQUENCE_END_TOKEN: + return "yaml_FLOW_SEQUENCE_END_TOKEN" + case yaml_FLOW_MAPPING_START_TOKEN: + return "yaml_FLOW_MAPPING_START_TOKEN" + case yaml_FLOW_MAPPING_END_TOKEN: + return "yaml_FLOW_MAPPING_END_TOKEN" + case yaml_BLOCK_ENTRY_TOKEN: + return "yaml_BLOCK_ENTRY_TOKEN" + case yaml_FLOW_ENTRY_TOKEN: + return "yaml_FLOW_ENTRY_TOKEN" + case yaml_KEY_TOKEN: + return "yaml_KEY_TOKEN" + case yaml_VALUE_TOKEN: + return "yaml_VALUE_TOKEN" + case yaml_ALIAS_TOKEN: + return "yaml_ALIAS_TOKEN" + case yaml_ANCHOR_TOKEN: + return "yaml_ANCHOR_TOKEN" + case yaml_TAG_TOKEN: + return "yaml_TAG_TOKEN" + case yaml_SCALAR_TOKEN: + return "yaml_SCALAR_TOKEN" + } + return "" +} + +// The token structure. +type yaml_token_t struct { + // The token type. + typ yaml_token_type_t + + // The start/end of the token. + start_mark, end_mark yaml_mark_t + + // The stream encoding (for yaml_STREAM_START_TOKEN). + encoding yaml_encoding_t + + // The alias/anchor/scalar value or tag/tag directive handle + // (for yaml_ALIAS_TOKEN, yaml_ANCHOR_TOKEN, yaml_SCALAR_TOKEN, yaml_TAG_TOKEN, yaml_TAG_DIRECTIVE_TOKEN). + value []byte + + // The tag suffix (for yaml_TAG_TOKEN). + suffix []byte + + // The tag directive prefix (for yaml_TAG_DIRECTIVE_TOKEN). + prefix []byte + + // The scalar style (for yaml_SCALAR_TOKEN). + style yaml_scalar_style_t + + // The version directive major/minor (for yaml_VERSION_DIRECTIVE_TOKEN). + major, minor int8 +} + +// Events + +type yaml_event_type_t int8 + +// Event types. +const ( + // An empty event. + yaml_NO_EVENT yaml_event_type_t = iota + + yaml_STREAM_START_EVENT // A STREAM-START event. + yaml_STREAM_END_EVENT // A STREAM-END event. + yaml_DOCUMENT_START_EVENT // A DOCUMENT-START event. + yaml_DOCUMENT_END_EVENT // A DOCUMENT-END event. + yaml_ALIAS_EVENT // An ALIAS event. + yaml_SCALAR_EVENT // A SCALAR event. + yaml_SEQUENCE_START_EVENT // A SEQUENCE-START event. + yaml_SEQUENCE_END_EVENT // A SEQUENCE-END event. + yaml_MAPPING_START_EVENT // A MAPPING-START event. + yaml_MAPPING_END_EVENT // A MAPPING-END event. +) + +var eventStrings = []string{ + yaml_NO_EVENT: "none", + yaml_STREAM_START_EVENT: "stream start", + yaml_STREAM_END_EVENT: "stream end", + yaml_DOCUMENT_START_EVENT: "document start", + yaml_DOCUMENT_END_EVENT: "document end", + yaml_ALIAS_EVENT: "alias", + yaml_SCALAR_EVENT: "scalar", + yaml_SEQUENCE_START_EVENT: "sequence start", + yaml_SEQUENCE_END_EVENT: "sequence end", + yaml_MAPPING_START_EVENT: "mapping start", + yaml_MAPPING_END_EVENT: "mapping end", +} + +func (e yaml_event_type_t) String() string { + if e < 0 || int(e) >= len(eventStrings) { + return fmt.Sprintf("unknown event %d", e) + } + return eventStrings[e] +} + +// The event structure. +type yaml_event_t struct { + + // The event type. + typ yaml_event_type_t + + // The start and end of the event. + start_mark, end_mark yaml_mark_t + + // The document encoding (for yaml_STREAM_START_EVENT). + encoding yaml_encoding_t + + // The version directive (for yaml_DOCUMENT_START_EVENT). + version_directive *yaml_version_directive_t + + // The list of tag directives (for yaml_DOCUMENT_START_EVENT). + tag_directives []yaml_tag_directive_t + + // The anchor (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_ALIAS_EVENT). + anchor []byte + + // The tag (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT). + tag []byte + + // The scalar value (for yaml_SCALAR_EVENT). + value []byte + + // Is the document start/end indicator implicit, or the tag optional? + // (for yaml_DOCUMENT_START_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_SCALAR_EVENT). + implicit bool + + // Is the tag optional for any non-plain style? (for yaml_SCALAR_EVENT). + quoted_implicit bool + + // The style (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT). + style yaml_style_t +} + +func (e *yaml_event_t) scalar_style() yaml_scalar_style_t { return yaml_scalar_style_t(e.style) } +func (e *yaml_event_t) sequence_style() yaml_sequence_style_t { return yaml_sequence_style_t(e.style) } +func (e *yaml_event_t) mapping_style() yaml_mapping_style_t { return yaml_mapping_style_t(e.style) } + +// Nodes + +const ( + yaml_NULL_TAG = "tag:yaml.org,2002:null" // The tag !!null with the only possible value: null. + yaml_BOOL_TAG = "tag:yaml.org,2002:bool" // The tag !!bool with the values: true and false. + yaml_STR_TAG = "tag:yaml.org,2002:str" // The tag !!str for string values. + yaml_INT_TAG = "tag:yaml.org,2002:int" // The tag !!int for integer values. + yaml_FLOAT_TAG = "tag:yaml.org,2002:float" // The tag !!float for float values. + yaml_TIMESTAMP_TAG = "tag:yaml.org,2002:timestamp" // The tag !!timestamp for date and time values. + + yaml_SEQ_TAG = "tag:yaml.org,2002:seq" // The tag !!seq is used to denote sequences. + yaml_MAP_TAG = "tag:yaml.org,2002:map" // The tag !!map is used to denote mapping. + + // Not in original libyaml. + yaml_BINARY_TAG = "tag:yaml.org,2002:binary" + yaml_MERGE_TAG = "tag:yaml.org,2002:merge" + + yaml_DEFAULT_SCALAR_TAG = yaml_STR_TAG // The default scalar tag is !!str. + yaml_DEFAULT_SEQUENCE_TAG = yaml_SEQ_TAG // The default sequence tag is !!seq. + yaml_DEFAULT_MAPPING_TAG = yaml_MAP_TAG // The default mapping tag is !!map. +) + +type yaml_node_type_t int + +// Node types. +const ( + // An empty node. + yaml_NO_NODE yaml_node_type_t = iota + + yaml_SCALAR_NODE // A scalar node. + yaml_SEQUENCE_NODE // A sequence node. + yaml_MAPPING_NODE // A mapping node. +) + +// An element of a sequence node. +type yaml_node_item_t int + +// An element of a mapping node. +type yaml_node_pair_t struct { + key int // The key of the element. + value int // The value of the element. +} + +// The node structure. +type yaml_node_t struct { + typ yaml_node_type_t // The node type. + tag []byte // The node tag. + + // The node data. + + // The scalar parameters (for yaml_SCALAR_NODE). + scalar struct { + value []byte // The scalar value. + length int // The length of the scalar value. + style yaml_scalar_style_t // The scalar style. + } + + // The sequence parameters (for YAML_SEQUENCE_NODE). + sequence struct { + items_data []yaml_node_item_t // The stack of sequence items. + style yaml_sequence_style_t // The sequence style. + } + + // The mapping parameters (for yaml_MAPPING_NODE). + mapping struct { + pairs_data []yaml_node_pair_t // The stack of mapping pairs (key, value). + pairs_start *yaml_node_pair_t // The beginning of the stack. + pairs_end *yaml_node_pair_t // The end of the stack. + pairs_top *yaml_node_pair_t // The top of the stack. + style yaml_mapping_style_t // The mapping style. + } + + start_mark yaml_mark_t // The beginning of the node. + end_mark yaml_mark_t // The end of the node. + +} + +// The document structure. +type yaml_document_t struct { + + // The document nodes. + nodes []yaml_node_t + + // The version directive. + version_directive *yaml_version_directive_t + + // The list of tag directives. + tag_directives_data []yaml_tag_directive_t + tag_directives_start int // The beginning of the tag directives list. + tag_directives_end int // The end of the tag directives list. + + start_implicit int // Is the document start indicator implicit? + end_implicit int // Is the document end indicator implicit? + + // The start/end of the document. + start_mark, end_mark yaml_mark_t +} + +// The prototype of a read handler. +// +// The read handler is called when the parser needs to read more bytes from the +// source. The handler should write not more than size bytes to the buffer. +// The number of written bytes should be set to the size_read variable. +// +// [in,out] data A pointer to an application data specified by +// yaml_parser_set_input(). +// [out] buffer The buffer to write the data from the source. +// [in] size The size of the buffer. +// [out] size_read The actual number of bytes read from the source. +// +// On success, the handler should return 1. If the handler failed, +// the returned value should be 0. On EOF, the handler should set the +// size_read to 0 and return 1. +type yaml_read_handler_t func(parser *yaml_parser_t, buffer []byte) (n int, err error) + +// This structure holds information about a potential simple key. +type yaml_simple_key_t struct { + possible bool // Is a simple key possible? + required bool // Is a simple key required? + token_number int // The number of the token. + mark yaml_mark_t // The position mark. +} + +// The states of the parser. +type yaml_parser_state_t int + +const ( + yaml_PARSE_STREAM_START_STATE yaml_parser_state_t = iota + + yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE // Expect the beginning of an implicit document. + yaml_PARSE_DOCUMENT_START_STATE // Expect DOCUMENT-START. + yaml_PARSE_DOCUMENT_CONTENT_STATE // Expect the content of a document. + yaml_PARSE_DOCUMENT_END_STATE // Expect DOCUMENT-END. + yaml_PARSE_BLOCK_NODE_STATE // Expect a block node. + yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE // Expect a block node or indentless sequence. + yaml_PARSE_FLOW_NODE_STATE // Expect a flow node. + yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE // Expect the first entry of a block sequence. + yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE // Expect an entry of a block sequence. + yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE // Expect an entry of an indentless sequence. + yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE // Expect the first key of a block mapping. + yaml_PARSE_BLOCK_MAPPING_KEY_STATE // Expect a block mapping key. + yaml_PARSE_BLOCK_MAPPING_VALUE_STATE // Expect a block mapping value. + yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE // Expect the first entry of a flow sequence. + yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE // Expect an entry of a flow sequence. + yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE // Expect a key of an ordered mapping. + yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE // Expect a value of an ordered mapping. + yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE // Expect the and of an ordered mapping entry. + yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE // Expect the first key of a flow mapping. + yaml_PARSE_FLOW_MAPPING_KEY_STATE // Expect a key of a flow mapping. + yaml_PARSE_FLOW_MAPPING_VALUE_STATE // Expect a value of a flow mapping. + yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE // Expect an empty value of a flow mapping. + yaml_PARSE_END_STATE // Expect nothing. +) + +func (ps yaml_parser_state_t) String() string { + switch ps { + case yaml_PARSE_STREAM_START_STATE: + return "yaml_PARSE_STREAM_START_STATE" + case yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE: + return "yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE" + case yaml_PARSE_DOCUMENT_START_STATE: + return "yaml_PARSE_DOCUMENT_START_STATE" + case yaml_PARSE_DOCUMENT_CONTENT_STATE: + return "yaml_PARSE_DOCUMENT_CONTENT_STATE" + case yaml_PARSE_DOCUMENT_END_STATE: + return "yaml_PARSE_DOCUMENT_END_STATE" + case yaml_PARSE_BLOCK_NODE_STATE: + return "yaml_PARSE_BLOCK_NODE_STATE" + case yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE: + return "yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE" + case yaml_PARSE_FLOW_NODE_STATE: + return "yaml_PARSE_FLOW_NODE_STATE" + case yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE: + return "yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE" + case yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE: + return "yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE" + case yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE: + return "yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE" + case yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE: + return "yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE" + case yaml_PARSE_BLOCK_MAPPING_KEY_STATE: + return "yaml_PARSE_BLOCK_MAPPING_KEY_STATE" + case yaml_PARSE_BLOCK_MAPPING_VALUE_STATE: + return "yaml_PARSE_BLOCK_MAPPING_VALUE_STATE" + case yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE" + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE" + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE" + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE" + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE" + case yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE: + return "yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE" + case yaml_PARSE_FLOW_MAPPING_KEY_STATE: + return "yaml_PARSE_FLOW_MAPPING_KEY_STATE" + case yaml_PARSE_FLOW_MAPPING_VALUE_STATE: + return "yaml_PARSE_FLOW_MAPPING_VALUE_STATE" + case yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE: + return "yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE" + case yaml_PARSE_END_STATE: + return "yaml_PARSE_END_STATE" + } + return "" +} + +// This structure holds aliases data. +type yaml_alias_data_t struct { + anchor []byte // The anchor. + index int // The node id. + mark yaml_mark_t // The anchor mark. +} + +// The parser structure. +// +// All members are internal. Manage the structure using the +// yaml_parser_ family of functions. +type yaml_parser_t struct { + + // Error handling + + error yaml_error_type_t // Error type. + + problem string // Error description. + + // The byte about which the problem occurred. + problem_offset int + problem_value int + problem_mark yaml_mark_t + + // The error context. + context string + context_mark yaml_mark_t + + // Reader stuff + + read_handler yaml_read_handler_t // Read handler. + + input_reader io.Reader // File input data. + input []byte // String input data. + input_pos int + + eof bool // EOF flag + + buffer []byte // The working buffer. + buffer_pos int // The current position of the buffer. + + unread int // The number of unread characters in the buffer. + + raw_buffer []byte // The raw buffer. + raw_buffer_pos int // The current position of the buffer. + + encoding yaml_encoding_t // The input encoding. + + offset int // The offset of the current position (in bytes). + mark yaml_mark_t // The mark of the current position. + + // Scanner stuff + + stream_start_produced bool // Have we started to scan the input stream? + stream_end_produced bool // Have we reached the end of the input stream? + + flow_level int // The number of unclosed '[' and '{' indicators. + + tokens []yaml_token_t // The tokens queue. + tokens_head int // The head of the tokens queue. + tokens_parsed int // The number of tokens fetched from the queue. + token_available bool // Does the tokens queue contain a token ready for dequeueing. + + indent int // The current indentation level. + indents []int // The indentation levels stack. + + simple_key_allowed bool // May a simple key occur at the current position? + simple_keys []yaml_simple_key_t // The stack of simple keys. + simple_keys_by_tok map[int]int // possible simple_key indexes indexed by token_number + + // Parser stuff + + state yaml_parser_state_t // The current parser state. + states []yaml_parser_state_t // The parser states stack. + marks []yaml_mark_t // The stack of marks. + tag_directives []yaml_tag_directive_t // The list of TAG directives. + + // Dumper stuff + + aliases []yaml_alias_data_t // The alias data. + + document *yaml_document_t // The currently parsed document. +} + +// Emitter Definitions + +// The prototype of a write handler. +// +// The write handler is called when the emitter needs to flush the accumulated +// characters to the output. The handler should write @a size bytes of the +// @a buffer to the output. +// +// @param[in,out] data A pointer to an application data specified by +// yaml_emitter_set_output(). +// @param[in] buffer The buffer with bytes to be written. +// @param[in] size The size of the buffer. +// +// @returns On success, the handler should return @c 1. If the handler failed, +// the returned value should be @c 0. +// +type yaml_write_handler_t func(emitter *yaml_emitter_t, buffer []byte) error + +type yaml_emitter_state_t int + +// The emitter states. +const ( + // Expect STREAM-START. + yaml_EMIT_STREAM_START_STATE yaml_emitter_state_t = iota + + yaml_EMIT_FIRST_DOCUMENT_START_STATE // Expect the first DOCUMENT-START or STREAM-END. + yaml_EMIT_DOCUMENT_START_STATE // Expect DOCUMENT-START or STREAM-END. + yaml_EMIT_DOCUMENT_CONTENT_STATE // Expect the content of a document. + yaml_EMIT_DOCUMENT_END_STATE // Expect DOCUMENT-END. + yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE // Expect the first item of a flow sequence. + yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE // Expect an item of a flow sequence. + yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE // Expect the first key of a flow mapping. + yaml_EMIT_FLOW_MAPPING_KEY_STATE // Expect a key of a flow mapping. + yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE // Expect a value for a simple key of a flow mapping. + yaml_EMIT_FLOW_MAPPING_VALUE_STATE // Expect a value of a flow mapping. + yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE // Expect the first item of a block sequence. + yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE // Expect an item of a block sequence. + yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE // Expect the first key of a block mapping. + yaml_EMIT_BLOCK_MAPPING_KEY_STATE // Expect the key of a block mapping. + yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE // Expect a value for a simple key of a block mapping. + yaml_EMIT_BLOCK_MAPPING_VALUE_STATE // Expect a value of a block mapping. + yaml_EMIT_END_STATE // Expect nothing. +) + +// The emitter structure. +// +// All members are internal. Manage the structure using the @c yaml_emitter_ +// family of functions. +type yaml_emitter_t struct { + + // Error handling + + error yaml_error_type_t // Error type. + problem string // Error description. + + // Writer stuff + + write_handler yaml_write_handler_t // Write handler. + + output_buffer *[]byte // String output data. + output_writer io.Writer // File output data. + + buffer []byte // The working buffer. + buffer_pos int // The current position of the buffer. + + raw_buffer []byte // The raw buffer. + raw_buffer_pos int // The current position of the buffer. + + encoding yaml_encoding_t // The stream encoding. + + // Emitter stuff + + canonical bool // If the output is in the canonical style? + best_indent int // The number of indentation spaces. + best_width int // The preferred width of the output lines. + unicode bool // Allow unescaped non-ASCII characters? + line_break yaml_break_t // The preferred line break. + + state yaml_emitter_state_t // The current emitter state. + states []yaml_emitter_state_t // The stack of states. + + events []yaml_event_t // The event queue. + events_head int // The head of the event queue. + + indents []int // The stack of indentation levels. + + tag_directives []yaml_tag_directive_t // The list of tag directives. + + indent int // The current indentation level. + + flow_level int // The current flow level. + + root_context bool // Is it the document root context? + sequence_context bool // Is it a sequence context? + mapping_context bool // Is it a mapping context? + simple_key_context bool // Is it a simple mapping key context? + + line int // The current line. + column int // The current column. + whitespace bool // If the last character was a whitespace? + indention bool // If the last character was an indentation character (' ', '-', '?', ':')? + open_ended bool // If an explicit document end is required? + + // Anchor analysis. + anchor_data struct { + anchor []byte // The anchor value. + alias bool // Is it an alias? + } + + // Tag analysis. + tag_data struct { + handle []byte // The tag handle. + suffix []byte // The tag suffix. + } + + // Scalar analysis. + scalar_data struct { + value []byte // The scalar value. + multiline bool // Does the scalar contain line breaks? + flow_plain_allowed bool // Can the scalar be expessed in the flow plain style? + block_plain_allowed bool // Can the scalar be expressed in the block plain style? + single_quoted_allowed bool // Can the scalar be expressed in the single quoted style? + block_allowed bool // Can the scalar be expressed in the literal or folded styles? + style yaml_scalar_style_t // The output style. + } + + // Dumper stuff + + opened bool // If the stream was already opened? + closed bool // If the stream was already closed? + + // The information associated with the document nodes. + anchors *struct { + references int // The number of references. + anchor int // The anchor id. + serialized bool // If the node has been emitted? + } + + last_anchor_id int // The last assigned anchor id. + + document *yaml_document_t // The currently emitted document. +} diff --git a/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/yamlprivateh.go b/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/yamlprivateh.go new file mode 100644 index 000000000..8110ce3c3 --- /dev/null +++ b/vendor/github.com/gardener/gardener/third_party/gopkg.in/yaml.v2/yamlprivateh.go @@ -0,0 +1,173 @@ +package yaml + +const ( + // The size of the input raw buffer. + input_raw_buffer_size = 512 + + // The size of the input buffer. + // It should be possible to decode the whole raw buffer. + input_buffer_size = input_raw_buffer_size * 3 + + // The size of the output buffer. + output_buffer_size = 128 + + // The size of the output raw buffer. + // It should be possible to encode the whole output buffer. + output_raw_buffer_size = (output_buffer_size*2 + 2) + + // The size of other stacks and queues. + initial_stack_size = 16 + initial_queue_size = 16 + initial_string_size = 16 +) + +// Check if the character at the specified position is an alphabetical +// character, a digit, '_', or '-'. +func is_alpha(b []byte, i int) bool { + return b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'Z' || b[i] >= 'a' && b[i] <= 'z' || b[i] == '_' || b[i] == '-' +} + +// Check if the character at the specified position is a digit. +func is_digit(b []byte, i int) bool { + return b[i] >= '0' && b[i] <= '9' +} + +// Get the value of a digit. +func as_digit(b []byte, i int) int { + return int(b[i]) - '0' +} + +// Check if the character at the specified position is a hex-digit. +func is_hex(b []byte, i int) bool { + return b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'F' || b[i] >= 'a' && b[i] <= 'f' +} + +// Get the value of a hex-digit. +func as_hex(b []byte, i int) int { + bi := b[i] + if bi >= 'A' && bi <= 'F' { + return int(bi) - 'A' + 10 + } + if bi >= 'a' && bi <= 'f' { + return int(bi) - 'a' + 10 + } + return int(bi) - '0' +} + +// Check if the character is ASCII. +func is_ascii(b []byte, i int) bool { + return b[i] <= 0x7F +} + +// Check if the character at the start of the buffer can be printed unescaped. +func is_printable(b []byte, i int) bool { + return ((b[i] == 0x0A) || // . == #x0A + (b[i] >= 0x20 && b[i] <= 0x7E) || // #x20 <= . <= #x7E + (b[i] == 0xC2 && b[i+1] >= 0xA0) || // #0xA0 <= . <= #xD7FF + (b[i] > 0xC2 && b[i] < 0xED) || + (b[i] == 0xED && b[i+1] < 0xA0) || + (b[i] == 0xEE) || + (b[i] == 0xEF && // #xE000 <= . <= #xFFFD + !(b[i+1] == 0xBB && b[i+2] == 0xBF) && // && . != #xFEFF + !(b[i+1] == 0xBF && (b[i+2] == 0xBE || b[i+2] == 0xBF)))) +} + +// Check if the character at the specified position is NUL. +func is_z(b []byte, i int) bool { + return b[i] == 0x00 +} + +// Check if the beginning of the buffer is a BOM. +func is_bom(b []byte, i int) bool { + return b[0] == 0xEF && b[1] == 0xBB && b[2] == 0xBF +} + +// Check if the character at the specified position is space. +func is_space(b []byte, i int) bool { + return b[i] == ' ' +} + +// Check if the character at the specified position is tab. +func is_tab(b []byte, i int) bool { + return b[i] == '\t' +} + +// Check if the character at the specified position is blank (space or tab). +func is_blank(b []byte, i int) bool { + //return is_space(b, i) || is_tab(b, i) + return b[i] == ' ' || b[i] == '\t' +} + +// Check if the character at the specified position is a line break. +func is_break(b []byte, i int) bool { + return (b[i] == '\r' || // CR (#xD) + b[i] == '\n' || // LF (#xA) + b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9) // PS (#x2029) +} + +func is_crlf(b []byte, i int) bool { + return b[i] == '\r' && b[i+1] == '\n' +} + +// Check if the character is a line break or NUL. +func is_breakz(b []byte, i int) bool { + //return is_break(b, i) || is_z(b, i) + return ( // is_break: + b[i] == '\r' || // CR (#xD) + b[i] == '\n' || // LF (#xA) + b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029) + // is_z: + b[i] == 0) +} + +// Check if the character is a line break, space, or NUL. +func is_spacez(b []byte, i int) bool { + //return is_space(b, i) || is_breakz(b, i) + return ( // is_space: + b[i] == ' ' || + // is_breakz: + b[i] == '\r' || // CR (#xD) + b[i] == '\n' || // LF (#xA) + b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029) + b[i] == 0) +} + +// Check if the character is a line break, space, tab, or NUL. +func is_blankz(b []byte, i int) bool { + //return is_blank(b, i) || is_breakz(b, i) + return ( // is_blank: + b[i] == ' ' || b[i] == '\t' || + // is_breakz: + b[i] == '\r' || // CR (#xD) + b[i] == '\n' || // LF (#xA) + b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029) + b[i] == 0) +} + +// Determine the width of the character. +func width(b byte) int { + // Don't replace these by a switch without first + // confirming that it is being inlined. + if b&0x80 == 0x00 { + return 1 + } + if b&0xE0 == 0xC0 { + return 2 + } + if b&0xF0 == 0xE0 { + return 3 + } + if b&0xF8 == 0xF0 { + return 4 + } + return 0 + +} diff --git a/vendor/github.com/golang/protobuf/jsonpb/decode.go b/vendor/github.com/golang/protobuf/jsonpb/decode.go index 6c16c255f..c6f66f103 100644 --- a/vendor/github.com/golang/protobuf/jsonpb/decode.go +++ b/vendor/github.com/golang/protobuf/jsonpb/decode.go @@ -56,6 +56,7 @@ type Unmarshaler struct { // implement JSONPBMarshaler so that the custom format can be produced. // // The JSON unmarshaling must follow the JSON to proto specification: +// // https://developers.google.com/protocol-buffers/docs/proto3#json // // Deprecated: Custom types should implement protobuf reflection instead. diff --git a/vendor/github.com/golang/protobuf/jsonpb/encode.go b/vendor/github.com/golang/protobuf/jsonpb/encode.go index 685c80a62..e9438a93f 100644 --- a/vendor/github.com/golang/protobuf/jsonpb/encode.go +++ b/vendor/github.com/golang/protobuf/jsonpb/encode.go @@ -55,6 +55,7 @@ type Marshaler struct { // implement JSONPBUnmarshaler so that the custom format can be parsed. // // The JSON marshaling must follow the proto to JSON specification: +// // https://developers.google.com/protocol-buffers/docs/proto3#json // // Deprecated: Custom types should implement protobuf reflection instead. diff --git a/vendor/github.com/golang/protobuf/ptypes/any.go b/vendor/github.com/golang/protobuf/ptypes/any.go index 85f9f5736..fdff3fdb4 100644 --- a/vendor/github.com/golang/protobuf/ptypes/any.go +++ b/vendor/github.com/golang/protobuf/ptypes/any.go @@ -127,9 +127,10 @@ func Is(any *anypb.Any, m proto.Message) bool { // The allocated message is stored in the embedded proto.Message. // // Example: -// var x ptypes.DynamicAny -// if err := ptypes.UnmarshalAny(a, &x); err != nil { ... } -// fmt.Printf("unmarshaled message: %v", x.Message) +// +// var x ptypes.DynamicAny +// if err := ptypes.UnmarshalAny(a, &x); err != nil { ... } +// fmt.Printf("unmarshaled message: %v", x.Message) // // Deprecated: Use the any.UnmarshalNew method instead to unmarshal // the any message contents into a new instance of the underlying message. diff --git a/vendor/github.com/onsi/ginkgo/v2/CHANGELOG.md b/vendor/github.com/onsi/ginkgo/v2/CHANGELOG.md index 9a65dd10c..44222220a 100644 --- a/vendor/github.com/onsi/ginkgo/v2/CHANGELOG.md +++ b/vendor/github.com/onsi/ginkgo/v2/CHANGELOG.md @@ -1,3 +1,38 @@ +## 2.17.1 + +### Fixes +- If the user sets --seed=0, make sure all parallel nodes get the same seed [af0330d] + +## 2.17.0 + +### Features + +- add `--github-output` for nicer output in github actions [e8a2056] + +### Maintenance + +- fix typo in core_dsl.go [977bc6f] +- Fix typo in docs [e297e7b] + +## 2.16.0 + +### Features +- add SpecContext to reporting nodes + +### Fixes +- merge coverages instead of combining them (#1329) (#1340) [23f0cc5] +- core_dsl: disable Getwd() with environment variable (#1357) [cd418b7] + +### Maintenance +- docs/index.md: Typo [2cebe8d] +- fix docs [06de431] +- chore: test with Go 1.22 (#1352) [898cba9] +- Bump golang.org/x/tools from 0.16.1 to 0.17.0 (#1336) [17ae120] +- Bump golang.org/x/sys from 0.15.0 to 0.16.0 (#1327) [5a179ed] +- Bump github.com/go-logr/logr from 1.3.0 to 1.4.1 (#1321) [a1e6b69] +- Bump github-pages and jekyll-feed in /docs (#1351) [d52951d] +- Fix docs for handling failures in goroutines (#1339) [4471b2e] + ## 2.15.0 ### Features diff --git a/vendor/github.com/onsi/ginkgo/v2/core_dsl.go b/vendor/github.com/onsi/ginkgo/v2/core_dsl.go index 2d7a70ecc..a3e8237e9 100644 --- a/vendor/github.com/onsi/ginkgo/v2/core_dsl.go +++ b/vendor/github.com/onsi/ginkgo/v2/core_dsl.go @@ -292,7 +292,7 @@ func RunSpecs(t GinkgoTestingT, description string, args ...interface{}) bool { err = global.Suite.BuildTree() exitIfErr(err) - suitePath, err := os.Getwd() + suitePath, err := getwd() exitIfErr(err) suitePath, err = filepath.Abs(suitePath) exitIfErr(err) @@ -345,6 +345,15 @@ func extractSuiteConfiguration(args []interface{}) Labels { return suiteLabels } +func getwd() (string, error) { + if !strings.EqualFold(os.Getenv("GINKGO_PRESERVE_CACHE"), "true") { + // Getwd calls os.Getenv("PWD"), which breaks test caching if the cache + // is shared between two different directories with the same test code. + return os.Getwd() + } + return "", nil +} + /* PreviewSpecs walks the testing tree and produces a report without actually invoking the specs. See http://onsi.github.io/ginkgo/#previewing-specs for more information. @@ -369,7 +378,7 @@ func PreviewSpecs(description string, args ...any) Report { err = global.Suite.BuildTree() exitIfErr(err) - suitePath, err := os.Getwd() + suitePath, err := getwd() exitIfErr(err) suitePath, err = filepath.Abs(suitePath) exitIfErr(err) @@ -783,8 +792,8 @@ DeferCleanup can be passed: For example: BeforeEach(func() { - DeferCleanup(os.SetEnv, "FOO", os.GetEnv("FOO")) - os.SetEnv("FOO", "BAR") + DeferCleanup(os.Setenv, "FOO", os.GetEnv("FOO")) + os.Setenv("FOO", "BAR") }) will register a cleanup handler that will set the environment variable "FOO" to its current value (obtained by os.GetEnv("FOO")) after the spec runs and then sets the environment variable "FOO" to "BAR" for the current spec. diff --git a/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/gocovmerge.go b/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/gocovmerge.go new file mode 100644 index 000000000..3c5079ff4 --- /dev/null +++ b/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/gocovmerge.go @@ -0,0 +1,129 @@ +// Copyright (c) 2015, Wade Simmons +// All rights reserved. + +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: + +// 1. Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. + +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Package gocovmerge takes the results from multiple `go test -coverprofile` +// runs and merges them into one profile + +// this file was originally taken from the gocovmerge project +// see also: https://go.shabbyrobe.org/gocovmerge +package internal + +import ( + "fmt" + "io" + "sort" + + "golang.org/x/tools/cover" +) + +func AddCoverProfile(profiles []*cover.Profile, p *cover.Profile) []*cover.Profile { + i := sort.Search(len(profiles), func(i int) bool { return profiles[i].FileName >= p.FileName }) + if i < len(profiles) && profiles[i].FileName == p.FileName { + MergeCoverProfiles(profiles[i], p) + } else { + profiles = append(profiles, nil) + copy(profiles[i+1:], profiles[i:]) + profiles[i] = p + } + return profiles +} + +func DumpCoverProfiles(profiles []*cover.Profile, out io.Writer) error { + if len(profiles) == 0 { + return nil + } + if _, err := fmt.Fprintf(out, "mode: %s\n", profiles[0].Mode); err != nil { + return err + } + for _, p := range profiles { + for _, b := range p.Blocks { + if _, err := fmt.Fprintf(out, "%s:%d.%d,%d.%d %d %d\n", p.FileName, b.StartLine, b.StartCol, b.EndLine, b.EndCol, b.NumStmt, b.Count); err != nil { + return err + } + } + } + return nil +} + +func MergeCoverProfiles(into *cover.Profile, merge *cover.Profile) error { + if into.Mode != merge.Mode { + return fmt.Errorf("cannot merge profiles with different modes") + } + // Since the blocks are sorted, we can keep track of where the last block + // was inserted and only look at the blocks after that as targets for merge + startIndex := 0 + for _, b := range merge.Blocks { + var err error + startIndex, err = mergeProfileBlock(into, b, startIndex) + if err != nil { + return err + } + } + return nil +} + +func mergeProfileBlock(p *cover.Profile, pb cover.ProfileBlock, startIndex int) (int, error) { + sortFunc := func(i int) bool { + pi := p.Blocks[i+startIndex] + return pi.StartLine >= pb.StartLine && (pi.StartLine != pb.StartLine || pi.StartCol >= pb.StartCol) + } + + i := 0 + if sortFunc(i) != true { + i = sort.Search(len(p.Blocks)-startIndex, sortFunc) + } + + i += startIndex + if i < len(p.Blocks) && p.Blocks[i].StartLine == pb.StartLine && p.Blocks[i].StartCol == pb.StartCol { + if p.Blocks[i].EndLine != pb.EndLine || p.Blocks[i].EndCol != pb.EndCol { + return i, fmt.Errorf("gocovmerge: overlapping merge %v %v %v", p.FileName, p.Blocks[i], pb) + } + switch p.Mode { + case "set": + p.Blocks[i].Count |= pb.Count + case "count", "atomic": + p.Blocks[i].Count += pb.Count + default: + return i, fmt.Errorf("gocovmerge: unsupported covermode '%s'", p.Mode) + } + + } else { + if i > 0 { + pa := p.Blocks[i-1] + if pa.EndLine >= pb.EndLine && (pa.EndLine != pb.EndLine || pa.EndCol > pb.EndCol) { + return i, fmt.Errorf("gocovmerge: overlap before %v %v %v", p.FileName, pa, pb) + } + } + if i < len(p.Blocks)-1 { + pa := p.Blocks[i+1] + if pa.StartLine <= pb.StartLine && (pa.StartLine != pb.StartLine || pa.StartCol < pb.StartCol) { + return i, fmt.Errorf("gocovmerge: overlap after %v %v %v", p.FileName, pa, pb) + } + } + p.Blocks = append(p.Blocks, cover.ProfileBlock{}) + copy(p.Blocks[i+1:], p.Blocks[i:]) + p.Blocks[i] = pb + } + + return i + 1, nil +} diff --git a/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/profiles_and_reports.go b/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/profiles_and_reports.go index 26de28b57..5f35864dd 100644 --- a/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/profiles_and_reports.go +++ b/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/profiles_and_reports.go @@ -1,7 +1,6 @@ package internal import ( - "bytes" "fmt" "os" "os/exec" @@ -12,6 +11,7 @@ import ( "github.com/google/pprof/profile" "github.com/onsi/ginkgo/v2/reporters" "github.com/onsi/ginkgo/v2/types" + "golang.org/x/tools/cover" ) func AbsPathForGeneratedAsset(assetName string, suite TestSuite, cliConfig types.CLIConfig, process int) string { @@ -144,38 +144,26 @@ func FinalizeProfilesAndReportsForSuites(suites TestSuites, cliConfig types.CLIC return messages, nil } -// loads each profile, combines them, deletes them, stores them in destination +// loads each profile, merges them, deletes them, stores them in destination func MergeAndCleanupCoverProfiles(profiles []string, destination string) error { - combined := &bytes.Buffer{} - modeRegex := regexp.MustCompile(`^mode: .*\n`) - for i, profile := range profiles { - contents, err := os.ReadFile(profile) + var merged []*cover.Profile + for _, file := range profiles { + parsedProfiles, err := cover.ParseProfiles(file) if err != nil { - return fmt.Errorf("Unable to read coverage file %s:\n%s", profile, err.Error()) + return err } - os.Remove(profile) - - // remove the cover mode line from every file - // except the first one - if i > 0 { - contents = modeRegex.ReplaceAll(contents, []byte{}) - } - - _, err = combined.Write(contents) - - // Add a newline to the end of every file if missing. - if err == nil && len(contents) > 0 && contents[len(contents)-1] != '\n' { - _, err = combined.Write([]byte("\n")) - } - - if err != nil { - return fmt.Errorf("Unable to append to coverprofile:\n%s", err.Error()) + os.Remove(file) + for _, p := range parsedProfiles { + merged = AddCoverProfile(merged, p) } } - - err := os.WriteFile(destination, combined.Bytes(), 0666) + dst, err := os.OpenFile(destination, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666) + if err != nil { + return err + } + err = DumpCoverProfiles(merged, dst) if err != nil { - return fmt.Errorf("Unable to create combined cover profile:\n%s", err.Error()) + return err } return nil } diff --git a/vendor/github.com/onsi/ginkgo/v2/internal/node.go b/vendor/github.com/onsi/ginkgo/v2/internal/node.go index 16f0dc227..6a15f19ae 100644 --- a/vendor/github.com/onsi/ginkgo/v2/internal/node.go +++ b/vendor/github.com/onsi/ginkgo/v2/internal/node.go @@ -5,9 +5,8 @@ import ( "fmt" "reflect" "sort" - "time" - "sync" + "time" "github.com/onsi/ginkgo/v2/types" ) @@ -16,8 +15,8 @@ var _global_node_id_counter = uint(0) var _global_id_mutex = &sync.Mutex{} func UniqueNodeID() uint { - //There's a reace in the internal integration tests if we don't make - //accessing _global_node_id_counter safe across goroutines. + // There's a reace in the internal integration tests if we don't make + // accessing _global_node_id_counter safe across goroutines. _global_id_mutex.Lock() defer _global_id_mutex.Unlock() _global_node_id_counter += 1 @@ -44,8 +43,8 @@ type Node struct { SynchronizedAfterSuiteProc1Body func(SpecContext) SynchronizedAfterSuiteProc1BodyHasContext bool - ReportEachBody func(types.SpecReport) - ReportSuiteBody func(types.Report) + ReportEachBody func(SpecContext, types.SpecReport) + ReportSuiteBody func(SpecContext, types.Report) MarkedFocus bool MarkedPending bool @@ -209,7 +208,7 @@ func NewNode(deprecationTracker *types.DeprecationTracker, nodeType types.NodeTy args = unrollInterfaceSlice(args) remainingArgs := []interface{}{} - //First get the CodeLocation up-to-date + // First get the CodeLocation up-to-date for _, arg := range args { switch v := arg.(type) { case Offset: @@ -225,11 +224,11 @@ func NewNode(deprecationTracker *types.DeprecationTracker, nodeType types.NodeTy trackedFunctionError := false args = remainingArgs remainingArgs = []interface{}{} - //now process the rest of the args + // now process the rest of the args for _, arg := range args { switch t := reflect.TypeOf(arg); { case t == reflect.TypeOf(float64(0)): - break //ignore deprecated timeouts + break // ignore deprecated timeouts case t == reflect.TypeOf(Focus): node.MarkedFocus = bool(arg.(focusType)) if !nodeType.Is(types.NodeTypesForContainerAndIt) { @@ -325,7 +324,12 @@ func NewNode(deprecationTracker *types.DeprecationTracker, nodeType types.NodeTy node.Body = func(SpecContext) { body() } } else if nodeType.Is(types.NodeTypeReportBeforeEach | types.NodeTypeReportAfterEach) { if node.ReportEachBody == nil { - node.ReportEachBody = arg.(func(types.SpecReport)) + if fn, ok := arg.(func(types.SpecReport)); ok { + node.ReportEachBody = func(_ SpecContext, r types.SpecReport) { fn(r) } + } else { + node.ReportEachBody = arg.(func(SpecContext, types.SpecReport)) + node.HasContext = true + } } else { appendError(types.GinkgoErrors.MultipleBodyFunctions(node.CodeLocation, nodeType)) trackedFunctionError = true @@ -333,7 +337,12 @@ func NewNode(deprecationTracker *types.DeprecationTracker, nodeType types.NodeTy } } else if nodeType.Is(types.NodeTypeReportBeforeSuite | types.NodeTypeReportAfterSuite) { if node.ReportSuiteBody == nil { - node.ReportSuiteBody = arg.(func(types.Report)) + if fn, ok := arg.(func(types.Report)); ok { + node.ReportSuiteBody = func(_ SpecContext, r types.Report) { fn(r) } + } else { + node.ReportSuiteBody = arg.(func(SpecContext, types.Report)) + node.HasContext = true + } } else { appendError(types.GinkgoErrors.MultipleBodyFunctions(node.CodeLocation, nodeType)) trackedFunctionError = true @@ -395,7 +404,7 @@ func NewNode(deprecationTracker *types.DeprecationTracker, nodeType types.NodeTy } } - //validations + // validations if node.MarkedPending && node.MarkedFocus { appendError(types.GinkgoErrors.InvalidDeclarationOfFocusedAndPending(node.CodeLocation, nodeType)) } diff --git a/vendor/github.com/onsi/ginkgo/v2/internal/suite.go b/vendor/github.com/onsi/ginkgo/v2/internal/suite.go index 2b4db48af..a994ee3d6 100644 --- a/vendor/github.com/onsi/ginkgo/v2/internal/suite.go +++ b/vendor/github.com/onsi/ginkgo/v2/internal/suite.go @@ -594,8 +594,8 @@ func (suite *Suite) reportEach(spec Spec, nodeType types.NodeType) { suite.writer.Truncate() suite.outputInterceptor.StartInterceptingOutput() report := suite.currentSpecReport - nodes[i].Body = func(SpecContext) { - nodes[i].ReportEachBody(report) + nodes[i].Body = func(ctx SpecContext) { + nodes[i].ReportEachBody(ctx, report) } state, failure := suite.runNode(nodes[i], time.Time{}, spec.Nodes.BestTextFor(nodes[i])) @@ -762,7 +762,7 @@ func (suite *Suite) runReportSuiteNode(node Node, report types.Report) { report = report.Add(aggregatedReport) } - node.Body = func(SpecContext) { node.ReportSuiteBody(report) } + node.Body = func(ctx SpecContext) { node.ReportSuiteBody(ctx, report) } suite.currentSpecReport.State, suite.currentSpecReport.Failure = suite.runNode(node, time.Time{}, "") suite.currentSpecReport.EndTime = time.Now() @@ -840,7 +840,7 @@ func (suite *Suite) runNode(node Node, specDeadline time.Time, text string) (typ timeoutInPlay = "node" } if (!deadline.IsZero() && deadline.Before(now)) || interruptStatus.Interrupted() { - //we're out of time already. let's wait for a NodeTimeout if we have it, or GracePeriod if we don't + // we're out of time already. let's wait for a NodeTimeout if we have it, or GracePeriod if we don't if node.NodeTimeout > 0 { deadline = now.Add(node.NodeTimeout) timeoutInPlay = "node" @@ -918,9 +918,9 @@ func (suite *Suite) runNode(node Node, specDeadline time.Time, text string) (typ if outcomeFromRun != types.SpecStatePassed { additionalFailure := types.AdditionalFailure{ State: outcomeFromRun, - Failure: failure, //we make a copy - this will include all the configuration set up above... + Failure: failure, // we make a copy - this will include all the configuration set up above... } - //...and then we update the failure with the details from failureFromRun + // ...and then we update the failure with the details from failureFromRun additionalFailure.Failure.Location, additionalFailure.Failure.ForwardedPanic, additionalFailure.Failure.TimelineLocation = failureFromRun.Location, failureFromRun.ForwardedPanic, failureFromRun.TimelineLocation additionalFailure.Failure.ProgressReport = types.ProgressReport{} if outcome == types.SpecStateTimedout { @@ -959,7 +959,7 @@ func (suite *Suite) runNode(node Node, specDeadline time.Time, text string) (typ // tell the spec to stop. it's important we generate the progress report first to make sure we capture where // the spec is actually stuck sc.cancel(fmt.Errorf("%s timeout occurred", timeoutInPlay)) - //and now we wait for the grace period + // and now we wait for the grace period gracePeriodChannel = time.After(gracePeriod) case <-interruptStatus.Channel: interruptStatus = suite.interruptHandler.Status() diff --git a/vendor/github.com/onsi/ginkgo/v2/reporters/default_reporter.go b/vendor/github.com/onsi/ginkgo/v2/reporters/default_reporter.go index 56b7be758..4026859ec 100644 --- a/vendor/github.com/onsi/ginkgo/v2/reporters/default_reporter.go +++ b/vendor/github.com/onsi/ginkgo/v2/reporters/default_reporter.go @@ -182,6 +182,22 @@ func (r *DefaultReporter) WillRun(report types.SpecReport) { r.emitBlock(r.f(r.codeLocationBlock(report, "{{/}}", v.Is(types.VerbosityLevelVeryVerbose), false))) } +func (r *DefaultReporter) wrapTextBlock(sectionName string, fn func()) { + r.emitBlock("\n") + if r.conf.GithubOutput { + r.emitBlock(r.fi(1, "::group::%s", sectionName)) + } else { + r.emitBlock(r.fi(1, "{{gray}}%s >>{{/}}", sectionName)) + } + fn() + if r.conf.GithubOutput { + r.emitBlock(r.fi(1, "::endgroup::")) + } else { + r.emitBlock(r.fi(1, "{{gray}}<< %s{{/}}", sectionName)) + } + +} + func (r *DefaultReporter) DidRun(report types.SpecReport) { v := r.conf.Verbosity() inParallel := report.RunningInParallel @@ -283,26 +299,23 @@ func (r *DefaultReporter) DidRun(report types.SpecReport) { //Emit Stdout/Stderr Output if showSeparateStdSection { - r.emitBlock("\n") - r.emitBlock(r.fi(1, "{{gray}}Captured StdOut/StdErr Output >>{{/}}")) - r.emitBlock(r.fi(1, "%s", report.CapturedStdOutErr)) - r.emitBlock(r.fi(1, "{{gray}}<< Captured StdOut/StdErr Output{{/}}")) + r.wrapTextBlock("Captured StdOut/StdErr Output", func() { + r.emitBlock(r.fi(1, "%s", report.CapturedStdOutErr)) + }) } if showSeparateVisibilityAlwaysReportsSection { - r.emitBlock("\n") - r.emitBlock(r.fi(1, "{{gray}}Report Entries >>{{/}}")) - for _, entry := range report.ReportEntries.WithVisibility(types.ReportEntryVisibilityAlways) { - r.emitReportEntry(1, entry) - } - r.emitBlock(r.fi(1, "{{gray}}<< Report Entries{{/}}")) + r.wrapTextBlock("Report Entries", func() { + for _, entry := range report.ReportEntries.WithVisibility(types.ReportEntryVisibilityAlways) { + r.emitReportEntry(1, entry) + } + }) } if showTimeline { - r.emitBlock("\n") - r.emitBlock(r.fi(1, "{{gray}}Timeline >>{{/}}")) - r.emitTimeline(1, report, timeline) - r.emitBlock(r.fi(1, "{{gray}}<< Timeline{{/}}")) + r.wrapTextBlock("Timeline", func() { + r.emitTimeline(1, report, timeline) + }) } // Emit Failure Message @@ -405,7 +418,11 @@ func (r *DefaultReporter) emitShortFailure(indent uint, state types.SpecState, f func (r *DefaultReporter) emitFailure(indent uint, state types.SpecState, failure types.Failure, includeAdditionalFailure bool) { highlightColor := r.highlightColorForState(state) r.emitBlock(r.fi(indent, highlightColor+"[%s] %s{{/}}", r.humanReadableState(state), failure.Message)) - r.emitBlock(r.fi(indent, highlightColor+"In {{bold}}[%s]{{/}}"+highlightColor+" at: {{bold}}%s{{/}} {{gray}}@ %s{{/}}\n", failure.FailureNodeType, failure.Location, failure.TimelineLocation.Time.Format(types.GINKGO_TIME_FORMAT))) + if r.conf.GithubOutput { + r.emitBlock(r.fi(indent, "::error file=%s,line=%d::%s %s", failure.Location.FileName, failure.Location.LineNumber, failure.FailureNodeType, failure.TimelineLocation.Time.Format(types.GINKGO_TIME_FORMAT))) + } else { + r.emitBlock(r.fi(indent, highlightColor+"In {{bold}}[%s]{{/}}"+highlightColor+" at: {{bold}}%s{{/}} {{gray}}@ %s{{/}}\n", failure.FailureNodeType, failure.Location, failure.TimelineLocation.Time.Format(types.GINKGO_TIME_FORMAT))) + } if failure.ForwardedPanic != "" { r.emitBlock("\n") r.emitBlock(r.fi(indent, highlightColor+"%s{{/}}", failure.ForwardedPanic)) diff --git a/vendor/github.com/onsi/ginkgo/v2/reporting_dsl.go b/vendor/github.com/onsi/ginkgo/v2/reporting_dsl.go index f33786a2d..aa1a35176 100644 --- a/vendor/github.com/onsi/ginkgo/v2/reporting_dsl.go +++ b/vendor/github.com/onsi/ginkgo/v2/reporting_dsl.go @@ -74,12 +74,21 @@ func AddReportEntry(name string, args ...interface{}) { /* ReportBeforeEach nodes are run for each spec, even if the spec is skipped or pending. ReportBeforeEach nodes take a function that -receives a SpecReport. They are called before the spec starts. +receives a SpecReport or both SpecContext and Report for interruptible behavior. They are called before the spec starts. + +Example: + + ReportBeforeEach(func(report SpecReport) { // process report }) + ReportBeforeEach(func(ctx SpecContext, report SpecReport) { + // process report + }), NodeTimeout(1 * time.Minute)) You cannot nest any other Ginkgo nodes within a ReportBeforeEach node's closure. You can learn more about ReportBeforeEach here: https://onsi.github.io/ginkgo/#generating-reports-programmatically + +You can learn about interruptible nodes here: https://onsi.github.io/ginkgo/#spec-timeouts-and-interruptible-nodes */ -func ReportBeforeEach(body func(SpecReport), args ...interface{}) bool { +func ReportBeforeEach(body any, args ...any) bool { combinedArgs := []interface{}{body} combinedArgs = append(combinedArgs, args...) @@ -87,13 +96,23 @@ func ReportBeforeEach(body func(SpecReport), args ...interface{}) bool { } /* -ReportAfterEach nodes are run for each spec, even if the spec is skipped or pending. ReportAfterEach nodes take a function that -receives a SpecReport. They are called after the spec has completed and receive the final report for the spec. +ReportAfterEach nodes are run for each spec, even if the spec is skipped or pending. +ReportAfterEach nodes take a function that receives a SpecReport or both SpecContext and Report for interruptible behavior. +They are called after the spec has completed and receive the final report for the spec. + +Example: + + ReportAfterEach(func(report SpecReport) { // process report }) + ReportAfterEach(func(ctx SpecContext, report SpecReport) { + // process report + }), NodeTimeout(1 * time.Minute)) You cannot nest any other Ginkgo nodes within a ReportAfterEach node's closure. You can learn more about ReportAfterEach here: https://onsi.github.io/ginkgo/#generating-reports-programmatically + +You can learn about interruptible nodes here: https://onsi.github.io/ginkgo/#spec-timeouts-and-interruptible-nodes */ -func ReportAfterEach(body func(SpecReport), args ...interface{}) bool { +func ReportAfterEach(body any, args ...any) bool { combinedArgs := []interface{}{body} combinedArgs = append(combinedArgs, args...) @@ -101,7 +120,15 @@ func ReportAfterEach(body func(SpecReport), args ...interface{}) bool { } /* -ReportBeforeSuite nodes are run at the beginning of the suite. ReportBeforeSuite nodes take a function that receives a suite Report. +ReportBeforeSuite nodes are run at the beginning of the suite. ReportBeforeSuite nodes take a function +that can either receive Report or both SpecContext and Report for interruptible behavior. + +Example Usage: + + ReportBeforeSuite(func(r Report) { // process report }) + ReportBeforeSuite(func(ctx SpecContext, r Report) { + // process report + }, NodeTimeout(1 * time.Minute)) They are called at the beginning of the suite, before any specs have run and any BeforeSuite or SynchronizedBeforeSuite nodes, and are passed in the initial report for the suite. ReportBeforeSuite nodes must be created at the top-level (i.e. not nested in a Context/Describe/When node) @@ -112,18 +139,28 @@ You cannot nest any other Ginkgo nodes within a ReportAfterSuite node's closure. You can learn more about ReportAfterSuite here: https://onsi.github.io/ginkgo/#generating-reports-programmatically You can learn more about Ginkgo's reporting infrastructure, including generating reports with the CLI here: https://onsi.github.io/ginkgo/#generating-machine-readable-reports + +You can learn about interruptible nodes here: https://onsi.github.io/ginkgo/#spec-timeouts-and-interruptible-nodes */ -func ReportBeforeSuite(body func(Report), args ...interface{}) bool { +func ReportBeforeSuite(body any, args ...any) bool { combinedArgs := []interface{}{body} combinedArgs = append(combinedArgs, args...) return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeReportBeforeSuite, "", combinedArgs...)) } /* -ReportAfterSuite nodes are run at the end of the suite. ReportAfterSuite nodes take a function that receives a suite Report. +ReportAfterSuite nodes are run at the end of the suite. ReportAfterSuite nodes execute at the suite's conclusion, +and accept a function that can either receive Report or both SpecContext and Report for interruptible behavior. + +Example Usage: + + ReportAfterSuite("Non-interruptible ReportAfterSuite", func(r Report) { // process report }) + ReportAfterSuite("Interruptible ReportAfterSuite", func(ctx SpecContext, r Report) { + // process report + }, NodeTimeout(1 * time.Minute)) They are called at the end of the suite, after all specs have run and any AfterSuite or SynchronizedAfterSuite nodes, and are passed in the final report for the suite. -ReportAftersuite nodes must be created at the top-level (i.e. not nested in a Context/Describe/When node) +ReportAfterSuite nodes must be created at the top-level (i.e. not nested in a Context/Describe/When node) When running in parallel, Ginkgo ensures that only one of the parallel nodes runs the ReportAfterSuite and that it is passed a report that is aggregated across all parallel nodes @@ -134,8 +171,10 @@ You cannot nest any other Ginkgo nodes within a ReportAfterSuite node's closure. You can learn more about ReportAfterSuite here: https://onsi.github.io/ginkgo/#generating-reports-programmatically You can learn more about Ginkgo's reporting infrastructure, including generating reports with the CLI here: https://onsi.github.io/ginkgo/#generating-machine-readable-reports + +You can learn about interruptible nodes here: https://onsi.github.io/ginkgo/#spec-timeouts-and-interruptible-nodes */ -func ReportAfterSuite(text string, body func(Report), args ...interface{}) bool { +func ReportAfterSuite(text string, body any, args ...interface{}) bool { combinedArgs := []interface{}{body} combinedArgs = append(combinedArgs, args...) return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeReportAfterSuite, text, combinedArgs...)) diff --git a/vendor/github.com/onsi/ginkgo/v2/types/config.go b/vendor/github.com/onsi/ginkgo/v2/types/config.go index c88fc85a7..cef273ee1 100644 --- a/vendor/github.com/onsi/ginkgo/v2/types/config.go +++ b/vendor/github.com/onsi/ginkgo/v2/types/config.go @@ -89,6 +89,7 @@ type ReporterConfig struct { VeryVerbose bool FullTrace bool ShowNodeEvents bool + GithubOutput bool JSONReport string JUnitReport string @@ -264,7 +265,7 @@ var FlagSections = GinkgoFlagSections{ // SuiteConfigFlags provides flags for the Ginkgo test process, and CLI var SuiteConfigFlags = GinkgoFlags{ {KeyPath: "S.RandomSeed", Name: "seed", SectionKey: "order", UsageDefaultValue: "randomly generated by Ginkgo", - Usage: "The seed used to randomize the spec suite."}, + Usage: "The seed used to randomize the spec suite.", AlwaysExport: true}, {KeyPath: "S.RandomizeAllSpecs", Name: "randomize-all", SectionKey: "order", DeprecatedName: "randomizeAllSpecs", DeprecatedDocLink: "changed-command-line-flags", Usage: "If set, ginkgo will randomize all specs together. By default, ginkgo only randomizes the top level Describe, Context and When containers."}, @@ -331,6 +332,8 @@ var ReporterConfigFlags = GinkgoFlags{ Usage: "If set, default reporter prints out the full stack trace when a failure occurs"}, {KeyPath: "R.ShowNodeEvents", Name: "show-node-events", SectionKey: "output", Usage: "If set, default reporter prints node > Enter and < Exit events when specs fail"}, + {KeyPath: "R.GithubOutput", Name: "github-output", SectionKey: "output", + Usage: "If set, default reporter prints easier to manage output in Github Actions."}, {KeyPath: "R.JSONReport", Name: "json-report", UsageArgument: "filename.json", SectionKey: "output", Usage: "If set, Ginkgo will generate a JSON-formatted test report at the specified location."}, diff --git a/vendor/github.com/onsi/ginkgo/v2/types/flags.go b/vendor/github.com/onsi/ginkgo/v2/types/flags.go index 9186ae873..de69f3022 100644 --- a/vendor/github.com/onsi/ginkgo/v2/types/flags.go +++ b/vendor/github.com/onsi/ginkgo/v2/types/flags.go @@ -24,7 +24,8 @@ type GinkgoFlag struct { DeprecatedDocLink string DeprecatedVersion string - ExportAs string + ExportAs string + AlwaysExport bool } type GinkgoFlags []GinkgoFlag @@ -431,7 +432,7 @@ func (ssv stringSliceVar) Set(s string) error { return nil } -//given a set of GinkgoFlags and bindings, generate flag arguments suitable to be passed to an application with that set of flags configured. +// given a set of GinkgoFlags and bindings, generate flag arguments suitable to be passed to an application with that set of flags configured. func GenerateFlagArgs(flags GinkgoFlags, bindings interface{}) ([]string, error) { result := []string{} for _, flag := range flags { @@ -451,19 +452,19 @@ func GenerateFlagArgs(flags GinkgoFlags, bindings interface{}) ([]string, error) iface := value.Interface() switch value.Type() { case reflect.TypeOf(string("")): - if iface.(string) != "" { + if iface.(string) != "" || flag.AlwaysExport { result = append(result, fmt.Sprintf("--%s=%s", name, iface)) } case reflect.TypeOf(int64(0)): - if iface.(int64) != 0 { + if iface.(int64) != 0 || flag.AlwaysExport { result = append(result, fmt.Sprintf("--%s=%d", name, iface)) } case reflect.TypeOf(float64(0)): - if iface.(float64) != 0 { + if iface.(float64) != 0 || flag.AlwaysExport { result = append(result, fmt.Sprintf("--%s=%f", name, iface)) } case reflect.TypeOf(int(0)): - if iface.(int) != 0 { + if iface.(int) != 0 || flag.AlwaysExport { result = append(result, fmt.Sprintf("--%s=%d", name, iface)) } case reflect.TypeOf(bool(true)): @@ -471,7 +472,7 @@ func GenerateFlagArgs(flags GinkgoFlags, bindings interface{}) ([]string, error) result = append(result, fmt.Sprintf("--%s", name)) } case reflect.TypeOf(time.Duration(0)): - if iface.(time.Duration) != time.Duration(0) { + if iface.(time.Duration) != time.Duration(0) || flag.AlwaysExport { result = append(result, fmt.Sprintf("--%s=%s", name, iface)) } diff --git a/vendor/github.com/onsi/ginkgo/v2/types/version.go b/vendor/github.com/onsi/ginkgo/v2/types/version.go index ed9346474..851d42b45 100644 --- a/vendor/github.com/onsi/ginkgo/v2/types/version.go +++ b/vendor/github.com/onsi/ginkgo/v2/types/version.go @@ -1,3 +1,3 @@ package types -const VERSION = "2.15.0" +const VERSION = "2.17.1" diff --git a/vendor/github.com/onsi/gomega/CHANGELOG.md b/vendor/github.com/onsi/gomega/CHANGELOG.md index 9a14b8151..01ec5245c 100644 --- a/vendor/github.com/onsi/gomega/CHANGELOG.md +++ b/vendor/github.com/onsi/gomega/CHANGELOG.md @@ -1,3 +1,16 @@ +## 1.32.0 + +### Maintenance +- Migrate github.com/golang/protobuf to google.golang.org/protobuf [436a197] + + This release drops the deprecated github.com/golang/protobuf and adopts google.golang.org/protobuf. Care was taken to ensure the release is backwards compatible (thanks @jbduncan !). Please open an issue if you run into one. + +- chore: test with Go 1.22 (#733) [32ef35e] +- Bump golang.org/x/net from 0.19.0 to 0.20.0 (#717) [a0d0387] +- Bump github-pages and jekyll-feed in /docs (#732) [b71e477] +- docs: fix typo and broken anchor link to gstruct [f460154] +- docs: fix HaveEach matcher signature [a2862e4] + ## 1.31.1 ### Fixes diff --git a/vendor/github.com/onsi/gomega/gomega_dsl.go b/vendor/github.com/onsi/gomega/gomega_dsl.go index 5b46a1658..ffb81b1fe 100644 --- a/vendor/github.com/onsi/gomega/gomega_dsl.go +++ b/vendor/github.com/onsi/gomega/gomega_dsl.go @@ -22,7 +22,7 @@ import ( "github.com/onsi/gomega/types" ) -const GOMEGA_VERSION = "1.31.1" +const GOMEGA_VERSION = "1.32.0" const nilGomegaPanic = `You are trying to make an assertion, but haven't registered Gomega's fail handler. If you're using Ginkgo then you probably forgot to put your assertion in an It(). diff --git a/vendor/golang.org/x/mod/modfile/rule.go b/vendor/golang.org/x/mod/modfile/rule.go index 35fd1f534..26acaa5f7 100644 --- a/vendor/golang.org/x/mod/modfile/rule.go +++ b/vendor/golang.org/x/mod/modfile/rule.go @@ -308,6 +308,7 @@ var laxGoVersionRE = lazyregexp.New(`^v?(([1-9][0-9]*)\.(0|[1-9][0-9]*))([^0-9]. // Toolchains must be named beginning with `go1`, // like "go1.20.3" or "go1.20.3-gccgo". As a special case, "default" is also permitted. +// TODO(samthanawalla): Replace regex with https://pkg.go.dev/go/version#IsValid in 1.23+ var ToolchainRE = lazyregexp.New(`^default$|^go1($|\.)`) func (f *File) add(errs *ErrorList, block *LineBlock, line *Line, verb string, args []string, fix VersionFixer, strict bool) { @@ -384,7 +385,7 @@ func (f *File) add(errs *ErrorList, block *LineBlock, line *Line, verb string, a errorf("toolchain directive expects exactly one argument") return } else if strict && !ToolchainRE.MatchString(args[0]) { - errorf("invalid toolchain version '%s': must match format go1.23.0 or local", args[0]) + errorf("invalid toolchain version '%s': must match format go1.23.0 or default", args[0]) return } f.Toolchain = &Toolchain{Syntax: line} @@ -630,7 +631,7 @@ func (f *WorkFile) add(errs *ErrorList, line *Line, verb string, args []string, errorf("go directive expects exactly one argument") return } else if !GoVersionRE.MatchString(args[0]) { - errorf("invalid go version '%s': must match format 1.23", args[0]) + errorf("invalid go version '%s': must match format 1.23.0", args[0]) return } @@ -646,7 +647,7 @@ func (f *WorkFile) add(errs *ErrorList, line *Line, verb string, args []string, errorf("toolchain directive expects exactly one argument") return } else if !ToolchainRE.MatchString(args[0]) { - errorf("invalid toolchain version '%s': must match format go1.23 or local", args[0]) + errorf("invalid toolchain version '%s': must match format go1.23.0 or default", args[0]) return } diff --git a/vendor/golang.org/x/net/http2/transport.go b/vendor/golang.org/x/net/http2/transport.go index df578b86c..c2a5b44b3 100644 --- a/vendor/golang.org/x/net/http2/transport.go +++ b/vendor/golang.org/x/net/http2/transport.go @@ -2911,6 +2911,15 @@ func (rl *clientConnReadLoop) processWindowUpdate(f *WindowUpdateFrame) error { fl = &cs.flow } if !fl.add(int32(f.Increment)) { + // For stream, the sender sends RST_STREAM with an error code of FLOW_CONTROL_ERROR + if cs != nil { + rl.endStreamError(cs, StreamError{ + StreamID: f.StreamID, + Code: ErrCodeFlowControl, + }) + return nil + } + return ConnectionError(ErrCodeFlowControl) } cc.cond.Broadcast() diff --git a/vendor/golang.org/x/sys/unix/aliases.go b/vendor/golang.org/x/sys/unix/aliases.go index e7d3df4bd..b0e419857 100644 --- a/vendor/golang.org/x/sys/unix/aliases.go +++ b/vendor/golang.org/x/sys/unix/aliases.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build (aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos) && go1.9 +//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos package unix diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go b/vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go index 16dc69937..2f0fa76e4 100644 --- a/vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go +++ b/vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build darwin && go1.12 +//go:build darwin package unix diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd.go b/vendor/golang.org/x/sys/unix/syscall_freebsd.go index 64d1bb4db..2b57e0f73 100644 --- a/vendor/golang.org/x/sys/unix/syscall_freebsd.go +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd.go @@ -13,6 +13,7 @@ package unix import ( + "errors" "sync" "unsafe" ) @@ -169,25 +170,26 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { func Uname(uname *Utsname) error { mib := []_C_int{CTL_KERN, KERN_OSTYPE} n := unsafe.Sizeof(uname.Sysname) - if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil { + // Suppress ENOMEM errors to be compatible with the C library __xuname() implementation. + if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil && !errors.Is(err, ENOMEM) { return err } mib = []_C_int{CTL_KERN, KERN_HOSTNAME} n = unsafe.Sizeof(uname.Nodename) - if err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil { + if err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil && !errors.Is(err, ENOMEM) { return err } mib = []_C_int{CTL_KERN, KERN_OSRELEASE} n = unsafe.Sizeof(uname.Release) - if err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil { + if err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil && !errors.Is(err, ENOMEM) { return err } mib = []_C_int{CTL_KERN, KERN_VERSION} n = unsafe.Sizeof(uname.Version) - if err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil { + if err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil && !errors.Is(err, ENOMEM) { return err } @@ -205,7 +207,7 @@ func Uname(uname *Utsname) error { mib = []_C_int{CTL_HW, HW_MACHINE} n = unsafe.Sizeof(uname.Machine) - if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil { + if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil && !errors.Is(err, ENOMEM) { return err } diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go index 0f85e29e6..5682e2628 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux.go @@ -1849,6 +1849,105 @@ func Dup2(oldfd, newfd int) error { //sys Fsmount(fd int, flags int, mountAttrs int) (fsfd int, err error) //sys Fsopen(fsName string, flags int) (fd int, err error) //sys Fspick(dirfd int, pathName string, flags int) (fd int, err error) + +//sys fsconfig(fd int, cmd uint, key *byte, value *byte, aux int) (err error) + +func fsconfigCommon(fd int, cmd uint, key string, value *byte, aux int) (err error) { + var keyp *byte + if keyp, err = BytePtrFromString(key); err != nil { + return + } + return fsconfig(fd, cmd, keyp, value, aux) +} + +// FsconfigSetFlag is equivalent to fsconfig(2) called +// with cmd == FSCONFIG_SET_FLAG. +// +// fd is the filesystem context to act upon. +// key the parameter key to set. +func FsconfigSetFlag(fd int, key string) (err error) { + return fsconfigCommon(fd, FSCONFIG_SET_FLAG, key, nil, 0) +} + +// FsconfigSetString is equivalent to fsconfig(2) called +// with cmd == FSCONFIG_SET_STRING. +// +// fd is the filesystem context to act upon. +// key the parameter key to set. +// value is the parameter value to set. +func FsconfigSetString(fd int, key string, value string) (err error) { + var valuep *byte + if valuep, err = BytePtrFromString(value); err != nil { + return + } + return fsconfigCommon(fd, FSCONFIG_SET_STRING, key, valuep, 0) +} + +// FsconfigSetBinary is equivalent to fsconfig(2) called +// with cmd == FSCONFIG_SET_BINARY. +// +// fd is the filesystem context to act upon. +// key the parameter key to set. +// value is the parameter value to set. +func FsconfigSetBinary(fd int, key string, value []byte) (err error) { + if len(value) == 0 { + return EINVAL + } + return fsconfigCommon(fd, FSCONFIG_SET_BINARY, key, &value[0], len(value)) +} + +// FsconfigSetPath is equivalent to fsconfig(2) called +// with cmd == FSCONFIG_SET_PATH. +// +// fd is the filesystem context to act upon. +// key the parameter key to set. +// path is a non-empty path for specified key. +// atfd is a file descriptor at which to start lookup from or AT_FDCWD. +func FsconfigSetPath(fd int, key string, path string, atfd int) (err error) { + var valuep *byte + if valuep, err = BytePtrFromString(path); err != nil { + return + } + return fsconfigCommon(fd, FSCONFIG_SET_PATH, key, valuep, atfd) +} + +// FsconfigSetPathEmpty is equivalent to fsconfig(2) called +// with cmd == FSCONFIG_SET_PATH_EMPTY. The same as +// FconfigSetPath but with AT_PATH_EMPTY implied. +func FsconfigSetPathEmpty(fd int, key string, path string, atfd int) (err error) { + var valuep *byte + if valuep, err = BytePtrFromString(path); err != nil { + return + } + return fsconfigCommon(fd, FSCONFIG_SET_PATH_EMPTY, key, valuep, atfd) +} + +// FsconfigSetFd is equivalent to fsconfig(2) called +// with cmd == FSCONFIG_SET_FD. +// +// fd is the filesystem context to act upon. +// key the parameter key to set. +// value is a file descriptor to be assigned to specified key. +func FsconfigSetFd(fd int, key string, value int) (err error) { + return fsconfigCommon(fd, FSCONFIG_SET_FD, key, nil, value) +} + +// FsconfigCreate is equivalent to fsconfig(2) called +// with cmd == FSCONFIG_CMD_CREATE. +// +// fd is the filesystem context to act upon. +func FsconfigCreate(fd int) (err error) { + return fsconfig(fd, FSCONFIG_CMD_CREATE, nil, nil, 0) +} + +// FsconfigReconfigure is equivalent to fsconfig(2) called +// with cmd == FSCONFIG_CMD_RECONFIGURE. +// +// fd is the filesystem context to act upon. +func FsconfigReconfigure(fd int) (err error) { + return fsconfig(fd, FSCONFIG_CMD_RECONFIGURE, nil, nil, 0) +} + //sys Getdents(fd int, buf []byte) (n int, err error) = SYS_GETDENTS64 //sysnb Getpgid(pid int) (pgid int, err error) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux.go b/vendor/golang.org/x/sys/unix/zsyscall_linux.go index 1488d2712..87d8612a1 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux.go @@ -906,6 +906,16 @@ func Fspick(dirfd int, pathName string, flags int) (fd int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func fsconfig(fd int, cmd uint, key *byte, value *byte, aux int) (err error) { + _, _, e1 := Syscall6(SYS_FSCONFIG, uintptr(fd), uintptr(cmd), uintptr(unsafe.Pointer(key)), uintptr(unsafe.Pointer(value)), uintptr(aux), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Getdents(fd int, buf []byte) (n int, err error) { var _p0 unsafe.Pointer if len(buf) > 0 { diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux.go b/vendor/golang.org/x/sys/unix/ztypes_linux.go index dc0c955ee..eff6bcdef 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux.go @@ -836,6 +836,15 @@ const ( FSPICK_EMPTY_PATH = 0x8 FSMOUNT_CLOEXEC = 0x1 + + FSCONFIG_SET_FLAG = 0x0 + FSCONFIG_SET_STRING = 0x1 + FSCONFIG_SET_BINARY = 0x2 + FSCONFIG_SET_PATH = 0x3 + FSCONFIG_SET_PATH_EMPTY = 0x4 + FSCONFIG_SET_FD = 0x5 + FSCONFIG_CMD_CREATE = 0x6 + FSCONFIG_CMD_RECONFIGURE = 0x7 ) type OpenHow struct { @@ -1550,6 +1559,7 @@ const ( IFLA_DEVLINK_PORT = 0x3e IFLA_GSO_IPV4_MAX_SIZE = 0x3f IFLA_GRO_IPV4_MAX_SIZE = 0x40 + IFLA_DPLL_PIN = 0x41 IFLA_PROTO_DOWN_REASON_UNSPEC = 0x0 IFLA_PROTO_DOWN_REASON_MASK = 0x1 IFLA_PROTO_DOWN_REASON_VALUE = 0x2 @@ -1565,6 +1575,7 @@ const ( IFLA_INET6_ICMP6STATS = 0x6 IFLA_INET6_TOKEN = 0x7 IFLA_INET6_ADDR_GEN_MODE = 0x8 + IFLA_INET6_RA_MTU = 0x9 IFLA_BR_UNSPEC = 0x0 IFLA_BR_FORWARD_DELAY = 0x1 IFLA_BR_HELLO_TIME = 0x2 @@ -1612,6 +1623,9 @@ const ( IFLA_BR_MCAST_MLD_VERSION = 0x2c IFLA_BR_VLAN_STATS_PER_PORT = 0x2d IFLA_BR_MULTI_BOOLOPT = 0x2e + IFLA_BR_MCAST_QUERIER_STATE = 0x2f + IFLA_BR_FDB_N_LEARNED = 0x30 + IFLA_BR_FDB_MAX_LEARNED = 0x31 IFLA_BRPORT_UNSPEC = 0x0 IFLA_BRPORT_STATE = 0x1 IFLA_BRPORT_PRIORITY = 0x2 @@ -1649,6 +1663,14 @@ const ( IFLA_BRPORT_BACKUP_PORT = 0x22 IFLA_BRPORT_MRP_RING_OPEN = 0x23 IFLA_BRPORT_MRP_IN_OPEN = 0x24 + IFLA_BRPORT_MCAST_EHT_HOSTS_LIMIT = 0x25 + IFLA_BRPORT_MCAST_EHT_HOSTS_CNT = 0x26 + IFLA_BRPORT_LOCKED = 0x27 + IFLA_BRPORT_MAB = 0x28 + IFLA_BRPORT_MCAST_N_GROUPS = 0x29 + IFLA_BRPORT_MCAST_MAX_GROUPS = 0x2a + IFLA_BRPORT_NEIGH_VLAN_SUPPRESS = 0x2b + IFLA_BRPORT_BACKUP_NHID = 0x2c IFLA_INFO_UNSPEC = 0x0 IFLA_INFO_KIND = 0x1 IFLA_INFO_DATA = 0x2 @@ -1670,6 +1692,9 @@ const ( IFLA_MACVLAN_MACADDR = 0x4 IFLA_MACVLAN_MACADDR_DATA = 0x5 IFLA_MACVLAN_MACADDR_COUNT = 0x6 + IFLA_MACVLAN_BC_QUEUE_LEN = 0x7 + IFLA_MACVLAN_BC_QUEUE_LEN_USED = 0x8 + IFLA_MACVLAN_BC_CUTOFF = 0x9 IFLA_VRF_UNSPEC = 0x0 IFLA_VRF_TABLE = 0x1 IFLA_VRF_PORT_UNSPEC = 0x0 @@ -1693,9 +1718,22 @@ const ( IFLA_XFRM_UNSPEC = 0x0 IFLA_XFRM_LINK = 0x1 IFLA_XFRM_IF_ID = 0x2 + IFLA_XFRM_COLLECT_METADATA = 0x3 IFLA_IPVLAN_UNSPEC = 0x0 IFLA_IPVLAN_MODE = 0x1 IFLA_IPVLAN_FLAGS = 0x2 + NETKIT_NEXT = -0x1 + NETKIT_PASS = 0x0 + NETKIT_DROP = 0x2 + NETKIT_REDIRECT = 0x7 + NETKIT_L2 = 0x0 + NETKIT_L3 = 0x1 + IFLA_NETKIT_UNSPEC = 0x0 + IFLA_NETKIT_PEER_INFO = 0x1 + IFLA_NETKIT_PRIMARY = 0x2 + IFLA_NETKIT_POLICY = 0x3 + IFLA_NETKIT_PEER_POLICY = 0x4 + IFLA_NETKIT_MODE = 0x5 IFLA_VXLAN_UNSPEC = 0x0 IFLA_VXLAN_ID = 0x1 IFLA_VXLAN_GROUP = 0x2 @@ -1726,6 +1764,8 @@ const ( IFLA_VXLAN_GPE = 0x1b IFLA_VXLAN_TTL_INHERIT = 0x1c IFLA_VXLAN_DF = 0x1d + IFLA_VXLAN_VNIFILTER = 0x1e + IFLA_VXLAN_LOCALBYPASS = 0x1f IFLA_GENEVE_UNSPEC = 0x0 IFLA_GENEVE_ID = 0x1 IFLA_GENEVE_REMOTE = 0x2 @@ -1740,6 +1780,7 @@ const ( IFLA_GENEVE_LABEL = 0xb IFLA_GENEVE_TTL_INHERIT = 0xc IFLA_GENEVE_DF = 0xd + IFLA_GENEVE_INNER_PROTO_INHERIT = 0xe IFLA_BAREUDP_UNSPEC = 0x0 IFLA_BAREUDP_PORT = 0x1 IFLA_BAREUDP_ETHERTYPE = 0x2 @@ -1752,6 +1793,8 @@ const ( IFLA_GTP_FD1 = 0x2 IFLA_GTP_PDP_HASHSIZE = 0x3 IFLA_GTP_ROLE = 0x4 + IFLA_GTP_CREATE_SOCKETS = 0x5 + IFLA_GTP_RESTART_COUNT = 0x6 IFLA_BOND_UNSPEC = 0x0 IFLA_BOND_MODE = 0x1 IFLA_BOND_ACTIVE_SLAVE = 0x2 @@ -1781,6 +1824,9 @@ const ( IFLA_BOND_AD_ACTOR_SYSTEM = 0x1a IFLA_BOND_TLB_DYNAMIC_LB = 0x1b IFLA_BOND_PEER_NOTIF_DELAY = 0x1c + IFLA_BOND_AD_LACP_ACTIVE = 0x1d + IFLA_BOND_MISSED_MAX = 0x1e + IFLA_BOND_NS_IP6_TARGET = 0x1f IFLA_BOND_AD_INFO_UNSPEC = 0x0 IFLA_BOND_AD_INFO_AGGREGATOR = 0x1 IFLA_BOND_AD_INFO_NUM_PORTS = 0x2 @@ -1796,6 +1842,7 @@ const ( IFLA_BOND_SLAVE_AD_AGGREGATOR_ID = 0x6 IFLA_BOND_SLAVE_AD_ACTOR_OPER_PORT_STATE = 0x7 IFLA_BOND_SLAVE_AD_PARTNER_OPER_PORT_STATE = 0x8 + IFLA_BOND_SLAVE_PRIO = 0x9 IFLA_VF_INFO_UNSPEC = 0x0 IFLA_VF_INFO = 0x1 IFLA_VF_UNSPEC = 0x0 @@ -1854,8 +1901,16 @@ const ( IFLA_STATS_LINK_XSTATS_SLAVE = 0x3 IFLA_STATS_LINK_OFFLOAD_XSTATS = 0x4 IFLA_STATS_AF_SPEC = 0x5 + IFLA_STATS_GETSET_UNSPEC = 0x0 + IFLA_STATS_GET_FILTERS = 0x1 + IFLA_STATS_SET_OFFLOAD_XSTATS_L3_STATS = 0x2 IFLA_OFFLOAD_XSTATS_UNSPEC = 0x0 IFLA_OFFLOAD_XSTATS_CPU_HIT = 0x1 + IFLA_OFFLOAD_XSTATS_HW_S_INFO = 0x2 + IFLA_OFFLOAD_XSTATS_L3_STATS = 0x3 + IFLA_OFFLOAD_XSTATS_HW_S_INFO_UNSPEC = 0x0 + IFLA_OFFLOAD_XSTATS_HW_S_INFO_REQUEST = 0x1 + IFLA_OFFLOAD_XSTATS_HW_S_INFO_USED = 0x2 IFLA_XDP_UNSPEC = 0x0 IFLA_XDP_FD = 0x1 IFLA_XDP_ATTACHED = 0x2 @@ -1885,6 +1940,11 @@ const ( IFLA_RMNET_UNSPEC = 0x0 IFLA_RMNET_MUX_ID = 0x1 IFLA_RMNET_FLAGS = 0x2 + IFLA_MCTP_UNSPEC = 0x0 + IFLA_MCTP_NET = 0x1 + IFLA_DSA_UNSPEC = 0x0 + IFLA_DSA_CONDUIT = 0x1 + IFLA_DSA_MASTER = 0x1 ) const ( diff --git a/vendor/golang.org/x/tools/cmd/goimports/goimports_gc.go b/vendor/golang.org/x/tools/cmd/goimports/goimports_gc.go index 190a56535..3326646d0 100644 --- a/vendor/golang.org/x/tools/cmd/goimports/goimports_gc.go +++ b/vendor/golang.org/x/tools/cmd/goimports/goimports_gc.go @@ -19,8 +19,8 @@ func doTrace() func() { bw, flush := bufferedFileWriter(*traceProfile) trace.Start(bw) return func() { - flush() trace.Stop() + flush() } } return func() {} diff --git a/vendor/golang.org/x/tools/cover/profile.go b/vendor/golang.org/x/tools/cover/profile.go new file mode 100644 index 000000000..47a9a5411 --- /dev/null +++ b/vendor/golang.org/x/tools/cover/profile.go @@ -0,0 +1,266 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package cover provides support for parsing coverage profiles +// generated by "go test -coverprofile=cover.out". +package cover // import "golang.org/x/tools/cover" + +import ( + "bufio" + "errors" + "fmt" + "io" + "math" + "os" + "sort" + "strconv" + "strings" +) + +// Profile represents the profiling data for a specific file. +type Profile struct { + FileName string + Mode string + Blocks []ProfileBlock +} + +// ProfileBlock represents a single block of profiling data. +type ProfileBlock struct { + StartLine, StartCol int + EndLine, EndCol int + NumStmt, Count int +} + +type byFileName []*Profile + +func (p byFileName) Len() int { return len(p) } +func (p byFileName) Less(i, j int) bool { return p[i].FileName < p[j].FileName } +func (p byFileName) Swap(i, j int) { p[i], p[j] = p[j], p[i] } + +// ParseProfiles parses profile data in the specified file and returns a +// Profile for each source file described therein. +func ParseProfiles(fileName string) ([]*Profile, error) { + pf, err := os.Open(fileName) + if err != nil { + return nil, err + } + defer pf.Close() + return ParseProfilesFromReader(pf) +} + +// ParseProfilesFromReader parses profile data from the Reader and +// returns a Profile for each source file described therein. +func ParseProfilesFromReader(rd io.Reader) ([]*Profile, error) { + // First line is "mode: foo", where foo is "set", "count", or "atomic". + // Rest of file is in the format + // encoding/base64/base64.go:34.44,37.40 3 1 + // where the fields are: name.go:line.column,line.column numberOfStatements count + files := make(map[string]*Profile) + s := bufio.NewScanner(rd) + mode := "" + for s.Scan() { + line := s.Text() + if mode == "" { + const p = "mode: " + if !strings.HasPrefix(line, p) || line == p { + return nil, fmt.Errorf("bad mode line: %v", line) + } + mode = line[len(p):] + continue + } + fn, b, err := parseLine(line) + if err != nil { + return nil, fmt.Errorf("line %q doesn't match expected format: %v", line, err) + } + p := files[fn] + if p == nil { + p = &Profile{ + FileName: fn, + Mode: mode, + } + files[fn] = p + } + p.Blocks = append(p.Blocks, b) + } + if err := s.Err(); err != nil { + return nil, err + } + for _, p := range files { + sort.Sort(blocksByStart(p.Blocks)) + // Merge samples from the same location. + j := 1 + for i := 1; i < len(p.Blocks); i++ { + b := p.Blocks[i] + last := p.Blocks[j-1] + if b.StartLine == last.StartLine && + b.StartCol == last.StartCol && + b.EndLine == last.EndLine && + b.EndCol == last.EndCol { + if b.NumStmt != last.NumStmt { + return nil, fmt.Errorf("inconsistent NumStmt: changed from %d to %d", last.NumStmt, b.NumStmt) + } + if mode == "set" { + p.Blocks[j-1].Count |= b.Count + } else { + p.Blocks[j-1].Count += b.Count + } + continue + } + p.Blocks[j] = b + j++ + } + p.Blocks = p.Blocks[:j] + } + // Generate a sorted slice. + profiles := make([]*Profile, 0, len(files)) + for _, profile := range files { + profiles = append(profiles, profile) + } + sort.Sort(byFileName(profiles)) + return profiles, nil +} + +// parseLine parses a line from a coverage file. +// It is equivalent to the regex +// ^(.+):([0-9]+)\.([0-9]+),([0-9]+)\.([0-9]+) ([0-9]+) ([0-9]+)$ +// +// However, it is much faster: https://golang.org/cl/179377 +func parseLine(l string) (fileName string, block ProfileBlock, err error) { + end := len(l) + + b := ProfileBlock{} + b.Count, end, err = seekBack(l, ' ', end, "Count") + if err != nil { + return "", b, err + } + b.NumStmt, end, err = seekBack(l, ' ', end, "NumStmt") + if err != nil { + return "", b, err + } + b.EndCol, end, err = seekBack(l, '.', end, "EndCol") + if err != nil { + return "", b, err + } + b.EndLine, end, err = seekBack(l, ',', end, "EndLine") + if err != nil { + return "", b, err + } + b.StartCol, end, err = seekBack(l, '.', end, "StartCol") + if err != nil { + return "", b, err + } + b.StartLine, end, err = seekBack(l, ':', end, "StartLine") + if err != nil { + return "", b, err + } + fn := l[0:end] + if fn == "" { + return "", b, errors.New("a FileName cannot be blank") + } + return fn, b, nil +} + +// seekBack searches backwards from end to find sep in l, then returns the +// value between sep and end as an integer. +// If seekBack fails, the returned error will reference what. +func seekBack(l string, sep byte, end int, what string) (value int, nextSep int, err error) { + // Since we're seeking backwards and we know only ASCII is legal for these values, + // we can ignore the possibility of non-ASCII characters. + for start := end - 1; start >= 0; start-- { + if l[start] == sep { + i, err := strconv.Atoi(l[start+1 : end]) + if err != nil { + return 0, 0, fmt.Errorf("couldn't parse %q: %v", what, err) + } + if i < 0 { + return 0, 0, fmt.Errorf("negative values are not allowed for %s, found %d", what, i) + } + return i, start, nil + } + } + return 0, 0, fmt.Errorf("couldn't find a %s before %s", string(sep), what) +} + +type blocksByStart []ProfileBlock + +func (b blocksByStart) Len() int { return len(b) } +func (b blocksByStart) Swap(i, j int) { b[i], b[j] = b[j], b[i] } +func (b blocksByStart) Less(i, j int) bool { + bi, bj := b[i], b[j] + return bi.StartLine < bj.StartLine || bi.StartLine == bj.StartLine && bi.StartCol < bj.StartCol +} + +// Boundary represents the position in a source file of the beginning or end of a +// block as reported by the coverage profile. In HTML mode, it will correspond to +// the opening or closing of a tag and will be used to colorize the source +type Boundary struct { + Offset int // Location as a byte offset in the source file. + Start bool // Is this the start of a block? + Count int // Event count from the cover profile. + Norm float64 // Count normalized to [0..1]. + Index int // Order in input file. +} + +// Boundaries returns a Profile as a set of Boundary objects within the provided src. +func (p *Profile) Boundaries(src []byte) (boundaries []Boundary) { + // Find maximum count. + max := 0 + for _, b := range p.Blocks { + if b.Count > max { + max = b.Count + } + } + // Divisor for normalization. + divisor := math.Log(float64(max)) + + // boundary returns a Boundary, populating the Norm field with a normalized Count. + index := 0 + boundary := func(offset int, start bool, count int) Boundary { + b := Boundary{Offset: offset, Start: start, Count: count, Index: index} + index++ + if !start || count == 0 { + return b + } + if max <= 1 { + b.Norm = 0.8 // Profile is in"set" mode; we want a heat map. Use cov8 in the CSS. + } else if count > 0 { + b.Norm = math.Log(float64(count)) / divisor + } + return b + } + + line, col := 1, 2 // TODO: Why is this 2? + for si, bi := 0, 0; si < len(src) && bi < len(p.Blocks); { + b := p.Blocks[bi] + if b.StartLine == line && b.StartCol == col { + boundaries = append(boundaries, boundary(si, true, b.Count)) + } + if b.EndLine == line && b.EndCol == col || line > b.EndLine { + boundaries = append(boundaries, boundary(si, false, 0)) + bi++ + continue // Don't advance through src; maybe the next block starts here. + } + if src[si] == '\n' { + line++ + col = 0 + } + col++ + si++ + } + sort.Sort(boundariesByPos(boundaries)) + return +} + +type boundariesByPos []Boundary + +func (b boundariesByPos) Len() int { return len(b) } +func (b boundariesByPos) Swap(i, j int) { b[i], b[j] = b[j], b[i] } +func (b boundariesByPos) Less(i, j int) bool { + if b[i].Offset == b[j].Offset { + // Boundaries at the same offset should be ordered according to + // their original position. + return b[i].Index < b[j].Index + } + return b[i].Offset < b[j].Offset +} diff --git a/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go b/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go index 03543bd4b..137cc8df1 100644 --- a/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go +++ b/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go @@ -47,7 +47,7 @@ import ( func Find(importPath, srcDir string) (filename, path string) { cmd := exec.Command("go", "list", "-json", "-export", "--", importPath) cmd.Dir = srcDir - out, err := cmd.CombinedOutput() + out, err := cmd.Output() if err != nil { return "", "" } diff --git a/vendor/golang.org/x/tools/go/packages/doc.go b/vendor/golang.org/x/tools/go/packages/doc.go index b2a0b7c6a..a8d7b06ac 100644 --- a/vendor/golang.org/x/tools/go/packages/doc.go +++ b/vendor/golang.org/x/tools/go/packages/doc.go @@ -15,22 +15,10 @@ Load passes most patterns directly to the underlying build tool. The default build tool is the go command. Its supported patterns are described at https://pkg.go.dev/cmd/go#hdr-Package_lists_and_patterns. +Other build systems may be supported by providing a "driver"; +see [The driver protocol]. -Load may be used in Go projects that use alternative build systems, by -installing an appropriate "driver" program for the build system and -specifying its location in the GOPACKAGESDRIVER environment variable. -For example, -https://github.com/bazelbuild/rules_go/wiki/Editor-and-tool-integration -explains how to use the driver for Bazel. -The driver program is responsible for interpreting patterns in its -preferred notation and reporting information about the packages that -they identify. -(See driverRequest and driverResponse types for the JSON -schema used by the protocol. -Though the protocol is supported, these types are currently unexported; -see #64608 for a proposal to publish them.) - -Regardless of driver, all patterns with the prefix "query=", where query is a +All patterns with the prefix "query=", where query is a non-empty string of letters from [a-z], are reserved and may be interpreted as query operators. @@ -86,7 +74,29 @@ for details. Most tools should pass their command-line arguments (after any flags) uninterpreted to [Load], so that it can interpret them according to the conventions of the underlying build system. + See the Example function for typical usage. + +# The driver protocol + +[Load] may be used to load Go packages even in Go projects that use +alternative build systems, by installing an appropriate "driver" +program for the build system and specifying its location in the +GOPACKAGESDRIVER environment variable. +For example, +https://github.com/bazelbuild/rules_go/wiki/Editor-and-tool-integration +explains how to use the driver for Bazel. + +The driver program is responsible for interpreting patterns in its +preferred notation and reporting information about the packages that +those patterns identify. Drivers must also support the special "file=" +and "pattern=" patterns described above. + +The patterns are provided as positional command-line arguments. A +JSON-encoded [DriverRequest] message providing additional information +is written to the driver's standard input. The driver must write a +JSON-encoded [DriverResponse] message to its standard output. (This +message differs from the JSON schema produced by 'go list'.) */ package packages // import "golang.org/x/tools/go/packages" diff --git a/vendor/golang.org/x/tools/go/packages/external.go b/vendor/golang.org/x/tools/go/packages/external.go index 7db1d1293..4335c1eb1 100644 --- a/vendor/golang.org/x/tools/go/packages/external.go +++ b/vendor/golang.org/x/tools/go/packages/external.go @@ -2,12 +2,11 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// This file enables an external tool to intercept package requests. -// If the tool is present then its results are used in preference to -// the go list command. - package packages +// This file defines the protocol that enables an external "driver" +// tool to supply package metadata in place of 'go list'. + import ( "bytes" "encoding/json" @@ -17,31 +16,71 @@ import ( "strings" ) -// The Driver Protocol +// DriverRequest defines the schema of a request for package metadata +// from an external driver program. The JSON-encoded DriverRequest +// message is provided to the driver program's standard input. The +// query patterns are provided as command-line arguments. // -// The driver, given the inputs to a call to Load, returns metadata about the packages specified. -// This allows for different build systems to support go/packages by telling go/packages how the -// packages' source is organized. -// The driver is a binary, either specified by the GOPACKAGESDRIVER environment variable or in -// the path as gopackagesdriver. It's given the inputs to load in its argv. See the package -// documentation in doc.go for the full description of the patterns that need to be supported. -// A driver receives as a JSON-serialized driverRequest struct in standard input and will -// produce a JSON-serialized driverResponse (see definition in packages.go) in its standard output. - -// driverRequest is used to provide the portion of Load's Config that is needed by a driver. -type driverRequest struct { +// See the package documentation for an overview. +type DriverRequest struct { Mode LoadMode `json:"mode"` + // Env specifies the environment the underlying build system should be run in. Env []string `json:"env"` + // BuildFlags are flags that should be passed to the underlying build system. BuildFlags []string `json:"build_flags"` + // Tests specifies whether the patterns should also return test packages. Tests bool `json:"tests"` + // Overlay maps file paths (relative to the driver's working directory) to the byte contents // of overlay files. Overlay map[string][]byte `json:"overlay"` } +// DriverResponse defines the schema of a response from an external +// driver program, providing the results of a query for package +// metadata. The driver program must write a JSON-encoded +// DriverResponse message to its standard output. +// +// See the package documentation for an overview. +type DriverResponse struct { + // NotHandled is returned if the request can't be handled by the current + // driver. If an external driver returns a response with NotHandled, the + // rest of the DriverResponse is ignored, and go/packages will fallback + // to the next driver. If go/packages is extended in the future to support + // lists of multiple drivers, go/packages will fall back to the next driver. + NotHandled bool + + // Compiler and Arch are the arguments pass of types.SizesFor + // to get a types.Sizes to use when type checking. + Compiler string + Arch string + + // Roots is the set of package IDs that make up the root packages. + // We have to encode this separately because when we encode a single package + // we cannot know if it is one of the roots as that requires knowledge of the + // graph it is part of. + Roots []string `json:",omitempty"` + + // Packages is the full set of packages in the graph. + // The packages are not connected into a graph. + // The Imports if populated will be stubs that only have their ID set. + // Imports will be connected and then type and syntax information added in a + // later pass (see refine). + Packages []*Package + + // GoVersion is the minor version number used by the driver + // (e.g. the go command on the PATH) when selecting .go files. + // Zero means unknown. + GoVersion int +} + +// driver is the type for functions that query the build system for the +// packages named by the patterns. +type driver func(cfg *Config, patterns ...string) (*DriverResponse, error) + // findExternalDriver returns the file path of a tool that supplies // the build system package structure, or "" if not found." // If GOPACKAGESDRIVER is set in the environment findExternalTool returns its @@ -64,8 +103,8 @@ func findExternalDriver(cfg *Config) driver { return nil } } - return func(cfg *Config, words ...string) (*driverResponse, error) { - req, err := json.Marshal(driverRequest{ + return func(cfg *Config, words ...string) (*DriverResponse, error) { + req, err := json.Marshal(DriverRequest{ Mode: cfg.Mode, Env: cfg.Env, BuildFlags: cfg.BuildFlags, @@ -92,7 +131,7 @@ func findExternalDriver(cfg *Config) driver { fmt.Fprintf(os.Stderr, "%s stderr: <<%s>>\n", cmdDebugStr(cmd), stderr) } - var response driverResponse + var response DriverResponse if err := json.Unmarshal(buf.Bytes(), &response); err != nil { return nil, err } diff --git a/vendor/golang.org/x/tools/go/packages/golist.go b/vendor/golang.org/x/tools/go/packages/golist.go index cd375fbc3..22305d9c9 100644 --- a/vendor/golang.org/x/tools/go/packages/golist.go +++ b/vendor/golang.org/x/tools/go/packages/golist.go @@ -35,23 +35,23 @@ type goTooOldError struct { error } -// responseDeduper wraps a driverResponse, deduplicating its contents. +// responseDeduper wraps a DriverResponse, deduplicating its contents. type responseDeduper struct { seenRoots map[string]bool seenPackages map[string]*Package - dr *driverResponse + dr *DriverResponse } func newDeduper() *responseDeduper { return &responseDeduper{ - dr: &driverResponse{}, + dr: &DriverResponse{}, seenRoots: map[string]bool{}, seenPackages: map[string]*Package{}, } } -// addAll fills in r with a driverResponse. -func (r *responseDeduper) addAll(dr *driverResponse) { +// addAll fills in r with a DriverResponse. +func (r *responseDeduper) addAll(dr *DriverResponse) { for _, pkg := range dr.Packages { r.addPackage(pkg) } @@ -128,7 +128,7 @@ func (state *golistState) mustGetEnv() map[string]string { // goListDriver uses the go list command to interpret the patterns and produce // the build system package structure. // See driver for more details. -func goListDriver(cfg *Config, patterns ...string) (*driverResponse, error) { +func goListDriver(cfg *Config, patterns ...string) (_ *DriverResponse, err error) { // Make sure that any asynchronous go commands are killed when we return. parentCtx := cfg.Context if parentCtx == nil { @@ -146,16 +146,18 @@ func goListDriver(cfg *Config, patterns ...string) (*driverResponse, error) { } // Fill in response.Sizes asynchronously if necessary. - var sizeserr error - var sizeswg sync.WaitGroup if cfg.Mode&NeedTypesSizes != 0 || cfg.Mode&NeedTypes != 0 { - sizeswg.Add(1) + errCh := make(chan error) go func() { compiler, arch, err := packagesdriver.GetSizesForArgsGolist(ctx, state.cfgInvocation(), cfg.gocmdRunner) - sizeserr = err response.dr.Compiler = compiler response.dr.Arch = arch - sizeswg.Done() + errCh <- err + }() + defer func() { + if sizesErr := <-errCh; sizesErr != nil { + err = sizesErr + } }() } @@ -208,10 +210,7 @@ extractQueries: } } - sizeswg.Wait() - if sizeserr != nil { - return nil, sizeserr - } + // (We may yet return an error due to defer.) return response.dr, nil } @@ -266,7 +265,7 @@ func (state *golistState) runContainsQueries(response *responseDeduper, queries // adhocPackage attempts to load or construct an ad-hoc package for a given // query, if the original call to the driver produced inadequate results. -func (state *golistState) adhocPackage(pattern, query string) (*driverResponse, error) { +func (state *golistState) adhocPackage(pattern, query string) (*DriverResponse, error) { response, err := state.createDriverResponse(query) if err != nil { return nil, err @@ -357,7 +356,7 @@ func otherFiles(p *jsonPackage) [][]string { // createDriverResponse uses the "go list" command to expand the pattern // words and return a response for the specified packages. -func (state *golistState) createDriverResponse(words ...string) (*driverResponse, error) { +func (state *golistState) createDriverResponse(words ...string) (*DriverResponse, error) { // go list uses the following identifiers in ImportPath and Imports: // // "p" -- importable package or main (command) @@ -384,7 +383,7 @@ func (state *golistState) createDriverResponse(words ...string) (*driverResponse pkgs := make(map[string]*Package) additionalErrors := make(map[string][]Error) // Decode the JSON and convert it to Package form. - response := &driverResponse{ + response := &DriverResponse{ GoVersion: goVersion, } for dec := json.NewDecoder(buf); dec.More(); { diff --git a/vendor/golang.org/x/tools/go/packages/packages.go b/vendor/golang.org/x/tools/go/packages/packages.go index 81e9e6a72..f33b0afc2 100644 --- a/vendor/golang.org/x/tools/go/packages/packages.go +++ b/vendor/golang.org/x/tools/go/packages/packages.go @@ -206,43 +206,6 @@ type Config struct { Overlay map[string][]byte } -// driver is the type for functions that query the build system for the -// packages named by the patterns. -type driver func(cfg *Config, patterns ...string) (*driverResponse, error) - -// driverResponse contains the results for a driver query. -type driverResponse struct { - // NotHandled is returned if the request can't be handled by the current - // driver. If an external driver returns a response with NotHandled, the - // rest of the driverResponse is ignored, and go/packages will fallback - // to the next driver. If go/packages is extended in the future to support - // lists of multiple drivers, go/packages will fall back to the next driver. - NotHandled bool - - // Compiler and Arch are the arguments pass of types.SizesFor - // to get a types.Sizes to use when type checking. - Compiler string - Arch string - - // Roots is the set of package IDs that make up the root packages. - // We have to encode this separately because when we encode a single package - // we cannot know if it is one of the roots as that requires knowledge of the - // graph it is part of. - Roots []string `json:",omitempty"` - - // Packages is the full set of packages in the graph. - // The packages are not connected into a graph. - // The Imports if populated will be stubs that only have their ID set. - // Imports will be connected and then type and syntax information added in a - // later pass (see refine). - Packages []*Package - - // GoVersion is the minor version number used by the driver - // (e.g. the go command on the PATH) when selecting .go files. - // Zero means unknown. - GoVersion int -} - // Load loads and returns the Go packages named by the given patterns. // // Config specifies loading options; @@ -291,7 +254,7 @@ func Load(cfg *Config, patterns ...string) ([]*Package, error) { // no external driver, or the driver returns a response with NotHandled set, // defaultDriver will fall back to the go list driver. // The boolean result indicates that an external driver handled the request. -func defaultDriver(cfg *Config, patterns ...string) (*driverResponse, bool, error) { +func defaultDriver(cfg *Config, patterns ...string) (*DriverResponse, bool, error) { if driver := findExternalDriver(cfg); driver != nil { response, err := driver(cfg, patterns...) if err != nil { @@ -303,7 +266,10 @@ func defaultDriver(cfg *Config, patterns ...string) (*driverResponse, bool, erro } response, err := goListDriver(cfg, patterns...) - return response, false, err + if err != nil { + return nil, false, err + } + return response, false, nil } // A Package describes a loaded Go package. @@ -648,7 +614,7 @@ func newLoader(cfg *Config) *loader { // refine connects the supplied packages into a graph and then adds type // and syntax information as requested by the LoadMode. -func (ld *loader) refine(response *driverResponse) ([]*Package, error) { +func (ld *loader) refine(response *DriverResponse) ([]*Package, error) { roots := response.Roots rootMap := make(map[string]int, len(roots)) for i, root := range roots { diff --git a/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go b/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go index 11d5c8c3a..6a57ce3b1 100644 --- a/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go +++ b/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go @@ -29,9 +29,13 @@ import ( "strconv" "strings" + "golang.org/x/tools/internal/aliases" "golang.org/x/tools/internal/typeparams" + "golang.org/x/tools/internal/typesinternal" ) +// TODO(adonovan): think about generic aliases. + // A Path is an opaque name that identifies a types.Object // relative to its package. Conceptually, the name consists of a // sequence of destructuring operations applied to the package scope @@ -223,7 +227,7 @@ func (enc *Encoder) For(obj types.Object) (Path, error) { // Reject obviously non-viable cases. switch obj := obj.(type) { case *types.TypeName: - if _, ok := obj.Type().(*types.TypeParam); !ok { + if _, ok := aliases.Unalias(obj.Type()).(*types.TypeParam); !ok { // With the exception of type parameters, only package-level type names // have a path. return "", fmt.Errorf("no path for %v", obj) @@ -310,7 +314,7 @@ func (enc *Encoder) For(obj types.Object) (Path, error) { } // Inspect declared methods of defined types. - if T, ok := o.Type().(*types.Named); ok { + if T, ok := aliases.Unalias(o.Type()).(*types.Named); ok { path = append(path, opType) // The method index here is always with respect // to the underlying go/types data structures, @@ -395,13 +399,8 @@ func (enc *Encoder) concreteMethod(meth *types.Func) (Path, bool) { return "", false } - recvT := meth.Type().(*types.Signature).Recv().Type() - if ptr, ok := recvT.(*types.Pointer); ok { - recvT = ptr.Elem() - } - - named, ok := recvT.(*types.Named) - if !ok { + _, named := typesinternal.ReceiverNamed(meth.Type().(*types.Signature).Recv()) + if named == nil { return "", false } @@ -444,6 +443,8 @@ func (enc *Encoder) concreteMethod(meth *types.Func) (Path, bool) { // nil, it will be allocated as necessary. func find(obj types.Object, T types.Type, path []byte, seen map[*types.TypeName]bool) []byte { switch T := T.(type) { + case *aliases.Alias: + return find(obj, aliases.Unalias(T), path, seen) case *types.Basic, *types.Named: // Named types belonging to pkg were handled already, // so T must belong to another package. No path. @@ -616,6 +617,7 @@ func Object(pkg *types.Package, p Path) (types.Object, error) { // Inv: t != nil, obj == nil + t = aliases.Unalias(t) switch code { case opElem: hasElem, ok := t.(hasElem) // Pointer, Slice, Array, Chan, Map diff --git a/vendor/golang.org/x/tools/internal/aliases/aliases.go b/vendor/golang.org/x/tools/internal/aliases/aliases.go new file mode 100644 index 000000000..f89112c8e --- /dev/null +++ b/vendor/golang.org/x/tools/internal/aliases/aliases.go @@ -0,0 +1,28 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package aliases + +import ( + "go/token" + "go/types" +) + +// Package aliases defines backward compatible shims +// for the types.Alias type representation added in 1.22. +// This defines placeholders for x/tools until 1.26. + +// NewAlias creates a new TypeName in Package pkg that +// is an alias for the type rhs. +// +// When GoVersion>=1.22 and GODEBUG=gotypesalias=1, +// the Type() of the return value is a *types.Alias. +func NewAlias(pos token.Pos, pkg *types.Package, name string, rhs types.Type) *types.TypeName { + if enabled() { + tname := types.NewTypeName(pos, pkg, name, nil) + newAlias(tname, rhs) + return tname + } + return types.NewTypeName(pos, pkg, name, rhs) +} diff --git a/vendor/golang.org/x/tools/internal/aliases/aliases_go121.go b/vendor/golang.org/x/tools/internal/aliases/aliases_go121.go new file mode 100644 index 000000000..1872b56ff --- /dev/null +++ b/vendor/golang.org/x/tools/internal/aliases/aliases_go121.go @@ -0,0 +1,30 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !go1.22 +// +build !go1.22 + +package aliases + +import ( + "go/types" +) + +// Alias is a placeholder for a go/types.Alias for <=1.21. +// It will never be created by go/types. +type Alias struct{} + +func (*Alias) String() string { panic("unreachable") } + +func (*Alias) Underlying() types.Type { panic("unreachable") } + +func (*Alias) Obj() *types.TypeName { panic("unreachable") } + +// Unalias returns the type t for go <=1.21. +func Unalias(t types.Type) types.Type { return t } + +// Always false for go <=1.21. Ignores GODEBUG. +func enabled() bool { return false } + +func newAlias(name *types.TypeName, rhs types.Type) *Alias { panic("unreachable") } diff --git a/vendor/golang.org/x/tools/internal/aliases/aliases_go122.go b/vendor/golang.org/x/tools/internal/aliases/aliases_go122.go new file mode 100644 index 000000000..8b9211628 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/aliases/aliases_go122.go @@ -0,0 +1,72 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build go1.22 +// +build go1.22 + +package aliases + +import ( + "go/ast" + "go/parser" + "go/token" + "go/types" + "os" + "strings" + "sync" +) + +// Alias is an alias of types.Alias. +type Alias = types.Alias + +// Unalias is a wrapper of types.Unalias. +func Unalias(t types.Type) types.Type { return types.Unalias(t) } + +// newAlias is an internal alias around types.NewAlias. +// Direct usage is discouraged as the moment. +// Try to use NewAlias instead. +func newAlias(tname *types.TypeName, rhs types.Type) *Alias { + a := types.NewAlias(tname, rhs) + // TODO(go.dev/issue/65455): Remove kludgy workaround to set a.actual as a side-effect. + Unalias(a) + return a +} + +// enabled returns true when types.Aliases are enabled. +func enabled() bool { + // Use the gotypesalias value in GODEBUG if set. + godebug := os.Getenv("GODEBUG") + value := -1 // last set value. + for _, f := range strings.Split(godebug, ",") { + switch f { + case "gotypesalias=1": + value = 1 + case "gotypesalias=0": + value = 0 + } + } + switch value { + case 0: + return false + case 1: + return true + default: + return aliasesDefault() + } +} + +// aliasesDefault reports if aliases are enabled by default. +func aliasesDefault() bool { + // Dynamically check if Aliases will be produced from go/types. + aliasesDefaultOnce.Do(func() { + fset := token.NewFileSet() + f, _ := parser.ParseFile(fset, "a.go", "package p; type A = int", 0) + pkg, _ := new(types.Config).Check("p", fset, []*ast.File{f}, nil) + _, gotypesaliasDefault = pkg.Scope().Lookup("A").Type().(*types.Alias) + }) + return gotypesaliasDefault +} + +var gotypesaliasDefault bool +var aliasesDefaultOnce sync.Once diff --git a/vendor/golang.org/x/tools/internal/gcimporter/gcimporter.go b/vendor/golang.org/x/tools/internal/gcimporter/gcimporter.go index 2d078ccb1..39df91124 100644 --- a/vendor/golang.org/x/tools/internal/gcimporter/gcimporter.go +++ b/vendor/golang.org/x/tools/internal/gcimporter/gcimporter.go @@ -259,13 +259,6 @@ func Import(packages map[string]*types.Package, path, srcDir string, lookup func return } -func deref(typ types.Type) types.Type { - if p, _ := typ.(*types.Pointer); p != nil { - return p.Elem() - } - return typ -} - type byPath []*types.Package func (a byPath) Len() int { return len(a) } diff --git a/vendor/golang.org/x/tools/internal/gcimporter/iexport.go b/vendor/golang.org/x/tools/internal/gcimporter/iexport.go index 2ee8c7016..638fc1d3b 100644 --- a/vendor/golang.org/x/tools/internal/gcimporter/iexport.go +++ b/vendor/golang.org/x/tools/internal/gcimporter/iexport.go @@ -23,6 +23,7 @@ import ( "strings" "golang.org/x/tools/go/types/objectpath" + "golang.org/x/tools/internal/aliases" "golang.org/x/tools/internal/tokeninternal" ) @@ -506,13 +507,13 @@ func (p *iexporter) doDecl(obj types.Object) { case *types.TypeName: t := obj.Type() - if tparam, ok := t.(*types.TypeParam); ok { + if tparam, ok := aliases.Unalias(t).(*types.TypeParam); ok { w.tag('P') w.pos(obj.Pos()) constraint := tparam.Constraint() if p.version >= iexportVersionGo1_18 { implicit := false - if iface, _ := constraint.(*types.Interface); iface != nil { + if iface, _ := aliases.Unalias(constraint).(*types.Interface); iface != nil { implicit = iface.IsImplicit() } w.bool(implicit) @@ -738,6 +739,8 @@ func (w *exportWriter) doTyp(t types.Type, pkg *types.Package) { }() } switch t := t.(type) { + // TODO(adonovan): support types.Alias. + case *types.Named: if targs := t.TypeArgs(); targs.Len() > 0 { w.startType(instanceType) @@ -843,7 +846,7 @@ func (w *exportWriter) doTyp(t types.Type, pkg *types.Package) { for i := 0; i < n; i++ { ft := t.EmbeddedType(i) tPkg := pkg - if named, _ := ft.(*types.Named); named != nil { + if named, _ := aliases.Unalias(ft).(*types.Named); named != nil { w.pos(named.Obj().Pos()) } else { w.pos(token.NoPos) diff --git a/vendor/golang.org/x/tools/internal/gcimporter/iimport.go b/vendor/golang.org/x/tools/internal/gcimporter/iimport.go index 9bde15e3b..4d50eb8e5 100644 --- a/vendor/golang.org/x/tools/internal/gcimporter/iimport.go +++ b/vendor/golang.org/x/tools/internal/gcimporter/iimport.go @@ -22,6 +22,8 @@ import ( "strings" "golang.org/x/tools/go/types/objectpath" + "golang.org/x/tools/internal/aliases" + "golang.org/x/tools/internal/typesinternal" ) type intReader struct { @@ -224,6 +226,7 @@ func iimportCommon(fset *token.FileSet, getPackages GetPackagesFunc, data []byte // Gather the relevant packages from the manifest. items := make([]GetPackagesItem, r.uint64()) + uniquePkgPaths := make(map[string]bool) for i := range items { pkgPathOff := r.uint64() pkgPath := p.stringAt(pkgPathOff) @@ -248,6 +251,12 @@ func iimportCommon(fset *token.FileSet, getPackages GetPackagesFunc, data []byte } items[i].nameIndex = nameIndex + + uniquePkgPaths[pkgPath] = true + } + // Debugging #63822; hypothesis: there are duplicate PkgPaths. + if len(uniquePkgPaths) != len(items) { + reportf("found duplicate PkgPaths while reading export data manifest: %v", items) } // Request packages all at once from the client, @@ -515,7 +524,7 @@ func canReuse(def *types.Named, rhs types.Type) bool { if def == nil { return true } - iface, _ := rhs.(*types.Interface) + iface, _ := aliases.Unalias(rhs).(*types.Interface) if iface == nil { return true } @@ -580,14 +589,13 @@ func (r *importReader) obj(name string) { // If the receiver has any targs, set those as the // rparams of the method (since those are the // typeparams being used in the method sig/body). - base := baseType(recv.Type()) - assert(base != nil) - targs := base.TypeArgs() + _, recvNamed := typesinternal.ReceiverNamed(recv) + targs := recvNamed.TypeArgs() var rparams []*types.TypeParam if targs.Len() > 0 { rparams = make([]*types.TypeParam, targs.Len()) for i := range rparams { - rparams[i] = targs.At(i).(*types.TypeParam) + rparams[i] = aliases.Unalias(targs.At(i)).(*types.TypeParam) } } msig := r.signature(recv, rparams, nil) @@ -617,7 +625,7 @@ func (r *importReader) obj(name string) { } constraint := r.typ() if implicit { - iface, _ := constraint.(*types.Interface) + iface, _ := aliases.Unalias(constraint).(*types.Interface) if iface == nil { errorf("non-interface constraint marked implicit") } @@ -824,7 +832,7 @@ func (r *importReader) typ() types.Type { } func isInterface(t types.Type) bool { - _, ok := t.(*types.Interface) + _, ok := aliases.Unalias(t).(*types.Interface) return ok } @@ -1023,7 +1031,7 @@ func (r *importReader) tparamList() []*types.TypeParam { for i := range xs { // Note: the standard library importer is tolerant of nil types here, // though would panic in SetTypeParams. - xs[i] = r.typ().(*types.TypeParam) + xs[i] = aliases.Unalias(r.typ()).(*types.TypeParam) } return xs } @@ -1070,13 +1078,3 @@ func (r *importReader) byte() byte { } return x } - -func baseType(typ types.Type) *types.Named { - // pointer receivers are never types.Named types - if p, _ := typ.(*types.Pointer); p != nil { - typ = p.Elem() - } - // receiver base types are always (possibly generic) types.Named types - n, _ := typ.(*types.Named) - return n -} diff --git a/vendor/golang.org/x/tools/internal/gcimporter/support_go117.go b/vendor/golang.org/x/tools/internal/gcimporter/support_go117.go deleted file mode 100644 index d892273ef..000000000 --- a/vendor/golang.org/x/tools/internal/gcimporter/support_go117.go +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !go1.18 -// +build !go1.18 - -package gcimporter - -import "go/types" - -const iexportVersion = iexportVersionGo1_11 - -func additionalPredeclared() []types.Type { - return nil -} diff --git a/vendor/golang.org/x/tools/internal/gcimporter/support_go118.go b/vendor/golang.org/x/tools/internal/gcimporter/support_go118.go index edbe6ea70..0cd3b91b6 100644 --- a/vendor/golang.org/x/tools/internal/gcimporter/support_go118.go +++ b/vendor/golang.org/x/tools/internal/gcimporter/support_go118.go @@ -2,9 +2,6 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build go1.18 -// +build go1.18 - package gcimporter import "go/types" diff --git a/vendor/golang.org/x/tools/internal/gcimporter/unified_no.go b/vendor/golang.org/x/tools/internal/gcimporter/unified_no.go index 286bf4454..38b624cad 100644 --- a/vendor/golang.org/x/tools/internal/gcimporter/unified_no.go +++ b/vendor/golang.org/x/tools/internal/gcimporter/unified_no.go @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build !(go1.18 && goexperiment.unified) -// +build !go1.18 !goexperiment.unified +//go:build !goexperiment.unified +// +build !goexperiment.unified package gcimporter diff --git a/vendor/golang.org/x/tools/internal/gcimporter/unified_yes.go b/vendor/golang.org/x/tools/internal/gcimporter/unified_yes.go index b5d69ffbe..b5118d0b3 100644 --- a/vendor/golang.org/x/tools/internal/gcimporter/unified_yes.go +++ b/vendor/golang.org/x/tools/internal/gcimporter/unified_yes.go @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build go1.18 && goexperiment.unified -// +build go1.18,goexperiment.unified +//go:build goexperiment.unified +// +build goexperiment.unified package gcimporter diff --git a/vendor/golang.org/x/tools/internal/gcimporter/ureader_no.go b/vendor/golang.org/x/tools/internal/gcimporter/ureader_no.go deleted file mode 100644 index 8eb20729c..000000000 --- a/vendor/golang.org/x/tools/internal/gcimporter/ureader_no.go +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2022 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !go1.18 -// +build !go1.18 - -package gcimporter - -import ( - "fmt" - "go/token" - "go/types" -) - -func UImportData(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string) (_ int, pkg *types.Package, err error) { - err = fmt.Errorf("go/tools compiled with a Go version earlier than 1.18 cannot read unified IR export data") - return -} diff --git a/vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.go b/vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.go index b977435f6..f4edc46ab 100644 --- a/vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.go +++ b/vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.go @@ -4,9 +4,6 @@ // Derived from go/internal/gcimporter/ureader.go -//go:build go1.18 -// +build go1.18 - package gcimporter import ( @@ -16,6 +13,7 @@ import ( "sort" "strings" + "golang.org/x/tools/internal/aliases" "golang.org/x/tools/internal/pkgbits" ) @@ -553,7 +551,7 @@ func (pr *pkgReader) objIdx(idx pkgbits.Index) (*types.Package, string) { // If the underlying type is an interface, we need to // duplicate its methods so we can replace the receiver // parameter's type (#49906). - if iface, ok := underlying.(*types.Interface); ok && iface.NumExplicitMethods() != 0 { + if iface, ok := aliases.Unalias(underlying).(*types.Interface); ok && iface.NumExplicitMethods() != 0 { methods := make([]*types.Func, iface.NumExplicitMethods()) for i := range methods { fn := iface.ExplicitMethod(i) diff --git a/vendor/golang.org/x/tools/internal/gopathwalk/walk.go b/vendor/golang.org/x/tools/internal/gopathwalk/walk.go index 52f74e643..836151551 100644 --- a/vendor/golang.org/x/tools/internal/gopathwalk/walk.go +++ b/vendor/golang.org/x/tools/internal/gopathwalk/walk.go @@ -9,11 +9,13 @@ package gopathwalk import ( "bufio" "bytes" + "io" "io/fs" - "log" "os" "path/filepath" + "runtime" "strings" + "sync" "time" ) @@ -21,8 +23,13 @@ import ( type Options struct { // If Logf is non-nil, debug logging is enabled through this function. Logf func(format string, args ...interface{}) + // Search module caches. Also disables legacy goimports ignore rules. ModulesEnabled bool + + // Maximum number of concurrent calls to user-provided callbacks, + // or 0 for GOMAXPROCS. + Concurrency int } // RootType indicates the type of a Root. @@ -43,19 +50,28 @@ type Root struct { Type RootType } -// Walk walks Go source directories ($GOROOT, $GOPATH, etc) to find packages. +// Walk concurrently walks Go source directories ($GOROOT, $GOPATH, etc) to find packages. +// // For each package found, add will be called with the absolute // paths of the containing source directory and the package directory. +// +// Unlike filepath.WalkDir, Walk follows symbolic links +// (while guarding against cycles). func Walk(roots []Root, add func(root Root, dir string), opts Options) { WalkSkip(roots, add, func(Root, string) bool { return false }, opts) } -// WalkSkip walks Go source directories ($GOROOT, $GOPATH, etc) to find packages. +// WalkSkip concurrently walks Go source directories ($GOROOT, $GOPATH, etc) to +// find packages. +// // For each package found, add will be called with the absolute // paths of the containing source directory and the package directory. // For each directory that will be scanned, skip will be called // with the absolute paths of the containing source directory and the directory. // If skip returns false on a directory it will be processed. +// +// Unlike filepath.WalkDir, WalkSkip follows symbolic links +// (while guarding against cycles). func WalkSkip(roots []Root, add func(root Root, dir string), skip func(root Root, dir string) bool, opts Options) { for _, root := range roots { walkDir(root, add, skip, opts) @@ -64,45 +80,51 @@ func WalkSkip(roots []Root, add func(root Root, dir string), skip func(root Root // walkDir creates a walker and starts fastwalk with this walker. func walkDir(root Root, add func(Root, string), skip func(root Root, dir string) bool, opts Options) { + if opts.Logf == nil { + opts.Logf = func(format string, args ...interface{}) {} + } if _, err := os.Stat(root.Path); os.IsNotExist(err) { - if opts.Logf != nil { - opts.Logf("skipping nonexistent directory: %v", root.Path) - } + opts.Logf("skipping nonexistent directory: %v", root.Path) return } start := time.Now() - if opts.Logf != nil { - opts.Logf("scanning %s", root.Path) + opts.Logf("scanning %s", root.Path) + + concurrency := opts.Concurrency + if concurrency == 0 { + // The walk be either CPU-bound or I/O-bound, depending on what the + // caller-supplied add function does and the details of the user's platform + // and machine. Rather than trying to fine-tune the concurrency level for a + // specific environment, we default to GOMAXPROCS: it is likely to be a good + // choice for a CPU-bound add function, and if it is instead I/O-bound, then + // dealing with I/O saturation is arguably the job of the kernel and/or + // runtime. (Oversaturating I/O seems unlikely to harm performance as badly + // as failing to saturate would.) + concurrency = runtime.GOMAXPROCS(0) } - w := &walker{ - root: root, - add: add, - skip: skip, - opts: opts, - added: make(map[string]bool), + root: root, + add: add, + skip: skip, + opts: opts, + sem: make(chan struct{}, concurrency), } w.init() - // Add a trailing path separator to cause filepath.WalkDir to traverse symlinks. + w.sem <- struct{}{} path := root.Path - if len(path) == 0 { - path = "." + string(filepath.Separator) - } else if !os.IsPathSeparator(path[len(path)-1]) { - path = path + string(filepath.Separator) + if path == "" { + path = "." } - - if err := filepath.WalkDir(path, w.walk); err != nil { - logf := opts.Logf - if logf == nil { - logf = log.Printf - } - logf("scanning directory %v: %v", root.Path, err) + if fi, err := os.Lstat(path); err == nil { + w.walk(path, nil, fs.FileInfoToDirEntry(fi)) + } else { + w.opts.Logf("scanning directory %v: %v", root.Path, err) } + <-w.sem + w.walking.Wait() - if opts.Logf != nil { - opts.Logf("scanned %s in %v", root.Path, time.Since(start)) - } + opts.Logf("scanned %s in %v", root.Path, time.Since(start)) } // walker is the callback for fastwalk.Walk. @@ -112,10 +134,18 @@ type walker struct { skip func(Root, string) bool // The callback that will be invoked for every dir. dir is skipped if it returns true. opts Options // Options passed to Walk by the user. - pathSymlinks []os.FileInfo - ignoredDirs []string + walking sync.WaitGroup + sem chan struct{} // Channel of semaphore tokens; send to acquire, receive to release. + ignoredDirs []string - added map[string]bool + added sync.Map // map[string]bool +} + +// A symlinkList is a linked list of os.FileInfos for parent directories +// reached via symlinks. +type symlinkList struct { + info os.FileInfo + prev *symlinkList } // init initializes the walker based on its Options @@ -132,9 +162,7 @@ func (w *walker) init() { for _, p := range ignoredPaths { full := filepath.Join(w.root.Path, p) w.ignoredDirs = append(w.ignoredDirs, full) - if w.opts.Logf != nil { - w.opts.Logf("Directory added to ignore list: %s", full) - } + w.opts.Logf("Directory added to ignore list: %s", full) } } @@ -144,12 +172,10 @@ func (w *walker) init() { func (w *walker) getIgnoredDirs(path string) []string { file := filepath.Join(path, ".goimportsignore") slurp, err := os.ReadFile(file) - if w.opts.Logf != nil { - if err != nil { - w.opts.Logf("%v", err) - } else { - w.opts.Logf("Read %s", file) - } + if err != nil { + w.opts.Logf("%v", err) + } else { + w.opts.Logf("Read %s", file) } if err != nil { return nil @@ -183,149 +209,129 @@ func (w *walker) shouldSkipDir(dir string) bool { // walk walks through the given path. // -// Errors are logged if w.opts.Logf is non-nil, but otherwise ignored: -// walk returns only nil or fs.SkipDir. -func (w *walker) walk(path string, d fs.DirEntry, err error) error { - if err != nil { - // We have no way to report errors back through Walk or WalkSkip, - // so just log and ignore them. - if w.opts.Logf != nil { +// Errors are logged if w.opts.Logf is non-nil, but otherwise ignored. +func (w *walker) walk(path string, pathSymlinks *symlinkList, d fs.DirEntry) { + if d.Type()&os.ModeSymlink != 0 { + // Walk the symlink's target rather than the symlink itself. + // + // (Note that os.Stat, unlike the lower-lever os.Readlink, + // follows arbitrarily many layers of symlinks, so it will eventually + // reach either a non-symlink or a nonexistent target.) + // + // TODO(bcmills): 'go list all' itself ignores symlinks within GOROOT/src + // and GOPATH/src. Do we really need to traverse them here? If so, why? + + fi, err := os.Stat(path) + if err != nil { w.opts.Logf("%v", err) + return + } + + // Avoid walking symlink cycles: if we have already followed a symlink to + // this directory as a parent of itself, don't follow it again. + // + // This doesn't catch the first time through a cycle, but it also minimizes + // the number of extra stat calls we make if we *don't* encounter a cycle. + // Since we don't actually expect to encounter symlink cycles in practice, + // this seems like the right tradeoff. + for parent := pathSymlinks; parent != nil; parent = parent.prev { + if os.SameFile(fi, parent.info) { + return + } } - if d == nil { - // Nothing more to do: the error prevents us from knowing - // what path even represents. - return nil + + pathSymlinks = &symlinkList{ + info: fi, + prev: pathSymlinks, } + d = fs.FileInfoToDirEntry(fi) } if d.Type().IsRegular() { if !strings.HasSuffix(path, ".go") { - return nil + return } dir := filepath.Dir(path) if dir == w.root.Path && (w.root.Type == RootGOROOT || w.root.Type == RootGOPATH) { // Doesn't make sense to have regular files // directly in your $GOPATH/src or $GOROOT/src. - return nil + // + // TODO(bcmills): there are many levels of directory within + // RootModuleCache where this also wouldn't make sense, + // Can we generalize this to any directory without a corresponding + // import path? + return } - if !w.added[dir] { + if _, dup := w.added.LoadOrStore(dir, true); !dup { w.add(w.root, dir) - w.added[dir] = true } - return nil } - if d.IsDir() { - base := filepath.Base(path) - if base == "" || base[0] == '.' || base[0] == '_' || - base == "testdata" || - (w.root.Type == RootGOROOT && w.opts.ModulesEnabled && base == "vendor") || - (!w.opts.ModulesEnabled && base == "node_modules") { - return fs.SkipDir - } - if w.shouldSkipDir(path) { - return fs.SkipDir - } - return nil + if !d.IsDir() { + return } - if d.Type()&os.ModeSymlink != 0 { - // TODO(bcmills): 'go list all' itself ignores symlinks within GOROOT/src - // and GOPATH/src. Do we really need to traverse them here? If so, why? - - fi, err := os.Stat(path) - if err != nil || !fi.IsDir() { - // Not a directory. Just walk the file (or broken link) and be done. - return w.walk(path, fs.FileInfoToDirEntry(fi), err) - } - - // Avoid walking symlink cycles: if we have already followed a symlink to - // this directory as a parent of itself, don't follow it again. - // - // This doesn't catch the first time through a cycle, but it also minimizes - // the number of extra stat calls we make if we *don't* encounter a cycle. - // Since we don't actually expect to encounter symlink cycles in practice, - // this seems like the right tradeoff. - for _, parent := range w.pathSymlinks { - if os.SameFile(fi, parent) { - return nil - } - } + base := filepath.Base(path) + if base == "" || base[0] == '.' || base[0] == '_' || + base == "testdata" || + (w.root.Type == RootGOROOT && w.opts.ModulesEnabled && base == "vendor") || + (!w.opts.ModulesEnabled && base == "node_modules") || + w.shouldSkipDir(path) { + return + } - w.pathSymlinks = append(w.pathSymlinks, fi) - defer func() { - w.pathSymlinks = w.pathSymlinks[:len(w.pathSymlinks)-1] - }() + // Read the directory and walk its entries. - // On some platforms the OS (or the Go os package) sometimes fails to - // resolve directory symlinks before a trailing slash - // (even though POSIX requires it to do so). - // - // On macOS that failure may be caused by a known libc/kernel bug; - // see https://go.dev/issue/59586. - // - // On Windows before Go 1.21, it may be caused by a bug in - // os.Lstat (fixed in https://go.dev/cl/463177). - // - // Since we need to handle this explicitly on broken platforms anyway, - // it is simplest to just always do that and not rely on POSIX pathname - // resolution to walk the directory (such as by calling WalkDir with - // a trailing slash appended to the path). + f, err := os.Open(path) + if err != nil { + w.opts.Logf("%v", err) + return + } + defer f.Close() + + for { + // We impose an arbitrary limit on the number of ReadDir results per + // directory to limit the amount of memory consumed for stale or upcoming + // directory entries. The limit trades off CPU (number of syscalls to read + // the whole directory) against RAM (reachable directory entries other than + // the one currently being processed). // - // Instead, we make a sequence of walk calls — directly and through - // recursive calls to filepath.WalkDir — simulating what WalkDir would do - // if the symlink were a regular directory. - - // First we call walk on the path as a directory - // (instead of a symlink). - err = w.walk(path, fs.FileInfoToDirEntry(fi), nil) - if err == fs.SkipDir { - return nil - } else if err != nil { - // This should be impossible, but handle it anyway in case - // walk is changed to return other errors. - return err - } - - // Now read the directory and walk its entries. - ents, err := os.ReadDir(path) + // Since we process the directories recursively, we will end up maintaining + // a slice of entries for each level of the directory tree. + // (Compare https://go.dev/issue/36197.) + ents, err := f.ReadDir(1024) if err != nil { - // Report the ReadDir error, as filepath.WalkDir would do. - err = w.walk(path, fs.FileInfoToDirEntry(fi), err) - if err == fs.SkipDir { - return nil - } else if err != nil { - return err // Again, should be impossible. + if err != io.EOF { + w.opts.Logf("%v", err) } - // Fall through and iterate over whatever entries we did manage to get. + break } for _, d := range ents { nextPath := filepath.Join(path, d.Name()) if d.IsDir() { - // We want to walk the whole directory tree rooted at nextPath, - // not just the single entry for the directory. - err := filepath.WalkDir(nextPath, w.walk) - if err != nil && w.opts.Logf != nil { - w.opts.Logf("%v", err) - } - } else { - err := w.walk(nextPath, d, nil) - if err == fs.SkipDir { - // Skip the rest of the entries in the parent directory of nextPath - // (that is, path itself). - break - } else if err != nil { - return err // Again, should be impossible. + select { + case w.sem <- struct{}{}: + // Got a new semaphore token, so we can traverse the directory concurrently. + d := d + w.walking.Add(1) + go func() { + defer func() { + <-w.sem + w.walking.Done() + }() + w.walk(nextPath, pathSymlinks, d) + }() + continue + + default: + // No tokens available, so traverse serially. } } + + w.walk(nextPath, pathSymlinks, d) } - return nil } - - // Not a file, regular directory, or symlink; skip. - return nil } diff --git a/vendor/golang.org/x/tools/internal/imports/fix.go b/vendor/golang.org/x/tools/internal/imports/fix.go index dd369c072..6a18f63a4 100644 --- a/vendor/golang.org/x/tools/internal/imports/fix.go +++ b/vendor/golang.org/x/tools/internal/imports/fix.go @@ -13,6 +13,7 @@ import ( "go/build" "go/parser" "go/token" + "go/types" "io/fs" "io/ioutil" "os" @@ -700,20 +701,21 @@ func ScoreImportPaths(ctx context.Context, env *ProcessEnv, paths []string) (map return result, nil } -func PrimeCache(ctx context.Context, env *ProcessEnv) error { +func PrimeCache(ctx context.Context, resolver Resolver) error { // Fully scan the disk for directories, but don't actually read any Go files. callback := &scanCallback{ - rootFound: func(gopathwalk.Root) bool { - return true + rootFound: func(root gopathwalk.Root) bool { + // See getCandidatePkgs: walking GOROOT is apparently expensive and + // unnecessary. + return root.Type != gopathwalk.RootGOROOT }, dirFound: func(pkg *pkg) bool { return false }, - packageNameLoaded: func(pkg *pkg) bool { - return false - }, + // packageNameLoaded and exportsLoaded must never be called. } - return getCandidatePkgs(ctx, callback, "", "", env) + + return resolver.scan(ctx, callback) } func candidateImportName(pkg *pkg) string { @@ -827,16 +829,45 @@ func GetPackageExports(ctx context.Context, wrapped func(PackageExport), searchP return getCandidatePkgs(ctx, callback, filename, filePkg, env) } -var requiredGoEnvVars = []string{"GO111MODULE", "GOFLAGS", "GOINSECURE", "GOMOD", "GOMODCACHE", "GONOPROXY", "GONOSUMDB", "GOPATH", "GOPROXY", "GOROOT", "GOSUMDB", "GOWORK"} +// TODO(rfindley): we should depend on GOOS and GOARCH, to provide accurate +// imports when doing cross-platform development. +var requiredGoEnvVars = []string{ + "GO111MODULE", + "GOFLAGS", + "GOINSECURE", + "GOMOD", + "GOMODCACHE", + "GONOPROXY", + "GONOSUMDB", + "GOPATH", + "GOPROXY", + "GOROOT", + "GOSUMDB", + "GOWORK", +} // ProcessEnv contains environment variables and settings that affect the use of // the go command, the go/build package, etc. +// +// ...a ProcessEnv *also* overwrites its Env along with derived state in the +// form of the resolver. And because it is lazily initialized, an env may just +// be broken and unusable, but there is no way for the caller to detect that: +// all queries will just fail. +// +// TODO(rfindley): refactor this package so that this type (perhaps renamed to +// just Env or Config) is an immutable configuration struct, to be exchanged +// for an initialized object via a constructor that returns an error. Perhaps +// the signature should be `func NewResolver(*Env) (*Resolver, error)`, where +// resolver is a concrete type used for resolving imports. Via this +// refactoring, we can avoid the need to call ProcessEnv.init and +// ProcessEnv.GoEnv everywhere, and implicitly fix all the places where this +// these are misused. Also, we'd delegate the caller the decision of how to +// handle a broken environment. type ProcessEnv struct { GocmdRunner *gocommand.Runner BuildFlags []string ModFlag string - ModFile string // SkipPathInScan returns true if the path should be skipped from scans of // the RootCurrentModule root type. The function argument is a clean, @@ -846,7 +877,7 @@ type ProcessEnv struct { // Env overrides the OS environment, and can be used to specify // GOPROXY, GO111MODULE, etc. PATH cannot be set here, because // exec.Command will not honor it. - // Specifying all of RequiredGoEnvVars avoids a call to `go env`. + // Specifying all of requiredGoEnvVars avoids a call to `go env`. Env map[string]string WorkingDir string @@ -854,9 +885,17 @@ type ProcessEnv struct { // If Logf is non-nil, debug logging is enabled through this function. Logf func(format string, args ...interface{}) - initialized bool + // If set, ModCache holds a shared cache of directory info to use across + // multiple ProcessEnvs. + ModCache *DirInfoCache - resolver Resolver + initialized bool // see TODO above + + // resolver and resolverErr are lazily evaluated (see GetResolver). + // This is unclean, but see the big TODO in the docstring for ProcessEnv + // above: for now, we can't be sure that the ProcessEnv is fully initialized. + resolver Resolver + resolverErr error } func (e *ProcessEnv) goEnv() (map[string]string, error) { @@ -936,20 +975,31 @@ func (e *ProcessEnv) env() []string { } func (e *ProcessEnv) GetResolver() (Resolver, error) { - if e.resolver != nil { - return e.resolver, nil - } if err := e.init(); err != nil { return nil, err } - if len(e.Env["GOMOD"]) == 0 && len(e.Env["GOWORK"]) == 0 { - e.resolver = newGopathResolver(e) - return e.resolver, nil + + if e.resolver == nil && e.resolverErr == nil { + // TODO(rfindley): we should only use a gopathResolver here if the working + // directory is actually *in* GOPATH. (I seem to recall an open gopls issue + // for this behavior, but I can't find it). + // + // For gopls, we can optionally explicitly choose a resolver type, since we + // already know the view type. + if len(e.Env["GOMOD"]) == 0 && len(e.Env["GOWORK"]) == 0 { + e.resolver = newGopathResolver(e) + } else { + e.resolver, e.resolverErr = newModuleResolver(e, e.ModCache) + } } - e.resolver = newModuleResolver(e) - return e.resolver, nil + + return e.resolver, e.resolverErr } +// buildContext returns the build.Context to use for matching files. +// +// TODO(rfindley): support dynamic GOOS, GOARCH here, when doing cross-platform +// development. func (e *ProcessEnv) buildContext() (*build.Context, error) { ctx := build.Default goenv, err := e.goEnv() @@ -1029,15 +1079,23 @@ func addStdlibCandidates(pass *pass, refs references) error { type Resolver interface { // loadPackageNames loads the package names in importPaths. loadPackageNames(importPaths []string, srcDir string) (map[string]string, error) + // scan works with callback to search for packages. See scanCallback for details. scan(ctx context.Context, callback *scanCallback) error + // loadExports returns the set of exported symbols in the package at dir. // loadExports may be called concurrently. loadExports(ctx context.Context, pkg *pkg, includeTest bool) (string, []string, error) + // scoreImportPath returns the relevance for an import path. scoreImportPath(ctx context.Context, path string) float64 - ClearForNewScan() + // ClearForNewScan returns a new Resolver based on the receiver that has + // cleared its internal caches of directory contents. + // + // The new resolver should be primed and then set via + // [ProcessEnv.UpdateResolver]. + ClearForNewScan() Resolver } // A scanCallback controls a call to scan and receives its results. @@ -1120,7 +1178,7 @@ func addExternalCandidates(ctx context.Context, pass *pass, refs references, fil go func(pkgName string, symbols map[string]bool) { defer wg.Done() - found, err := findImport(ctx, pass, found[pkgName], pkgName, symbols, filename) + found, err := findImport(ctx, pass, found[pkgName], pkgName, symbols) if err != nil { firstErrOnce.Do(func() { @@ -1151,6 +1209,17 @@ func addExternalCandidates(ctx context.Context, pass *pass, refs references, fil }() for result := range results { + // Don't offer completions that would shadow predeclared + // names, such as github.com/coreos/etcd/error. + if types.Universe.Lookup(result.pkg.name) != nil { // predeclared + // Ideally we would skip this candidate only + // if the predeclared name is actually + // referenced by the file, but that's a lot + // trickier to compute and would still create + // an import that is likely to surprise the + // user before long. + continue + } pass.addCandidate(result.imp, result.pkg) } return firstErr @@ -1193,31 +1262,22 @@ func ImportPathToAssumedName(importPath string) string { type gopathResolver struct { env *ProcessEnv walked bool - cache *dirInfoCache + cache *DirInfoCache scanSema chan struct{} // scanSema prevents concurrent scans. } func newGopathResolver(env *ProcessEnv) *gopathResolver { r := &gopathResolver{ - env: env, - cache: &dirInfoCache{ - dirs: map[string]*directoryPackageInfo{}, - listeners: map[*int]cacheListener{}, - }, + env: env, + cache: NewDirInfoCache(), scanSema: make(chan struct{}, 1), } r.scanSema <- struct{}{} return r } -func (r *gopathResolver) ClearForNewScan() { - <-r.scanSema - r.cache = &dirInfoCache{ - dirs: map[string]*directoryPackageInfo{}, - listeners: map[*int]cacheListener{}, - } - r.walked = false - r.scanSema <- struct{}{} +func (r *gopathResolver) ClearForNewScan() Resolver { + return newGopathResolver(r.env) } func (r *gopathResolver) loadPackageNames(importPaths []string, srcDir string) (map[string]string, error) { @@ -1538,7 +1598,7 @@ func loadExportsFromFiles(ctx context.Context, env *ProcessEnv, dir string, incl // findImport searches for a package with the given symbols. // If no package is found, findImport returns ("", false, nil) -func findImport(ctx context.Context, pass *pass, candidates []pkgDistance, pkgName string, symbols map[string]bool, filename string) (*pkg, error) { +func findImport(ctx context.Context, pass *pass, candidates []pkgDistance, pkgName string, symbols map[string]bool) (*pkg, error) { // Sort the candidates by their import package length, // assuming that shorter package names are better than long // ones. Note that this sorts by the de-vendored name, so diff --git a/vendor/golang.org/x/tools/internal/imports/imports.go b/vendor/golang.org/x/tools/internal/imports/imports.go index 58e637b90..660407548 100644 --- a/vendor/golang.org/x/tools/internal/imports/imports.go +++ b/vendor/golang.org/x/tools/internal/imports/imports.go @@ -236,7 +236,7 @@ func parse(fset *token.FileSet, filename string, src []byte, opt *Options) (*ast src = src[:len(src)-len("}\n")] // Gofmt has also indented the function body one level. // Remove that indent. - src = bytes.Replace(src, []byte("\n\t"), []byte("\n"), -1) + src = bytes.ReplaceAll(src, []byte("\n\t"), []byte("\n")) return matchSpace(orig, src) } return file, adjust, nil diff --git a/vendor/golang.org/x/tools/internal/imports/mod.go b/vendor/golang.org/x/tools/internal/imports/mod.go index 5f4d435d3..3d0f38f6c 100644 --- a/vendor/golang.org/x/tools/internal/imports/mod.go +++ b/vendor/golang.org/x/tools/internal/imports/mod.go @@ -23,49 +23,88 @@ import ( "golang.org/x/tools/internal/gopathwalk" ) -// ModuleResolver implements resolver for modules using the go command as little -// as feasible. +// Notes(rfindley): ModuleResolver appears to be heavily optimized for scanning +// as fast as possible, which is desirable for a call to goimports from the +// command line, but it doesn't work as well for gopls, where it suffers from +// slow startup (golang/go#44863) and intermittent hanging (golang/go#59216), +// both caused by populating the cache, albeit in slightly different ways. +// +// A high level list of TODOs: +// - Optimize the scan itself, as there is some redundancy statting and +// reading go.mod files. +// - Invert the relationship between ProcessEnv and Resolver (see the +// docstring of ProcessEnv). +// - Make it easier to use an external resolver implementation. +// +// Smaller TODOs are annotated in the code below. + +// ModuleResolver implements the Resolver interface for a workspace using +// modules. +// +// A goal of the ModuleResolver is to invoke the Go command as little as +// possible. To this end, it runs the Go command only for listing module +// information (i.e. `go list -m -e -json ...`). Package scanning, the process +// of loading package information for the modules, is implemented internally +// via the scan method. +// +// It has two types of state: the state derived from the go command, which +// is populated by init, and the state derived from scans, which is populated +// via scan. A root is considered scanned if it has been walked to discover +// directories. However, if the scan did not require additional information +// from the directory (such as package name or exports), the directory +// information itself may be partially populated. It will be lazily filled in +// as needed by scans, using the scanCallback. type ModuleResolver struct { - env *ProcessEnv - moduleCacheDir string - dummyVendorMod *gocommand.ModuleJSON // If vendoring is enabled, the pseudo-module that represents the /vendor directory. - roots []gopathwalk.Root - scanSema chan struct{} // scanSema prevents concurrent scans and guards scannedRoots. - scannedRoots map[gopathwalk.Root]bool - - initialized bool - mains []*gocommand.ModuleJSON - mainByDir map[string]*gocommand.ModuleJSON - modsByModPath []*gocommand.ModuleJSON // All modules, ordered by # of path components in module Path... - modsByDir []*gocommand.ModuleJSON // ...or number of path components in their Dir. - - // moduleCacheCache stores information about the module cache. - moduleCacheCache *dirInfoCache - otherCache *dirInfoCache + env *ProcessEnv + + // Module state, populated during construction + dummyVendorMod *gocommand.ModuleJSON // if vendoring is enabled, a pseudo-module to represent the /vendor directory + moduleCacheDir string // GOMODCACHE, inferred from GOPATH if unset + roots []gopathwalk.Root // roots to scan, in approximate order of importance + mains []*gocommand.ModuleJSON // main modules + mainByDir map[string]*gocommand.ModuleJSON // module information by dir, to join with roots + modsByModPath []*gocommand.ModuleJSON // all modules, ordered by # of path components in their module path + modsByDir []*gocommand.ModuleJSON // ...or by the number of path components in their Dir. + + // Scanning state, populated by scan + + // scanSema prevents concurrent scans, and guards scannedRoots and the cache + // fields below (though the caches themselves are concurrency safe). + // Receive to acquire, send to release. + scanSema chan struct{} + scannedRoots map[gopathwalk.Root]bool // if true, root has been walked + + // Caches of directory info, populated by scans and scan callbacks + // + // moduleCacheCache stores cached information about roots in the module + // cache, which are immutable and therefore do not need to be invalidated. + // + // otherCache stores information about all other roots (even GOROOT), which + // may change. + moduleCacheCache *DirInfoCache + otherCache *DirInfoCache } -func newModuleResolver(e *ProcessEnv) *ModuleResolver { +// newModuleResolver returns a new module-aware goimports resolver. +// +// Note: use caution when modifying this constructor: changes must also be +// reflected in ModuleResolver.ClearForNewScan. +func newModuleResolver(e *ProcessEnv, moduleCacheCache *DirInfoCache) (*ModuleResolver, error) { r := &ModuleResolver{ env: e, scanSema: make(chan struct{}, 1), } - r.scanSema <- struct{}{} - return r -} - -func (r *ModuleResolver) init() error { - if r.initialized { - return nil - } + r.scanSema <- struct{}{} // release goenv, err := r.env.goEnv() if err != nil { - return err + return nil, err } + + // TODO(rfindley): can we refactor to share logic with r.env.invokeGo? inv := gocommand.Invocation{ BuildFlags: r.env.BuildFlags, ModFlag: r.env.ModFlag, - ModFile: r.env.ModFile, Env: r.env.env(), Logf: r.env.Logf, WorkingDir: r.env.WorkingDir, @@ -77,9 +116,12 @@ func (r *ModuleResolver) init() error { // Module vendor directories are ignored in workspace mode: // https://go.googlesource.com/proposal/+/master/design/45713-workspace.md if len(r.env.Env["GOWORK"]) == 0 { + // TODO(rfindley): VendorEnabled runs the go command to get GOFLAGS, but + // they should be available from the ProcessEnv. Can we avoid the redundant + // invocation? vendorEnabled, mainModVendor, err = gocommand.VendorEnabled(context.TODO(), inv, r.env.GocmdRunner) if err != nil { - return err + return nil, err } } @@ -100,19 +142,14 @@ func (r *ModuleResolver) init() error { // GO111MODULE=on. Other errors are fatal. if err != nil { if errMsg := err.Error(); !strings.Contains(errMsg, "working directory is not part of a module") && !strings.Contains(errMsg, "go.mod file not found") { - return err + return nil, err } } } - if gmc := r.env.Env["GOMODCACHE"]; gmc != "" { - r.moduleCacheDir = gmc - } else { - gopaths := filepath.SplitList(goenv["GOPATH"]) - if len(gopaths) == 0 { - return fmt.Errorf("empty GOPATH") - } - r.moduleCacheDir = filepath.Join(gopaths[0], "/pkg/mod") + r.moduleCacheDir = gomodcacheForEnv(goenv) + if r.moduleCacheDir == "" { + return nil, fmt.Errorf("cannot resolve GOMODCACHE") } sort.Slice(r.modsByModPath, func(i, j int) bool { @@ -141,7 +178,11 @@ func (r *ModuleResolver) init() error { } else { addDep := func(mod *gocommand.ModuleJSON) { if mod.Replace == nil { - // This is redundant with the cache, but we'll skip it cheaply enough. + // This is redundant with the cache, but we'll skip it cheaply enough + // when we encounter it in the module cache scan. + // + // Including it at a lower index in r.roots than the module cache dir + // helps prioritize matches from within existing dependencies. r.roots = append(r.roots, gopathwalk.Root{Path: mod.Dir, Type: gopathwalk.RootModuleCache}) } else { r.roots = append(r.roots, gopathwalk.Root{Path: mod.Dir, Type: gopathwalk.RootOther}) @@ -158,24 +199,40 @@ func (r *ModuleResolver) init() error { addDep(mod) } } + // If provided, share the moduleCacheCache. + // + // TODO(rfindley): The module cache is immutable. However, the loaded + // exports do depend on GOOS and GOARCH. Fortunately, the + // ProcessEnv.buildContext does not adjust these from build.DefaultContext + // (even though it should). So for now, this is OK to share, but we need to + // add logic for handling GOOS/GOARCH. + r.moduleCacheCache = moduleCacheCache r.roots = append(r.roots, gopathwalk.Root{Path: r.moduleCacheDir, Type: gopathwalk.RootModuleCache}) } r.scannedRoots = map[gopathwalk.Root]bool{} if r.moduleCacheCache == nil { - r.moduleCacheCache = &dirInfoCache{ - dirs: map[string]*directoryPackageInfo{}, - listeners: map[*int]cacheListener{}, - } - } - if r.otherCache == nil { - r.otherCache = &dirInfoCache{ - dirs: map[string]*directoryPackageInfo{}, - listeners: map[*int]cacheListener{}, - } + r.moduleCacheCache = NewDirInfoCache() } - r.initialized = true - return nil + r.otherCache = NewDirInfoCache() + return r, nil +} + +// gomodcacheForEnv returns the GOMODCACHE value to use based on the given env +// map, which must have GOMODCACHE and GOPATH populated. +// +// TODO(rfindley): this is defensive refactoring. +// 1. Is this even relevant anymore? Can't we just read GOMODCACHE. +// 2. Use this to separate module cache scanning from other scanning. +func gomodcacheForEnv(goenv map[string]string) string { + if gmc := goenv["GOMODCACHE"]; gmc != "" { + return gmc + } + gopaths := filepath.SplitList(goenv["GOPATH"]) + if len(gopaths) == 0 { + return "" + } + return filepath.Join(gopaths[0], "/pkg/mod") } func (r *ModuleResolver) initAllMods() error { @@ -206,30 +263,82 @@ func (r *ModuleResolver) initAllMods() error { return nil } -func (r *ModuleResolver) ClearForNewScan() { - <-r.scanSema - r.scannedRoots = map[gopathwalk.Root]bool{} - r.otherCache = &dirInfoCache{ - dirs: map[string]*directoryPackageInfo{}, - listeners: map[*int]cacheListener{}, +// ClearForNewScan invalidates the last scan. +// +// It preserves the set of roots, but forgets about the set of directories. +// Though it forgets the set of module cache directories, it remembers their +// contents, since they are assumed to be immutable. +func (r *ModuleResolver) ClearForNewScan() Resolver { + <-r.scanSema // acquire r, to guard scannedRoots + r2 := &ModuleResolver{ + env: r.env, + dummyVendorMod: r.dummyVendorMod, + moduleCacheDir: r.moduleCacheDir, + roots: r.roots, + mains: r.mains, + mainByDir: r.mainByDir, + modsByModPath: r.modsByModPath, + + scanSema: make(chan struct{}, 1), + scannedRoots: make(map[gopathwalk.Root]bool), + otherCache: NewDirInfoCache(), + moduleCacheCache: r.moduleCacheCache, + } + r2.scanSema <- struct{}{} // r2 must start released + // Invalidate root scans. We don't need to invalidate module cache roots, + // because they are immutable. + // (We don't support a use case where GOMODCACHE is cleaned in the middle of + // e.g. a gopls session: the user must restart gopls to get accurate + // imports.) + // + // Scanning for new directories in GOMODCACHE should be handled elsewhere, + // via a call to ScanModuleCache. + for _, root := range r.roots { + if root.Type == gopathwalk.RootModuleCache && r.scannedRoots[root] { + r2.scannedRoots[root] = true + } } - r.scanSema <- struct{}{} + r.scanSema <- struct{}{} // release r + return r2 } -func (r *ModuleResolver) ClearForNewMod() { - <-r.scanSema - *r = ModuleResolver{ - env: r.env, - moduleCacheCache: r.moduleCacheCache, - otherCache: r.otherCache, - scanSema: r.scanSema, +// ClearModuleInfo invalidates resolver state that depends on go.mod file +// contents (essentially, the output of go list -m -json ...). +// +// Notably, it does not forget directory contents, which are reset +// asynchronously via ClearForNewScan. +// +// If the ProcessEnv is a GOPATH environment, ClearModuleInfo is a no op. +// +// TODO(rfindley): move this to a new env.go, consolidating ProcessEnv methods. +func (e *ProcessEnv) ClearModuleInfo() { + if r, ok := e.resolver.(*ModuleResolver); ok { + resolver, resolverErr := newModuleResolver(e, e.ModCache) + if resolverErr == nil { + <-r.scanSema // acquire (guards caches) + resolver.moduleCacheCache = r.moduleCacheCache + resolver.otherCache = r.otherCache + r.scanSema <- struct{}{} // release + } + e.resolver = resolver + e.resolverErr = resolverErr } - r.init() - r.scanSema <- struct{}{} } -// findPackage returns the module and directory that contains the package at -// the given import path, or returns nil, "" if no module is in scope. +// UpdateResolver sets the resolver for the ProcessEnv to use in imports +// operations. Only for use with the result of [Resolver.ClearForNewScan]. +// +// TODO(rfindley): this awkward API is a result of the (arguably) inverted +// relationship between configuration and state described in the doc comment +// for [ProcessEnv]. +func (e *ProcessEnv) UpdateResolver(r Resolver) { + e.resolver = r + e.resolverErr = nil +} + +// findPackage returns the module and directory from within the main modules +// and their dependencies that contains the package at the given import path, +// or returns nil, "" if no module is in scope. func (r *ModuleResolver) findPackage(importPath string) (*gocommand.ModuleJSON, string) { // This can't find packages in the stdlib, but that's harmless for all // the existing code paths. @@ -295,10 +404,6 @@ func (r *ModuleResolver) cacheStore(info directoryPackageInfo) { } } -func (r *ModuleResolver) cacheKeys() []string { - return append(r.moduleCacheCache.Keys(), r.otherCache.Keys()...) -} - // cachePackageName caches the package name for a dir already in the cache. func (r *ModuleResolver) cachePackageName(info directoryPackageInfo) (string, error) { if info.rootType == gopathwalk.RootModuleCache { @@ -367,15 +472,15 @@ func (r *ModuleResolver) dirIsNestedModule(dir string, mod *gocommand.ModuleJSON return modDir != mod.Dir } -func (r *ModuleResolver) modInfo(dir string) (modDir string, modName string) { - readModName := func(modFile string) string { - modBytes, err := os.ReadFile(modFile) - if err != nil { - return "" - } - return modulePath(modBytes) +func readModName(modFile string) string { + modBytes, err := os.ReadFile(modFile) + if err != nil { + return "" } + return modulePath(modBytes) +} +func (r *ModuleResolver) modInfo(dir string) (modDir, modName string) { if r.dirInModuleCache(dir) { if matches := modCacheRegexp.FindStringSubmatch(dir); len(matches) == 3 { index := strings.Index(dir, matches[1]+"@"+matches[2]) @@ -409,11 +514,9 @@ func (r *ModuleResolver) dirInModuleCache(dir string) bool { } func (r *ModuleResolver) loadPackageNames(importPaths []string, srcDir string) (map[string]string, error) { - if err := r.init(); err != nil { - return nil, err - } names := map[string]string{} for _, path := range importPaths { + // TODO(rfindley): shouldn't this use the dirInfoCache? _, packageDir := r.findPackage(path) if packageDir == "" { continue @@ -431,10 +534,6 @@ func (r *ModuleResolver) scan(ctx context.Context, callback *scanCallback) error ctx, done := event.Start(ctx, "imports.ModuleResolver.scan") defer done() - if err := r.init(); err != nil { - return err - } - processDir := func(info directoryPackageInfo) { // Skip this directory if we were not able to get the package information successfully. if scanned, err := info.reachedStatus(directoryScanned); !scanned || err != nil { @@ -444,18 +543,18 @@ func (r *ModuleResolver) scan(ctx context.Context, callback *scanCallback) error if err != nil { return } - if !callback.dirFound(pkg) { return } + pkg.packageName, err = r.cachePackageName(info) if err != nil { return } - if !callback.packageNameLoaded(pkg) { return } + _, exports, err := r.loadExports(ctx, pkg, false) if err != nil { return @@ -494,7 +593,6 @@ func (r *ModuleResolver) scan(ctx context.Context, callback *scanCallback) error return packageScanned } - // Add anything new to the cache, and process it if we're still listening. add := func(root gopathwalk.Root, dir string) { r.cacheStore(r.scanDirForPackage(root, dir)) } @@ -509,9 +607,9 @@ func (r *ModuleResolver) scan(ctx context.Context, callback *scanCallback) error select { case <-ctx.Done(): return - case <-r.scanSema: + case <-r.scanSema: // acquire } - defer func() { r.scanSema <- struct{}{} }() + defer func() { r.scanSema <- struct{}{} }() // release // We have the lock on r.scannedRoots, and no other scans can run. for _, root := range roots { if ctx.Err() != nil { @@ -613,9 +711,6 @@ func (r *ModuleResolver) canonicalize(info directoryPackageInfo) (*pkg, error) { } func (r *ModuleResolver) loadExports(ctx context.Context, pkg *pkg, includeTest bool) (string, []string, error) { - if err := r.init(); err != nil { - return "", nil, err - } if info, ok := r.cacheLoad(pkg.dir); ok && !includeTest { return r.cacheExports(ctx, r.env, info) } diff --git a/vendor/golang.org/x/tools/internal/imports/mod_cache.go b/vendor/golang.org/x/tools/internal/imports/mod_cache.go index 45690abbb..cfc546576 100644 --- a/vendor/golang.org/x/tools/internal/imports/mod_cache.go +++ b/vendor/golang.org/x/tools/internal/imports/mod_cache.go @@ -7,8 +7,12 @@ package imports import ( "context" "fmt" + "path" + "path/filepath" + "strings" "sync" + "golang.org/x/mod/module" "golang.org/x/tools/internal/gopathwalk" ) @@ -39,6 +43,8 @@ const ( exportsLoaded ) +// directoryPackageInfo holds (possibly incomplete) information about packages +// contained in a given directory. type directoryPackageInfo struct { // status indicates the extent to which this struct has been filled in. status directoryPackageStatus @@ -63,7 +69,10 @@ type directoryPackageInfo struct { packageName string // the package name, as declared in the source. // Set when status >= exportsLoaded. - + // TODO(rfindley): it's hard to see this, but exports depend implicitly on + // the default build context GOOS and GOARCH. + // + // We can make this explicit, and key exports by GOOS, GOARCH. exports []string } @@ -79,7 +88,7 @@ func (info *directoryPackageInfo) reachedStatus(target directoryPackageStatus) ( return true, nil } -// dirInfoCache is a concurrency safe map for storing information about +// DirInfoCache is a concurrency-safe map for storing information about // directories that may contain packages. // // The information in this cache is built incrementally. Entries are initialized in scan. @@ -92,21 +101,26 @@ func (info *directoryPackageInfo) reachedStatus(target directoryPackageStatus) ( // The information in the cache is not expected to change for the cache's // lifetime, so there is no protection against competing writes. Users should // take care not to hold the cache across changes to the underlying files. -// -// TODO(suzmue): consider other concurrency strategies and data structures (RWLocks, sync.Map, etc) -type dirInfoCache struct { +type DirInfoCache struct { mu sync.Mutex // dirs stores information about packages in directories, keyed by absolute path. dirs map[string]*directoryPackageInfo listeners map[*int]cacheListener } +func NewDirInfoCache() *DirInfoCache { + return &DirInfoCache{ + dirs: make(map[string]*directoryPackageInfo), + listeners: make(map[*int]cacheListener), + } +} + type cacheListener func(directoryPackageInfo) // ScanAndListen calls listener on all the items in the cache, and on anything // newly added. The returned stop function waits for all in-flight callbacks to // finish and blocks new ones. -func (d *dirInfoCache) ScanAndListen(ctx context.Context, listener cacheListener) func() { +func (d *DirInfoCache) ScanAndListen(ctx context.Context, listener cacheListener) func() { ctx, cancel := context.WithCancel(ctx) // Flushing out all the callbacks is tricky without knowing how many there @@ -162,8 +176,10 @@ func (d *dirInfoCache) ScanAndListen(ctx context.Context, listener cacheListener } // Store stores the package info for dir. -func (d *dirInfoCache) Store(dir string, info directoryPackageInfo) { +func (d *DirInfoCache) Store(dir string, info directoryPackageInfo) { d.mu.Lock() + // TODO(rfindley, golang/go#59216): should we overwrite an existing entry? + // That seems incorrect as the cache should be idempotent. _, old := d.dirs[dir] d.dirs[dir] = &info var listeners []cacheListener @@ -180,7 +196,7 @@ func (d *dirInfoCache) Store(dir string, info directoryPackageInfo) { } // Load returns a copy of the directoryPackageInfo for absolute directory dir. -func (d *dirInfoCache) Load(dir string) (directoryPackageInfo, bool) { +func (d *DirInfoCache) Load(dir string) (directoryPackageInfo, bool) { d.mu.Lock() defer d.mu.Unlock() info, ok := d.dirs[dir] @@ -191,7 +207,7 @@ func (d *dirInfoCache) Load(dir string) (directoryPackageInfo, bool) { } // Keys returns the keys currently present in d. -func (d *dirInfoCache) Keys() (keys []string) { +func (d *DirInfoCache) Keys() (keys []string) { d.mu.Lock() defer d.mu.Unlock() for key := range d.dirs { @@ -200,7 +216,7 @@ func (d *dirInfoCache) Keys() (keys []string) { return keys } -func (d *dirInfoCache) CachePackageName(info directoryPackageInfo) (string, error) { +func (d *DirInfoCache) CachePackageName(info directoryPackageInfo) (string, error) { if loaded, err := info.reachedStatus(nameLoaded); loaded { return info.packageName, err } @@ -213,7 +229,7 @@ func (d *dirInfoCache) CachePackageName(info directoryPackageInfo) (string, erro return info.packageName, info.err } -func (d *dirInfoCache) CacheExports(ctx context.Context, env *ProcessEnv, info directoryPackageInfo) (string, []string, error) { +func (d *DirInfoCache) CacheExports(ctx context.Context, env *ProcessEnv, info directoryPackageInfo) (string, []string, error) { if reached, _ := info.reachedStatus(exportsLoaded); reached { return info.packageName, info.exports, info.err } @@ -234,3 +250,81 @@ func (d *dirInfoCache) CacheExports(ctx context.Context, env *ProcessEnv, info d d.Store(info.dir, info) return info.packageName, info.exports, info.err } + +// ScanModuleCache walks the given directory, which must be a GOMODCACHE value, +// for directory package information, storing the results in cache. +func ScanModuleCache(dir string, cache *DirInfoCache, logf func(string, ...any)) { + // Note(rfindley): it's hard to see, but this function attempts to implement + // just the side effects on cache of calling PrimeCache with a ProcessEnv + // that has the given dir as its GOMODCACHE. + // + // Teasing out the control flow, we see that we can avoid any handling of + // vendor/ and can infer module info entirely from the path, simplifying the + // logic here. + + root := gopathwalk.Root{ + Path: filepath.Clean(dir), + Type: gopathwalk.RootModuleCache, + } + + directoryInfo := func(root gopathwalk.Root, dir string) directoryPackageInfo { + // This is a copy of ModuleResolver.scanDirForPackage, trimmed down to + // logic that applies to a module cache directory. + + subdir := "" + if dir != root.Path { + subdir = dir[len(root.Path)+len("/"):] + } + + matches := modCacheRegexp.FindStringSubmatch(subdir) + if len(matches) == 0 { + return directoryPackageInfo{ + status: directoryScanned, + err: fmt.Errorf("invalid module cache path: %v", subdir), + } + } + modPath, err := module.UnescapePath(filepath.ToSlash(matches[1])) + if err != nil { + if logf != nil { + logf("decoding module cache path %q: %v", subdir, err) + } + return directoryPackageInfo{ + status: directoryScanned, + err: fmt.Errorf("decoding module cache path %q: %v", subdir, err), + } + } + importPath := path.Join(modPath, filepath.ToSlash(matches[3])) + index := strings.Index(dir, matches[1]+"@"+matches[2]) + modDir := filepath.Join(dir[:index], matches[1]+"@"+matches[2]) + modName := readModName(filepath.Join(modDir, "go.mod")) + return directoryPackageInfo{ + status: directoryScanned, + dir: dir, + rootType: root.Type, + nonCanonicalImportPath: importPath, + moduleDir: modDir, + moduleName: modName, + } + } + + add := func(root gopathwalk.Root, dir string) { + info := directoryInfo(root, dir) + cache.Store(info.dir, info) + } + + skip := func(_ gopathwalk.Root, dir string) bool { + // Skip directories that have already been scanned. + // + // Note that gopathwalk only adds "package" directories, which must contain + // a .go file, and all such package directories in the module cache are + // immutable. So if we can load a dir, it can be skipped. + info, ok := cache.Load(dir) + if !ok { + return false + } + packageScanned, _ := info.reachedStatus(directoryScanned) + return packageScanned + } + + gopathwalk.WalkSkip([]gopathwalk.Root{root}, add, skip, gopathwalk.Options{Logf: logf, ModulesEnabled: true}) +} diff --git a/vendor/golang.org/x/tools/internal/imports/zstdlib.go b/vendor/golang.org/x/tools/internal/imports/zstdlib.go index 9f992c2be..8db24df2f 100644 --- a/vendor/golang.org/x/tools/internal/imports/zstdlib.go +++ b/vendor/golang.org/x/tools/internal/imports/zstdlib.go @@ -151,6 +151,7 @@ var stdlib = map[string][]string{ "cmp": { "Compare", "Less", + "Or", "Ordered", }, "compress/bzip2": { @@ -632,6 +633,8 @@ var stdlib = map[string][]string{ "NameMismatch", "NewCertPool", "NotAuthorizedToSign", + "OID", + "OIDFromInts", "PEMCipher", "PEMCipher3DES", "PEMCipherAES128", @@ -706,6 +709,7 @@ var stdlib = map[string][]string{ "LevelWriteCommitted", "Named", "NamedArg", + "Null", "NullBool", "NullByte", "NullFloat64", @@ -1921,6 +1925,7 @@ var stdlib = map[string][]string{ "R_LARCH_32", "R_LARCH_32_PCREL", "R_LARCH_64", + "R_LARCH_64_PCREL", "R_LARCH_ABS64_HI12", "R_LARCH_ABS64_LO20", "R_LARCH_ABS_HI20", @@ -1928,12 +1933,17 @@ var stdlib = map[string][]string{ "R_LARCH_ADD16", "R_LARCH_ADD24", "R_LARCH_ADD32", + "R_LARCH_ADD6", "R_LARCH_ADD64", "R_LARCH_ADD8", + "R_LARCH_ADD_ULEB128", + "R_LARCH_ALIGN", "R_LARCH_B16", "R_LARCH_B21", "R_LARCH_B26", + "R_LARCH_CFA", "R_LARCH_COPY", + "R_LARCH_DELETE", "R_LARCH_GNU_VTENTRY", "R_LARCH_GNU_VTINHERIT", "R_LARCH_GOT64_HI12", @@ -1953,6 +1963,7 @@ var stdlib = map[string][]string{ "R_LARCH_PCALA64_LO20", "R_LARCH_PCALA_HI20", "R_LARCH_PCALA_LO12", + "R_LARCH_PCREL20_S2", "R_LARCH_RELATIVE", "R_LARCH_RELAX", "R_LARCH_SOP_ADD", @@ -1983,8 +1994,10 @@ var stdlib = map[string][]string{ "R_LARCH_SUB16", "R_LARCH_SUB24", "R_LARCH_SUB32", + "R_LARCH_SUB6", "R_LARCH_SUB64", "R_LARCH_SUB8", + "R_LARCH_SUB_ULEB128", "R_LARCH_TLS_DTPMOD32", "R_LARCH_TLS_DTPMOD64", "R_LARCH_TLS_DTPREL32", @@ -2035,6 +2048,7 @@ var stdlib = map[string][]string{ "R_MIPS_LO16", "R_MIPS_NONE", "R_MIPS_PC16", + "R_MIPS_PC32", "R_MIPS_PJUMP", "R_MIPS_REL16", "R_MIPS_REL32", @@ -2952,6 +2966,8 @@ var stdlib = map[string][]string{ "RegisterName", }, "encoding/hex": { + "AppendDecode", + "AppendEncode", "Decode", "DecodeString", "DecodedLen", @@ -3233,6 +3249,7 @@ var stdlib = map[string][]string{ "TypeSpec", "TypeSwitchStmt", "UnaryExpr", + "Unparen", "ValueSpec", "Var", "Visitor", @@ -3492,6 +3509,7 @@ var stdlib = map[string][]string{ "XOR_ASSIGN", }, "go/types": { + "Alias", "ArgumentError", "Array", "AssertableTo", @@ -3559,6 +3577,7 @@ var stdlib = map[string][]string{ "MethodVal", "MissingMethod", "Named", + "NewAlias", "NewArray", "NewChan", "NewChecker", @@ -3627,6 +3646,7 @@ var stdlib = map[string][]string{ "Uint64", "Uint8", "Uintptr", + "Unalias", "Union", "Universe", "Unsafe", @@ -3643,6 +3663,11 @@ var stdlib = map[string][]string{ "WriteSignature", "WriteType", }, + "go/version": { + "Compare", + "IsValid", + "Lang", + }, "hash": { "Hash", "Hash32", @@ -4078,6 +4103,7 @@ var stdlib = map[string][]string{ "NewTextHandler", "Record", "SetDefault", + "SetLogLoggerLevel", "Source", "SourceKey", "String", @@ -4367,6 +4393,35 @@ var stdlib = map[string][]string{ "Uint64", "Zipf", }, + "math/rand/v2": { + "ChaCha8", + "ExpFloat64", + "Float32", + "Float64", + "Int", + "Int32", + "Int32N", + "Int64", + "Int64N", + "IntN", + "N", + "New", + "NewChaCha8", + "NewPCG", + "NewZipf", + "NormFloat64", + "PCG", + "Perm", + "Rand", + "Shuffle", + "Source", + "Uint32", + "Uint32N", + "Uint64", + "Uint64N", + "UintN", + "Zipf", + }, "mime": { "AddExtensionType", "BEncoding", @@ -4540,6 +4595,7 @@ var stdlib = map[string][]string{ "FS", "File", "FileServer", + "FileServerFS", "FileSystem", "Flusher", "Get", @@ -4566,6 +4622,7 @@ var stdlib = map[string][]string{ "MethodPut", "MethodTrace", "NewFileTransport", + "NewFileTransportFS", "NewRequest", "NewRequestWithContext", "NewResponseController", @@ -4599,6 +4656,7 @@ var stdlib = map[string][]string{ "Serve", "ServeContent", "ServeFile", + "ServeFileFS", "ServeMux", "ServeTLS", "Server", @@ -5106,6 +5164,7 @@ var stdlib = map[string][]string{ "StructTag", "Swapper", "Type", + "TypeFor", "TypeOf", "Uint", "Uint16", @@ -5342,6 +5401,7 @@ var stdlib = map[string][]string{ "CompactFunc", "Compare", "CompareFunc", + "Concat", "Contains", "ContainsFunc", "Delete", @@ -10824,6 +10884,7 @@ var stdlib = map[string][]string{ "Value", }, "testing/slogtest": { + "Run", "TestHandler", }, "text/scanner": { diff --git a/vendor/golang.org/x/tools/internal/tokeninternal/tokeninternal.go b/vendor/golang.org/x/tools/internal/tokeninternal/tokeninternal.go index 7e638ec24..ff9437a36 100644 --- a/vendor/golang.org/x/tools/internal/tokeninternal/tokeninternal.go +++ b/vendor/golang.org/x/tools/internal/tokeninternal/tokeninternal.go @@ -34,30 +34,16 @@ func GetLines(file *token.File) []int { lines []int _ []struct{} } - type tokenFile118 struct { - _ *token.FileSet // deleted in go1.19 - tokenFile119 - } - - type uP = unsafe.Pointer - switch unsafe.Sizeof(*file) { - case unsafe.Sizeof(tokenFile118{}): - var ptr *tokenFile118 - *(*uP)(uP(&ptr)) = uP(file) - ptr.mu.Lock() - defer ptr.mu.Unlock() - return ptr.lines - case unsafe.Sizeof(tokenFile119{}): - var ptr *tokenFile119 - *(*uP)(uP(&ptr)) = uP(file) - ptr.mu.Lock() - defer ptr.mu.Unlock() - return ptr.lines - - default: + if unsafe.Sizeof(*file) != unsafe.Sizeof(tokenFile119{}) { panic("unexpected token.File size") } + var ptr *tokenFile119 + type uP = unsafe.Pointer + *(*uP)(uP(&ptr)) = uP(file) + ptr.mu.Lock() + defer ptr.mu.Unlock() + return ptr.lines } // AddExistingFiles adds the specified files to the FileSet if they diff --git a/vendor/golang.org/x/tools/internal/typeparams/common.go b/vendor/golang.org/x/tools/internal/typeparams/common.go index cdab98853..8c3a42dc3 100644 --- a/vendor/golang.org/x/tools/internal/typeparams/common.go +++ b/vendor/golang.org/x/tools/internal/typeparams/common.go @@ -2,20 +2,10 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// Package typeparams contains common utilities for writing tools that interact -// with generic Go code, as introduced with Go 1.18. -// -// Many of the types and functions in this package are proxies for the new APIs -// introduced in the standard library with Go 1.18. For example, the -// typeparams.Union type is an alias for go/types.Union, and the ForTypeSpec -// function returns the value of the go/ast.TypeSpec.TypeParams field. At Go -// versions older than 1.18 these helpers are implemented as stubs, allowing -// users of this package to write code that handles generic constructs inline, -// even if the Go version being used to compile does not support generics. -// -// Additionally, this package contains common utilities for working with the -// new generic constructs, to supplement the standard library APIs. Notably, -// the StructuralTerms API computes a minimal representation of the structural +// Package typeparams contains common utilities for writing tools that +// interact with generic Go code, as introduced with Go 1.18. It +// supplements the standard library APIs. Notably, the StructuralTerms +// API computes a minimal representation of the structural // restrictions on a type parameter. // // An external version of these APIs is available in the @@ -27,6 +17,9 @@ import ( "go/ast" "go/token" "go/types" + + "golang.org/x/tools/internal/aliases" + "golang.org/x/tools/internal/typesinternal" ) // UnpackIndexExpr extracts data from AST nodes that represent index @@ -72,9 +65,9 @@ func PackIndexExpr(x ast.Expr, lbrack token.Pos, indices []ast.Expr, rbrack toke } } -// IsTypeParam reports whether t is a type parameter. +// IsTypeParam reports whether t is a type parameter (or an alias of one). func IsTypeParam(t types.Type) bool { - _, ok := t.(*types.TypeParam) + _, ok := aliases.Unalias(t).(*types.TypeParam) return ok } @@ -90,13 +83,8 @@ func OriginMethod(fn *types.Func) *types.Func { if recv == nil { return fn } - base := recv.Type() - p, isPtr := base.(*types.Pointer) - if isPtr { - base = p.Elem() - } - named, isNamed := base.(*types.Named) - if !isNamed { + _, named := typesinternal.ReceiverNamed(recv) + if named == nil { // Receiver is a *types.Interface. return fn } @@ -158,6 +146,9 @@ func OriginMethod(fn *types.Func) *types.Func { // In this case, GenericAssignableTo reports that instantiations of Container // are assignable to the corresponding instantiation of Interface. func GenericAssignableTo(ctxt *types.Context, V, T types.Type) bool { + V = aliases.Unalias(V) + T = aliases.Unalias(T) + // If V and T are not both named, or do not have matching non-empty type // parameter lists, fall back on types.AssignableTo. diff --git a/vendor/golang.org/x/tools/internal/typeparams/coretype.go b/vendor/golang.org/x/tools/internal/typeparams/coretype.go index 7ea8840ea..e66e9d0f4 100644 --- a/vendor/golang.org/x/tools/internal/typeparams/coretype.go +++ b/vendor/golang.org/x/tools/internal/typeparams/coretype.go @@ -5,7 +5,10 @@ package typeparams import ( + "fmt" "go/types" + + "golang.org/x/tools/internal/aliases" ) // CoreType returns the core type of T or nil if T does not have a core type. @@ -109,7 +112,7 @@ func CoreType(T types.Type) types.Type { // _NormalTerms makes no guarantees about the order of terms, except that it // is deterministic. func _NormalTerms(typ types.Type) ([]*types.Term, error) { - switch typ := typ.(type) { + switch typ := aliases.Unalias(typ).(type) { case *types.TypeParam: return StructuralTerms(typ) case *types.Union: @@ -120,3 +123,15 @@ func _NormalTerms(typ types.Type) ([]*types.Term, error) { return []*types.Term{types.NewTerm(false, typ)}, nil } } + +// MustDeref returns the type of the variable pointed to by t. +// It panics if t's core type is not a pointer. +// +// TODO(adonovan): ideally this would live in typesinternal, but that +// creates an import cycle. Move there when we melt this package down. +func MustDeref(t types.Type) types.Type { + if ptr, ok := CoreType(t).(*types.Pointer); ok { + return ptr.Elem() + } + panic(fmt.Sprintf("%v is not a pointer", t)) +} diff --git a/vendor/golang.org/x/tools/internal/typesinternal/recv.go b/vendor/golang.org/x/tools/internal/typesinternal/recv.go new file mode 100644 index 000000000..fea7c8b75 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/typesinternal/recv.go @@ -0,0 +1,43 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package typesinternal + +import ( + "go/types" + + "golang.org/x/tools/internal/aliases" +) + +// ReceiverNamed returns the named type (if any) associated with the +// type of recv, which may be of the form N or *N, or aliases thereof. +// It also reports whether a Pointer was present. +func ReceiverNamed(recv *types.Var) (isPtr bool, named *types.Named) { + t := recv.Type() + if ptr, ok := aliases.Unalias(t).(*types.Pointer); ok { + isPtr = true + t = ptr.Elem() + } + named, _ = aliases.Unalias(t).(*types.Named) + return +} + +// Unpointer returns T given *T or an alias thereof. +// For all other types it is the identity function. +// It does not look at underlying types. +// The result may be an alias. +// +// Use this function to strip off the optional pointer on a receiver +// in a field or method selection, without losing the named type +// (which is needed to compute the method set). +// +// See also [typeparams.MustDeref], which removes one level of +// indirection from the type, regardless of named types (analogous to +// a LOAD instruction). +func Unpointer(t types.Type) types.Type { + if ptr, ok := aliases.Unalias(t).(*types.Pointer); ok { + return ptr.Elem() + } + return t +} diff --git a/vendor/golang.org/x/tools/internal/typesinternal/types_118.go b/vendor/golang.org/x/tools/internal/typesinternal/types_118.go index a42b072a6..ef7ea290c 100644 --- a/vendor/golang.org/x/tools/internal/typesinternal/types_118.go +++ b/vendor/golang.org/x/tools/internal/typesinternal/types_118.go @@ -2,9 +2,6 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build go1.18 -// +build go1.18 - package typesinternal import ( diff --git a/vendor/golang.org/x/tools/internal/versions/features.go b/vendor/golang.org/x/tools/internal/versions/features.go new file mode 100644 index 000000000..b53f17861 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/versions/features.go @@ -0,0 +1,43 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package versions + +// This file contains predicates for working with file versions to +// decide when a tool should consider a language feature enabled. + +// GoVersions that features in x/tools can be gated to. +const ( + Go1_18 = "go1.18" + Go1_19 = "go1.19" + Go1_20 = "go1.20" + Go1_21 = "go1.21" + Go1_22 = "go1.22" +) + +// Future is an invalid unknown Go version sometime in the future. +// Do not use directly with Compare. +const Future = "" + +// AtLeast reports whether the file version v comes after a Go release. +// +// Use this predicate to enable a behavior once a certain Go release +// has happened (and stays enabled in the future). +func AtLeast(v, release string) bool { + if v == Future { + return true // an unknown future version is always after y. + } + return Compare(Lang(v), Lang(release)) >= 0 +} + +// Before reports whether the file version v is strictly before a Go release. +// +// Use this predicate to disable a behavior once a certain Go release +// has happened (and stays enabled in the future). +func Before(v, release string) bool { + if v == Future { + return false // an unknown future version happens after y. + } + return Compare(Lang(v), Lang(release)) < 0 +} diff --git a/vendor/golang.org/x/tools/internal/versions/toolchain.go b/vendor/golang.org/x/tools/internal/versions/toolchain.go new file mode 100644 index 000000000..377bf7a53 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/versions/toolchain.go @@ -0,0 +1,14 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package versions + +// toolchain is maximum version (<1.22) that the go toolchain used +// to build the current tool is known to support. +// +// When a tool is built with >=1.22, the value of toolchain is unused. +// +// x/tools does not support building with go <1.18. So we take this +// as the minimum possible maximum. +var toolchain string = Go1_18 diff --git a/vendor/golang.org/x/tools/internal/versions/toolchain_go119.go b/vendor/golang.org/x/tools/internal/versions/toolchain_go119.go new file mode 100644 index 000000000..f65beed9d --- /dev/null +++ b/vendor/golang.org/x/tools/internal/versions/toolchain_go119.go @@ -0,0 +1,14 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build go1.19 +// +build go1.19 + +package versions + +func init() { + if Compare(toolchain, Go1_19) < 0 { + toolchain = Go1_19 + } +} diff --git a/vendor/golang.org/x/tools/internal/versions/toolchain_go120.go b/vendor/golang.org/x/tools/internal/versions/toolchain_go120.go new file mode 100644 index 000000000..1a9efa126 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/versions/toolchain_go120.go @@ -0,0 +1,14 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build go1.20 +// +build go1.20 + +package versions + +func init() { + if Compare(toolchain, Go1_20) < 0 { + toolchain = Go1_20 + } +} diff --git a/vendor/golang.org/x/tools/internal/versions/toolchain_go121.go b/vendor/golang.org/x/tools/internal/versions/toolchain_go121.go new file mode 100644 index 000000000..b7ef216df --- /dev/null +++ b/vendor/golang.org/x/tools/internal/versions/toolchain_go121.go @@ -0,0 +1,14 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build go1.21 +// +build go1.21 + +package versions + +func init() { + if Compare(toolchain, Go1_21) < 0 { + toolchain = Go1_21 + } +} diff --git a/vendor/golang.org/x/tools/internal/versions/types_go121.go b/vendor/golang.org/x/tools/internal/versions/types_go121.go index a7b79207a..b4345d334 100644 --- a/vendor/golang.org/x/tools/internal/versions/types_go121.go +++ b/vendor/golang.org/x/tools/internal/versions/types_go121.go @@ -12,9 +12,19 @@ import ( "go/types" ) -// FileVersions always reports the a file's Go version as the -// zero version at this Go version. -func FileVersions(info *types.Info, file *ast.File) string { return "" } +// FileVersion returns a language version (<=1.21) derived from runtime.Version() +// or an unknown future version. +func FileVersion(info *types.Info, file *ast.File) string { + // In x/tools built with Go <= 1.21, we do not have Info.FileVersions + // available. We use a go version derived from the toolchain used to + // compile the tool by default. + // This will be <= go1.21. We take this as the maximum version that + // this tool can support. + // + // There are no features currently in x/tools that need to tell fine grained + // differences for versions <1.22. + return toolchain +} -// InitFileVersions is a noop at this Go version. +// InitFileVersions is a noop when compiled with this Go version. func InitFileVersions(*types.Info) {} diff --git a/vendor/golang.org/x/tools/internal/versions/types_go122.go b/vendor/golang.org/x/tools/internal/versions/types_go122.go index 7b9ba89a8..e8180632a 100644 --- a/vendor/golang.org/x/tools/internal/versions/types_go122.go +++ b/vendor/golang.org/x/tools/internal/versions/types_go122.go @@ -12,10 +12,27 @@ import ( "go/types" ) -// FileVersions maps a file to the file's semantic Go version. -// The reported version is the zero version if a version cannot be determined. -func FileVersions(info *types.Info, file *ast.File) string { - return info.FileVersions[file] +// FileVersions returns a file's Go version. +// The reported version is an unknown Future version if a +// version cannot be determined. +func FileVersion(info *types.Info, file *ast.File) string { + // In tools built with Go >= 1.22, the Go version of a file + // follow a cascades of sources: + // 1) types.Info.FileVersion, which follows the cascade: + // 1.a) file version (ast.File.GoVersion), + // 1.b) the package version (types.Config.GoVersion), or + // 2) is some unknown Future version. + // + // File versions require a valid package version to be provided to types + // in Config.GoVersion. Config.GoVersion is either from the package's module + // or the toolchain (go run). This value should be provided by go/packages + // or unitchecker.Config.GoVersion. + if v := info.FileVersions[file]; IsValid(v) { + return v + } + // Note: we could instead return runtime.Version() [if valid]. + // This would act as a max version on what a tool can support. + return Future } // InitFileVersions initializes info to record Go versions for Go files. diff --git a/vendor/golang.org/x/tools/internal/versions/versions_go121.go b/vendor/golang.org/x/tools/internal/versions/versions.go similarity index 77% rename from vendor/golang.org/x/tools/internal/versions/versions_go121.go rename to vendor/golang.org/x/tools/internal/versions/versions.go index cf4a7d036..8d1f7453d 100644 --- a/vendor/golang.org/x/tools/internal/versions/versions_go121.go +++ b/vendor/golang.org/x/tools/internal/versions/versions.go @@ -2,11 +2,18 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build !go1.22 -// +build !go1.22 - package versions +import ( + "strings" +) + +// Note: If we use build tags to use go/versions when go >=1.22, +// we run into go.dev/issue/53737. Under some operations users would see an +// import of "go/versions" even if they would not compile the file. +// For example, during `go get -u ./...` (go.dev/issue/64490) we do not try to include +// For this reason, this library just a clone of go/versions for the moment. + // Lang returns the Go language version for version x. // If x is not a valid version, Lang returns the empty string. // For example: @@ -42,6 +49,7 @@ func IsValid(x string) bool { return isValid(stripGo(x)) } // stripGo converts from a "go1.21" version to a "1.21" version. // If v does not start with "go", stripGo returns the empty string (a known invalid version). func stripGo(v string) string { + v, _, _ = strings.Cut(v, "-") // strip -bigcorp suffix. if len(v) < 2 || v[:2] != "go" { return "" } diff --git a/vendor/golang.org/x/tools/internal/versions/versions_go122.go b/vendor/golang.org/x/tools/internal/versions/versions_go122.go deleted file mode 100644 index c1c1814b2..000000000 --- a/vendor/golang.org/x/tools/internal/versions/versions_go122.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2023 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build go1.22 -// +build go1.22 - -package versions - -import ( - "go/version" -) - -// Lang returns the Go language version for version x. -// If x is not a valid version, Lang returns the empty string. -// For example: -// -// Lang("go1.21rc2") = "go1.21" -// Lang("go1.21.2") = "go1.21" -// Lang("go1.21") = "go1.21" -// Lang("go1") = "go1" -// Lang("bad") = "" -// Lang("1.21") = "" -func Lang(x string) string { return version.Lang(x) } - -// Compare returns -1, 0, or +1 depending on whether -// x < y, x == y, or x > y, interpreted as Go versions. -// The versions x and y must begin with a "go" prefix: "go1.21" not "1.21". -// Invalid versions, including the empty string, compare less than -// valid versions and equal to each other. -// The language version "go1.21" compares less than the -// release candidate and eventual releases "go1.21rc1" and "go1.21.0". -// Custom toolchain suffixes are ignored during comparison: -// "go1.21.0" and "go1.21.0-bigcorp" are equal. -func Compare(x, y string) int { return version.Compare(x, y) } - -// IsValid reports whether the version x is valid. -func IsValid(x string) bool { return version.IsValid(x) } diff --git a/vendor/google.golang.org/protobuf/encoding/protojson/well_known_types.go b/vendor/google.golang.org/protobuf/encoding/protojson/well_known_types.go index 25329b769..4b177c820 100644 --- a/vendor/google.golang.org/protobuf/encoding/protojson/well_known_types.go +++ b/vendor/google.golang.org/protobuf/encoding/protojson/well_known_types.go @@ -322,6 +322,10 @@ func (d decoder) skipJSONValue() error { if open > d.opts.RecursionLimit { return errors.New("exceeded max recursion depth") } + case json.EOF: + // This can only happen if there's a bug in Decoder.Read. + // Avoid an infinite loop if this does happen. + return errors.New("unexpected EOF") } if open == 0 { return nil diff --git a/vendor/google.golang.org/protobuf/internal/editiondefaults/defaults.go b/vendor/google.golang.org/protobuf/internal/editiondefaults/defaults.go new file mode 100644 index 000000000..14656b65a --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/editiondefaults/defaults.go @@ -0,0 +1,12 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package editiondefaults contains the binary representation of the editions +// defaults. +package editiondefaults + +import _ "embed" + +//go:embed editions_defaults.binpb +var Defaults []byte diff --git a/vendor/google.golang.org/protobuf/reflect/protodesc/editions_defaults.binpb b/vendor/google.golang.org/protobuf/internal/editiondefaults/editions_defaults.binpb similarity index 69% rename from vendor/google.golang.org/protobuf/reflect/protodesc/editions_defaults.binpb rename to vendor/google.golang.org/protobuf/internal/editiondefaults/editions_defaults.binpb index 1a8610a84..18f075687 100644 --- a/vendor/google.golang.org/protobuf/reflect/protodesc/editions_defaults.binpb +++ b/vendor/google.golang.org/protobuf/internal/editiondefaults/editions_defaults.binpb @@ -1,4 +1,4 @@ -  (0� +  (0�   (0�   (0� �(� \ No newline at end of file diff --git a/vendor/google.golang.org/protobuf/internal/encoding/json/decode.go b/vendor/google.golang.org/protobuf/internal/encoding/json/decode.go index d043a6ebe..d2b3ac031 100644 --- a/vendor/google.golang.org/protobuf/internal/encoding/json/decode.go +++ b/vendor/google.golang.org/protobuf/internal/encoding/json/decode.go @@ -121,7 +121,7 @@ func (d *Decoder) Read() (Token, error) { case ObjectClose: if len(d.openStack) == 0 || - d.lastToken.kind == comma || + d.lastToken.kind&(Name|comma) != 0 || d.openStack[len(d.openStack)-1] != ObjectOpen { return Token{}, d.newSyntaxError(tok.pos, unexpectedFmt, tok.RawString()) } diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/desc.go b/vendor/google.golang.org/protobuf/internal/filedesc/desc.go index 193c68e8f..8826bcf40 100644 --- a/vendor/google.golang.org/protobuf/internal/filedesc/desc.go +++ b/vendor/google.golang.org/protobuf/internal/filedesc/desc.go @@ -68,7 +68,7 @@ type ( Extensions Extensions Services Services - EditionFeatures FileEditionFeatures + EditionFeatures EditionFeatures } FileL2 struct { Options func() protoreflect.ProtoMessage @@ -76,10 +76,13 @@ type ( Locations SourceLocations } - FileEditionFeatures struct { + EditionFeatures struct { // IsFieldPresence is true if field_presence is EXPLICIT // https://protobuf.dev/editions/features/#field_presence IsFieldPresence bool + // IsFieldPresence is true if field_presence is LEGACY_REQUIRED + // https://protobuf.dev/editions/features/#field_presence + IsLegacyRequired bool // IsOpenEnum is true if enum_type is OPEN // https://protobuf.dev/editions/features/#enum_type IsOpenEnum bool @@ -95,6 +98,9 @@ type ( // IsJSONCompliant is true if json_format is ALLOW // https://protobuf.dev/editions/features/#json_format IsJSONCompliant bool + // GenerateLegacyUnmarshalJSON determines if the plugin generates the + // UnmarshalJSON([]byte) error method for enums. + GenerateLegacyUnmarshalJSON bool } ) @@ -156,6 +162,8 @@ type ( } EnumL1 struct { eagerValues bool // controls whether EnumL2.Values is already populated + + EditionFeatures EditionFeatures } EnumL2 struct { Options func() protoreflect.ProtoMessage @@ -217,6 +225,8 @@ type ( Extensions Extensions IsMapEntry bool // promoted from google.protobuf.MessageOptions IsMessageSet bool // promoted from google.protobuf.MessageOptions + + EditionFeatures EditionFeatures } MessageL2 struct { Options func() protoreflect.ProtoMessage @@ -250,8 +260,7 @@ type ( Enum protoreflect.EnumDescriptor Message protoreflect.MessageDescriptor - // Edition features. - Presence bool + EditionFeatures EditionFeatures } Oneof struct { @@ -261,6 +270,8 @@ type ( OneofL1 struct { Options func() protoreflect.ProtoMessage Fields OneofFields // must be consistent with Message.Fields.ContainingOneof + + EditionFeatures EditionFeatures } ) @@ -310,26 +321,36 @@ func (fd *Field) Options() protoreflect.ProtoMessage { } func (fd *Field) Number() protoreflect.FieldNumber { return fd.L1.Number } func (fd *Field) Cardinality() protoreflect.Cardinality { return fd.L1.Cardinality } -func (fd *Field) Kind() protoreflect.Kind { return fd.L1.Kind } -func (fd *Field) HasJSONName() bool { return fd.L1.StringName.hasJSON } -func (fd *Field) JSONName() string { return fd.L1.StringName.getJSON(fd) } -func (fd *Field) TextName() string { return fd.L1.StringName.getText(fd) } +func (fd *Field) Kind() protoreflect.Kind { + return fd.L1.Kind +} +func (fd *Field) HasJSONName() bool { return fd.L1.StringName.hasJSON } +func (fd *Field) JSONName() string { return fd.L1.StringName.getJSON(fd) } +func (fd *Field) TextName() string { return fd.L1.StringName.getText(fd) } func (fd *Field) HasPresence() bool { - if fd.L0.ParentFile.L1.Syntax == protoreflect.Editions { - return fd.L1.Presence || fd.L1.Message != nil || fd.L1.ContainingOneof != nil + if fd.L1.Cardinality == protoreflect.Repeated { + return false } - return fd.L1.Cardinality != protoreflect.Repeated && (fd.L0.ParentFile.L1.Syntax == protoreflect.Proto2 || fd.L1.Message != nil || fd.L1.ContainingOneof != nil) + explicitFieldPresence := fd.Syntax() == protoreflect.Editions && fd.L1.EditionFeatures.IsFieldPresence + return fd.Syntax() == protoreflect.Proto2 || explicitFieldPresence || fd.L1.Message != nil || fd.L1.ContainingOneof != nil } func (fd *Field) HasOptionalKeyword() bool { return (fd.L0.ParentFile.L1.Syntax == protoreflect.Proto2 && fd.L1.Cardinality == protoreflect.Optional && fd.L1.ContainingOneof == nil) || fd.L1.IsProto3Optional } func (fd *Field) IsPacked() bool { - if !fd.L1.HasPacked && fd.L0.ParentFile.L1.Syntax != protoreflect.Proto2 && fd.L1.Cardinality == protoreflect.Repeated { - switch fd.L1.Kind { - case protoreflect.StringKind, protoreflect.BytesKind, protoreflect.MessageKind, protoreflect.GroupKind: - default: - return true - } + if fd.L1.Cardinality != protoreflect.Repeated { + return false + } + switch fd.L1.Kind { + case protoreflect.StringKind, protoreflect.BytesKind, protoreflect.MessageKind, protoreflect.GroupKind: + return false + } + if fd.L0.ParentFile.L1.Syntax == protoreflect.Editions { + return fd.L1.EditionFeatures.IsPacked + } + if fd.L0.ParentFile.L1.Syntax == protoreflect.Proto3 { + // proto3 repeated fields are packed by default. + return !fd.L1.HasPacked || fd.L1.IsPacked } return fd.L1.IsPacked } @@ -378,6 +399,9 @@ func (fd *Field) ProtoType(protoreflect.FieldDescriptor) {} // WARNING: This method is exempt from the compatibility promise and may be // removed in the future without warning. func (fd *Field) EnforceUTF8() bool { + if fd.L0.ParentFile.L1.Syntax == protoreflect.Editions { + return fd.L1.EditionFeatures.IsUTF8Validated + } if fd.L1.HasEnforceUTF8 { return fd.L1.EnforceUTF8 } @@ -404,10 +428,11 @@ type ( L2 *ExtensionL2 // protected by fileDesc.once } ExtensionL1 struct { - Number protoreflect.FieldNumber - Extendee protoreflect.MessageDescriptor - Cardinality protoreflect.Cardinality - Kind protoreflect.Kind + Number protoreflect.FieldNumber + Extendee protoreflect.MessageDescriptor + Cardinality protoreflect.Cardinality + Kind protoreflect.Kind + EditionFeatures EditionFeatures } ExtensionL2 struct { Options func() protoreflect.ProtoMessage diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go b/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go index 4a1584c9d..237e64fd2 100644 --- a/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go +++ b/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go @@ -5,6 +5,7 @@ package filedesc import ( + "fmt" "sync" "google.golang.org/protobuf/encoding/protowire" @@ -98,6 +99,7 @@ func (fd *File) unmarshalSeed(b []byte) { var prevField protoreflect.FieldNumber var numEnums, numMessages, numExtensions, numServices int var posEnums, posMessages, posExtensions, posServices int + var options []byte b0 := b for len(b) > 0 { num, typ, n := protowire.ConsumeTag(b) @@ -113,6 +115,8 @@ func (fd *File) unmarshalSeed(b []byte) { fd.L1.Syntax = protoreflect.Proto2 case "proto3": fd.L1.Syntax = protoreflect.Proto3 + case "editions": + fd.L1.Syntax = protoreflect.Editions default: panic("invalid syntax") } @@ -120,6 +124,8 @@ func (fd *File) unmarshalSeed(b []byte) { fd.L1.Path = sb.MakeString(v) case genid.FileDescriptorProto_Package_field_number: fd.L1.Package = protoreflect.FullName(sb.MakeString(v)) + case genid.FileDescriptorProto_Options_field_number: + options = v case genid.FileDescriptorProto_EnumType_field_number: if prevField != genid.FileDescriptorProto_EnumType_field_number { if numEnums > 0 { @@ -154,6 +160,13 @@ func (fd *File) unmarshalSeed(b []byte) { numServices++ } prevField = num + case protowire.VarintType: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + switch num { + case genid.FileDescriptorProto_Edition_field_number: + fd.L1.Edition = Edition(v) + } default: m := protowire.ConsumeFieldValue(num, typ, b) b = b[m:] @@ -166,6 +179,15 @@ func (fd *File) unmarshalSeed(b []byte) { fd.L1.Syntax = protoreflect.Proto2 } + if fd.L1.Syntax == protoreflect.Editions { + fd.L1.EditionFeatures = getFeaturesFor(fd.L1.Edition) + } + + // Parse editions features from options if any + if options != nil { + fd.unmarshalSeedOptions(options) + } + // Must allocate all declarations before parsing each descriptor type // to ensure we handled all descriptors in "flattened ordering". if numEnums > 0 { @@ -219,6 +241,28 @@ func (fd *File) unmarshalSeed(b []byte) { } } +func (fd *File) unmarshalSeedOptions(b []byte) { + for b := b; len(b) > 0; { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case genid.FileOptions_Features_field_number: + if fd.Syntax() != protoreflect.Editions { + panic(fmt.Sprintf("invalid descriptor: using edition features in a proto with syntax %s", fd.Syntax())) + } + fd.L1.EditionFeatures = unmarshalFeatureSet(v, fd.L1.EditionFeatures) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } +} + func (ed *Enum) unmarshalSeed(b []byte, sb *strs.Builder, pf *File, pd protoreflect.Descriptor, i int) { ed.L0.ParentFile = pf ed.L0.Parent = pd @@ -275,6 +319,7 @@ func (md *Message) unmarshalSeed(b []byte, sb *strs.Builder, pf *File, pd protor md.L0.ParentFile = pf md.L0.Parent = pd md.L0.Index = i + md.L1.EditionFeatures = featuresFromParentDesc(md.Parent()) var prevField protoreflect.FieldNumber var numEnums, numMessages, numExtensions int @@ -380,6 +425,13 @@ func (md *Message) unmarshalSeedOptions(b []byte) { case genid.MessageOptions_MessageSetWireFormat_field_number: md.L1.IsMessageSet = protowire.DecodeBool(v) } + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case genid.MessageOptions_Features_field_number: + md.L1.EditionFeatures = unmarshalFeatureSet(v, md.L1.EditionFeatures) + } default: m := protowire.ConsumeFieldValue(num, typ, b) b = b[m:] diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go b/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go index 736a19a75..482a61cc1 100644 --- a/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go +++ b/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go @@ -414,6 +414,7 @@ func (fd *Field) unmarshalFull(b []byte, sb *strs.Builder, pf *File, pd protoref fd.L0.ParentFile = pf fd.L0.Parent = pd fd.L0.Index = i + fd.L1.EditionFeatures = featuresFromParentDesc(fd.Parent()) var rawTypeName []byte var rawOptions []byte @@ -465,6 +466,12 @@ func (fd *Field) unmarshalFull(b []byte, sb *strs.Builder, pf *File, pd protoref b = b[m:] } } + if fd.Syntax() == protoreflect.Editions && fd.L1.Kind == protoreflect.MessageKind && fd.L1.EditionFeatures.IsDelimitedEncoded { + fd.L1.Kind = protoreflect.GroupKind + } + if fd.Syntax() == protoreflect.Editions && fd.L1.EditionFeatures.IsLegacyRequired { + fd.L1.Cardinality = protoreflect.Required + } if rawTypeName != nil { name := makeFullName(sb, rawTypeName) switch fd.L1.Kind { @@ -497,6 +504,13 @@ func (fd *Field) unmarshalOptions(b []byte) { fd.L1.HasEnforceUTF8 = true fd.L1.EnforceUTF8 = protowire.DecodeBool(v) } + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case genid.FieldOptions_Features_field_number: + fd.L1.EditionFeatures = unmarshalFeatureSet(v, fd.L1.EditionFeatures) + } default: m := protowire.ConsumeFieldValue(num, typ, b) b = b[m:] @@ -534,6 +548,7 @@ func (od *Oneof) unmarshalFull(b []byte, sb *strs.Builder, pf *File, pd protoref func (xd *Extension) unmarshalFull(b []byte, sb *strs.Builder) { var rawTypeName []byte var rawOptions []byte + xd.L1.EditionFeatures = featuresFromParentDesc(xd.L1.Extendee) xd.L2 = new(ExtensionL2) for len(b) > 0 { num, typ, n := protowire.ConsumeTag(b) @@ -565,6 +580,12 @@ func (xd *Extension) unmarshalFull(b []byte, sb *strs.Builder) { b = b[m:] } } + if xd.Syntax() == protoreflect.Editions && xd.L1.Kind == protoreflect.MessageKind && xd.L1.EditionFeatures.IsDelimitedEncoded { + xd.L1.Kind = protoreflect.GroupKind + } + if xd.Syntax() == protoreflect.Editions && xd.L1.EditionFeatures.IsLegacyRequired { + xd.L1.Cardinality = protoreflect.Required + } if rawTypeName != nil { name := makeFullName(sb, rawTypeName) switch xd.L1.Kind { @@ -589,6 +610,13 @@ func (xd *Extension) unmarshalOptions(b []byte) { case genid.FieldOptions_Packed_field_number: xd.L2.IsPacked = protowire.DecodeBool(v) } + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case genid.FieldOptions_Features_field_number: + xd.L1.EditionFeatures = unmarshalFeatureSet(v, xd.L1.EditionFeatures) + } default: m := protowire.ConsumeFieldValue(num, typ, b) b = b[m:] diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/editions.go b/vendor/google.golang.org/protobuf/internal/filedesc/editions.go new file mode 100644 index 000000000..0375a49d4 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/filedesc/editions.go @@ -0,0 +1,142 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package filedesc + +import ( + "fmt" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/editiondefaults" + "google.golang.org/protobuf/internal/genid" + "google.golang.org/protobuf/reflect/protoreflect" +) + +var defaultsCache = make(map[Edition]EditionFeatures) + +func init() { + unmarshalEditionDefaults(editiondefaults.Defaults) +} + +func unmarshalGoFeature(b []byte, parent EditionFeatures) EditionFeatures { + for len(b) > 0 { + num, _, n := protowire.ConsumeTag(b) + b = b[n:] + switch num { + case genid.GoFeatures_LegacyUnmarshalJsonEnum_field_number: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + parent.GenerateLegacyUnmarshalJSON = protowire.DecodeBool(v) + default: + panic(fmt.Sprintf("unkown field number %d while unmarshalling GoFeatures", num)) + } + } + return parent +} + +func unmarshalFeatureSet(b []byte, parent EditionFeatures) EditionFeatures { + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.VarintType: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + switch num { + case genid.FeatureSet_FieldPresence_field_number: + parent.IsFieldPresence = v == genid.FeatureSet_EXPLICIT_enum_value || v == genid.FeatureSet_LEGACY_REQUIRED_enum_value + parent.IsLegacyRequired = v == genid.FeatureSet_LEGACY_REQUIRED_enum_value + case genid.FeatureSet_EnumType_field_number: + parent.IsOpenEnum = v == genid.FeatureSet_OPEN_enum_value + case genid.FeatureSet_RepeatedFieldEncoding_field_number: + parent.IsPacked = v == genid.FeatureSet_PACKED_enum_value + case genid.FeatureSet_Utf8Validation_field_number: + parent.IsUTF8Validated = v == genid.FeatureSet_VERIFY_enum_value + case genid.FeatureSet_MessageEncoding_field_number: + parent.IsDelimitedEncoded = v == genid.FeatureSet_DELIMITED_enum_value + case genid.FeatureSet_JsonFormat_field_number: + parent.IsJSONCompliant = v == genid.FeatureSet_ALLOW_enum_value + default: + panic(fmt.Sprintf("unkown field number %d while unmarshalling FeatureSet", num)) + } + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case genid.GoFeatures_LegacyUnmarshalJsonEnum_field_number: + parent = unmarshalGoFeature(v, parent) + } + } + } + + return parent +} + +func featuresFromParentDesc(parentDesc protoreflect.Descriptor) EditionFeatures { + var parentFS EditionFeatures + switch p := parentDesc.(type) { + case *File: + parentFS = p.L1.EditionFeatures + case *Message: + parentFS = p.L1.EditionFeatures + default: + panic(fmt.Sprintf("unknown parent type %T", parentDesc)) + } + return parentFS +} + +func unmarshalEditionDefault(b []byte) { + var ed Edition + var fs EditionFeatures + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.VarintType: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + switch num { + case genid.FeatureSetDefaults_FeatureSetEditionDefault_Edition_field_number: + ed = Edition(v) + } + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case genid.FeatureSetDefaults_FeatureSetEditionDefault_Features_field_number: + fs = unmarshalFeatureSet(v, fs) + } + } + } + defaultsCache[ed] = fs +} + +func unmarshalEditionDefaults(b []byte) { + for len(b) > 0 { + num, _, n := protowire.ConsumeTag(b) + b = b[n:] + switch num { + case genid.FeatureSetDefaults_Defaults_field_number: + def, m := protowire.ConsumeBytes(b) + b = b[m:] + unmarshalEditionDefault(def) + case genid.FeatureSetDefaults_MinimumEdition_field_number, + genid.FeatureSetDefaults_MaximumEdition_field_number: + // We don't care about the minimum and maximum editions. If the + // edition we are looking for later on is not in the cache we know + // it is outside of the range between minimum and maximum edition. + _, m := protowire.ConsumeVarint(b) + b = b[m:] + default: + panic(fmt.Sprintf("unkown field number %d while unmarshalling EditionDefault", num)) + } + } +} + +func getFeaturesFor(ed Edition) EditionFeatures { + if def, ok := defaultsCache[ed]; ok { + return def + } + panic(fmt.Sprintf("unsupported edition: %v", ed)) +} diff --git a/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go b/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go index 8f94230ea..40272c893 100644 --- a/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go +++ b/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go @@ -18,6 +18,21 @@ const ( Edition_enum_name = "Edition" ) +// Enum values for google.protobuf.Edition. +const ( + Edition_EDITION_UNKNOWN_enum_value = 0 + Edition_EDITION_PROTO2_enum_value = 998 + Edition_EDITION_PROTO3_enum_value = 999 + Edition_EDITION_2023_enum_value = 1000 + Edition_EDITION_2024_enum_value = 1001 + Edition_EDITION_1_TEST_ONLY_enum_value = 1 + Edition_EDITION_2_TEST_ONLY_enum_value = 2 + Edition_EDITION_99997_TEST_ONLY_enum_value = 99997 + Edition_EDITION_99998_TEST_ONLY_enum_value = 99998 + Edition_EDITION_99999_TEST_ONLY_enum_value = 99999 + Edition_EDITION_MAX_enum_value = 2147483647 +) + // Names for google.protobuf.FileDescriptorSet. const ( FileDescriptorSet_message_name protoreflect.Name = "FileDescriptorSet" @@ -213,6 +228,12 @@ const ( ExtensionRangeOptions_VerificationState_enum_name = "VerificationState" ) +// Enum values for google.protobuf.ExtensionRangeOptions.VerificationState. +const ( + ExtensionRangeOptions_DECLARATION_enum_value = 0 + ExtensionRangeOptions_UNVERIFIED_enum_value = 1 +) + // Names for google.protobuf.ExtensionRangeOptions.Declaration. const ( ExtensionRangeOptions_Declaration_message_name protoreflect.Name = "Declaration" @@ -297,12 +318,41 @@ const ( FieldDescriptorProto_Type_enum_name = "Type" ) +// Enum values for google.protobuf.FieldDescriptorProto.Type. +const ( + FieldDescriptorProto_TYPE_DOUBLE_enum_value = 1 + FieldDescriptorProto_TYPE_FLOAT_enum_value = 2 + FieldDescriptorProto_TYPE_INT64_enum_value = 3 + FieldDescriptorProto_TYPE_UINT64_enum_value = 4 + FieldDescriptorProto_TYPE_INT32_enum_value = 5 + FieldDescriptorProto_TYPE_FIXED64_enum_value = 6 + FieldDescriptorProto_TYPE_FIXED32_enum_value = 7 + FieldDescriptorProto_TYPE_BOOL_enum_value = 8 + FieldDescriptorProto_TYPE_STRING_enum_value = 9 + FieldDescriptorProto_TYPE_GROUP_enum_value = 10 + FieldDescriptorProto_TYPE_MESSAGE_enum_value = 11 + FieldDescriptorProto_TYPE_BYTES_enum_value = 12 + FieldDescriptorProto_TYPE_UINT32_enum_value = 13 + FieldDescriptorProto_TYPE_ENUM_enum_value = 14 + FieldDescriptorProto_TYPE_SFIXED32_enum_value = 15 + FieldDescriptorProto_TYPE_SFIXED64_enum_value = 16 + FieldDescriptorProto_TYPE_SINT32_enum_value = 17 + FieldDescriptorProto_TYPE_SINT64_enum_value = 18 +) + // Full and short names for google.protobuf.FieldDescriptorProto.Label. const ( FieldDescriptorProto_Label_enum_fullname = "google.protobuf.FieldDescriptorProto.Label" FieldDescriptorProto_Label_enum_name = "Label" ) +// Enum values for google.protobuf.FieldDescriptorProto.Label. +const ( + FieldDescriptorProto_LABEL_OPTIONAL_enum_value = 1 + FieldDescriptorProto_LABEL_REPEATED_enum_value = 3 + FieldDescriptorProto_LABEL_REQUIRED_enum_value = 2 +) + // Names for google.protobuf.OneofDescriptorProto. const ( OneofDescriptorProto_message_name protoreflect.Name = "OneofDescriptorProto" @@ -474,7 +524,6 @@ const ( FileOptions_CcGenericServices_field_name protoreflect.Name = "cc_generic_services" FileOptions_JavaGenericServices_field_name protoreflect.Name = "java_generic_services" FileOptions_PyGenericServices_field_name protoreflect.Name = "py_generic_services" - FileOptions_PhpGenericServices_field_name protoreflect.Name = "php_generic_services" FileOptions_Deprecated_field_name protoreflect.Name = "deprecated" FileOptions_CcEnableArenas_field_name protoreflect.Name = "cc_enable_arenas" FileOptions_ObjcClassPrefix_field_name protoreflect.Name = "objc_class_prefix" @@ -497,7 +546,6 @@ const ( FileOptions_CcGenericServices_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.cc_generic_services" FileOptions_JavaGenericServices_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.java_generic_services" FileOptions_PyGenericServices_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.py_generic_services" - FileOptions_PhpGenericServices_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.php_generic_services" FileOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.deprecated" FileOptions_CcEnableArenas_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.cc_enable_arenas" FileOptions_ObjcClassPrefix_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.objc_class_prefix" @@ -523,7 +571,6 @@ const ( FileOptions_CcGenericServices_field_number protoreflect.FieldNumber = 16 FileOptions_JavaGenericServices_field_number protoreflect.FieldNumber = 17 FileOptions_PyGenericServices_field_number protoreflect.FieldNumber = 18 - FileOptions_PhpGenericServices_field_number protoreflect.FieldNumber = 42 FileOptions_Deprecated_field_number protoreflect.FieldNumber = 23 FileOptions_CcEnableArenas_field_number protoreflect.FieldNumber = 31 FileOptions_ObjcClassPrefix_field_number protoreflect.FieldNumber = 36 @@ -543,6 +590,13 @@ const ( FileOptions_OptimizeMode_enum_name = "OptimizeMode" ) +// Enum values for google.protobuf.FileOptions.OptimizeMode. +const ( + FileOptions_SPEED_enum_value = 1 + FileOptions_CODE_SIZE_enum_value = 2 + FileOptions_LITE_RUNTIME_enum_value = 3 +) + // Names for google.protobuf.MessageOptions. const ( MessageOptions_message_name protoreflect.Name = "MessageOptions" @@ -639,24 +693,59 @@ const ( FieldOptions_CType_enum_name = "CType" ) +// Enum values for google.protobuf.FieldOptions.CType. +const ( + FieldOptions_STRING_enum_value = 0 + FieldOptions_CORD_enum_value = 1 + FieldOptions_STRING_PIECE_enum_value = 2 +) + // Full and short names for google.protobuf.FieldOptions.JSType. const ( FieldOptions_JSType_enum_fullname = "google.protobuf.FieldOptions.JSType" FieldOptions_JSType_enum_name = "JSType" ) +// Enum values for google.protobuf.FieldOptions.JSType. +const ( + FieldOptions_JS_NORMAL_enum_value = 0 + FieldOptions_JS_STRING_enum_value = 1 + FieldOptions_JS_NUMBER_enum_value = 2 +) + // Full and short names for google.protobuf.FieldOptions.OptionRetention. const ( FieldOptions_OptionRetention_enum_fullname = "google.protobuf.FieldOptions.OptionRetention" FieldOptions_OptionRetention_enum_name = "OptionRetention" ) +// Enum values for google.protobuf.FieldOptions.OptionRetention. +const ( + FieldOptions_RETENTION_UNKNOWN_enum_value = 0 + FieldOptions_RETENTION_RUNTIME_enum_value = 1 + FieldOptions_RETENTION_SOURCE_enum_value = 2 +) + // Full and short names for google.protobuf.FieldOptions.OptionTargetType. const ( FieldOptions_OptionTargetType_enum_fullname = "google.protobuf.FieldOptions.OptionTargetType" FieldOptions_OptionTargetType_enum_name = "OptionTargetType" ) +// Enum values for google.protobuf.FieldOptions.OptionTargetType. +const ( + FieldOptions_TARGET_TYPE_UNKNOWN_enum_value = 0 + FieldOptions_TARGET_TYPE_FILE_enum_value = 1 + FieldOptions_TARGET_TYPE_EXTENSION_RANGE_enum_value = 2 + FieldOptions_TARGET_TYPE_MESSAGE_enum_value = 3 + FieldOptions_TARGET_TYPE_FIELD_enum_value = 4 + FieldOptions_TARGET_TYPE_ONEOF_enum_value = 5 + FieldOptions_TARGET_TYPE_ENUM_enum_value = 6 + FieldOptions_TARGET_TYPE_ENUM_ENTRY_enum_value = 7 + FieldOptions_TARGET_TYPE_SERVICE_enum_value = 8 + FieldOptions_TARGET_TYPE_METHOD_enum_value = 9 +) + // Names for google.protobuf.FieldOptions.EditionDefault. const ( FieldOptions_EditionDefault_message_name protoreflect.Name = "EditionDefault" @@ -813,6 +902,13 @@ const ( MethodOptions_IdempotencyLevel_enum_name = "IdempotencyLevel" ) +// Enum values for google.protobuf.MethodOptions.IdempotencyLevel. +const ( + MethodOptions_IDEMPOTENCY_UNKNOWN_enum_value = 0 + MethodOptions_NO_SIDE_EFFECTS_enum_value = 1 + MethodOptions_IDEMPOTENT_enum_value = 2 +) + // Names for google.protobuf.UninterpretedOption. const ( UninterpretedOption_message_name protoreflect.Name = "UninterpretedOption" @@ -909,36 +1005,79 @@ const ( FeatureSet_FieldPresence_enum_name = "FieldPresence" ) +// Enum values for google.protobuf.FeatureSet.FieldPresence. +const ( + FeatureSet_FIELD_PRESENCE_UNKNOWN_enum_value = 0 + FeatureSet_EXPLICIT_enum_value = 1 + FeatureSet_IMPLICIT_enum_value = 2 + FeatureSet_LEGACY_REQUIRED_enum_value = 3 +) + // Full and short names for google.protobuf.FeatureSet.EnumType. const ( FeatureSet_EnumType_enum_fullname = "google.protobuf.FeatureSet.EnumType" FeatureSet_EnumType_enum_name = "EnumType" ) +// Enum values for google.protobuf.FeatureSet.EnumType. +const ( + FeatureSet_ENUM_TYPE_UNKNOWN_enum_value = 0 + FeatureSet_OPEN_enum_value = 1 + FeatureSet_CLOSED_enum_value = 2 +) + // Full and short names for google.protobuf.FeatureSet.RepeatedFieldEncoding. const ( FeatureSet_RepeatedFieldEncoding_enum_fullname = "google.protobuf.FeatureSet.RepeatedFieldEncoding" FeatureSet_RepeatedFieldEncoding_enum_name = "RepeatedFieldEncoding" ) +// Enum values for google.protobuf.FeatureSet.RepeatedFieldEncoding. +const ( + FeatureSet_REPEATED_FIELD_ENCODING_UNKNOWN_enum_value = 0 + FeatureSet_PACKED_enum_value = 1 + FeatureSet_EXPANDED_enum_value = 2 +) + // Full and short names for google.protobuf.FeatureSet.Utf8Validation. const ( FeatureSet_Utf8Validation_enum_fullname = "google.protobuf.FeatureSet.Utf8Validation" FeatureSet_Utf8Validation_enum_name = "Utf8Validation" ) +// Enum values for google.protobuf.FeatureSet.Utf8Validation. +const ( + FeatureSet_UTF8_VALIDATION_UNKNOWN_enum_value = 0 + FeatureSet_VERIFY_enum_value = 2 + FeatureSet_NONE_enum_value = 3 +) + // Full and short names for google.protobuf.FeatureSet.MessageEncoding. const ( FeatureSet_MessageEncoding_enum_fullname = "google.protobuf.FeatureSet.MessageEncoding" FeatureSet_MessageEncoding_enum_name = "MessageEncoding" ) +// Enum values for google.protobuf.FeatureSet.MessageEncoding. +const ( + FeatureSet_MESSAGE_ENCODING_UNKNOWN_enum_value = 0 + FeatureSet_LENGTH_PREFIXED_enum_value = 1 + FeatureSet_DELIMITED_enum_value = 2 +) + // Full and short names for google.protobuf.FeatureSet.JsonFormat. const ( FeatureSet_JsonFormat_enum_fullname = "google.protobuf.FeatureSet.JsonFormat" FeatureSet_JsonFormat_enum_name = "JsonFormat" ) +// Enum values for google.protobuf.FeatureSet.JsonFormat. +const ( + FeatureSet_JSON_FORMAT_UNKNOWN_enum_value = 0 + FeatureSet_ALLOW_enum_value = 1 + FeatureSet_LEGACY_BEST_EFFORT_enum_value = 2 +) + // Names for google.protobuf.FeatureSetDefaults. const ( FeatureSetDefaults_message_name protoreflect.Name = "FeatureSetDefaults" @@ -1085,3 +1224,10 @@ const ( GeneratedCodeInfo_Annotation_Semantic_enum_fullname = "google.protobuf.GeneratedCodeInfo.Annotation.Semantic" GeneratedCodeInfo_Annotation_Semantic_enum_name = "Semantic" ) + +// Enum values for google.protobuf.GeneratedCodeInfo.Annotation.Semantic. +const ( + GeneratedCodeInfo_Annotation_NONE_enum_value = 0 + GeneratedCodeInfo_Annotation_SET_enum_value = 1 + GeneratedCodeInfo_Annotation_ALIAS_enum_value = 2 +) diff --git a/vendor/google.golang.org/protobuf/internal/genid/go_features_gen.go b/vendor/google.golang.org/protobuf/internal/genid/go_features_gen.go new file mode 100644 index 000000000..fd9015e8e --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/genid/go_features_gen.go @@ -0,0 +1,31 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-protos. DO NOT EDIT. + +package genid + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" +) + +const File_reflect_protodesc_proto_go_features_proto = "reflect/protodesc/proto/go_features.proto" + +// Names for google.protobuf.GoFeatures. +const ( + GoFeatures_message_name protoreflect.Name = "GoFeatures" + GoFeatures_message_fullname protoreflect.FullName = "google.protobuf.GoFeatures" +) + +// Field names for google.protobuf.GoFeatures. +const ( + GoFeatures_LegacyUnmarshalJsonEnum_field_name protoreflect.Name = "legacy_unmarshal_json_enum" + + GoFeatures_LegacyUnmarshalJsonEnum_field_fullname protoreflect.FullName = "google.protobuf.GoFeatures.legacy_unmarshal_json_enum" +) + +// Field numbers for google.protobuf.GoFeatures. +const ( + GoFeatures_LegacyUnmarshalJsonEnum_field_number protoreflect.FieldNumber = 1 +) diff --git a/vendor/google.golang.org/protobuf/internal/genid/struct_gen.go b/vendor/google.golang.org/protobuf/internal/genid/struct_gen.go index 1a38944b2..ad6f80c46 100644 --- a/vendor/google.golang.org/protobuf/internal/genid/struct_gen.go +++ b/vendor/google.golang.org/protobuf/internal/genid/struct_gen.go @@ -18,6 +18,11 @@ const ( NullValue_enum_name = "NullValue" ) +// Enum values for google.protobuf.NullValue. +const ( + NullValue_NULL_VALUE_enum_value = 0 +) + // Names for google.protobuf.Struct. const ( Struct_message_name protoreflect.Name = "Struct" diff --git a/vendor/google.golang.org/protobuf/internal/genid/type_gen.go b/vendor/google.golang.org/protobuf/internal/genid/type_gen.go index e0f75fea0..49bc73e25 100644 --- a/vendor/google.golang.org/protobuf/internal/genid/type_gen.go +++ b/vendor/google.golang.org/protobuf/internal/genid/type_gen.go @@ -18,6 +18,13 @@ const ( Syntax_enum_name = "Syntax" ) +// Enum values for google.protobuf.Syntax. +const ( + Syntax_SYNTAX_PROTO2_enum_value = 0 + Syntax_SYNTAX_PROTO3_enum_value = 1 + Syntax_SYNTAX_EDITIONS_enum_value = 2 +) + // Names for google.protobuf.Type. const ( Type_message_name protoreflect.Name = "Type" @@ -105,12 +112,43 @@ const ( Field_Kind_enum_name = "Kind" ) +// Enum values for google.protobuf.Field.Kind. +const ( + Field_TYPE_UNKNOWN_enum_value = 0 + Field_TYPE_DOUBLE_enum_value = 1 + Field_TYPE_FLOAT_enum_value = 2 + Field_TYPE_INT64_enum_value = 3 + Field_TYPE_UINT64_enum_value = 4 + Field_TYPE_INT32_enum_value = 5 + Field_TYPE_FIXED64_enum_value = 6 + Field_TYPE_FIXED32_enum_value = 7 + Field_TYPE_BOOL_enum_value = 8 + Field_TYPE_STRING_enum_value = 9 + Field_TYPE_GROUP_enum_value = 10 + Field_TYPE_MESSAGE_enum_value = 11 + Field_TYPE_BYTES_enum_value = 12 + Field_TYPE_UINT32_enum_value = 13 + Field_TYPE_ENUM_enum_value = 14 + Field_TYPE_SFIXED32_enum_value = 15 + Field_TYPE_SFIXED64_enum_value = 16 + Field_TYPE_SINT32_enum_value = 17 + Field_TYPE_SINT64_enum_value = 18 +) + // Full and short names for google.protobuf.Field.Cardinality. const ( Field_Cardinality_enum_fullname = "google.protobuf.Field.Cardinality" Field_Cardinality_enum_name = "Cardinality" ) +// Enum values for google.protobuf.Field.Cardinality. +const ( + Field_CARDINALITY_UNKNOWN_enum_value = 0 + Field_CARDINALITY_OPTIONAL_enum_value = 1 + Field_CARDINALITY_REQUIRED_enum_value = 2 + Field_CARDINALITY_REPEATED_enum_value = 3 +) + // Names for google.protobuf.Enum. const ( Enum_message_name protoreflect.Name = "Enum" diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_extension.go b/vendor/google.golang.org/protobuf/internal/impl/codec_extension.go index e74cefdc5..2b8f122c2 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/codec_extension.go +++ b/vendor/google.golang.org/protobuf/internal/impl/codec_extension.go @@ -21,26 +21,18 @@ type extensionFieldInfo struct { validation validationInfo } -var legacyExtensionFieldInfoCache sync.Map // map[protoreflect.ExtensionType]*extensionFieldInfo - func getExtensionFieldInfo(xt protoreflect.ExtensionType) *extensionFieldInfo { if xi, ok := xt.(*ExtensionInfo); ok { xi.lazyInit() return xi.info } - return legacyLoadExtensionFieldInfo(xt) -} - -// legacyLoadExtensionFieldInfo dynamically loads a *ExtensionInfo for xt. -func legacyLoadExtensionFieldInfo(xt protoreflect.ExtensionType) *extensionFieldInfo { - if xi, ok := legacyExtensionFieldInfoCache.Load(xt); ok { - return xi.(*extensionFieldInfo) - } - e := makeExtensionFieldInfo(xt.TypeDescriptor()) - if e, ok := legacyMessageTypeCache.LoadOrStore(xt, e); ok { - return e.(*extensionFieldInfo) - } - return e + // Ideally we'd cache the resulting *extensionFieldInfo so we don't have to + // recompute this metadata repeatedly. But without support for something like + // weak references, such a cache would pin temporary values (like dynamic + // extension types, constructed for the duration of a user request) to the + // heap forever, causing memory usage of the cache to grow unbounded. + // See discussion in https://github.com/golang/protobuf/issues/1521. + return makeExtensionFieldInfo(xt.TypeDescriptor()) } func makeExtensionFieldInfo(xd protoreflect.ExtensionDescriptor) *extensionFieldInfo { diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_tables.go b/vendor/google.golang.org/protobuf/internal/impl/codec_tables.go index 576dcf3aa..13077751e 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/codec_tables.go +++ b/vendor/google.golang.org/protobuf/internal/impl/codec_tables.go @@ -197,7 +197,7 @@ func fieldCoder(fd protoreflect.FieldDescriptor, ft reflect.Type) (*MessageInfo, return getMessageInfo(ft), makeMessageFieldCoder(fd, ft) case fd.Kind() == protoreflect.GroupKind: return getMessageInfo(ft), makeGroupFieldCoder(fd, ft) - case fd.Syntax() == protoreflect.Proto3 && fd.ContainingOneof() == nil: + case !fd.HasPresence() && fd.ContainingOneof() == nil: // Populated oneof fields always encode even if set to the zero value, // which normally are not encoded in proto3. switch fd.Kind() { diff --git a/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go b/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go index 5e736c60e..986322b19 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go +++ b/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go @@ -538,6 +538,6 @@ func isZero(v reflect.Value) bool { } return true default: - panic(&reflect.ValueError{"reflect.Value.IsZero", v.Kind()}) + panic(&reflect.ValueError{Method: "reflect.Value.IsZero", Kind: v.Kind()}) } } diff --git a/vendor/google.golang.org/protobuf/internal/strs/strings.go b/vendor/google.golang.org/protobuf/internal/strs/strings.go index 0b74e7658..a6e7df244 100644 --- a/vendor/google.golang.org/protobuf/internal/strs/strings.go +++ b/vendor/google.golang.org/protobuf/internal/strs/strings.go @@ -17,7 +17,7 @@ import ( // EnforceUTF8 reports whether to enforce strict UTF-8 validation. func EnforceUTF8(fd protoreflect.FieldDescriptor) bool { - if flags.ProtoLegacy { + if flags.ProtoLegacy || fd.Syntax() == protoreflect.Editions { if fd, ok := fd.(interface{ EnforceUTF8() bool }); ok { return fd.EnforceUTF8() } diff --git a/vendor/google.golang.org/protobuf/internal/version/version.go b/vendor/google.golang.org/protobuf/internal/version/version.go index d8f48faff..a50fcfb49 100644 --- a/vendor/google.golang.org/protobuf/internal/version/version.go +++ b/vendor/google.golang.org/protobuf/internal/version/version.go @@ -51,7 +51,7 @@ import ( // 10. Send out the CL for review and submit it. const ( Major = 1 - Minor = 32 + Minor = 33 Patch = 0 PreRelease = "" ) diff --git a/vendor/google.golang.org/protobuf/reflect/protodesc/desc_init.go b/vendor/google.golang.org/protobuf/reflect/protodesc/desc_init.go index aff6fd490..b3278163c 100644 --- a/vendor/google.golang.org/protobuf/reflect/protodesc/desc_init.go +++ b/vendor/google.golang.org/protobuf/reflect/protodesc/desc_init.go @@ -28,6 +28,7 @@ func (r descsByName) initEnumDeclarations(eds []*descriptorpb.EnumDescriptorProt opts = proto.Clone(opts).(*descriptorpb.EnumOptions) e.L2.Options = func() protoreflect.ProtoMessage { return opts } } + e.L1.EditionFeatures = mergeEditionFeatures(parent, ed.GetOptions().GetFeatures()) for _, s := range ed.GetReservedName() { e.L2.ReservedNames.List = append(e.L2.ReservedNames.List, protoreflect.Name(s)) } @@ -68,6 +69,9 @@ func (r descsByName) initMessagesDeclarations(mds []*descriptorpb.DescriptorProt if m.L0, err = r.makeBase(m, parent, md.GetName(), i, sb); err != nil { return nil, err } + if m.Base.L0.ParentFile.Syntax() == protoreflect.Editions { + m.L1.EditionFeatures = mergeEditionFeatures(parent, md.GetOptions().GetFeatures()) + } if opts := md.GetOptions(); opts != nil { opts = proto.Clone(opts).(*descriptorpb.MessageOptions) m.L2.Options = func() protoreflect.ProtoMessage { return opts } @@ -114,6 +118,27 @@ func (r descsByName) initMessagesDeclarations(mds []*descriptorpb.DescriptorProt return ms, nil } +// canBePacked returns whether the field can use packed encoding: +// https://protobuf.dev/programming-guides/encoding/#packed +func canBePacked(fd *descriptorpb.FieldDescriptorProto) bool { + if fd.GetLabel() != descriptorpb.FieldDescriptorProto_LABEL_REPEATED { + return false // not a repeated field + } + + switch protoreflect.Kind(fd.GetType()) { + case protoreflect.MessageKind, protoreflect.GroupKind: + return false // not a scalar type field + + case protoreflect.StringKind, protoreflect.BytesKind: + // string and bytes can explicitly not be declared as packed, + // see https://protobuf.dev/programming-guides/encoding/#packed + return false + + default: + return true + } +} + func (r descsByName) initFieldsFromDescriptorProto(fds []*descriptorpb.FieldDescriptorProto, parent protoreflect.Descriptor, sb *strs.Builder) (fs []filedesc.Field, err error) { fs = make([]filedesc.Field, len(fds)) // allocate up-front to ensure stable pointers for i, fd := range fds { @@ -139,12 +164,16 @@ func (r descsByName) initFieldsFromDescriptorProto(fds []*descriptorpb.FieldDesc } if f.Base.L0.ParentFile.Syntax() == protoreflect.Editions { - f.L1.Presence = resolveFeatureHasFieldPresence(f.Base.L0.ParentFile, fd) + f.L1.EditionFeatures = mergeEditionFeatures(parent, fd.GetOptions().GetFeatures()) + + if f.L1.EditionFeatures.IsLegacyRequired { + f.L1.Cardinality = protoreflect.Required + } // We reuse the existing field because the old option `[packed = // true]` is mutually exclusive with the editions feature. - if fd.GetLabel() == descriptorpb.FieldDescriptorProto_LABEL_REPEATED { + if canBePacked(fd) { f.L1.HasPacked = true - f.L1.IsPacked = resolveFeatureRepeatedFieldEncodingPacked(f.Base.L0.ParentFile, fd) + f.L1.IsPacked = f.L1.EditionFeatures.IsPacked } // We pretend this option is always explicitly set because the only @@ -155,9 +184,9 @@ func (r descsByName) initFieldsFromDescriptorProto(fds []*descriptorpb.FieldDesc // requested from the descriptor). // In proto2/proto3 syntax HasEnforceUTF8 might be false. f.L1.HasEnforceUTF8 = true - f.L1.EnforceUTF8 = resolveFeatureEnforceUTF8(f.Base.L0.ParentFile, fd) + f.L1.EnforceUTF8 = f.L1.EditionFeatures.IsUTF8Validated - if f.L1.Kind == protoreflect.MessageKind && resolveFeatureDelimitedEncoding(f.Base.L0.ParentFile, fd) { + if f.L1.Kind == protoreflect.MessageKind && f.L1.EditionFeatures.IsDelimitedEncoded { f.L1.Kind = protoreflect.GroupKind } } @@ -175,6 +204,9 @@ func (r descsByName) initOneofsFromDescriptorProto(ods []*descriptorpb.OneofDesc if opts := od.GetOptions(); opts != nil { opts = proto.Clone(opts).(*descriptorpb.OneofOptions) o.L1.Options = func() protoreflect.ProtoMessage { return opts } + if parent.Syntax() == protoreflect.Editions { + o.L1.EditionFeatures = mergeEditionFeatures(parent, opts.GetFeatures()) + } } } return os, nil diff --git a/vendor/google.golang.org/protobuf/reflect/protodesc/desc_resolve.go b/vendor/google.golang.org/protobuf/reflect/protodesc/desc_resolve.go index 27d7e3501..254ca5854 100644 --- a/vendor/google.golang.org/protobuf/reflect/protodesc/desc_resolve.go +++ b/vendor/google.golang.org/protobuf/reflect/protodesc/desc_resolve.go @@ -276,8 +276,8 @@ func unmarshalDefault(s string, fd protoreflect.FieldDescriptor, allowUnresolvab } else if err != nil { return v, ev, err } - if fd.Syntax() == protoreflect.Proto3 { - return v, ev, errors.New("cannot be specified under proto3 semantics") + if !fd.HasPresence() { + return v, ev, errors.New("cannot be specified with implicit field presence") } if fd.Kind() == protoreflect.MessageKind || fd.Kind() == protoreflect.GroupKind || fd.Cardinality() == protoreflect.Repeated { return v, ev, errors.New("cannot be specified on composite types") diff --git a/vendor/google.golang.org/protobuf/reflect/protodesc/desc_validate.go b/vendor/google.golang.org/protobuf/reflect/protodesc/desc_validate.go index 9af1d5648..e4dcaf876 100644 --- a/vendor/google.golang.org/protobuf/reflect/protodesc/desc_validate.go +++ b/vendor/google.golang.org/protobuf/reflect/protodesc/desc_validate.go @@ -107,7 +107,7 @@ func validateMessageDeclarations(ms []filedesc.Message, mds []*descriptorpb.Desc if isMessageSet && !flags.ProtoLegacy { return errors.New("message %q is a MessageSet, which is a legacy proto1 feature that is no longer supported", m.FullName()) } - if isMessageSet && (m.Syntax() != protoreflect.Proto2 || m.Fields().Len() > 0 || m.ExtensionRanges().Len() == 0) { + if isMessageSet && (m.Syntax() == protoreflect.Proto3 || m.Fields().Len() > 0 || m.ExtensionRanges().Len() == 0) { return errors.New("message %q is an invalid proto1 MessageSet", m.FullName()) } if m.Syntax() == protoreflect.Proto3 { @@ -314,8 +314,8 @@ func checkValidGroup(fd protoreflect.FieldDescriptor) error { switch { case fd.Kind() != protoreflect.GroupKind: return nil - case fd.Syntax() != protoreflect.Proto2: - return errors.New("invalid under proto2 semantics") + case fd.Syntax() == protoreflect.Proto3: + return errors.New("invalid under proto3 semantics") case md == nil || md.IsPlaceholder(): return errors.New("message must be resolvable") case fd.FullName().Parent() != md.FullName().Parent(): diff --git a/vendor/google.golang.org/protobuf/reflect/protodesc/editions.go b/vendor/google.golang.org/protobuf/reflect/protodesc/editions.go index 7352926ca..2a6b29d17 100644 --- a/vendor/google.golang.org/protobuf/reflect/protodesc/editions.go +++ b/vendor/google.golang.org/protobuf/reflect/protodesc/editions.go @@ -5,14 +5,16 @@ package protodesc import ( - _ "embed" "fmt" "os" "sync" + "google.golang.org/protobuf/internal/editiondefaults" "google.golang.org/protobuf/internal/filedesc" "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protoreflect" "google.golang.org/protobuf/types/descriptorpb" + gofeaturespb "google.golang.org/protobuf/types/gofeaturespb" ) const ( @@ -20,14 +22,12 @@ const ( SupportedEditionsMaximum = descriptorpb.Edition_EDITION_2023 ) -//go:embed editions_defaults.binpb -var binaryEditionDefaults []byte var defaults = &descriptorpb.FeatureSetDefaults{} var defaultsCacheMu sync.Mutex var defaultsCache = make(map[filedesc.Edition]*descriptorpb.FeatureSet) func init() { - err := proto.Unmarshal(binaryEditionDefaults, defaults) + err := proto.Unmarshal(editiondefaults.Defaults, defaults) if err != nil { fmt.Fprintf(os.Stderr, "unmarshal editions defaults: %v\n", err) os.Exit(1) @@ -83,95 +83,66 @@ func getFeatureSetFor(ed filedesc.Edition) *descriptorpb.FeatureSet { return fs } -func resolveFeatureHasFieldPresence(fileDesc *filedesc.File, fieldDesc *descriptorpb.FieldDescriptorProto) bool { - fs := fieldDesc.GetOptions().GetFeatures() - if fs == nil || fs.FieldPresence == nil { - return fileDesc.L1.EditionFeatures.IsFieldPresence +// mergeEditionFeatures merges the parent and child feature sets. This function +// should be used when initializing Go descriptors from descriptor protos which +// is why the parent is a filedesc.EditionsFeatures (Go representation) while +// the child is a descriptorproto.FeatureSet (protoc representation). +// Any feature set by the child overwrites what is set by the parent. +func mergeEditionFeatures(parentDesc protoreflect.Descriptor, child *descriptorpb.FeatureSet) filedesc.EditionFeatures { + var parentFS filedesc.EditionFeatures + switch p := parentDesc.(type) { + case *filedesc.File: + parentFS = p.L1.EditionFeatures + case *filedesc.Message: + parentFS = p.L1.EditionFeatures + default: + panic(fmt.Sprintf("unknown parent type %T", parentDesc)) } - return fs.GetFieldPresence() == descriptorpb.FeatureSet_LEGACY_REQUIRED || - fs.GetFieldPresence() == descriptorpb.FeatureSet_EXPLICIT -} - -func resolveFeatureRepeatedFieldEncodingPacked(fileDesc *filedesc.File, fieldDesc *descriptorpb.FieldDescriptorProto) bool { - fs := fieldDesc.GetOptions().GetFeatures() - if fs == nil || fs.RepeatedFieldEncoding == nil { - return fileDesc.L1.EditionFeatures.IsPacked + if child == nil { + return parentFS } - return fs.GetRepeatedFieldEncoding() == descriptorpb.FeatureSet_PACKED -} - -func resolveFeatureEnforceUTF8(fileDesc *filedesc.File, fieldDesc *descriptorpb.FieldDescriptorProto) bool { - fs := fieldDesc.GetOptions().GetFeatures() - if fs == nil || fs.Utf8Validation == nil { - return fileDesc.L1.EditionFeatures.IsUTF8Validated + if fp := child.FieldPresence; fp != nil { + parentFS.IsFieldPresence = *fp == descriptorpb.FeatureSet_LEGACY_REQUIRED || + *fp == descriptorpb.FeatureSet_EXPLICIT + parentFS.IsLegacyRequired = *fp == descriptorpb.FeatureSet_LEGACY_REQUIRED } - return fs.GetUtf8Validation() == descriptorpb.FeatureSet_VERIFY -} - -func resolveFeatureDelimitedEncoding(fileDesc *filedesc.File, fieldDesc *descriptorpb.FieldDescriptorProto) bool { - fs := fieldDesc.GetOptions().GetFeatures() - if fs == nil || fs.MessageEncoding == nil { - return fileDesc.L1.EditionFeatures.IsDelimitedEncoded + if et := child.EnumType; et != nil { + parentFS.IsOpenEnum = *et == descriptorpb.FeatureSet_OPEN } - return fs.GetMessageEncoding() == descriptorpb.FeatureSet_DELIMITED -} -// initFileDescFromFeatureSet initializes editions related fields in fd based -// on fs. If fs is nil it is assumed to be an empty featureset and all fields -// will be initialized with the appropriate default. fd.L1.Edition must be set -// before calling this function. -func initFileDescFromFeatureSet(fd *filedesc.File, fs *descriptorpb.FeatureSet) { - dfs := getFeatureSetFor(fd.L1.Edition) - if fs == nil { - fs = &descriptorpb.FeatureSet{} + if rfe := child.RepeatedFieldEncoding; rfe != nil { + parentFS.IsPacked = *rfe == descriptorpb.FeatureSet_PACKED } - var fieldPresence descriptorpb.FeatureSet_FieldPresence - if fp := fs.FieldPresence; fp != nil { - fieldPresence = *fp - } else { - fieldPresence = *dfs.FieldPresence - } - fd.L1.EditionFeatures.IsFieldPresence = fieldPresence == descriptorpb.FeatureSet_LEGACY_REQUIRED || - fieldPresence == descriptorpb.FeatureSet_EXPLICIT - - var enumType descriptorpb.FeatureSet_EnumType - if et := fs.EnumType; et != nil { - enumType = *et - } else { - enumType = *dfs.EnumType + if utf8val := child.Utf8Validation; utf8val != nil { + parentFS.IsUTF8Validated = *utf8val == descriptorpb.FeatureSet_VERIFY } - fd.L1.EditionFeatures.IsOpenEnum = enumType == descriptorpb.FeatureSet_OPEN - var respeatedFieldEncoding descriptorpb.FeatureSet_RepeatedFieldEncoding - if rfe := fs.RepeatedFieldEncoding; rfe != nil { - respeatedFieldEncoding = *rfe - } else { - respeatedFieldEncoding = *dfs.RepeatedFieldEncoding + if me := child.MessageEncoding; me != nil { + parentFS.IsDelimitedEncoded = *me == descriptorpb.FeatureSet_DELIMITED } - fd.L1.EditionFeatures.IsPacked = respeatedFieldEncoding == descriptorpb.FeatureSet_PACKED - var isUTF8Validated descriptorpb.FeatureSet_Utf8Validation - if utf8val := fs.Utf8Validation; utf8val != nil { - isUTF8Validated = *utf8val - } else { - isUTF8Validated = *dfs.Utf8Validation + if jf := child.JsonFormat; jf != nil { + parentFS.IsJSONCompliant = *jf == descriptorpb.FeatureSet_ALLOW } - fd.L1.EditionFeatures.IsUTF8Validated = isUTF8Validated == descriptorpb.FeatureSet_VERIFY - var messageEncoding descriptorpb.FeatureSet_MessageEncoding - if me := fs.MessageEncoding; me != nil { - messageEncoding = *me - } else { - messageEncoding = *dfs.MessageEncoding + if goFeatures, ok := proto.GetExtension(child, gofeaturespb.E_Go).(*gofeaturespb.GoFeatures); ok && goFeatures != nil { + if luje := goFeatures.LegacyUnmarshalJsonEnum; luje != nil { + parentFS.GenerateLegacyUnmarshalJSON = *luje + } } - fd.L1.EditionFeatures.IsDelimitedEncoded = messageEncoding == descriptorpb.FeatureSet_DELIMITED - var jsonFormat descriptorpb.FeatureSet_JsonFormat - if jf := fs.JsonFormat; jf != nil { - jsonFormat = *jf - } else { - jsonFormat = *dfs.JsonFormat - } - fd.L1.EditionFeatures.IsJSONCompliant = jsonFormat == descriptorpb.FeatureSet_ALLOW + return parentFS +} + +// initFileDescFromFeatureSet initializes editions related fields in fd based +// on fs. If fs is nil it is assumed to be an empty featureset and all fields +// will be initialized with the appropriate default. fd.L1.Edition must be set +// before calling this function. +func initFileDescFromFeatureSet(fd *filedesc.File, fs *descriptorpb.FeatureSet) { + dfs := getFeatureSetFor(fd.L1.Edition) + // initialize the featureset with the defaults + fd.L1.EditionFeatures = mergeEditionFeatures(fd, dfs) + // overwrite any options explicitly specified + fd.L1.EditionFeatures = mergeEditionFeatures(fd, fs) } diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/proto.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/proto.go index ec6572dfd..00b01fbd8 100644 --- a/vendor/google.golang.org/protobuf/reflect/protoreflect/proto.go +++ b/vendor/google.golang.org/protobuf/reflect/protoreflect/proto.go @@ -175,6 +175,8 @@ func (s Syntax) String() string { return "proto2" case Proto3: return "proto3" + case Editions: + return "editions" default: return fmt.Sprintf("", s) } diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go index 0c045db6a..7dcc2ff09 100644 --- a/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go +++ b/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go @@ -160,8 +160,6 @@ func (p *SourcePath) appendFileOptions(b []byte) []byte { b = p.appendSingularField(b, "java_generic_services", nil) case 18: b = p.appendSingularField(b, "py_generic_services", nil) - case 42: - b = p.appendSingularField(b, "php_generic_services", nil) case 23: b = p.appendSingularField(b, "deprecated", nil) case 31: diff --git a/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go b/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go index 38daa858d..78624cf60 100644 --- a/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go +++ b/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go @@ -64,6 +64,7 @@ const ( // should not be depended on, but they will always be time-ordered for easy // comparison. Edition_EDITION_2023 Edition = 1000 + Edition_EDITION_2024 Edition = 1001 // Placeholder editions for testing feature resolution. These should not be // used or relyed on outside of tests. Edition_EDITION_1_TEST_ONLY Edition = 1 @@ -71,31 +72,39 @@ const ( Edition_EDITION_99997_TEST_ONLY Edition = 99997 Edition_EDITION_99998_TEST_ONLY Edition = 99998 Edition_EDITION_99999_TEST_ONLY Edition = 99999 + // Placeholder for specifying unbounded edition support. This should only + // ever be used by plugins that can expect to never require any changes to + // support a new edition. + Edition_EDITION_MAX Edition = 2147483647 ) // Enum value maps for Edition. var ( Edition_name = map[int32]string{ - 0: "EDITION_UNKNOWN", - 998: "EDITION_PROTO2", - 999: "EDITION_PROTO3", - 1000: "EDITION_2023", - 1: "EDITION_1_TEST_ONLY", - 2: "EDITION_2_TEST_ONLY", - 99997: "EDITION_99997_TEST_ONLY", - 99998: "EDITION_99998_TEST_ONLY", - 99999: "EDITION_99999_TEST_ONLY", + 0: "EDITION_UNKNOWN", + 998: "EDITION_PROTO2", + 999: "EDITION_PROTO3", + 1000: "EDITION_2023", + 1001: "EDITION_2024", + 1: "EDITION_1_TEST_ONLY", + 2: "EDITION_2_TEST_ONLY", + 99997: "EDITION_99997_TEST_ONLY", + 99998: "EDITION_99998_TEST_ONLY", + 99999: "EDITION_99999_TEST_ONLY", + 2147483647: "EDITION_MAX", } Edition_value = map[string]int32{ "EDITION_UNKNOWN": 0, "EDITION_PROTO2": 998, "EDITION_PROTO3": 999, "EDITION_2023": 1000, + "EDITION_2024": 1001, "EDITION_1_TEST_ONLY": 1, "EDITION_2_TEST_ONLY": 2, "EDITION_99997_TEST_ONLY": 99997, "EDITION_99998_TEST_ONLY": 99998, "EDITION_99999_TEST_ONLY": 99999, + "EDITION_MAX": 2147483647, } ) @@ -954,21 +963,21 @@ type FeatureSet_Utf8Validation int32 const ( FeatureSet_UTF8_VALIDATION_UNKNOWN FeatureSet_Utf8Validation = 0 - FeatureSet_NONE FeatureSet_Utf8Validation = 1 FeatureSet_VERIFY FeatureSet_Utf8Validation = 2 + FeatureSet_NONE FeatureSet_Utf8Validation = 3 ) // Enum value maps for FeatureSet_Utf8Validation. var ( FeatureSet_Utf8Validation_name = map[int32]string{ 0: "UTF8_VALIDATION_UNKNOWN", - 1: "NONE", 2: "VERIFY", + 3: "NONE", } FeatureSet_Utf8Validation_value = map[string]int32{ "UTF8_VALIDATION_UNKNOWN": 0, - "NONE": 1, "VERIFY": 2, + "NONE": 3, } ) @@ -1643,12 +1652,12 @@ type FieldDescriptorProto struct { // If true, this is a proto3 "optional". When a proto3 field is optional, it // tracks presence regardless of field type. // - // When proto3_optional is true, this field must be belong to a oneof to - // signal to old proto3 clients that presence is tracked for this field. This - // oneof is known as a "synthetic" oneof, and this field must be its sole - // member (each proto3 optional field gets its own synthetic oneof). Synthetic - // oneofs exist in the descriptor only, and do not generate any API. Synthetic - // oneofs must be ordered after all "real" oneofs. + // When proto3_optional is true, this field must belong to a oneof to signal + // to old proto3 clients that presence is tracked for this field. This oneof + // is known as a "synthetic" oneof, and this field must be its sole member + // (each proto3 optional field gets its own synthetic oneof). Synthetic oneofs + // exist in the descriptor only, and do not generate any API. Synthetic oneofs + // must be ordered after all "real" oneofs. // // For message fields, proto3_optional doesn't create any semantic change, // since non-repeated message fields always track presence. However it still @@ -2195,7 +2204,6 @@ type FileOptions struct { CcGenericServices *bool `protobuf:"varint,16,opt,name=cc_generic_services,json=ccGenericServices,def=0" json:"cc_generic_services,omitempty"` JavaGenericServices *bool `protobuf:"varint,17,opt,name=java_generic_services,json=javaGenericServices,def=0" json:"java_generic_services,omitempty"` PyGenericServices *bool `protobuf:"varint,18,opt,name=py_generic_services,json=pyGenericServices,def=0" json:"py_generic_services,omitempty"` - PhpGenericServices *bool `protobuf:"varint,42,opt,name=php_generic_services,json=phpGenericServices,def=0" json:"php_generic_services,omitempty"` // Is this file deprecated? // Depending on the target platform, this can emit Deprecated annotations // for everything in the file, or it will be completely ignored; in the very @@ -2244,7 +2252,6 @@ const ( Default_FileOptions_CcGenericServices = bool(false) Default_FileOptions_JavaGenericServices = bool(false) Default_FileOptions_PyGenericServices = bool(false) - Default_FileOptions_PhpGenericServices = bool(false) Default_FileOptions_Deprecated = bool(false) Default_FileOptions_CcEnableArenas = bool(true) ) @@ -2352,13 +2359,6 @@ func (x *FileOptions) GetPyGenericServices() bool { return Default_FileOptions_PyGenericServices } -func (x *FileOptions) GetPhpGenericServices() bool { - if x != nil && x.PhpGenericServices != nil { - return *x.PhpGenericServices - } - return Default_FileOptions_PhpGenericServices -} - func (x *FileOptions) GetDeprecated() bool { if x != nil && x.Deprecated != nil { return *x.Deprecated @@ -2472,10 +2472,6 @@ type MessageOptions struct { // for the message, or it will be completely ignored; in the very least, // this is a formalization for deprecating messages. Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"` - // NOTE: Do not set the option in .proto files. Always use the maps syntax - // instead. The option should only be implicitly set by the proto compiler - // parser. - // // Whether the message is an automatically generated map entry type for the // maps field. // @@ -2496,6 +2492,10 @@ type MessageOptions struct { // use a native map in the target language to hold the keys and values. // The reflection APIs in such implementations still need to work as // if the field is a repeated message field. + // + // NOTE: Do not set the option in .proto files. Always use the maps syntax + // instead. The option should only be implicitly set by the proto compiler + // parser. MapEntry *bool `protobuf:"varint,7,opt,name=map_entry,json=mapEntry" json:"map_entry,omitempty"` // Enable the legacy handling of JSON field name conflicts. This lowercases // and strips underscored from the fields before comparison in proto3 only. @@ -2655,19 +2655,11 @@ type FieldOptions struct { // call from multiple threads concurrently, while non-const methods continue // to require exclusive access. // - // Note that implementations may choose not to check required fields within - // a lazy sub-message. That is, calling IsInitialized() on the outer message - // may return true even if the inner message has missing required fields. - // This is necessary because otherwise the inner message would have to be - // parsed in order to perform the check, defeating the purpose of lazy - // parsing. An implementation which chooses not to check required fields - // must be consistent about it. That is, for any particular sub-message, the - // implementation must either *always* check its required fields, or *never* - // check its required fields, regardless of whether or not the message has - // been parsed. - // - // As of May 2022, lazy verifies the contents of the byte stream during - // parsing. An invalid byte stream will cause the overall parsing to fail. + // Note that lazy message fields are still eagerly verified to check + // ill-formed wireformat or missing required fields. Calling IsInitialized() + // on the outer message would fail if the inner message has missing required + // fields. Failed verification would result in parsing failure (except when + // uninitialized messages are acceptable). Lazy *bool `protobuf:"varint,5,opt,name=lazy,def=0" json:"lazy,omitempty"` // unverified_lazy does no correctness checks on the byte stream. This should // only be used where lazy with verification is prohibitive for performance @@ -4104,7 +4096,7 @@ type SourceCodeInfo_Location struct { // location. // // Each element is a field number or an index. They form a path from - // the root FileDescriptorProto to the place where the definition occurs. + // the root FileDescriptorProto to the place where the definition appears. // For example, this path: // // [ 4, 3, 2, 7, 1 ] @@ -4451,7 +4443,7 @@ var file_google_protobuf_descriptor_proto_rawDesc = []byte{ 0x1a, 0x37, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, 0xc7, 0x04, 0x0a, 0x15, 0x45, 0x78, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, 0xcc, 0x04, 0x0a, 0x15, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, @@ -4468,337 +4460,355 @@ var file_google_protobuf_descriptor_proto_rawDesc = []byte{ 0x75, 0x72, 0x65, 0x73, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x73, 0x12, 0x68, 0x0a, 0x0c, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x73, 0x12, 0x6d, 0x0a, 0x0c, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x38, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x3a, 0x0a, 0x55, 0x4e, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x45, 0x44, 0x52, 0x0c, 0x76, - 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x94, 0x01, 0x0a, 0x0b, - 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6e, 0x75, 0x6d, - 0x62, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, - 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4a, 0x04, 0x08, 0x04, - 0x10, 0x05, 0x22, 0x34, 0x0a, 0x11, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x44, 0x45, 0x43, 0x4c, 0x41, - 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x55, 0x4e, 0x56, 0x45, - 0x52, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x01, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, - 0x80, 0x80, 0x02, 0x22, 0xc1, 0x06, 0x0a, 0x14, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, - 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, - 0x61, 0x62, 0x65, 0x6c, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x3e, 0x0a, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, - 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, - 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x78, 0x74, 0x65, - 0x6e, 0x64, 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x78, 0x74, 0x65, - 0x6e, 0x64, 0x65, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, - 0x6f, 0x66, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, - 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1b, 0x0a, 0x09, 0x6a, 0x73, - 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6a, - 0x73, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x22, 0xb6, 0x02, 0x0a, 0x04, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x4f, 0x55, 0x42, 0x4c, - 0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x4c, 0x4f, 0x41, - 0x54, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x36, - 0x34, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x49, 0x4e, 0x54, - 0x36, 0x34, 0x10, 0x04, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x54, - 0x33, 0x32, 0x10, 0x05, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x49, 0x58, - 0x45, 0x44, 0x36, 0x34, 0x10, 0x06, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, - 0x49, 0x58, 0x45, 0x44, 0x33, 0x32, 0x10, 0x07, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x42, 0x4f, 0x4f, 0x4c, 0x10, 0x08, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x09, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x10, 0x0a, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x0b, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x0c, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x55, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x0d, 0x12, 0x0d, 0x0a, 0x09, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x10, 0x0e, 0x12, 0x11, 0x0a, 0x0d, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x53, 0x46, 0x49, 0x58, 0x45, 0x44, 0x33, 0x32, 0x10, 0x0f, 0x12, 0x11, 0x0a, - 0x0d, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x46, 0x49, 0x58, 0x45, 0x44, 0x36, 0x34, 0x10, 0x10, - 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, - 0x11, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x49, 0x4e, 0x54, 0x36, 0x34, - 0x10, 0x12, 0x22, 0x43, 0x0a, 0x05, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x0e, 0x4c, - 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x41, 0x4c, 0x10, 0x01, 0x12, - 0x12, 0x0a, 0x0e, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x52, 0x45, 0x50, 0x45, 0x41, 0x54, 0x45, - 0x44, 0x10, 0x03, 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x52, 0x45, 0x51, - 0x55, 0x49, 0x52, 0x45, 0x44, 0x10, 0x02, 0x22, 0x63, 0x0a, 0x14, 0x4f, 0x6e, 0x65, 0x6f, 0x66, - 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xe3, 0x02, 0x0a, - 0x13, 0x45, 0x6e, 0x75, 0x6d, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, + 0x65, 0x3a, 0x0a, 0x55, 0x4e, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x45, 0x44, 0x42, 0x03, 0x88, + 0x01, 0x02, 0x52, 0x0c, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x1a, 0x94, 0x01, 0x0a, 0x0b, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x75, 0x6c, 0x6c, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x22, 0x34, 0x0a, 0x11, 0x56, 0x65, 0x72, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0f, 0x0a, 0x0b, + 0x44, 0x45, 0x43, 0x4c, 0x41, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x00, 0x12, 0x0e, 0x0a, + 0x0a, 0x55, 0x4e, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x01, 0x2a, 0x09, 0x08, + 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x22, 0xc1, 0x06, 0x0a, 0x14, 0x46, 0x69, 0x65, + 0x6c, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x41, 0x0a, + 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, + 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, + 0x12, 0x3e, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, + 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, + 0x1b, 0x0a, 0x09, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x6a, 0x73, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x07, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x5f, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x22, 0xb6, + 0x02, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x44, 0x4f, 0x55, 0x42, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x55, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x04, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x05, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x46, 0x49, 0x58, 0x45, 0x44, 0x36, 0x34, 0x10, 0x06, 0x12, 0x10, 0x0a, 0x0c, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x46, 0x49, 0x58, 0x45, 0x44, 0x33, 0x32, 0x10, 0x07, 0x12, 0x0d, 0x0a, + 0x09, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x4f, 0x4f, 0x4c, 0x10, 0x08, 0x12, 0x0f, 0x0a, 0x0b, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x09, 0x12, 0x0e, 0x0a, + 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x10, 0x0a, 0x12, 0x10, 0x0a, + 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x0b, 0x12, + 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x0c, 0x12, + 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x0d, + 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x10, 0x0e, 0x12, + 0x11, 0x0a, 0x0d, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x46, 0x49, 0x58, 0x45, 0x44, 0x33, 0x32, + 0x10, 0x0f, 0x12, 0x11, 0x0a, 0x0d, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x46, 0x49, 0x58, 0x45, + 0x44, 0x36, 0x34, 0x10, 0x10, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x49, + 0x4e, 0x54, 0x33, 0x32, 0x10, 0x11, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, + 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x12, 0x22, 0x43, 0x0a, 0x05, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, + 0x41, 0x4c, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x52, 0x45, + 0x50, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0x03, 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x41, 0x42, 0x45, + 0x4c, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x44, 0x10, 0x02, 0x22, 0x63, 0x0a, 0x14, + 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, - 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x5d, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x72, 0x61, - 0x6e, 0x67, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, - 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x61, 0x6e, 0x67, - 0x65, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, - 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x3b, 0x0a, 0x11, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x65, - 0x6e, 0x64, 0x22, 0x83, 0x01, 0x0a, 0x18, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x3b, 0x0a, 0x07, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4f, 0x6e, 0x65, 0x6f, + 0x66, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x22, 0xe3, 0x02, 0x0a, 0x13, 0x45, 0x6e, 0x75, 0x6d, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xa7, 0x01, 0x0a, 0x16, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, - 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, - 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, - 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x39, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x22, 0x89, 0x02, 0x0a, 0x15, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x44, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x1f, 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x38, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x0a, 0x10, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0f, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x30, 0x0a, 0x10, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0f, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x22, 0xca, - 0x09, 0x0a, 0x0b, 0x46, 0x69, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x21, - 0x0a, 0x0c, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6a, 0x61, 0x76, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, - 0x65, 0x12, 0x30, 0x0a, 0x14, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x12, 0x6a, 0x61, 0x76, 0x61, 0x4f, 0x75, 0x74, 0x65, 0x72, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x13, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x6d, 0x75, 0x6c, 0x74, - 0x69, 0x70, 0x6c, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, - 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x11, 0x6a, 0x61, 0x76, 0x61, 0x4d, 0x75, 0x6c, - 0x74, 0x69, 0x70, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x44, 0x0a, 0x1d, 0x6a, 0x61, - 0x76, 0x61, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x65, 0x71, 0x75, 0x61, - 0x6c, 0x73, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x14, 0x20, 0x01, 0x28, - 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x19, 0x6a, 0x61, 0x76, 0x61, 0x47, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x45, 0x71, 0x75, 0x61, 0x6c, 0x73, 0x41, 0x6e, 0x64, 0x48, 0x61, 0x73, 0x68, - 0x12, 0x3a, 0x0a, 0x16, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x75, 0x74, 0x66, 0x38, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x08, - 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x13, 0x6a, 0x61, 0x76, 0x61, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x74, 0x66, 0x38, 0x12, 0x53, 0x0a, 0x0c, - 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x3a, 0x05, 0x53, - 0x50, 0x45, 0x45, 0x44, 0x52, 0x0b, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x46, 0x6f, - 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x6f, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x6f, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, - 0x12, 0x35, 0x0a, 0x13, 0x63, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, - 0x61, 0x6c, 0x73, 0x65, 0x52, 0x11, 0x63, 0x63, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x15, 0x6a, 0x61, 0x76, 0x61, 0x5f, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, - 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x13, 0x6a, - 0x61, 0x76, 0x61, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x12, 0x35, 0x0a, 0x13, 0x70, 0x79, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, - 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x3a, - 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x11, 0x70, 0x79, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, - 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x14, 0x70, 0x68, 0x70, - 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x12, - 0x70, 0x68, 0x70, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, - 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, - 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x10, 0x63, 0x63, 0x5f, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x72, 0x65, 0x6e, 0x61, 0x73, 0x18, 0x1f, 0x20, - 0x01, 0x28, 0x08, 0x3a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x0e, 0x63, 0x63, 0x45, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x41, 0x72, 0x65, 0x6e, 0x61, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x62, 0x6a, - 0x63, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x24, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6f, 0x62, 0x6a, 0x63, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x50, - 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x73, 0x68, 0x61, 0x72, 0x70, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x25, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0f, 0x63, 0x73, 0x68, 0x61, 0x72, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x77, 0x69, 0x66, 0x74, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, - 0x18, 0x27, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x77, 0x69, 0x66, 0x74, 0x50, 0x72, 0x65, - 0x66, 0x69, 0x78, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x68, 0x70, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x28, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, - 0x68, 0x70, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x23, 0x0a, - 0x0d, 0x70, 0x68, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x29, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x68, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x70, 0x68, 0x70, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x2c, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x14, 0x70, 0x68, 0x70, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x75, 0x62, 0x79, - 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x72, 0x75, 0x62, 0x79, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x37, 0x0a, 0x08, 0x66, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x73, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, - 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, - 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, - 0x0a, 0x0c, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x09, - 0x0a, 0x05, 0x53, 0x50, 0x45, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x44, - 0x45, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x4c, 0x49, 0x54, 0x45, - 0x5f, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x03, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, - 0x80, 0x80, 0x80, 0x80, 0x02, 0x4a, 0x04, 0x08, 0x26, 0x10, 0x27, 0x22, 0xf4, 0x03, 0x0a, 0x0e, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3c, - 0x0a, 0x17, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x77, 0x69, - 0x72, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x3a, - 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x14, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, - 0x65, 0x74, 0x57, 0x69, 0x72, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x4c, 0x0a, 0x1f, - 0x6e, 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x5f, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x1c, 0x6e, 0x6f, - 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x6f, 0x72, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, - 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, - 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, - 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x70, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x56, - 0x0a, 0x26, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6c, 0x65, 0x67, - 0x61, 0x63, 0x79, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x63, - 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, - 0x18, 0x01, 0x52, 0x22, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x4c, 0x65, - 0x67, 0x61, 0x63, 0x79, 0x4a, 0x73, 0x6f, 0x6e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x6e, - 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x12, 0x37, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x53, 0x65, 0x74, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, - 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, - 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, + 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x36, + 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5d, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x64, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, - 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, - 0x80, 0x80, 0x80, 0x02, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, - 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x09, - 0x10, 0x0a, 0x22, 0xad, 0x0a, 0x0a, 0x0c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x41, 0x0a, 0x05, 0x63, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x43, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x52, - 0x05, 0x63, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x47, - 0x0a, 0x06, 0x6a, 0x73, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, + 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, + 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x3b, 0x0a, 0x11, 0x45, 0x6e, + 0x75, 0x6d, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, 0x83, 0x01, 0x0a, 0x18, 0x45, 0x6e, 0x75, 0x6d, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x12, 0x3b, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xa7, 0x01, + 0x0a, 0x16, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x06, + 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, + 0x65, 0x74, 0x68, 0x6f, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x39, 0x0a, 0x07, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x89, 0x02, 0x0a, 0x15, 0x4d, 0x65, 0x74, 0x68, + 0x6f, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x70, 0x75, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x38, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x30, 0x0a, 0x10, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, + 0x52, 0x0f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, + 0x67, 0x12, 0x30, 0x0a, 0x10, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, + 0x73, 0x65, 0x52, 0x0f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x69, 0x6e, 0x67, 0x22, 0x97, 0x09, 0x0a, 0x0b, 0x46, 0x69, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x70, 0x61, 0x63, 0x6b, + 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6a, 0x61, 0x76, 0x61, 0x50, + 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x6f, + 0x75, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x6a, 0x61, 0x76, 0x61, 0x4f, 0x75, 0x74, 0x65, 0x72, 0x43, + 0x6c, 0x61, 0x73, 0x73, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x13, 0x6a, 0x61, 0x76, 0x61, + 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x11, 0x6a, 0x61, + 0x76, 0x61, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, + 0x44, 0x0a, 0x1d, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x5f, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x73, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x68, 0x61, 0x73, 0x68, + 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x19, 0x6a, 0x61, 0x76, 0x61, + 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x45, 0x71, 0x75, 0x61, 0x6c, 0x73, 0x41, 0x6e, + 0x64, 0x48, 0x61, 0x73, 0x68, 0x12, 0x3a, 0x0a, 0x16, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x75, 0x74, 0x66, 0x38, 0x18, + 0x1b, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x13, 0x6a, 0x61, + 0x76, 0x61, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x74, 0x66, + 0x38, 0x12, 0x53, 0x0a, 0x0c, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x5f, 0x66, 0x6f, + 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x4d, 0x6f, + 0x64, 0x65, 0x3a, 0x05, 0x53, 0x50, 0x45, 0x45, 0x44, 0x52, 0x0b, 0x6f, 0x70, 0x74, 0x69, 0x6d, + 0x69, 0x7a, 0x65, 0x46, 0x6f, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x6f, 0x5f, 0x70, 0x61, 0x63, + 0x6b, 0x61, 0x67, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x6f, 0x50, 0x61, + 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x35, 0x0a, 0x13, 0x63, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x10, 0x20, 0x01, + 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x11, 0x63, 0x63, 0x47, 0x65, 0x6e, + 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x15, + 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, + 0x73, 0x65, 0x52, 0x13, 0x6a, 0x61, 0x76, 0x61, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x35, 0x0a, 0x13, 0x70, 0x79, 0x5f, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x12, + 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x11, 0x70, 0x79, 0x47, + 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x25, + 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x17, 0x20, 0x01, + 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, + 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x10, 0x63, 0x63, 0x5f, 0x65, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x5f, 0x61, 0x72, 0x65, 0x6e, 0x61, 0x73, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x08, 0x3a, + 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x0e, 0x63, 0x63, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, + 0x72, 0x65, 0x6e, 0x61, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x62, 0x6a, 0x63, 0x5f, 0x63, 0x6c, + 0x61, 0x73, 0x73, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x24, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0f, 0x6f, 0x62, 0x6a, 0x63, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, + 0x78, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x73, 0x68, 0x61, 0x72, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x25, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x73, 0x68, + 0x61, 0x72, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, + 0x73, 0x77, 0x69, 0x66, 0x74, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x27, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x73, 0x77, 0x69, 0x66, 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, + 0x28, 0x0a, 0x10, 0x70, 0x68, 0x70, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x70, 0x72, 0x65, + 0x66, 0x69, 0x78, 0x18, 0x28, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x68, 0x70, 0x43, 0x6c, + 0x61, 0x73, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x68, 0x70, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x70, 0x68, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x34, + 0x0a, 0x16, 0x70, 0x68, 0x70, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, + 0x70, 0x68, 0x70, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x75, 0x62, 0x79, 0x5f, 0x70, 0x61, 0x63, + 0x6b, 0x61, 0x67, 0x65, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x75, 0x62, 0x79, + 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x37, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x73, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, + 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, + 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, + 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x0a, 0x0c, 0x4f, 0x70, + 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, + 0x45, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x49, + 0x5a, 0x45, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x4c, 0x49, 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4e, + 0x54, 0x49, 0x4d, 0x45, 0x10, 0x03, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, + 0x02, 0x4a, 0x04, 0x08, 0x2a, 0x10, 0x2b, 0x4a, 0x04, 0x08, 0x26, 0x10, 0x27, 0x22, 0xf4, 0x03, + 0x0a, 0x0e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x3c, 0x0a, 0x17, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, + 0x77, 0x69, 0x72, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x14, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x53, 0x65, 0x74, 0x57, 0x69, 0x72, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x4c, + 0x0a, 0x1f, 0x6e, 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x5f, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6f, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x1c, + 0x6e, 0x6f, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x6f, 0x72, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x12, 0x25, 0x0a, 0x0a, + 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, + 0x74, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x70, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x56, 0x0a, 0x26, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6c, + 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, + 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, + 0x42, 0x02, 0x18, 0x01, 0x52, 0x22, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, + 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x4a, 0x73, 0x6f, 0x6e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x43, + 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x12, 0x37, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x73, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, + 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, + 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x09, 0x08, 0xe8, 0x07, + 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, + 0x10, 0x06, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x4a, 0x04, + 0x08, 0x09, 0x10, 0x0a, 0x22, 0xad, 0x0a, 0x0a, 0x0c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x41, 0x0a, 0x05, 0x63, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, + 0x47, 0x52, 0x05, 0x63, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x63, 0x6b, + 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, + 0x12, 0x47, 0x0a, 0x06, 0x6a, 0x73, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x4a, 0x53, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x09, 0x4a, 0x53, 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x41, + 0x4c, 0x52, 0x06, 0x6a, 0x73, 0x74, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x04, 0x6c, 0x61, 0x7a, + 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x04, + 0x6c, 0x61, 0x7a, 0x79, 0x12, 0x2e, 0x0a, 0x0f, 0x75, 0x6e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, + 0x65, 0x64, 0x5f, 0x6c, 0x61, 0x7a, 0x79, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, + 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0e, 0x75, 0x6e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, + 0x4c, 0x61, 0x7a, 0x79, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, + 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, + 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x04, 0x77, + 0x65, 0x61, 0x6b, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, + 0x52, 0x04, 0x77, 0x65, 0x61, 0x6b, 0x12, 0x28, 0x0a, 0x0c, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, + 0x72, 0x65, 0x64, 0x61, 0x63, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, + 0x6c, 0x73, 0x65, 0x52, 0x0b, 0x64, 0x65, 0x62, 0x75, 0x67, 0x52, 0x65, 0x64, 0x61, 0x63, 0x74, + 0x12, 0x4b, 0x0a, 0x09, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x09, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x48, 0x0a, + 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53, - 0x54, 0x79, 0x70, 0x65, 0x3a, 0x09, 0x4a, 0x53, 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x52, - 0x06, 0x6a, 0x73, 0x74, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x04, 0x6c, 0x61, 0x7a, 0x79, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x04, 0x6c, 0x61, - 0x7a, 0x79, 0x12, 0x2e, 0x0a, 0x0f, 0x75, 0x6e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, - 0x5f, 0x6c, 0x61, 0x7a, 0x79, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, - 0x73, 0x65, 0x52, 0x0e, 0x75, 0x6e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x4c, 0x61, - 0x7a, 0x79, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, - 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x04, 0x77, 0x65, 0x61, - 0x6b, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x04, - 0x77, 0x65, 0x61, 0x6b, 0x12, 0x28, 0x0a, 0x0c, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x72, 0x65, - 0x64, 0x61, 0x63, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, - 0x65, 0x52, 0x0b, 0x64, 0x65, 0x62, 0x75, 0x67, 0x52, 0x65, 0x64, 0x61, 0x63, 0x74, 0x12, 0x4b, - 0x0a, 0x09, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x07, + 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x12, 0x57, 0x0a, 0x10, 0x65, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x09, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x48, 0x0a, 0x07, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x07, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x73, 0x12, 0x57, 0x0a, 0x10, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x0f, 0x65, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x37, - 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x52, 0x08, 0x66, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x1a, 0x5a, 0x0a, 0x0e, 0x45, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x12, 0x32, 0x0a, 0x07, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, - 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2f, 0x0a, - 0x05, 0x43, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, - 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x43, 0x4f, 0x52, 0x44, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, - 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x50, 0x49, 0x45, 0x43, 0x45, 0x10, 0x02, 0x22, 0x35, - 0x0a, 0x06, 0x4a, 0x53, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x4a, 0x53, 0x5f, 0x4e, - 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4a, 0x53, 0x5f, 0x53, 0x54, - 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4a, 0x53, 0x5f, 0x4e, 0x55, 0x4d, - 0x42, 0x45, 0x52, 0x10, 0x02, 0x22, 0x55, 0x0a, 0x0f, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x15, 0x0a, 0x11, 0x52, 0x45, 0x54, 0x45, - 0x4e, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, - 0x15, 0x0a, 0x11, 0x52, 0x45, 0x54, 0x45, 0x4e, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x55, 0x4e, - 0x54, 0x49, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x52, 0x45, 0x54, 0x45, 0x4e, 0x54, - 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x10, 0x02, 0x22, 0x8c, 0x02, 0x0a, - 0x10, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x41, - 0x52, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x01, - 0x12, 0x1f, 0x0a, 0x1b, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x45, 0x58, 0x54, 0x45, 0x4e, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x41, 0x4e, 0x47, 0x45, 0x10, - 0x02, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x54, 0x41, - 0x52, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x49, 0x45, 0x4c, 0x44, 0x10, - 0x04, 0x12, 0x15, 0x0a, 0x11, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x4f, 0x4e, 0x45, 0x4f, 0x46, 0x10, 0x05, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x41, 0x52, 0x47, - 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x10, 0x06, 0x12, 0x1a, - 0x0a, 0x16, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, - 0x55, 0x4d, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x10, 0x07, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x41, - 0x52, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, - 0x45, 0x10, 0x08, 0x12, 0x16, 0x0a, 0x12, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x10, 0x09, 0x2a, 0x09, 0x08, 0xe8, 0x07, - 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x12, - 0x10, 0x13, 0x22, 0xac, 0x01, 0x0a, 0x0c, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x37, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x2e, 0x45, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, + 0x0f, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, + 0x12, 0x37, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x15, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x52, + 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, + 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x1a, 0x5a, 0x0a, 0x0e, 0x45, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x32, 0x0a, 0x07, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x07, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0x2f, 0x0a, 0x05, 0x43, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, + 0x4e, 0x47, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x43, 0x4f, 0x52, 0x44, 0x10, 0x01, 0x12, 0x10, + 0x0a, 0x0c, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x50, 0x49, 0x45, 0x43, 0x45, 0x10, 0x02, + 0x22, 0x35, 0x0a, 0x06, 0x4a, 0x53, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x4a, 0x53, + 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4a, 0x53, 0x5f, + 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4a, 0x53, 0x5f, 0x4e, + 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x02, 0x22, 0x55, 0x0a, 0x0f, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x15, 0x0a, 0x11, 0x52, 0x45, + 0x54, 0x45, 0x4e, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, + 0x00, 0x12, 0x15, 0x0a, 0x11, 0x52, 0x45, 0x54, 0x45, 0x4e, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, + 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x52, 0x45, 0x54, 0x45, + 0x4e, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x10, 0x02, 0x22, 0x8c, + 0x02, 0x0a, 0x10, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, + 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x49, 0x4c, 0x45, + 0x10, 0x01, 0x12, 0x1f, 0x0a, 0x1b, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x4e, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x41, 0x4e, 0x47, + 0x45, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, + 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x49, 0x45, 0x4c, + 0x44, 0x10, 0x04, 0x12, 0x15, 0x0a, 0x11, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x4f, 0x4e, 0x45, 0x4f, 0x46, 0x10, 0x05, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x41, + 0x52, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x10, 0x06, + 0x12, 0x1a, 0x0a, 0x16, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x10, 0x07, 0x12, 0x17, 0x0a, 0x13, + 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, + 0x49, 0x43, 0x45, 0x10, 0x08, 0x12, 0x16, 0x0a, 0x12, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x10, 0x09, 0x2a, 0x09, 0x08, + 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, + 0x08, 0x12, 0x10, 0x13, 0x22, 0xac, 0x01, 0x0a, 0x0c, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x4f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x37, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x53, 0x65, 0x74, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x58, + 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, + 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, + 0x80, 0x80, 0x02, 0x22, 0xd1, 0x02, 0x0a, 0x0b, 0x45, 0x6e, 0x75, 0x6d, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x61, 0x6c, 0x69, + 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x41, + 0x6c, 0x69, 0x61, 0x73, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, + 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, + 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x56, 0x0a, 0x26, 0x64, + 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, + 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, + 0x6c, 0x69, 0x63, 0x74, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, + 0x22, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x4c, 0x65, 0x67, 0x61, 0x63, + 0x79, 0x4a, 0x73, 0x6f, 0x6e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, + 0x63, 0x74, 0x73, 0x12, 0x37, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, @@ -4807,276 +4817,258 @@ var file_google_protobuf_descriptor_proto_rawDesc = []byte{ 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, - 0x02, 0x22, 0xd1, 0x02, 0x0a, 0x0b, 0x45, 0x6e, 0x75, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x41, 0x6c, 0x69, - 0x61, 0x73, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, - 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x56, 0x0a, 0x26, 0x64, 0x65, 0x70, - 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x6a, - 0x73, 0x6f, 0x6e, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, - 0x63, 0x74, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x22, 0x64, - 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x4a, - 0x73, 0x6f, 0x6e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, - 0x73, 0x12, 0x37, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, - 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x4a, - 0x04, 0x08, 0x05, 0x10, 0x06, 0x22, 0x81, 0x02, 0x0a, 0x10, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, - 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, - 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, - 0x64, 0x12, 0x37, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, - 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x0c, 0x64, 0x65, - 0x62, 0x75, 0x67, 0x5f, 0x72, 0x65, 0x64, 0x61, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0b, 0x64, 0x65, 0x62, 0x75, 0x67, 0x52, 0x65, - 0x64, 0x61, 0x63, 0x74, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, - 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, - 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x09, - 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x22, 0xd5, 0x01, 0x0a, 0x0e, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x37, 0x0a, 0x08, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x52, 0x08, 0x66, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, - 0x74, 0x65, 0x64, 0x18, 0x21, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, - 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x58, 0x0a, 0x14, - 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, - 0x02, 0x22, 0x99, 0x03, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, - 0x64, 0x18, 0x21, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, - 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x71, 0x0a, 0x11, 0x69, 0x64, - 0x65, 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, - 0x22, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x49, 0x64, 0x65, 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x63, - 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x3a, 0x13, 0x49, 0x44, 0x45, 0x4d, 0x50, 0x4f, 0x54, 0x45, - 0x4e, 0x43, 0x59, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x52, 0x10, 0x69, 0x64, 0x65, - 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x37, 0x0a, - 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x23, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x52, 0x08, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, + 0x02, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x22, 0x81, 0x02, 0x0a, 0x10, 0x45, 0x6e, 0x75, 0x6d, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0a, + 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, + 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, + 0x74, 0x65, 0x64, 0x12, 0x37, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, + 0x65, 0x74, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x0c, + 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x72, 0x65, 0x64, 0x61, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0b, 0x64, 0x65, 0x62, 0x75, 0x67, + 0x52, 0x65, 0x64, 0x61, 0x63, 0x74, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x22, 0x50, 0x0a, 0x10, 0x49, 0x64, 0x65, 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4c, - 0x65, 0x76, 0x65, 0x6c, 0x12, 0x17, 0x0a, 0x13, 0x49, 0x44, 0x45, 0x4d, 0x50, 0x4f, 0x54, 0x45, - 0x4e, 0x43, 0x59, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x13, 0x0a, - 0x0f, 0x4e, 0x4f, 0x5f, 0x53, 0x49, 0x44, 0x45, 0x5f, 0x45, 0x46, 0x46, 0x45, 0x43, 0x54, 0x53, - 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x44, 0x45, 0x4d, 0x50, 0x4f, 0x54, 0x45, 0x4e, 0x54, - 0x10, 0x02, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x22, 0x9a, 0x03, - 0x0a, 0x13, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, - 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x50, 0x61, - 0x72, 0x74, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x5f, - 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x10, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x69, 0x6e, - 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x6e, - 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x21, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, - 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, - 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x4a, - 0x0a, 0x08, 0x4e, 0x61, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x61, - 0x6d, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x08, 0x6e, - 0x61, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x65, 0x78, - 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x02, 0x28, 0x08, 0x52, 0x0b, 0x69, - 0x73, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xfc, 0x09, 0x0a, 0x0a, 0x46, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x12, 0x8b, 0x01, 0x0a, 0x0e, 0x66, 0x69, - 0x65, 0x6c, 0x64, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x2e, - 0x46, 0x69, 0x65, 0x6c, 0x64, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x39, 0x88, - 0x01, 0x01, 0x98, 0x01, 0x04, 0x98, 0x01, 0x01, 0xa2, 0x01, 0x0d, 0x12, 0x08, 0x45, 0x58, 0x50, - 0x4c, 0x49, 0x43, 0x49, 0x54, 0x18, 0xe6, 0x07, 0xa2, 0x01, 0x0d, 0x12, 0x08, 0x49, 0x4d, 0x50, - 0x4c, 0x49, 0x43, 0x49, 0x54, 0x18, 0xe7, 0x07, 0xa2, 0x01, 0x0d, 0x12, 0x08, 0x45, 0x58, 0x50, - 0x4c, 0x49, 0x43, 0x49, 0x54, 0x18, 0xe8, 0x07, 0x52, 0x0d, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x50, - 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x66, 0x0a, 0x09, 0x65, 0x6e, 0x75, 0x6d, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, - 0x42, 0x23, 0x88, 0x01, 0x01, 0x98, 0x01, 0x06, 0x98, 0x01, 0x01, 0xa2, 0x01, 0x0b, 0x12, 0x06, - 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0x18, 0xe6, 0x07, 0xa2, 0x01, 0x09, 0x12, 0x04, 0x4f, 0x50, - 0x45, 0x4e, 0x18, 0xe7, 0x07, 0x52, 0x08, 0x65, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x92, 0x01, 0x0a, 0x17, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x5f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x2e, 0x52, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x6e, 0x63, 0x6f, - 0x64, 0x69, 0x6e, 0x67, 0x42, 0x27, 0x88, 0x01, 0x01, 0x98, 0x01, 0x04, 0x98, 0x01, 0x01, 0xa2, - 0x01, 0x0d, 0x12, 0x08, 0x45, 0x58, 0x50, 0x41, 0x4e, 0x44, 0x45, 0x44, 0x18, 0xe6, 0x07, 0xa2, - 0x01, 0x0b, 0x12, 0x06, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x44, 0x18, 0xe7, 0x07, 0x52, 0x15, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x6e, 0x63, 0x6f, - 0x64, 0x69, 0x6e, 0x67, 0x12, 0x78, 0x0a, 0x0f, 0x75, 0x74, 0x66, 0x38, 0x5f, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x2e, 0x55, 0x74, 0x66, 0x38, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x23, 0x88, 0x01, 0x01, 0x98, 0x01, - 0x04, 0x98, 0x01, 0x01, 0xa2, 0x01, 0x09, 0x12, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x18, 0xe6, 0x07, - 0xa2, 0x01, 0x0b, 0x12, 0x06, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x18, 0xe7, 0x07, 0x52, 0x0e, - 0x75, 0x74, 0x66, 0x38, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x78, - 0x0a, 0x10, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, - 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x53, 0x65, 0x74, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x63, - 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x20, 0x88, 0x01, 0x01, 0x98, 0x01, 0x04, 0x98, 0x01, 0x01, - 0xa2, 0x01, 0x14, 0x12, 0x0f, 0x4c, 0x45, 0x4e, 0x47, 0x54, 0x48, 0x5f, 0x50, 0x52, 0x45, 0x46, - 0x49, 0x58, 0x45, 0x44, 0x18, 0xe6, 0x07, 0x52, 0x0f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x7c, 0x0a, 0x0b, 0x6a, 0x73, 0x6f, 0x6e, - 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, + 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x22, 0xd5, 0x01, 0x0a, 0x0e, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x37, + 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x52, 0x08, 0x66, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, + 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x21, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, + 0x73, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x58, + 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x2e, 0x4a, 0x73, 0x6f, 0x6e, 0x46, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x42, 0x33, 0x88, 0x01, 0x01, 0x98, 0x01, 0x03, 0x98, 0x01, 0x06, - 0x98, 0x01, 0x01, 0xa2, 0x01, 0x17, 0x12, 0x12, 0x4c, 0x45, 0x47, 0x41, 0x43, 0x59, 0x5f, 0x42, - 0x45, 0x53, 0x54, 0x5f, 0x45, 0x46, 0x46, 0x4f, 0x52, 0x54, 0x18, 0xe6, 0x07, 0xa2, 0x01, 0x0a, - 0x12, 0x05, 0x41, 0x4c, 0x4c, 0x4f, 0x57, 0x18, 0xe7, 0x07, 0x52, 0x0a, 0x6a, 0x73, 0x6f, 0x6e, - 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x22, 0x5c, 0x0a, 0x0d, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x50, - 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x46, 0x49, 0x45, 0x4c, 0x44, - 0x5f, 0x50, 0x52, 0x45, 0x53, 0x45, 0x4e, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, - 0x4e, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x45, 0x58, 0x50, 0x4c, 0x49, 0x43, 0x49, 0x54, 0x10, - 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x4d, 0x50, 0x4c, 0x49, 0x43, 0x49, 0x54, 0x10, 0x02, 0x12, - 0x13, 0x0a, 0x0f, 0x4c, 0x45, 0x47, 0x41, 0x43, 0x59, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, - 0x45, 0x44, 0x10, 0x03, 0x22, 0x37, 0x0a, 0x08, 0x45, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x15, 0x0a, 0x11, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, - 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4f, 0x50, 0x45, 0x4e, 0x10, - 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0x10, 0x02, 0x22, 0x56, 0x0a, - 0x15, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x6e, - 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x23, 0x0a, 0x1f, 0x52, 0x45, 0x50, 0x45, 0x41, 0x54, - 0x45, 0x44, 0x5f, 0x46, 0x49, 0x45, 0x4c, 0x44, 0x5f, 0x45, 0x4e, 0x43, 0x4f, 0x44, 0x49, 0x4e, - 0x47, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x45, 0x58, 0x50, 0x41, 0x4e, - 0x44, 0x45, 0x44, 0x10, 0x02, 0x22, 0x43, 0x0a, 0x0e, 0x55, 0x74, 0x66, 0x38, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x17, 0x55, 0x54, 0x46, 0x38, 0x5f, - 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, - 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x12, 0x0a, - 0x0a, 0x06, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x10, 0x02, 0x22, 0x53, 0x0a, 0x0f, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x1c, 0x0a, - 0x18, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x45, 0x4e, 0x43, 0x4f, 0x44, 0x49, 0x4e, - 0x47, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4c, - 0x45, 0x4e, 0x47, 0x54, 0x48, 0x5f, 0x50, 0x52, 0x45, 0x46, 0x49, 0x58, 0x45, 0x44, 0x10, 0x01, - 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x45, 0x44, 0x10, 0x02, 0x22, - 0x48, 0x0a, 0x0a, 0x4a, 0x73, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x17, 0x0a, - 0x13, 0x4a, 0x53, 0x4f, 0x4e, 0x5f, 0x46, 0x4f, 0x52, 0x4d, 0x41, 0x54, 0x5f, 0x55, 0x4e, 0x4b, - 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x4c, 0x4c, 0x4f, 0x57, 0x10, - 0x01, 0x12, 0x16, 0x0a, 0x12, 0x4c, 0x45, 0x47, 0x41, 0x43, 0x59, 0x5f, 0x42, 0x45, 0x53, 0x54, - 0x5f, 0x45, 0x46, 0x46, 0x4f, 0x52, 0x54, 0x10, 0x02, 0x2a, 0x06, 0x08, 0xe8, 0x07, 0x10, 0xe9, - 0x07, 0x2a, 0x06, 0x08, 0xe9, 0x07, 0x10, 0xea, 0x07, 0x2a, 0x06, 0x08, 0x8b, 0x4e, 0x10, 0x90, - 0x4e, 0x4a, 0x06, 0x08, 0xe7, 0x07, 0x10, 0xe8, 0x07, 0x22, 0xfe, 0x02, 0x0a, 0x12, 0x46, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, - 0x12, 0x58, 0x0a, 0x08, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x44, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, - 0x65, 0x74, 0x45, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x52, 0x08, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x41, 0x0a, 0x0f, 0x6d, 0x69, - 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6d, - 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x45, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, - 0x0f, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x0e, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x45, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x1a, 0x87, 0x01, 0x0a, 0x18, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x45, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x32, 0x0a, - 0x07, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x37, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, + 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, + 0x80, 0x80, 0x02, 0x22, 0x99, 0x03, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, + 0x74, 0x65, 0x64, 0x18, 0x21, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, + 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x71, 0x0a, 0x11, + 0x69, 0x64, 0x65, 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6c, 0x65, 0x76, 0x65, + 0x6c, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x49, 0x64, 0x65, 0x6d, 0x70, 0x6f, 0x74, 0x65, + 0x6e, 0x63, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x3a, 0x13, 0x49, 0x44, 0x45, 0x4d, 0x50, 0x4f, + 0x54, 0x45, 0x4e, 0x43, 0x59, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x52, 0x10, 0x69, + 0x64, 0x65, 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, + 0x37, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x23, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x52, 0x08, + 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, + 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x22, 0x50, 0x0a, 0x10, 0x49, 0x64, 0x65, 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x63, + 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x17, 0x0a, 0x13, 0x49, 0x44, 0x45, 0x4d, 0x50, 0x4f, + 0x54, 0x45, 0x4e, 0x43, 0x59, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, + 0x13, 0x0a, 0x0f, 0x4e, 0x4f, 0x5f, 0x53, 0x49, 0x44, 0x45, 0x5f, 0x45, 0x46, 0x46, 0x45, 0x43, + 0x54, 0x53, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x44, 0x45, 0x4d, 0x50, 0x4f, 0x54, 0x45, + 0x4e, 0x54, 0x10, 0x02, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x22, + 0x9a, 0x03, 0x0a, 0x13, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, + 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, + 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4e, 0x61, 0x6d, 0x65, + 0x50, 0x61, 0x72, 0x74, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x69, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, + 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x10, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x49, 0x6e, 0x74, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, + 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x10, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x67, 0x67, 0x72, 0x65, + 0x67, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x1a, 0x4a, 0x0a, 0x08, 0x4e, 0x61, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x74, 0x12, 0x1b, 0x0a, 0x09, + 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, + 0x08, 0x6e, 0x61, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, + 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x02, 0x28, 0x08, 0x52, + 0x0b, 0x69, 0x73, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x8c, 0x0a, 0x0a, + 0x0a, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x12, 0x8b, 0x01, 0x0a, 0x0e, + 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, + 0x74, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x42, + 0x39, 0x88, 0x01, 0x01, 0x98, 0x01, 0x04, 0x98, 0x01, 0x01, 0xa2, 0x01, 0x0d, 0x12, 0x08, 0x45, + 0x58, 0x50, 0x4c, 0x49, 0x43, 0x49, 0x54, 0x18, 0xe6, 0x07, 0xa2, 0x01, 0x0d, 0x12, 0x08, 0x49, + 0x4d, 0x50, 0x4c, 0x49, 0x43, 0x49, 0x54, 0x18, 0xe7, 0x07, 0xa2, 0x01, 0x0d, 0x12, 0x08, 0x45, + 0x58, 0x50, 0x4c, 0x49, 0x43, 0x49, 0x54, 0x18, 0xe8, 0x07, 0x52, 0x0d, 0x66, 0x69, 0x65, 0x6c, + 0x64, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x66, 0x0a, 0x09, 0x65, 0x6e, 0x75, + 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x54, 0x79, + 0x70, 0x65, 0x42, 0x23, 0x88, 0x01, 0x01, 0x98, 0x01, 0x06, 0x98, 0x01, 0x01, 0xa2, 0x01, 0x0b, + 0x12, 0x06, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0x18, 0xe6, 0x07, 0xa2, 0x01, 0x09, 0x12, 0x04, + 0x4f, 0x50, 0x45, 0x4e, 0x18, 0xe7, 0x07, 0x52, 0x08, 0x65, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x92, 0x01, 0x0a, 0x17, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, + 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, - 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0xa7, 0x02, 0x0a, 0x0e, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x44, 0x0a, - 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, - 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x1a, 0xce, 0x01, 0x0a, 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x16, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x42, 0x02, - 0x10, 0x01, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x04, 0x73, 0x70, 0x61, 0x6e, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x42, 0x02, 0x10, 0x01, 0x52, 0x04, 0x73, 0x70, 0x61, 0x6e, - 0x12, 0x29, 0x0a, 0x10, 0x6c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x65, 0x61, 0x64, - 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x74, - 0x72, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, - 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x3a, 0x0a, 0x19, 0x6c, 0x65, 0x61, 0x64, - 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6d, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x6c, 0x65, 0x61, - 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x22, 0xd0, 0x02, 0x0a, 0x11, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x4d, 0x0a, 0x0a, 0x61, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x49, 0x6e, - 0x66, 0x6f, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x61, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xeb, 0x01, 0x0a, 0x0a, 0x41, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x42, 0x02, 0x10, 0x01, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, - 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x69, 0x6c, - 0x65, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x05, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x12, 0x52, 0x0a, 0x08, 0x73, 0x65, 0x6d, - 0x61, 0x6e, 0x74, 0x69, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x47, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, - 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x65, 0x6d, 0x61, 0x6e, - 0x74, 0x69, 0x63, 0x52, 0x08, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x22, 0x28, 0x0a, - 0x08, 0x53, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, - 0x45, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x45, 0x54, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, - 0x41, 0x4c, 0x49, 0x41, 0x53, 0x10, 0x02, 0x2a, 0xea, 0x01, 0x0a, 0x07, 0x45, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x13, 0x0a, 0x0f, 0x45, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, - 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0e, 0x45, 0x44, 0x49, 0x54, - 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x32, 0x10, 0xe6, 0x07, 0x12, 0x13, 0x0a, - 0x0e, 0x45, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x33, 0x10, - 0xe7, 0x07, 0x12, 0x11, 0x0a, 0x0c, 0x45, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x32, 0x30, - 0x32, 0x33, 0x10, 0xe8, 0x07, 0x12, 0x17, 0x0a, 0x13, 0x45, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x31, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x12, 0x17, - 0x0a, 0x13, 0x45, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x32, 0x5f, 0x54, 0x45, 0x53, 0x54, - 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x02, 0x12, 0x1d, 0x0a, 0x17, 0x45, 0x44, 0x49, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x39, 0x39, 0x39, 0x39, 0x37, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x4f, 0x4e, - 0x4c, 0x59, 0x10, 0x9d, 0x8d, 0x06, 0x12, 0x1d, 0x0a, 0x17, 0x45, 0x44, 0x49, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x39, 0x39, 0x39, 0x39, 0x38, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x4f, 0x4e, 0x4c, - 0x59, 0x10, 0x9e, 0x8d, 0x06, 0x12, 0x1d, 0x0a, 0x17, 0x45, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x39, 0x39, 0x39, 0x39, 0x39, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, - 0x10, 0x9f, 0x8d, 0x06, 0x42, 0x7e, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x42, 0x10, 0x44, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x48, 0x01, 0x5a, - 0x2d, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, - 0x72, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x79, 0x70, 0x65, - 0x73, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x70, 0x62, 0xf8, 0x01, - 0x01, 0xa2, 0x02, 0x03, 0x47, 0x50, 0x42, 0xaa, 0x02, 0x1a, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x6e, + 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x27, 0x88, 0x01, 0x01, 0x98, 0x01, 0x04, 0x98, 0x01, + 0x01, 0xa2, 0x01, 0x0d, 0x12, 0x08, 0x45, 0x58, 0x50, 0x41, 0x4e, 0x44, 0x45, 0x44, 0x18, 0xe6, + 0x07, 0xa2, 0x01, 0x0b, 0x12, 0x06, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x44, 0x18, 0xe7, 0x07, 0x52, + 0x15, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x6e, + 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x78, 0x0a, 0x0f, 0x75, 0x74, 0x66, 0x38, 0x5f, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x2e, 0x55, 0x74, 0x66, + 0x38, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x23, 0x88, 0x01, 0x01, + 0x98, 0x01, 0x04, 0x98, 0x01, 0x01, 0xa2, 0x01, 0x09, 0x12, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x18, + 0xe6, 0x07, 0xa2, 0x01, 0x0b, 0x12, 0x06, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x18, 0xe7, 0x07, + 0x52, 0x0e, 0x75, 0x74, 0x66, 0x38, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x78, 0x0a, 0x10, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x65, 0x6e, 0x63, 0x6f, + 0x64, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, + 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x20, 0x88, 0x01, 0x01, 0x98, 0x01, 0x04, 0x98, + 0x01, 0x01, 0xa2, 0x01, 0x14, 0x12, 0x0f, 0x4c, 0x45, 0x4e, 0x47, 0x54, 0x48, 0x5f, 0x50, 0x52, + 0x45, 0x46, 0x49, 0x58, 0x45, 0x44, 0x18, 0xe6, 0x07, 0x52, 0x0f, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x7c, 0x0a, 0x0b, 0x6a, 0x73, + 0x6f, 0x6e, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x2e, 0x4a, 0x73, 0x6f, + 0x6e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x42, 0x33, 0x88, 0x01, 0x01, 0x98, 0x01, 0x03, 0x98, + 0x01, 0x06, 0x98, 0x01, 0x01, 0xa2, 0x01, 0x17, 0x12, 0x12, 0x4c, 0x45, 0x47, 0x41, 0x43, 0x59, + 0x5f, 0x42, 0x45, 0x53, 0x54, 0x5f, 0x45, 0x46, 0x46, 0x4f, 0x52, 0x54, 0x18, 0xe6, 0x07, 0xa2, + 0x01, 0x0a, 0x12, 0x05, 0x41, 0x4c, 0x4c, 0x4f, 0x57, 0x18, 0xe7, 0x07, 0x52, 0x0a, 0x6a, 0x73, + 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x22, 0x5c, 0x0a, 0x0d, 0x46, 0x69, 0x65, 0x6c, + 0x64, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x46, 0x49, 0x45, + 0x4c, 0x44, 0x5f, 0x50, 0x52, 0x45, 0x53, 0x45, 0x4e, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, + 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x45, 0x58, 0x50, 0x4c, 0x49, 0x43, 0x49, + 0x54, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x4d, 0x50, 0x4c, 0x49, 0x43, 0x49, 0x54, 0x10, + 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x45, 0x47, 0x41, 0x43, 0x59, 0x5f, 0x52, 0x45, 0x51, 0x55, + 0x49, 0x52, 0x45, 0x44, 0x10, 0x03, 0x22, 0x37, 0x0a, 0x08, 0x45, 0x6e, 0x75, 0x6d, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4f, 0x50, 0x45, + 0x4e, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0x10, 0x02, 0x22, + 0x56, 0x0a, 0x15, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, + 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x23, 0x0a, 0x1f, 0x52, 0x45, 0x50, 0x45, + 0x41, 0x54, 0x45, 0x44, 0x5f, 0x46, 0x49, 0x45, 0x4c, 0x44, 0x5f, 0x45, 0x4e, 0x43, 0x4f, 0x44, + 0x49, 0x4e, 0x47, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0a, 0x0a, + 0x06, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x45, 0x58, 0x50, + 0x41, 0x4e, 0x44, 0x45, 0x44, 0x10, 0x02, 0x22, 0x43, 0x0a, 0x0e, 0x55, 0x74, 0x66, 0x38, 0x56, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x17, 0x55, 0x54, 0x46, + 0x38, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x4b, + 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, + 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x03, 0x22, 0x53, 0x0a, 0x0f, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, + 0x1c, 0x0a, 0x18, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x45, 0x4e, 0x43, 0x4f, 0x44, + 0x49, 0x4e, 0x47, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x13, 0x0a, + 0x0f, 0x4c, 0x45, 0x4e, 0x47, 0x54, 0x48, 0x5f, 0x50, 0x52, 0x45, 0x46, 0x49, 0x58, 0x45, 0x44, + 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x45, 0x44, 0x10, + 0x02, 0x22, 0x48, 0x0a, 0x0a, 0x4a, 0x73, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, + 0x17, 0x0a, 0x13, 0x4a, 0x53, 0x4f, 0x4e, 0x5f, 0x46, 0x4f, 0x52, 0x4d, 0x41, 0x54, 0x5f, 0x55, + 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x4c, 0x4c, 0x4f, + 0x57, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x4c, 0x45, 0x47, 0x41, 0x43, 0x59, 0x5f, 0x42, 0x45, + 0x53, 0x54, 0x5f, 0x45, 0x46, 0x46, 0x4f, 0x52, 0x54, 0x10, 0x02, 0x2a, 0x06, 0x08, 0xe8, 0x07, + 0x10, 0xe9, 0x07, 0x2a, 0x06, 0x08, 0xe9, 0x07, 0x10, 0xea, 0x07, 0x2a, 0x06, 0x08, 0xea, 0x07, + 0x10, 0xeb, 0x07, 0x2a, 0x06, 0x08, 0x8b, 0x4e, 0x10, 0x90, 0x4e, 0x2a, 0x06, 0x08, 0x90, 0x4e, + 0x10, 0x91, 0x4e, 0x4a, 0x06, 0x08, 0xe7, 0x07, 0x10, 0xe8, 0x07, 0x22, 0xfe, 0x02, 0x0a, 0x12, + 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x73, 0x12, 0x58, 0x0a, 0x08, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, + 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x53, 0x65, 0x74, 0x45, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x52, 0x08, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x41, 0x0a, 0x0f, + 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x0e, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x45, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x41, 0x0a, 0x0f, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x65, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x0e, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x45, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x1a, 0x87, 0x01, 0x0a, 0x18, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, + 0x74, 0x45, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, + 0x32, 0x0a, 0x07, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x18, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x65, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, + 0x65, 0x74, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0xa7, 0x02, 0x0a, + 0x0e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x44, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x49, 0x6e, + 0x66, 0x6f, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xce, 0x01, 0x0a, 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, + 0x42, 0x02, 0x10, 0x01, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x04, 0x73, 0x70, + 0x61, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x42, 0x02, 0x10, 0x01, 0x52, 0x04, 0x73, 0x70, + 0x61, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x6c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, + 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x65, + 0x61, 0x64, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2b, 0x0a, + 0x11, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x69, + 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x3a, 0x0a, 0x19, 0x6c, 0x65, + 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x63, + 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x6c, + 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x43, 0x6f, + 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xd0, 0x02, 0x0a, 0x11, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x4d, 0x0a, 0x0a, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x0a, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xeb, 0x01, 0x0a, 0x0a, + 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x04, 0x70, 0x61, + 0x74, 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x42, 0x02, 0x10, 0x01, 0x52, 0x04, 0x70, 0x61, + 0x74, 0x68, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x66, 0x69, 0x6c, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, + 0x69, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x05, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x12, 0x52, 0x0a, 0x08, 0x73, + 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, + 0x6f, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x65, 0x6d, + 0x61, 0x6e, 0x74, 0x69, 0x63, 0x52, 0x08, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x22, + 0x28, 0x0a, 0x08, 0x53, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x12, 0x08, 0x0a, 0x04, 0x4e, + 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x45, 0x54, 0x10, 0x01, 0x12, 0x09, + 0x0a, 0x05, 0x41, 0x4c, 0x49, 0x41, 0x53, 0x10, 0x02, 0x2a, 0x92, 0x02, 0x0a, 0x07, 0x45, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x13, 0x0a, 0x0f, 0x45, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, + 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0e, 0x45, 0x44, + 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x32, 0x10, 0xe6, 0x07, 0x12, + 0x13, 0x0a, 0x0e, 0x45, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, + 0x33, 0x10, 0xe7, 0x07, 0x12, 0x11, 0x0a, 0x0c, 0x45, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, + 0x32, 0x30, 0x32, 0x33, 0x10, 0xe8, 0x07, 0x12, 0x11, 0x0a, 0x0c, 0x45, 0x44, 0x49, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x32, 0x30, 0x32, 0x34, 0x10, 0xe9, 0x07, 0x12, 0x17, 0x0a, 0x13, 0x45, 0x44, + 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x31, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x4f, 0x4e, 0x4c, + 0x59, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x45, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x32, + 0x5f, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x02, 0x12, 0x1d, 0x0a, 0x17, + 0x45, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x39, 0x39, 0x39, 0x39, 0x37, 0x5f, 0x54, 0x45, + 0x53, 0x54, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x9d, 0x8d, 0x06, 0x12, 0x1d, 0x0a, 0x17, 0x45, + 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x39, 0x39, 0x39, 0x39, 0x38, 0x5f, 0x54, 0x45, 0x53, + 0x54, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x9e, 0x8d, 0x06, 0x12, 0x1d, 0x0a, 0x17, 0x45, 0x44, + 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x39, 0x39, 0x39, 0x39, 0x39, 0x5f, 0x54, 0x45, 0x53, 0x54, + 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x9f, 0x8d, 0x06, 0x12, 0x13, 0x0a, 0x0b, 0x45, 0x44, 0x49, + 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x41, 0x58, 0x10, 0xff, 0xff, 0xff, 0xff, 0x07, 0x42, 0x7e, + 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x42, 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, + 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x48, 0x01, 0x5a, 0x2d, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x70, 0x62, 0xf8, 0x01, 0x01, 0xa2, 0x02, 0x03, 0x47, 0x50, + 0x42, 0xaa, 0x02, 0x1a, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, } var ( diff --git a/vendor/google.golang.org/protobuf/types/gofeaturespb/go_features.pb.go b/vendor/google.golang.org/protobuf/types/gofeaturespb/go_features.pb.go new file mode 100644 index 000000000..25de5ae00 --- /dev/null +++ b/vendor/google.golang.org/protobuf/types/gofeaturespb/go_features.pb.go @@ -0,0 +1,177 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2023 Google Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file or at +// https://developers.google.com/open-source/licenses/bsd + +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: reflect/protodesc/proto/go_features.proto + +package proto + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + descriptorpb "google.golang.org/protobuf/types/descriptorpb" + reflect "reflect" + sync "sync" +) + +type GoFeatures struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Whether or not to generate the deprecated UnmarshalJSON method for enums. + LegacyUnmarshalJsonEnum *bool `protobuf:"varint,1,opt,name=legacy_unmarshal_json_enum,json=legacyUnmarshalJsonEnum" json:"legacy_unmarshal_json_enum,omitempty"` +} + +func (x *GoFeatures) Reset() { + *x = GoFeatures{} + if protoimpl.UnsafeEnabled { + mi := &file_reflect_protodesc_proto_go_features_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GoFeatures) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GoFeatures) ProtoMessage() {} + +func (x *GoFeatures) ProtoReflect() protoreflect.Message { + mi := &file_reflect_protodesc_proto_go_features_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 GoFeatures.ProtoReflect.Descriptor instead. +func (*GoFeatures) Descriptor() ([]byte, []int) { + return file_reflect_protodesc_proto_go_features_proto_rawDescGZIP(), []int{0} +} + +func (x *GoFeatures) GetLegacyUnmarshalJsonEnum() bool { + if x != nil && x.LegacyUnmarshalJsonEnum != nil { + return *x.LegacyUnmarshalJsonEnum + } + return false +} + +var file_reflect_protodesc_proto_go_features_proto_extTypes = []protoimpl.ExtensionInfo{ + { + ExtendedType: (*descriptorpb.FeatureSet)(nil), + ExtensionType: (*GoFeatures)(nil), + Field: 1002, + Name: "google.protobuf.go", + Tag: "bytes,1002,opt,name=go", + Filename: "reflect/protodesc/proto/go_features.proto", + }, +} + +// Extension fields to descriptorpb.FeatureSet. +var ( + // optional google.protobuf.GoFeatures go = 1002; + E_Go = &file_reflect_protodesc_proto_go_features_proto_extTypes[0] +) + +var File_reflect_protodesc_proto_go_features_proto protoreflect.FileDescriptor + +var file_reflect_protodesc_proto_go_features_proto_rawDesc = []byte{ + 0x0a, 0x29, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x64, + 0x65, 0x73, 0x63, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x5f, 0x66, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0f, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x1a, 0x20, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x6a, + 0x0a, 0x0a, 0x47, 0x6f, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x5c, 0x0a, 0x1a, + 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x75, 0x6e, 0x6d, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6c, + 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, + 0x42, 0x1f, 0x88, 0x01, 0x01, 0x98, 0x01, 0x06, 0xa2, 0x01, 0x09, 0x12, 0x04, 0x74, 0x72, 0x75, + 0x65, 0x18, 0xe6, 0x07, 0xa2, 0x01, 0x0a, 0x12, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x18, 0xe7, + 0x07, 0x52, 0x17, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x55, 0x6e, 0x6d, 0x61, 0x72, 0x73, 0x68, + 0x61, 0x6c, 0x4a, 0x73, 0x6f, 0x6e, 0x45, 0x6e, 0x75, 0x6d, 0x3a, 0x49, 0x0a, 0x02, 0x67, 0x6f, + 0x12, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x18, 0xea, 0x07, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x47, 0x6f, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x73, 0x52, 0x02, 0x67, 0x6f, 0x42, 0x34, 0x5a, 0x32, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2f, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x64, 0x65, 0x73, 0x63, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, +} + +var ( + file_reflect_protodesc_proto_go_features_proto_rawDescOnce sync.Once + file_reflect_protodesc_proto_go_features_proto_rawDescData = file_reflect_protodesc_proto_go_features_proto_rawDesc +) + +func file_reflect_protodesc_proto_go_features_proto_rawDescGZIP() []byte { + file_reflect_protodesc_proto_go_features_proto_rawDescOnce.Do(func() { + file_reflect_protodesc_proto_go_features_proto_rawDescData = protoimpl.X.CompressGZIP(file_reflect_protodesc_proto_go_features_proto_rawDescData) + }) + return file_reflect_protodesc_proto_go_features_proto_rawDescData +} + +var file_reflect_protodesc_proto_go_features_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_reflect_protodesc_proto_go_features_proto_goTypes = []interface{}{ + (*GoFeatures)(nil), // 0: google.protobuf.GoFeatures + (*descriptorpb.FeatureSet)(nil), // 1: google.protobuf.FeatureSet +} +var file_reflect_protodesc_proto_go_features_proto_depIdxs = []int32{ + 1, // 0: google.protobuf.go:extendee -> google.protobuf.FeatureSet + 0, // 1: google.protobuf.go:type_name -> google.protobuf.GoFeatures + 2, // [2:2] is the sub-list for method output_type + 2, // [2:2] is the sub-list for method input_type + 1, // [1:2] is the sub-list for extension type_name + 0, // [0:1] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_reflect_protodesc_proto_go_features_proto_init() } +func file_reflect_protodesc_proto_go_features_proto_init() { + if File_reflect_protodesc_proto_go_features_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_reflect_protodesc_proto_go_features_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GoFeatures); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_reflect_protodesc_proto_go_features_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 1, + NumServices: 0, + }, + GoTypes: file_reflect_protodesc_proto_go_features_proto_goTypes, + DependencyIndexes: file_reflect_protodesc_proto_go_features_proto_depIdxs, + MessageInfos: file_reflect_protodesc_proto_go_features_proto_msgTypes, + ExtensionInfos: file_reflect_protodesc_proto_go_features_proto_extTypes, + }.Build() + File_reflect_protodesc_proto_go_features_proto = out.File + file_reflect_protodesc_proto_go_features_proto_rawDesc = nil + file_reflect_protodesc_proto_go_features_proto_goTypes = nil + file_reflect_protodesc_proto_go_features_proto_depIdxs = nil +} diff --git a/vendor/google.golang.org/protobuf/types/gofeaturespb/go_features.proto b/vendor/google.golang.org/protobuf/types/gofeaturespb/go_features.proto new file mode 100644 index 000000000..d24657129 --- /dev/null +++ b/vendor/google.golang.org/protobuf/types/gofeaturespb/go_features.proto @@ -0,0 +1,28 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2023 Google Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file or at +// https://developers.google.com/open-source/licenses/bsd + +syntax = "proto2"; + +package google.protobuf; + +import "google/protobuf/descriptor.proto"; + +option go_package = "google.golang.org/protobuf/types/gofeaturespb"; + +extend google.protobuf.FeatureSet { + optional GoFeatures go = 1002; +} + +message GoFeatures { + // Whether or not to generate the deprecated UnmarshalJSON method for enums. + optional bool legacy_unmarshal_json_enum = 1 [ + retention = RETENTION_RUNTIME, + targets = TARGET_TYPE_ENUM, + edition_defaults = { edition: EDITION_PROTO2, value: "true" }, + edition_defaults = { edition: EDITION_PROTO3, value: "false" } + ]; +} diff --git a/vendor/k8s.io/code-generator/generate-internal-groups.sh b/vendor/k8s.io/code-generator/generate-internal-groups.sh index 9676fac31..415b0b67c 100644 --- a/vendor/k8s.io/code-generator/generate-internal-groups.sh +++ b/vendor/k8s.io/code-generator/generate-internal-groups.sh @@ -55,6 +55,12 @@ echo "WARNING: $(basename "$0") is deprecated." echo "WARNING: Please use k8s.io/code-generator/kube_codegen.sh instead." echo +# If verification only is requested, avoid deleting files +verify_only="" +for ((i = 1; i <= $#; i++)); do + if [ "${!i}" = --verify-only ]; then verify_only=1; fi +done + if [ "${GENS}" = "all" ] || grep -qw "all" <<<"${GENS}"; then ALL="client,conversion,deepcopy,defaulter,informer,lister,openapi" echo "WARNING: Specifying \"all\" as a generator is deprecated." @@ -124,12 +130,14 @@ CLIENTSET_PKG="${CLIENTSET_PKG_NAME:-clientset}" CLIENTSET_NAME="${CLIENTSET_NAME_VERSIONED:-versioned}" if grep -qw "deepcopy" <<<"${GENS}"; then - # Nuke existing files - for dir in $(GO111MODULE=on go list -f '{{.Dir}}' "${ALL_FQ_APIS[@]}"); do - pushd "${dir}" >/dev/null - git_find -z ':(glob)**'/zz_generated.deepcopy.go | xargs -0 rm -f - popd >/dev/null - done + if [ ! "$verify_only" ]; then + # Nuke existing files + for dir in $(GO111MODULE=on go list -f '{{.Dir}}' "${ALL_FQ_APIS[@]}"); do + pushd "${dir}" >/dev/null + git_find -z ':(glob)**'/zz_generated.deepcopy.go | xargs -0 rm -f + popd >/dev/null + done + fi echo "Generating deepcopy funcs" "${gobin}/deepcopy-gen" \ @@ -139,12 +147,14 @@ if grep -qw "deepcopy" <<<"${GENS}"; then fi if grep -qw "defaulter" <<<"${GENS}"; then - # Nuke existing files - for dir in $(GO111MODULE=on go list -f '{{.Dir}}' "${ALL_FQ_APIS[@]}"); do - pushd "${dir}" >/dev/null - git_find -z ':(glob)**'/zz_generated.defaults.go | xargs -0 rm -f - popd >/dev/null - done + if [ ! "$verify_only" ]; then + # Nuke existing files + for dir in $(GO111MODULE=on go list -f '{{.Dir}}' "${ALL_FQ_APIS[@]}"); do + pushd "${dir}" >/dev/null + git_find -z ':(glob)**'/zz_generated.defaults.go | xargs -0 rm -f + popd >/dev/null + done + fi echo "Generating defaulters" "${gobin}/defaulter-gen" \ @@ -154,12 +164,14 @@ if grep -qw "defaulter" <<<"${GENS}"; then fi if grep -qw "conversion" <<<"${GENS}"; then - # Nuke existing files - for dir in $(GO111MODULE=on go list -f '{{.Dir}}' "${ALL_FQ_APIS[@]}"); do - pushd "${dir}" >/dev/null - git_find -z ':(glob)**'/zz_generated.conversion.go | xargs -0 rm -f - popd >/dev/null - done + if [ ! "$verify_only" ]; then + # Nuke existing files + for dir in $(GO111MODULE=on go list -f '{{.Dir}}' "${ALL_FQ_APIS[@]}"); do + pushd "${dir}" >/dev/null + git_find -z ':(glob)**'/zz_generated.conversion.go | xargs -0 rm -f + popd >/dev/null + done + fi echo "Generating conversions" "${gobin}/conversion-gen" \ @@ -171,15 +183,17 @@ fi if grep -qw "applyconfiguration" <<<"${GENS}"; then APPLY_CONFIGURATION_PACKAGE="${OUTPUT_PKG}/${APPLYCONFIGURATION_PKG_NAME:-applyconfiguration}" - # Nuke existing files - root="$(GO111MODULE=on go list -f '{{.Dir}}' "${APPLY_CONFIGURATION_PACKAGE}" 2>/dev/null || true)" - if [ -n "${root}" ]; then - pushd "${root}" >/dev/null - git_grep -l --null \ - -e '^// Code generated by applyconfiguration-gen. DO NOT EDIT.$' \ - ':(glob)**/*.go' \ - | xargs -0 rm -f - popd >/dev/null + if [ ! "$verify_only" ]; then + # Nuke existing files + root="$(GO111MODULE=on go list -f '{{.Dir}}' "${APPLY_CONFIGURATION_PACKAGE}" 2>/dev/null || true)" + if [ -n "${root}" ]; then + pushd "${root}" >/dev/null + git_grep -l --null \ + -e '^// Code generated by applyconfiguration-gen. DO NOT EDIT.$' \ + ':(glob)**/*.go' \ + | xargs -0 rm -f + popd >/dev/null + fi fi echo "Generating apply configuration for ${GROUPS_WITH_VERSIONS} at ${APPLY_CONFIGURATION_PACKAGE}" @@ -190,15 +204,17 @@ if grep -qw "applyconfiguration" <<<"${GENS}"; then fi if grep -qw "client" <<<"${GENS}"; then - # Nuke existing files - root="$(GO111MODULE=on go list -f '{{.Dir}}' "${OUTPUT_PKG}/${CLIENTSET_PKG}/${CLIENTSET_NAME}" 2>/dev/null || true)" - if [ -n "${root}" ]; then - pushd "${root}" >/dev/null - git_grep -l --null \ - -e '^// Code generated by client-gen. DO NOT EDIT.$' \ - ':(glob)**/*.go' \ - | xargs -0 rm -f - popd >/dev/null + if [ ! "$verify_only" ]; then + # Nuke existing files + root="$(GO111MODULE=on go list -f '{{.Dir}}' "${OUTPUT_PKG}/${CLIENTSET_PKG}/${CLIENTSET_NAME}" 2>/dev/null || true)" + if [ -n "${root}" ]; then + pushd "${root}" >/dev/null + git_grep -l --null \ + -e '^// Code generated by client-gen. DO NOT EDIT.$' \ + ':(glob)**/*.go' \ + | xargs -0 rm -f + popd >/dev/null + fi fi echo "Generating clientset for ${GROUPS_WITH_VERSIONS} at ${OUTPUT_PKG}/${CLIENTSET_PKG}" @@ -212,18 +228,20 @@ if grep -qw "client" <<<"${GENS}"; then fi if grep -qw "lister" <<<"${GENS}"; then - # Nuke existing files - for gv in "${GROUP_VERSIONS[@]}"; do - root="$(GO111MODULE=on go list -f '{{.Dir}}' "${OUTPUT_PKG}/listers/${gv}" 2>/dev/null || true)" - if [ -n "${root}" ]; then - pushd "${root}" >/dev/null - git_grep -l --null \ - -e '^// Code generated by lister-gen. DO NOT EDIT.$' \ - ':(glob)**/*.go' \ - | xargs -0 rm -f - popd >/dev/null - fi - done + if [ ! "$verify_only" ]; then + # Nuke existing files + for gv in "${GROUP_VERSIONS[@]}"; do + root="$(GO111MODULE=on go list -f '{{.Dir}}' "${OUTPUT_PKG}/listers/${gv}" 2>/dev/null || true)" + if [ -n "${root}" ]; then + pushd "${root}" >/dev/null + git_grep -l --null \ + -e '^// Code generated by lister-gen. DO NOT EDIT.$' \ + ':(glob)**/*.go' \ + | xargs -0 rm -f + popd >/dev/null + fi + done + fi echo "Generating listers for ${GROUPS_WITH_VERSIONS} at ${OUTPUT_PKG}/listers" "${gobin}/lister-gen" \ @@ -233,15 +251,17 @@ if grep -qw "lister" <<<"${GENS}"; then fi if grep -qw "informer" <<<"${GENS}"; then - # Nuke existing files - root="$(GO111MODULE=on go list -f '{{.Dir}}' "${OUTPUT_PKG}/informers/externalversions" 2>/dev/null || true)" - if [ -n "${root}" ]; then - pushd "${root}" >/dev/null - git_grep -l --null \ - -e '^// Code generated by informer-gen. DO NOT EDIT.$' \ - ':(glob)**/*.go' \ - | xargs -0 rm -f - popd >/dev/null + if [ ! "$verify_only" ]; then + # Nuke existing files + root="$(GO111MODULE=on go list -f '{{.Dir}}' "${OUTPUT_PKG}/informers/externalversions" 2>/dev/null || true)" + if [ -n "${root}" ]; then + pushd "${root}" >/dev/null + git_grep -l --null \ + -e '^// Code generated by informer-gen. DO NOT EDIT.$' \ + ':(glob)**/*.go' \ + | xargs -0 rm -f + popd >/dev/null + fi fi echo "Generating informers for ${GROUPS_WITH_VERSIONS} at ${OUTPUT_PKG}/informers" @@ -254,12 +274,14 @@ if grep -qw "informer" <<<"${GENS}"; then fi if grep -qw "openapi" <<<"${GENS}"; then - # Nuke existing files - for dir in $(GO111MODULE=on go list -f '{{.Dir}}' "${FQ_APIS[@]}"); do - pushd "${dir}" >/dev/null - git_find -z ':(glob)**'/zz_generated.openapi.go | xargs -0 rm -f - popd >/dev/null - done + if [ ! "$verify_only" ]; then + # Nuke existing files + for dir in $(GO111MODULE=on go list -f '{{.Dir}}' "${FQ_APIS[@]}"); do + pushd "${dir}" >/dev/null + git_find -z ':(glob)**'/zz_generated.openapi.go | xargs -0 rm -f + popd >/dev/null + done + fi echo "Generating OpenAPI definitions for ${GROUPS_WITH_VERSIONS} at ${OUTPUT_PKG}/openapi" declare -a OPENAPI_EXTRA_PACKAGES diff --git a/vendor/modules.txt b/vendor/modules.txt index 89c5f1691..bf765c1fc 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -57,11 +57,15 @@ github.com/fluent/fluent-operator/v2/pkg/utils # github.com/fsnotify/fsnotify v1.7.0 ## explicit; go 1.17 github.com/fsnotify/fsnotify +# github.com/gardener/cert-management v0.13.0 +## explicit; go 1.22 +github.com/gardener/cert-management/pkg/apis/cert +github.com/gardener/cert-management/pkg/apis/cert/v1alpha1 # github.com/gardener/etcd-druid v0.22.0 ## explicit; go 1.21 github.com/gardener/etcd-druid/api/v1alpha1 -# github.com/gardener/gardener v1.90.2 -## explicit; go 1.22.0 +# github.com/gardener/gardener v1.92.0 +## explicit; go 1.22.2 github.com/gardener/gardener/.github github.com/gardener/gardener/.github/ISSUE_TEMPLATE github.com/gardener/gardener/extensions/pkg/apis/config @@ -70,10 +74,6 @@ github.com/gardener/gardener/extensions/pkg/controller/cmd github.com/gardener/gardener/extensions/pkg/controller/heartbeat github.com/gardener/gardener/extensions/pkg/controller/heartbeat/cmd github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig -github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/actuator -github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/generator -github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/generator/test -github.com/gardener/gardener/extensions/pkg/controller/operatingsystemconfig/oscommon/template github.com/gardener/gardener/extensions/pkg/predicate github.com/gardener/gardener/extensions/pkg/util github.com/gardener/gardener/hack @@ -125,12 +125,14 @@ github.com/gardener/gardener/pkg/utils/retry github.com/gardener/gardener/pkg/utils/secrets github.com/gardener/gardener/pkg/utils/test github.com/gardener/gardener/pkg/utils/test/matchers +github.com/gardener/gardener/pkg/utils/test/runtime github.com/gardener/gardener/pkg/utils/timewindow github.com/gardener/gardener/pkg/utils/validation/kubernetesversion github.com/gardener/gardener/pkg/utils/version +github.com/gardener/gardener/third_party/gopkg.in/yaml.v2 github.com/gardener/gardener/third_party/mock/controller-runtime/client -# github.com/gardener/hvpa-controller/api v0.5.0 -## explicit; go 1.15 +# github.com/gardener/hvpa-controller/api v0.15.0 +## explicit; go 1.20 github.com/gardener/hvpa-controller/api/v1alpha1 # github.com/gardener/machine-controller-manager v0.52.0 ## explicit; go 1.21 @@ -204,8 +206,8 @@ github.com/gogo/protobuf/vanity/command # github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da ## explicit github.com/golang/groupcache/lru -# github.com/golang/protobuf v1.5.3 -## explicit; go 1.9 +# github.com/golang/protobuf v1.5.4 +## explicit; go 1.17 github.com/golang/protobuf/jsonpb github.com/golang/protobuf/proto github.com/golang/protobuf/ptypes @@ -310,7 +312,7 @@ github.com/munnerz/goautoneg # github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f ## explicit github.com/mxk/go-flowrate/flowrate -# github.com/onsi/ginkgo/v2 v2.15.0 +# github.com/onsi/ginkgo/v2 v2.17.1 ## explicit; go 1.20 github.com/onsi/ginkgo/v2 github.com/onsi/ginkgo/v2/config @@ -332,7 +334,7 @@ github.com/onsi/ginkgo/v2/internal/parallel_support github.com/onsi/ginkgo/v2/internal/testingtproxy github.com/onsi/ginkgo/v2/reporters github.com/onsi/ginkgo/v2/types -# github.com/onsi/gomega v1.31.1 +# github.com/onsi/gomega v1.32.0 ## explicit; go 1.20 github.com/onsi/gomega github.com/onsi/gomega/format @@ -422,7 +424,7 @@ go.uber.org/zap/internal/exit go.uber.org/zap/internal/pool go.uber.org/zap/internal/stacktrace go.uber.org/zap/zapcore -# golang.org/x/crypto v0.20.0 +# golang.org/x/crypto v0.21.0 ## explicit; go 1.18 golang.org/x/crypto/bcrypt golang.org/x/crypto/blowfish @@ -435,16 +437,16 @@ golang.org/x/crypto/pbkdf2 golang.org/x/crypto/scrypt golang.org/x/crypto/ssh golang.org/x/crypto/ssh/internal/bcrypt_pbkdf -# golang.org/x/exp v0.0.0-20230905200255-921286631fa9 +# golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 ## explicit; go 1.20 golang.org/x/exp/maps -# golang.org/x/mod v0.14.0 +# golang.org/x/mod v0.16.0 ## explicit; go 1.18 golang.org/x/mod/internal/lazyregexp golang.org/x/mod/modfile golang.org/x/mod/module golang.org/x/mod/semver -# golang.org/x/net v0.21.0 +# golang.org/x/net v0.22.0 ## explicit; go 1.18 golang.org/x/net/context golang.org/x/net/html @@ -456,17 +458,17 @@ golang.org/x/net/http2/hpack golang.org/x/net/idna golang.org/x/net/internal/socks golang.org/x/net/proxy -# golang.org/x/oauth2 v0.15.0 +# golang.org/x/oauth2 v0.16.0 ## explicit; go 1.18 golang.org/x/oauth2 golang.org/x/oauth2/internal -# golang.org/x/sys v0.17.0 +# golang.org/x/sys v0.18.0 ## explicit; go 1.18 golang.org/x/sys/cpu golang.org/x/sys/plan9 golang.org/x/sys/unix golang.org/x/sys/windows -# golang.org/x/term v0.17.0 +# golang.org/x/term v0.18.0 ## explicit; go 1.18 golang.org/x/term # golang.org/x/text v0.14.0 @@ -494,9 +496,10 @@ golang.org/x/text/unicode/norm # golang.org/x/time v0.5.0 ## explicit; go 1.18 golang.org/x/time/rate -# golang.org/x/tools v0.16.1 -## explicit; go 1.18 +# golang.org/x/tools v0.19.0 +## explicit; go 1.19 golang.org/x/tools/cmd/goimports +golang.org/x/tools/cover golang.org/x/tools/go/ast/astutil golang.org/x/tools/go/ast/inspector golang.org/x/tools/go/gcexportdata @@ -504,6 +507,7 @@ golang.org/x/tools/go/internal/packagesdriver golang.org/x/tools/go/packages golang.org/x/tools/go/types/objectpath golang.org/x/tools/imports +golang.org/x/tools/internal/aliases golang.org/x/tools/internal/event golang.org/x/tools/internal/event/core golang.org/x/tools/internal/event/keys @@ -538,7 +542,7 @@ google.golang.org/genproto/internal ## explicit; go 1.19 google.golang.org/genproto/googleapis/api google.golang.org/genproto/googleapis/api/annotations -# google.golang.org/protobuf v1.32.0 +# google.golang.org/protobuf v1.33.0 ## explicit; go 1.17 google.golang.org/protobuf/encoding/protojson google.golang.org/protobuf/encoding/prototext @@ -546,6 +550,7 @@ google.golang.org/protobuf/encoding/protowire google.golang.org/protobuf/internal/descfmt google.golang.org/protobuf/internal/descopts google.golang.org/protobuf/internal/detrand +google.golang.org/protobuf/internal/editiondefaults google.golang.org/protobuf/internal/encoding/defval google.golang.org/protobuf/internal/encoding/json google.golang.org/protobuf/internal/encoding/messageset @@ -569,6 +574,7 @@ google.golang.org/protobuf/reflect/protoregistry google.golang.org/protobuf/runtime/protoiface google.golang.org/protobuf/runtime/protoimpl google.golang.org/protobuf/types/descriptorpb +google.golang.org/protobuf/types/gofeaturespb google.golang.org/protobuf/types/known/anypb google.golang.org/protobuf/types/known/durationpb google.golang.org/protobuf/types/known/structpb @@ -583,7 +589,7 @@ gopkg.in/yaml.v2 # gopkg.in/yaml.v3 v3.0.1 ## explicit gopkg.in/yaml.v3 -# helm.sh/helm/v3 v3.14.2 +# helm.sh/helm/v3 v3.14.3 ## explicit; go 1.21 helm.sh/helm/v3/internal/sympath helm.sh/helm/v3/internal/version @@ -595,18 +601,18 @@ helm.sh/helm/v3/pkg/ignore helm.sh/helm/v3/pkg/release helm.sh/helm/v3/pkg/releaseutil helm.sh/helm/v3/pkg/time -# istio.io/api v1.19.7-0.20240110022508-68cf4097ffc5 +# istio.io/api v1.19.8 ## explicit; go 1.18 istio.io/api/analysis/v1alpha1 istio.io/api/meta/v1alpha1 istio.io/api/networking/v1alpha3 istio.io/api/networking/v1beta1 istio.io/api/type/v1beta1 -# istio.io/client-go v1.19.7-0.20240110023605-ad5ce1f48b56 +# istio.io/client-go v1.19.8 ## explicit; go 1.18 istio.io/client-go/pkg/apis/networking/v1alpha3 istio.io/client-go/pkg/apis/networking/v1beta1 -# k8s.io/api v0.29.2 +# k8s.io/api v0.29.3 ## explicit; go 1.21 k8s.io/api/admission/v1 k8s.io/api/admission/v1beta1 @@ -662,13 +668,13 @@ k8s.io/api/scheduling/v1beta1 k8s.io/api/storage/v1 k8s.io/api/storage/v1alpha1 k8s.io/api/storage/v1beta1 -# k8s.io/apiextensions-apiserver v0.29.2 +# k8s.io/apiextensions-apiserver v0.29.3 ## explicit; go 1.21 k8s.io/apiextensions-apiserver/pkg/apis/apiextensions k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1 k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1 k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/scheme -# k8s.io/apimachinery v0.29.2 +# k8s.io/apimachinery v0.29.3 ## explicit; go 1.21 k8s.io/apimachinery/pkg/api/equality k8s.io/apimachinery/pkg/api/errors @@ -730,7 +736,7 @@ k8s.io/apimachinery/third_party/forked/golang/reflect # k8s.io/autoscaler/vertical-pod-autoscaler v1.0.0 ## explicit; go 1.19 k8s.io/autoscaler/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1 -# k8s.io/client-go v0.29.2 +# k8s.io/client-go v0.29.3 ## explicit; go 1.21 k8s.io/client-go/applyconfigurations/admissionregistration/v1 k8s.io/client-go/applyconfigurations/admissionregistration/v1alpha1 @@ -874,7 +880,7 @@ k8s.io/client-go/util/flowcontrol k8s.io/client-go/util/homedir k8s.io/client-go/util/keyutil k8s.io/client-go/util/workqueue -# k8s.io/code-generator v0.29.2 +# k8s.io/code-generator v0.29.3 ## explicit; go 1.21 k8s.io/code-generator k8s.io/code-generator/cmd/applyconfiguration-gen @@ -913,7 +919,7 @@ k8s.io/code-generator/cmd/set-gen k8s.io/code-generator/pkg/namer k8s.io/code-generator/pkg/util k8s.io/code-generator/third_party/forked/golang/reflect -# k8s.io/component-base v0.29.2 +# k8s.io/component-base v0.29.3 ## explicit; go 1.21 k8s.io/component-base/config k8s.io/component-base/config/v1alpha1 @@ -947,7 +953,7 @@ k8s.io/klog/v2/internal/dbg k8s.io/klog/v2/internal/serialize k8s.io/klog/v2/internal/severity k8s.io/klog/v2/internal/sloghandler -# k8s.io/kube-aggregator v0.29.2 +# k8s.io/kube-aggregator v0.29.3 ## explicit; go 1.21 k8s.io/kube-aggregator/pkg/apis/apiregistration k8s.io/kube-aggregator/pkg/apis/apiregistration/v1 @@ -969,14 +975,14 @@ k8s.io/kube-openapi/pkg/spec3 k8s.io/kube-openapi/pkg/util/proto k8s.io/kube-openapi/pkg/util/sets k8s.io/kube-openapi/pkg/validation/spec -# k8s.io/kubelet v0.29.2 +# k8s.io/kubelet v0.29.3 ## explicit; go 1.21 k8s.io/kubelet/pkg/apis -# k8s.io/metrics v0.29.2 +# k8s.io/metrics v0.29.3 ## explicit; go 1.21 k8s.io/metrics/pkg/apis/metrics k8s.io/metrics/pkg/apis/metrics/v1beta1 -# k8s.io/utils v0.0.0-20240102154912-e7106e64919e +# k8s.io/utils v0.0.0-20240310230437-4693a0247e57 ## explicit; go 1.18 k8s.io/utils/buffer k8s.io/utils/clock