diff --git a/.gitignore b/.gitignore
index f9f123e466..b8aa4aaabc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -27,3 +27,6 @@ cmd/argocd/argocd
cmd/argocd-application-controller/argocd-application-controller
cmd/argocd-repo-server/argocd-repo-server
cmd/argocd-server/argocd-server
+
+# ignore generated `.argocd-helm-dep-up` marker file; this should not be committed to git
+reposerver/repository/testdata/**/.argocd-helm-dep-up
\ No newline at end of file
diff --git a/Makefile b/Makefile
index 25e5b5a685..77e4690bf0 100644
--- a/Makefile
+++ b/Makefile
@@ -598,6 +598,7 @@ install-test-tools-local:
./hack/install.sh kustomize
./hack/install.sh helm
./hack/install.sh gotestsum
+ ./hack/install.sh oras
# Installs all tools required for running codegen (Linux packages)
.PHONY: install-codegen-tools-local
diff --git a/Procfile b/Procfile
index e748770659..090dc2d19c 100644
--- a/Procfile
+++ b/Procfile
@@ -8,6 +8,7 @@ commit-server: [ "$BIN_MODE" = 'true' ] && COMMAND=./dist/argocd || COMMAND='go
ui: sh -c 'cd ui && ${ARGOCD_E2E_YARN_CMD:-yarn} start'
git-server: test/fixture/testrepos/start-git.sh
helm-registry: test/fixture/testrepos/start-helm-registry.sh
+oci-registry: test/fixture/testrepos/start-authenticated-helm-registry.sh
dev-mounter: [[ "$ARGOCD_E2E_TEST" != "true" ]] && go run hack/dev-mounter/main.go --configmap argocd-ssh-known-hosts-cm=${ARGOCD_SSH_DATA_PATH:-/tmp/argocd-local/ssh} --configmap argocd-tls-certs-cm=${ARGOCD_TLS_DATA_PATH:-/tmp/argocd-local/tls} --configmap argocd-gpg-keys-cm=${ARGOCD_GPG_DATA_PATH:-/tmp/argocd-local/gpg/source}
applicationset-controller: [ "$BIN_MODE" = 'true' ] && COMMAND=./dist/argocd || COMMAND='go run ./cmd/main.go' && sh -c "GOCOVERDIR=${ARGOCD_COVERAGE_DIR:-/tmp/coverage/applicationset-controller} FORCE_LOG_COLORS=4 ARGOCD_FAKE_IN_CLUSTER=true ARGOCD_TLS_DATA_PATH=${ARGOCD_TLS_DATA_PATH:-/tmp/argocd-local/tls} ARGOCD_SSH_DATA_PATH=${ARGOCD_SSH_DATA_PATH:-/tmp/argocd-local/ssh} ARGOCD_BINARY_NAME=argocd-applicationset-controller $COMMAND --loglevel debug --metrics-addr localhost:12345 --probe-addr localhost:12346 --argocd-repo-server localhost:${ARGOCD_E2E_REPOSERVER_PORT:-8081}"
notification: [ "$BIN_MODE" = 'true' ] && COMMAND=./dist/argocd || COMMAND='go run ./cmd/main.go' && sh -c "GOCOVERDIR=${ARGOCD_COVERAGE_DIR:-/tmp/coverage/notification} FORCE_LOG_COLORS=4 ARGOCD_FAKE_IN_CLUSTER=true ARGOCD_TLS_DATA_PATH=${ARGOCD_TLS_DATA_PATH:-/tmp/argocd-local/tls} ARGOCD_BINARY_NAME=argocd-notifications $COMMAND --loglevel debug --application-namespaces=${ARGOCD_APPLICATION_NAMESPACES:-''} --self-service-notification-enabled=${ARGOCD_NOTIFICATION_CONTROLLER_SELF_SERVICE_NOTIFICATION_ENABLED:-'false'}"
\ No newline at end of file
diff --git a/assets/swagger.json b/assets/swagger.json
index b549b63d08..01ffd485cc 100644
--- a/assets/swagger.json
+++ b/assets/swagger.json
@@ -1704,6 +1704,70 @@
}
}
},
+ "/api/v1/applications/{name}/revisions/{revision}/ocimetadata": {
+ "get": {
+ "tags": [
+ "ApplicationService"
+ ],
+ "summary": "Get the chart metadata (description, maintainers, home) for a specific revision of the application",
+ "operationId": "ApplicationService_GetOCIMetadata",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "the application's name",
+ "name": "name",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "the revision of the app",
+ "name": "revision",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "the application's namespace.",
+ "name": "appNamespace",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "name": "project",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "format": "int32",
+ "description": "source index (for multi source apps).",
+ "name": "sourceIndex",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "format": "int32",
+ "description": "versionId from historical data (for multi source apps).",
+ "name": "versionId",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "A successful response.",
+ "schema": {
+ "$ref": "#/definitions/v1alpha1OCIMetadata"
+ }
+ },
+ "default": {
+ "description": "An unexpected error response.",
+ "schema": {
+ "$ref": "#/definitions/runtimeError"
+ }
+ }
+ }
+ }
+ },
"/api/v1/applications/{name}/rollback": {
"post": {
"tags": [
@@ -3576,6 +3640,49 @@
}
}
},
+ "/api/v1/repositories/{repo}/oci-tags": {
+ "get": {
+ "tags": [
+ "RepositoryService"
+ ],
+ "operationId": "RepositoryService_ListOCITags",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Repo URL for query",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "boolean",
+ "description": "Whether to force a cache refresh on repo's connection state.",
+ "name": "forceRefresh",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "App project for query.",
+ "name": "appProject",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "A successful response.",
+ "schema": {
+ "$ref": "#/definitions/repositoryRefs"
+ }
+ },
+ "default": {
+ "description": "An unexpected error response.",
+ "schema": {
+ "$ref": "#/definitions/runtimeError"
+ }
+ }
+ }
+ }
+ },
"/api/v1/repositories/{repo}/refs": {
"get": {
"tags": [
@@ -3758,6 +3865,12 @@
"description": "BearerToken contains the bearer token used for Git auth at the repo server.",
"name": "bearerToken",
"in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "Whether https should be disabled for an OCI repo.",
+ "name": "insecureOciForceHttp",
+ "in": "query"
}
],
"responses": {
@@ -4596,6 +4709,12 @@
"description": "BearerToken contains the bearer token used for Git auth at the repo server.",
"name": "bearerToken",
"in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "Whether https should be disabled for an OCI repo.",
+ "name": "insecureOciForceHttp",
+ "in": "query"
}
],
"responses": {
@@ -8130,7 +8249,7 @@
},
"subType": {
"type": "string",
- "title": "SubType holds the key's sub type (e.g. rsa4096)"
+ "title": "SubType holds the key's subtype (e.g. rsa4096)"
},
"trust": {
"type": "string",
@@ -8531,6 +8650,33 @@
}
}
},
+ "v1alpha1OCIMetadata": {
+ "type": "object",
+ "title": "OCIMetadata contains metadata for a specific revision in an OCI repository",
+ "properties": {
+ "authors": {
+ "type": "string"
+ },
+ "createdAt": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "docsUrl": {
+ "type": "string"
+ },
+ "imageUrl": {
+ "type": "string"
+ },
+ "sourceUrl": {
+ "type": "string"
+ },
+ "version": {
+ "type": "string"
+ }
+ }
+ },
"v1alpha1Operation": {
"type": "object",
"title": "Operation contains information about a requested or running operation",
@@ -9022,6 +9168,10 @@
"type": "string",
"title": "GithubAppPrivateKey specifies the private key PEM data for authentication via GitHub app"
},
+ "insecureOCIForceHttp": {
+ "description": "InsecureOCIForceHttp specifies whether the connection to the repository uses TLS at _all_. If true, no TLS. This flag is applicable for OCI repos only.",
+ "type": "boolean"
+ },
"noProxy": {
"type": "string",
"title": "NoProxy specifies a list of targets where the proxy isn't used, applies only in cases where the proxy is applied"
@@ -9136,6 +9286,10 @@
"type": "boolean",
"title": "InsecureIgnoreHostKey should not be used anymore, Insecure is favoured\nUsed only for Git repos"
},
+ "insecureOCIForceHttp": {
+ "description": "InsecureOCIForceHttp specifies whether the connection to the repository uses TLS at _all_. If true, no TLS. This flag is applicable for OCI repos only.",
+ "type": "boolean"
+ },
"name": {
"type": "string",
"title": "Name specifies a name to be used for this repo. Only used with Helm repos"
diff --git a/cmd/argocd-repo-server/commands/argocd_repo_server.go b/cmd/argocd-repo-server/commands/argocd_repo_server.go
index fd8e0bd0be..50eafe1a33 100644
--- a/cmd/argocd-repo-server/commands/argocd_repo_server.go
+++ b/cmd/argocd-repo-server/commands/argocd_repo_server.go
@@ -53,30 +53,33 @@ var (
func NewCommand() *cobra.Command {
var (
- parallelismLimit int64
- listenPort int
- listenHost string
- metricsPort int
- metricsHost string
- otlpAddress string
- otlpInsecure bool
- otlpHeaders map[string]string
- otlpAttrs []string
- cacheSrc func() (*reposervercache.Cache, error)
- tlsConfigCustomizer tls.ConfigCustomizer
- tlsConfigCustomizerSrc func() (tls.ConfigCustomizer, error)
- redisClient *redis.Client
- disableTLS bool
- maxCombinedDirectoryManifestsSize string
- cmpTarExcludedGlobs []string
- allowOutOfBoundsSymlinks bool
- streamedManifestMaxTarSize string
- streamedManifestMaxExtractedSize string
- helmManifestMaxExtractedSize string
- helmRegistryMaxIndexSize string
- disableManifestMaxExtractedSize bool
- includeHiddenDirectories bool
- cmpUseManifestGeneratePaths bool
+ parallelismLimit int64
+ listenPort int
+ listenHost string
+ metricsPort int
+ metricsHost string
+ otlpAddress string
+ otlpInsecure bool
+ otlpHeaders map[string]string
+ otlpAttrs []string
+ cacheSrc func() (*reposervercache.Cache, error)
+ tlsConfigCustomizer tls.ConfigCustomizer
+ tlsConfigCustomizerSrc func() (tls.ConfigCustomizer, error)
+ redisClient *redis.Client
+ disableTLS bool
+ maxCombinedDirectoryManifestsSize string
+ cmpTarExcludedGlobs []string
+ allowOutOfBoundsSymlinks bool
+ streamedManifestMaxTarSize string
+ streamedManifestMaxExtractedSize string
+ helmManifestMaxExtractedSize string
+ helmRegistryMaxIndexSize string
+ ociManifestMaxExtractedSize string
+ disableOCIManifestMaxExtractedSize bool
+ disableManifestMaxExtractedSize bool
+ includeHiddenDirectories bool
+ cmpUseManifestGeneratePaths bool
+ ociMediaTypes []string
)
command := cobra.Command{
Use: cliName,
@@ -125,6 +128,9 @@ func NewCommand() *cobra.Command {
helmManifestMaxExtractedSizeQuantity, err := resource.ParseQuantity(helmManifestMaxExtractedSize)
errors.CheckError(err)
+ ociManifestMaxExtractedSizeQuantity, err := resource.ParseQuantity(ociManifestMaxExtractedSize)
+ errors.CheckError(err)
+
helmRegistryMaxIndexSizeQuantity, err := resource.ParseQuantity(helmRegistryMaxIndexSize)
errors.CheckError(err)
@@ -144,8 +150,11 @@ func NewCommand() *cobra.Command {
StreamedManifestMaxTarSize: streamedManifestMaxTarSizeQuantity.ToDec().Value(),
HelmManifestMaxExtractedSize: helmManifestMaxExtractedSizeQuantity.ToDec().Value(),
HelmRegistryMaxIndexSize: helmRegistryMaxIndexSizeQuantity.ToDec().Value(),
+ OCIManifestMaxExtractedSize: ociManifestMaxExtractedSizeQuantity.ToDec().Value(),
+ DisableOCIManifestMaxExtractedSize: disableOCIManifestMaxExtractedSize,
IncludeHiddenDirectories: includeHiddenDirectories,
CMPUseManifestGeneratePaths: cmpUseManifestGeneratePaths,
+ OCIMediaTypes: ociMediaTypes,
}, askPassServer)
errors.CheckError(err)
@@ -249,9 +258,12 @@ func NewCommand() *cobra.Command {
command.Flags().StringVar(&streamedManifestMaxExtractedSize, "streamed-manifest-max-extracted-size", env.StringFromEnv("ARGOCD_REPO_SERVER_STREAMED_MANIFEST_MAX_EXTRACTED_SIZE", "1G"), "Maximum size of streamed manifest archives when extracted")
command.Flags().StringVar(&helmManifestMaxExtractedSize, "helm-manifest-max-extracted-size", env.StringFromEnv("ARGOCD_REPO_SERVER_HELM_MANIFEST_MAX_EXTRACTED_SIZE", "1G"), "Maximum size of helm manifest archives when extracted")
command.Flags().StringVar(&helmRegistryMaxIndexSize, "helm-registry-max-index-size", env.StringFromEnv("ARGOCD_REPO_SERVER_HELM_MANIFEST_MAX_INDEX_SIZE", "1G"), "Maximum size of registry index file")
+ command.Flags().StringVar(&ociManifestMaxExtractedSize, "oci-manifest-max-extracted-size", env.StringFromEnv("ARGOCD_REPO_SERVER_OCI_MANIFEST_MAX_EXTRACTED_SIZE", "1G"), "Maximum size of oci manifest archives when extracted")
+ command.Flags().BoolVar(&disableOCIManifestMaxExtractedSize, "disable-oci-manifest-max-extracted-size", env.ParseBoolFromEnv("ARGOCD_REPO_SERVER_DISABLE_OCI_MANIFEST_MAX_EXTRACTED_SIZE", false), "Disable maximum size of oci manifest archives when extracted")
command.Flags().BoolVar(&disableManifestMaxExtractedSize, "disable-helm-manifest-max-extracted-size", env.ParseBoolFromEnv("ARGOCD_REPO_SERVER_DISABLE_HELM_MANIFEST_MAX_EXTRACTED_SIZE", false), "Disable maximum size of helm manifest archives when extracted")
command.Flags().BoolVar(&includeHiddenDirectories, "include-hidden-directories", env.ParseBoolFromEnv("ARGOCD_REPO_SERVER_INCLUDE_HIDDEN_DIRECTORIES", false), "Include hidden directories from Git")
command.Flags().BoolVar(&cmpUseManifestGeneratePaths, "plugin-use-manifest-generate-paths", env.ParseBoolFromEnv("ARGOCD_REPO_SERVER_PLUGIN_USE_MANIFEST_GENERATE_PATHS", false), "Pass the resources described in argocd.argoproj.io/manifest-generate-paths value to the cmpserver to generate the application manifests.")
+ command.Flags().StringSliceVar(&ociMediaTypes, "oci-layer-media-types", env.StringsFromEnv("ARGOCD_REPO_SERVER_OCI_LAYER_MEDIA_TYPES", []string{"application/vnd.oci.image.layer.v1.tar", "application/vnd.oci.image.layer.v1.tar+gzip", "application/vnd.cncf.helm.chart.content.v1.tar+gzip"}, ","), "Comma separated list of allowed media types for OCI media types. This only accounts for media types within layers.")
tlsConfigCustomizerSrc = tls.AddTLSFlagsToCmd(&command)
cacheSrc = reposervercache.AddCacheFlagsToCmd(&command, cacheutil.Options{
OnClientCreated: func(client *redis.Client) {
diff --git a/cmd/argocd/commands/admin/repo.go b/cmd/argocd/commands/admin/repo.go
index e3e00368a2..43fbe76251 100644
--- a/cmd/argocd/commands/admin/repo.go
+++ b/cmd/argocd/commands/admin/repo.go
@@ -68,6 +68,15 @@ func NewGenRepoSpecCommand() *cobra.Command {
# Add a private Helm OCI-based repository named 'stable' via HTTPS
argocd admin repo generate-spec helm-oci-registry.cn-zhangjiakou.cr.aliyuncs.com --type helm --name stable --enable-oci --username test --password test
+
+ # Add a private HTTPS OCI repository named 'stable'
+ argocd repo generate-spec oci://helm-oci-registry.cn-zhangjiakou.cr.aliyuncs.com --type oci --name stable --username test --password test
+
+ # Add a private OCI repository named 'stable' without verifying the server's TLS certificate
+ argocd repo generate-spec oci://helm-oci-registry.cn-zhangjiakou.cr.aliyuncs.com --type oci --name stable --username test --password test --insecure-skip-server-verification
+
+ # Add a private HTTP OCI repository named 'stable'
+ argocd repo generate-spec oci://helm-oci-registry.cn-zhangjiakou.cr.aliyuncs.com --type oci --name stable --username test --password test --insecure-oci-force-http
`
command := &cobra.Command{
@@ -130,6 +139,7 @@ func NewGenRepoSpecCommand() *cobra.Command {
repoOpts.Repo.EnableLFS = repoOpts.EnableLfs
repoOpts.Repo.EnableOCI = repoOpts.EnableOci
repoOpts.Repo.UseAzureWorkloadIdentity = repoOpts.UseAzureWorkloadIdentity
+ repoOpts.Repo.InsecureOCIForceHttp = repoOpts.InsecureOCIForceHTTP
if repoOpts.Repo.Type == "helm" && repoOpts.Repo.Name == "" {
errors.CheckError(stderrors.New("must specify --name for repos of type 'helm'"))
diff --git a/cmd/argocd/commands/app_test.go b/cmd/argocd/commands/app_test.go
index 3e8b3182b9..2661420c29 100644
--- a/cmd/argocd/commands/app_test.go
+++ b/cmd/argocd/commands/app_test.go
@@ -2154,6 +2154,10 @@ func (c *fakeAppServiceClient) GetApplicationSyncWindows(_ context.Context, _ *a
return nil, nil
}
+func (c *fakeAppServiceClient) GetOCIMetadata(_ context.Context, _ *applicationpkg.RevisionMetadataQuery, _ ...grpc.CallOption) (*v1alpha1.OCIMetadata, error) {
+ return nil, nil
+}
+
func (c *fakeAppServiceClient) RevisionMetadata(_ context.Context, _ *applicationpkg.RevisionMetadataQuery, _ ...grpc.CallOption) (*v1alpha1.RevisionMetadata, error) {
return nil, nil
}
diff --git a/cmd/argocd/commands/repo.go b/cmd/argocd/commands/repo.go
index 3619cc1b62..1703ca376e 100644
--- a/cmd/argocd/commands/repo.go
+++ b/cmd/argocd/commands/repo.go
@@ -84,6 +84,15 @@ func NewRepoAddCommand(clientOpts *argocdclient.ClientOptions) *cobra.Command {
# Add a private Helm OCI-based repository named 'stable' via HTTPS
argocd repo add helm-oci-registry.cn-zhangjiakou.cr.aliyuncs.com --type helm --name stable --enable-oci --username test --password test
+
+ # Add a private HTTPS OCI repository named 'stable'
+ argocd repo add oci://helm-oci-registry.cn-zhangjiakou.cr.aliyuncs.com --type oci --name stable --username test --password test
+
+ # Add a private OCI repository named 'stable' without verifying the server's TLS certificate
+ argocd repo add oci://helm-oci-registry.cn-zhangjiakou.cr.aliyuncs.com --type oci --name stable --username test --password test --insecure-skip-server-verification
+
+ # Add a private HTTP OCI repository named 'stable'
+ argocd repo add oci://helm-oci-registry.cn-zhangjiakou.cr.aliyuncs.com --type oci --name stable --username test --password test --insecure-oci-force-http
# Add a private Git repository on GitHub.com via GitHub App
argocd repo add https://git.example.com/repos/repo --github-app-id 1 --github-app-installation-id 2 --github-app-private-key-path test.private-key.pem
@@ -187,6 +196,10 @@ func NewRepoAddCommand(clientOpts *argocdclient.ClientOptions) *cobra.Command {
errors.Fatal(errors.ErrorGeneric, "Must specify --name for repos of type 'helm'")
}
+ if repoOpts.Repo.Type == "oci" && repoOpts.InsecureOCIForceHTTP {
+ repoOpts.Repo.InsecureOCIForceHttp = repoOpts.InsecureOCIForceHTTP
+ }
+
conn, repoIf := headless.NewClientOrDie(clientOpts, c).NewRepoClientOrDie()
defer utilio.Close(conn)
@@ -204,7 +217,7 @@ func NewRepoAddCommand(clientOpts *argocdclient.ClientOptions) *cobra.Command {
errors.CheckError(err)
// We let the server check access to the repository before adding it. If
- // it is a private repo, but we cannot access with with the credentials
+ // it is a private repo, but we cannot access with the credentials
// that were supplied, we bail out.
//
// Skip validation if we are just adding credentials template, chances
@@ -231,6 +244,7 @@ func NewRepoAddCommand(clientOpts *argocdclient.ClientOptions) *cobra.Command {
GcpServiceAccountKey: repoOpts.Repo.GCPServiceAccountKey,
ForceHttpBasicAuth: repoOpts.Repo.ForceHttpBasicAuth,
UseAzureWorkloadIdentity: repoOpts.Repo.UseAzureWorkloadIdentity,
+ InsecureOciForceHttp: repoOpts.Repo.InsecureOCIForceHttp,
}
_, err = repoIf.ValidateAccess(ctx, &repoAccessReq)
errors.CheckError(err)
diff --git a/cmd/util/repo.go b/cmd/util/repo.go
index a46951071d..15fe8aefe4 100644
--- a/cmd/util/repo.go
+++ b/cmd/util/repo.go
@@ -11,6 +11,7 @@ type RepoOptions struct {
Repo appsv1.Repository
Upsert bool
SshPrivateKeyPath string //nolint:revive //FIXME(var-naming)
+ InsecureOCIForceHTTP bool
InsecureIgnoreHostKey bool
InsecureSkipServerVerification bool
TlsClientCertPath string //nolint:revive //FIXME(var-naming)
@@ -29,7 +30,7 @@ type RepoOptions struct {
}
func AddRepoFlags(command *cobra.Command, opts *RepoOptions) {
- command.Flags().StringVar(&opts.Repo.Type, "type", common.DefaultRepoType, "type of the repository, \"git\" or \"helm\"")
+ command.Flags().StringVar(&opts.Repo.Type, "type", common.DefaultRepoType, "type of the repository, \"git\", \"oci\" or \"helm\"")
command.Flags().StringVar(&opts.Repo.Name, "name", "", "name of the repository, mandatory for repositories of type helm")
command.Flags().StringVar(&opts.Repo.Project, "project", "", "project of the repository")
command.Flags().StringVar(&opts.Repo.Username, "username", "", "username to the repository")
@@ -41,7 +42,7 @@ func AddRepoFlags(command *cobra.Command, opts *RepoOptions) {
command.Flags().BoolVar(&opts.InsecureIgnoreHostKey, "insecure-ignore-host-key", false, "disables SSH strict host key checking (deprecated, use --insecure-skip-server-verification instead)")
command.Flags().BoolVar(&opts.InsecureSkipServerVerification, "insecure-skip-server-verification", false, "disables server certificate and host key checks")
command.Flags().BoolVar(&opts.EnableLfs, "enable-lfs", false, "enable git-lfs (Large File Support) on this repository")
- command.Flags().BoolVar(&opts.EnableOci, "enable-oci", false, "enable helm-oci (Helm OCI-Based Repository)")
+ command.Flags().BoolVar(&opts.EnableOci, "enable-oci", false, "enable helm-oci (Helm OCI-Based Repository) (only valid for helm type repositories)")
command.Flags().Int64Var(&opts.GithubAppId, "github-app-id", 0, "id of the GitHub Application")
command.Flags().Int64Var(&opts.GithubAppInstallationId, "github-app-installation-id", 0, "installation id of the GitHub Application")
command.Flags().StringVar(&opts.GithubAppPrivateKeyPath, "github-app-private-key-path", "", "private key of the GitHub Application")
@@ -51,4 +52,5 @@ func AddRepoFlags(command *cobra.Command, opts *RepoOptions) {
command.Flags().StringVar(&opts.GCPServiceAccountKeyPath, "gcp-service-account-key-path", "", "service account key for the Google Cloud Platform")
command.Flags().BoolVar(&opts.ForceHttpBasicAuth, "force-http-basic-auth", false, "whether to force use of basic auth when connecting repository via HTTP")
command.Flags().BoolVar(&opts.UseAzureWorkloadIdentity, "use-azure-workload-identity", false, "whether to use azure workload identity for authentication")
+ command.Flags().BoolVar(&opts.InsecureOCIForceHTTP, "insecure-oci-force-http", false, "Use http when accessing an OCI repository")
}
diff --git a/controller/state.go b/controller/state.go
index b0a63d1b81..efb6d9352f 100644
--- a/controller/state.go
+++ b/controller/state.go
@@ -6,6 +6,7 @@ import (
"errors"
"fmt"
"reflect"
+ "slices"
"strings"
goSync "sync"
"time"
@@ -138,6 +139,15 @@ func (m *appStateManager) GetRepoObjs(app *v1alpha1.Application, sources []v1alp
return nil, nil, false, fmt.Errorf("failed to get permitted Helm repositories for project %q: %w", proj.Name, err)
}
+ ociRepos, err := m.db.ListOCIRepositories(context.Background())
+ if err != nil {
+ return nil, nil, false, fmt.Errorf("failed to list OCI repositories: %w", err)
+ }
+ permittedOCIRepos, err := argo.GetPermittedRepos(proj, ociRepos)
+ if err != nil {
+ return nil, nil, false, fmt.Errorf("failed to get permitted OCI repositories for project %q: %w", proj.Name, err)
+ }
+
ts.AddCheckpoint("repo_ms")
helmRepositoryCredentials, err := m.db.GetAllHelmRepositoryCredentials(context.Background())
if err != nil {
@@ -148,6 +158,15 @@ func (m *appStateManager) GetRepoObjs(app *v1alpha1.Application, sources []v1alp
return nil, nil, false, fmt.Errorf("failed to get permitted Helm credentials for project %q: %w", proj.Name, err)
}
+ ociRepositoryCredentials, err := m.db.GetAllOCIRepositoryCredentials(context.Background())
+ if err != nil {
+ return nil, nil, false, fmt.Errorf("failed to get OCI credentials: %w", err)
+ }
+ permittedOCICredentials, err := argo.GetPermittedReposCredentials(proj, ociRepositoryCredentials)
+ if err != nil {
+ return nil, nil, false, fmt.Errorf("failed to get permitted OCI credentials for project %q: %w", proj.Name, err)
+ }
+
enabledSourceTypes, err := m.settingsMgr.GetEnabledSourceTypes()
if err != nil {
return nil, nil, false, fmt.Errorf("failed to get enabled source types: %w", err)
@@ -276,10 +295,22 @@ func (m *appStateManager) GetRepoObjs(app *v1alpha1.Application, sources []v1alp
atLeastOneRevisionIsNotPossibleToBeUpdated = true
}
+ repos := permittedHelmRepos
+ helmRepoCreds := permittedHelmCredentials
+ // If the source is OCI, there is a potential for an OCI image to be a Helm chart and that said chart in
+ // turn would have OCI dependencies. To ensure that those dependencies can be resolved, add them to the repos
+ // list.
+ if source.IsOCI() {
+ repos = slices.Clone(permittedHelmRepos)
+ helmRepoCreds = slices.Clone(permittedHelmCredentials)
+ repos = append(repos, permittedOCIRepos...)
+ helmRepoCreds = append(helmRepoCreds, permittedOCICredentials...)
+ }
+
log.Debugf("Generating Manifest for source %s revision %s", source, revision)
manifestInfo, err := repoClient.GenerateManifest(context.Background(), &apiclient.ManifestRequest{
Repo: repo,
- Repos: permittedHelmRepos,
+ Repos: repos,
Revision: revision,
NoCache: noCache,
NoRevisionCache: noRevisionCache,
@@ -291,7 +322,7 @@ func (m *appStateManager) GetRepoObjs(app *v1alpha1.Application, sources []v1alp
KubeVersion: serverVersion,
ApiVersions: apiVersions,
VerifySignature: verifySignature,
- HelmRepoCreds: permittedHelmCredentials,
+ HelmRepoCreds: helmRepoCreds,
TrackingMethod: trackingMethod,
EnabledSourceTypes: enabledSourceTypes,
HelmOptions: helmOptions,
diff --git a/docs/operator-manual/server-commands/argocd-repo-server.md b/docs/operator-manual/server-commands/argocd-repo-server.md
index bd3d5602b7..cb7e258840 100644
--- a/docs/operator-manual/server-commands/argocd-repo-server.md
+++ b/docs/operator-manual/server-commands/argocd-repo-server.md
@@ -19,6 +19,7 @@ argocd-repo-server [flags]
--allow-oob-symlinks Allow out-of-bounds symlinks in repositories (not recommended)
--default-cache-expiration duration Cache expiration default (default 24h0m0s)
--disable-helm-manifest-max-extracted-size Disable maximum size of helm manifest archives when extracted
+ --disable-oci-manifest-max-extracted-size Disable maximum size of oci manifest archives when extracted
--disable-tls Disable TLS on the gRPC endpoint
--helm-manifest-max-extracted-size string Maximum size of helm manifest archives when extracted (default "1G")
--helm-registry-max-index-size string Maximum size of registry index file (default "1G")
@@ -29,6 +30,8 @@ argocd-repo-server [flags]
--max-combined-directory-manifests-size string Max combined size of manifest files in a directory-type Application (default "10M")
--metrics-address string Listen on given address for metrics (default "0.0.0.0")
--metrics-port int Start metrics server on given port (default 8084)
+ --oci-layer-media-types strings Comma separated list of allowed media types for OCI media types. This only accounts for media types within layers. (default [application/vnd.oci.image.layer.v1.tar,application/vnd.oci.image.layer.v1.tar+gzip,application/vnd.cncf.helm.chart.content.v1.tar+gzip])
+ --oci-manifest-max-extracted-size string Maximum size of oci manifest archives when extracted (default "1G")
--otlp-address string OpenTelemetry collector address to send traces to
--otlp-attrs strings List of OpenTelemetry collector extra attrs when send traces, each attribute is separated by a colon(e.g. key:value)
--otlp-headers stringToString List of OpenTelemetry collector extra headers sent with traces, headers are comma-separated key-value pairs(e.g. key1=value1,key2=value2) (default [])
diff --git a/docs/user-guide/application_sources.md b/docs/user-guide/application_sources.md
index 31d88545d2..269bdb0a26 100644
--- a/docs/user-guide/application_sources.md
+++ b/docs/user-guide/application_sources.md
@@ -6,13 +6,14 @@ Argo CD supports several different ways in which Kubernetes manifests can be def
* [Kustomize](kustomize.md) applications
* [Helm](helm.md) charts
+* [OCI](oci.md) images
* A directory of YAML, JSON, or [Jsonnet](jsonnet.md) manifests.
* Any [custom config management tool](../operator-manual/config-management-plugins.md) configured as a config management plugin
## Development
Argo CD also supports uploading local manifests directly. Since this is an anti-pattern of the
GitOps paradigm, this should only be done for development purposes. A user with an `override` permission is required
-to upload manifests locally (typically an admin). All of the different Kubernetes deployment tools above are supported.
+to upload manifests locally (typically an admin). All the different Kubernetes deployment tools mentioned above are supported.
To upload a local application:
```bash
diff --git a/docs/user-guide/commands/argocd_admin_repo_generate-spec.md b/docs/user-guide/commands/argocd_admin_repo_generate-spec.md
index ae48af702a..ffd5a7bac2 100644
--- a/docs/user-guide/commands/argocd_admin_repo_generate-spec.md
+++ b/docs/user-guide/commands/argocd_admin_repo_generate-spec.md
@@ -36,6 +36,15 @@ argocd admin repo generate-spec REPOURL [flags]
# Add a private Helm OCI-based repository named 'stable' via HTTPS
argocd admin repo generate-spec helm-oci-registry.cn-zhangjiakou.cr.aliyuncs.com --type helm --name stable --enable-oci --username test --password test
+ # Add a private HTTPS OCI repository named 'stable'
+ argocd repo generate-spec oci://helm-oci-registry.cn-zhangjiakou.cr.aliyuncs.com --type oci --name stable --username test --password test
+
+ # Add a private OCI repository named 'stable' without verifying the server's TLS certificate
+ argocd repo generate-spec oci://helm-oci-registry.cn-zhangjiakou.cr.aliyuncs.com --type oci --name stable --username test --password test --insecure-skip-server-verification
+
+ # Add a private HTTP OCI repository named 'stable'
+ argocd repo generate-spec oci://helm-oci-registry.cn-zhangjiakou.cr.aliyuncs.com --type oci --name stable --username test --password test --insecure-oci-force-http
+
```
### Options
@@ -43,7 +52,7 @@ argocd admin repo generate-spec REPOURL [flags]
```
--bearer-token string bearer token to the Git BitBucket Data Center repository
--enable-lfs enable git-lfs (Large File Support) on this repository
- --enable-oci enable helm-oci (Helm OCI-Based Repository)
+ --enable-oci enable helm-oci (Helm OCI-Based Repository) (only valid for helm type repositories)
--force-http-basic-auth whether to force use of basic auth when connecting repository via HTTP
--gcp-service-account-key-path string service account key for the Google Cloud Platform
--github-app-enterprise-base-url string base url to use when using GitHub Enterprise (e.g. https://ghe.example.com/api/v3
@@ -52,6 +61,7 @@ argocd admin repo generate-spec REPOURL [flags]
--github-app-private-key-path string private key of the GitHub Application
-h, --help help for generate-spec
--insecure-ignore-host-key disables SSH strict host key checking (deprecated, use --insecure-skip-server-verification instead)
+ --insecure-oci-force-http Use http when accessing an OCI repository
--insecure-skip-server-verification disables server certificate and host key checks
--name string name of the repository, mandatory for repositories of type helm
--no-proxy string don't access these targets via proxy
@@ -62,7 +72,7 @@ argocd admin repo generate-spec REPOURL [flags]
--ssh-private-key-path string path to the private ssh key (e.g. ~/.ssh/id_rsa)
--tls-client-cert-key-path string path to the TLS client cert's key path (must be PEM format)
--tls-client-cert-path string path to the TLS client cert (must be PEM format)
- --type string type of the repository, "git" or "helm" (default "git")
+ --type string type of the repository, "git", "oci" or "helm" (default "git")
--use-azure-workload-identity whether to use azure workload identity for authentication
--username string username to the repository
```
diff --git a/docs/user-guide/commands/argocd_repo_add.md b/docs/user-guide/commands/argocd_repo_add.md
index d0a885720d..51c268f7b3 100644
--- a/docs/user-guide/commands/argocd_repo_add.md
+++ b/docs/user-guide/commands/argocd_repo_add.md
@@ -37,6 +37,15 @@ argocd repo add REPOURL [flags]
# Add a private Helm OCI-based repository named 'stable' via HTTPS
argocd repo add helm-oci-registry.cn-zhangjiakou.cr.aliyuncs.com --type helm --name stable --enable-oci --username test --password test
+
+ # Add a private HTTPS OCI repository named 'stable'
+ argocd repo add oci://helm-oci-registry.cn-zhangjiakou.cr.aliyuncs.com --type oci --name stable --username test --password test
+
+ # Add a private OCI repository named 'stable' without verifying the server's TLS certificate
+ argocd repo add oci://helm-oci-registry.cn-zhangjiakou.cr.aliyuncs.com --type oci --name stable --username test --password test --insecure-skip-server-verification
+
+ # Add a private HTTP OCI repository named 'stable'
+ argocd repo add oci://helm-oci-registry.cn-zhangjiakou.cr.aliyuncs.com --type oci --name stable --username test --password test --insecure-oci-force-http
# Add a private Git repository on GitHub.com via GitHub App
argocd repo add https://git.example.com/repos/repo --github-app-id 1 --github-app-installation-id 2 --github-app-private-key-path test.private-key.pem
@@ -54,7 +63,7 @@ argocd repo add REPOURL [flags]
```
--bearer-token string bearer token to the Git BitBucket Data Center repository
--enable-lfs enable git-lfs (Large File Support) on this repository
- --enable-oci enable helm-oci (Helm OCI-Based Repository)
+ --enable-oci enable helm-oci (Helm OCI-Based Repository) (only valid for helm type repositories)
--force-http-basic-auth whether to force use of basic auth when connecting repository via HTTP
--gcp-service-account-key-path string service account key for the Google Cloud Platform
--github-app-enterprise-base-url string base url to use when using GitHub Enterprise (e.g. https://ghe.example.com/api/v3
@@ -63,6 +72,7 @@ argocd repo add REPOURL [flags]
--github-app-private-key-path string private key of the GitHub Application
-h, --help help for add
--insecure-ignore-host-key disables SSH strict host key checking (deprecated, use --insecure-skip-server-verification instead)
+ --insecure-oci-force-http Use http when accessing an OCI repository
--insecure-skip-server-verification disables server certificate and host key checks
--name string name of the repository, mandatory for repositories of type helm
--no-proxy string don't access these targets via proxy
@@ -72,7 +82,7 @@ argocd repo add REPOURL [flags]
--ssh-private-key-path string path to the private ssh key (e.g. ~/.ssh/id_rsa)
--tls-client-cert-key-path string path to the TLS client cert's key path (must be PEM format)
--tls-client-cert-path string path to the TLS client cert (must be PEM format)
- --type string type of the repository, "git" or "helm" (default "git")
+ --type string type of the repository, "git", "oci" or "helm" (default "git")
--upsert Override an existing repository with the same name even if the spec differs
--use-azure-workload-identity whether to use azure workload identity for authentication
--username string username to the repository
diff --git a/docs/user-guide/oci.md b/docs/user-guide/oci.md
new file mode 100644
index 0000000000..34cbefb63c
--- /dev/null
+++ b/docs/user-guide/oci.md
@@ -0,0 +1,122 @@
+# OCI
+
+## Declarative
+
+Argo CD supports using OCI (Open Container Initiative) images as an application source.
+You can install applications using OCI images through the UI, or in the declarative GitOps way.
+Here is an example:
+
+```yaml
+apiVersion: argoproj.io/v1alpha1
+kind: Application
+metadata:
+ name: my-custom-image
+ namespace: argocd
+spec:
+ project: default
+ source:
+ path: .
+ repoURL: oci://registry-1.docker.io/some-user/my-custom-image
+ targetRevision: 1.16.1
+ destination:
+ server: "https://kubernetes.default.svc"
+ namespace: my-namespace
+```
+
+Another example using a public OCI helm chart:
+
+```yaml
+apiVersion: argoproj.io/v1alpha1
+kind: Application
+metadata:
+ name: nginx
+spec:
+ project: default
+ source:
+ path: .
+ repoURL: oci://registry-1.docker.io/bitnamicharts/nginx
+ targetRevision: 15.9.0
+ helm:
+ valuesObject:
+ some-value: foo
+ destination:
+ name: "in-cluster"
+ namespace: nginx
+```
+
+The key to start using OCI images are the following components in the application spec:
+
+* `repoURL`: Specify the OCI image repository URL using the `oci://` scheme, followed by the registry and image name.
+* `targetRevision`: Use this field to specify the desired image tag or digest.
+* `path`: Use this field to select a relative path from the expanded image. If you don't want to select a subpath, use `.`.
+In the case of OCI Helm charts (an OCI artifact where the `mediaType` is set to `application/vnd.cncf.helm.chart.content.v1.tar+gzip`),
+the path should always be set to `.`.
+
+## Usage Guidelines
+
+First off, you'll need to have a repository that is OCI-compliant. As an example, DockerHub, ECR, GHCR and GCR all fit
+the bill.
+
+Secondly, Argo CD expects an OCI image to contain a single layer. It also expects an OCI image to have a media type which
+is accepted by the Argo CD repository server. By default, Argo CD accepts one of the following media types for the image
+layer:
+
+* `application/vnd.oci.image.layer.v1.tar+gzip`
+* `application/vnd.cncf.helm.chart.content.v1.tar+gzip`
+
+Custom media types can be configured by setting the `ARGOCD_REPO_SERVER_OCI_LAYER_MEDIA_TYPES` environment variable
+in the repo-server deployment.
+
+To create an OCI artifact compatible with Argo CD, there are a multitude of tools to choose from. For this example we'll
+use [ORAS](https://oras.land/). Navigate to the directory where your manifests are located and run `oras push`.
+
+```shell
+oras push /guestbook:latest .
+```
+
+ORAS will take care of packaging the directory to a single layer and setting the `mediaType` to
+`application/vnd.oci.image.layer.v1.tar+gzip`.
+
+You can also package your OCI image using a compressed archive.
+
+```shell
+# Create a tarball of the directory containing your manifests. If you are not in the current directory, please ensure
+# that you are setting the correct parent of the directory (that is what the `-C` flag does).
+tar -czvf archive.tar.gz -C manifests .
+```
+
+Then, you can push the archive to your OCI registry using ORAS:
+
+```shell
+# In the case of tarballs, you currently need to set the media type manually.
+oras push /guestbook:latest archive.tar.gz:application/vnd.oci.image.layer.v1.tar+gzip
+```
+
+## OCI Metadata Annotations
+
+Argo CD can display standard OCI metadata annotations, providing additional context and information about your OCI
+images directly in the Argo CD UI.
+
+### Supported Annotations
+
+Argo CD recognizes and displays the following standard OCI annotations:
+
+* `org.opencontainers.image.title`
+* `org.opencontainers.image.description`
+* `org.opencontainers.image.version`
+* `org.opencontainers.image.revision`
+* `org.opencontainers.image.url`
+* `org.opencontainers.image.source`
+* `org.opencontainers.image.authors`
+* `org.opencontainers.image.created`
+
+Using the previous example with ORAS, we can set annotations which Argo CD can make use of:
+
+```shell
+oras push -a "org.opencontainers.image.authors=some author" \
+ -a "org.opencontainers.image.url=http://some-url" \
+ -a "org.opencontainers.image.version=some-version" \
+ -a "org.opencontainers.image.source=http://some-source" \
+ -a "org.opencontainers.image.description=some description" \
+ /guestbook:latest .
+```
diff --git a/go.mod b/go.mod
index d15d5766b5..9c26005020 100644
--- a/go.mod
+++ b/go.mod
@@ -14,6 +14,7 @@ require (
github.com/alicebob/miniredis/v2 v2.35.0
github.com/argoproj/gitops-engine v0.7.1-0.20250420064138-d65e9d92277d
github.com/argoproj/notifications-engine v0.4.1-0.20250309174002-87bf0576a872
+ github.com/argoproj/pkg v0.13.6
github.com/argoproj/pkg/v2 v2.0.1
github.com/aws/aws-sdk-go v1.55.7
github.com/bmatcuk/doublestar/v4 v4.8.1
@@ -68,6 +69,8 @@ require (
github.com/microsoft/azure-devops-go-api/azuredevops/v7 v7.1.1-0.20241014080628-3045bdf43455
github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1
github.com/olekukonko/tablewriter v1.0.7
+ github.com/opencontainers/go-digest v1.0.0
+ github.com/opencontainers/image-spec v1.1.1
github.com/patrickmn/go-cache v2.1.1-0.20191004192108-46f407853014+incompatible
github.com/prometheus/client_golang v1.22.0
github.com/prometheus/client_model v0.6.2
@@ -186,7 +189,6 @@ require (
github.com/go-openapi/strfmt v0.23.0 // indirect
github.com/go-openapi/swag v0.23.0 // indirect
github.com/go-openapi/validate v0.24.0 // indirect
- github.com/gobwas/ws v1.2.1 // indirect
github.com/golang-jwt/jwt/v4 v4.5.2 // indirect
github.com/golang/glog v1.2.4 // indirect
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect
@@ -233,8 +235,6 @@ require (
github.com/oklog/ulid v1.3.1 // indirect
github.com/olekukonko/errors v0.0.0-20250405072817-4e6d85265da6 // indirect
github.com/olekukonko/ll v0.0.8 // indirect
- github.com/opencontainers/go-digest v1.0.0 // indirect
- github.com/opencontainers/image-spec v1.1.1 // indirect
github.com/opsgenie/opsgenie-go-sdk-v2 v1.2.23 // indirect
github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
github.com/pjbgf/sha1cd v0.3.2 // indirect
diff --git a/go.sum b/go.sum
index 488cf83acc..ed4ade0922 100644
--- a/go.sum
+++ b/go.sum
@@ -23,6 +23,7 @@ cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvf
cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
+cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k=
cloud.google.com/go/compute/metadata v0.6.0 h1:A6hENjEsCDtC1k8byVsgwvVcioamEHvZ4j01OwKxG9I=
cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
@@ -90,6 +91,7 @@ github.com/Masterminds/sprig/v3 v3.3.0/go.mod h1:Zy1iXRYNqNLUolqCpL4uhk6SHUMAOSC
github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY=
github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
+github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c=
github.com/OvyFlash/telegram-bot-api v0.0.0-20241219171906-3f2ca0c14ada h1:5ZtieioZyyfiJsGvjpj3d5Eso/3YjJJhNQ1M8at5U5k=
github.com/OvyFlash/telegram-bot-api v0.0.0-20241219171906-3f2ca0c14ada/go.mod h1:2nRUdsKyWhvezqW/rBGWEQdcTQeTtnbSNd2dgx76WYA=
github.com/PagerDuty/go-pagerduty v1.8.0 h1:MTFqTffIcAervB83U7Bx6HERzLbyaSPL/+oxH3zyluI=
@@ -115,12 +117,16 @@ github.com/argoproj/gitops-engine v0.7.1-0.20250420064138-d65e9d92277d h1:NbaCC4
github.com/argoproj/gitops-engine v0.7.1-0.20250420064138-d65e9d92277d/go.mod h1:8bIs7jN5U7iKEWU4fMzZfsYWa8ere+iU1rcTiwAtL3A=
github.com/argoproj/notifications-engine v0.4.1-0.20250309174002-87bf0576a872 h1:ADGAdyN9ty0+RmTT/yn+xV9vwkqvLn9O1ccqeP0Zeas=
github.com/argoproj/notifications-engine v0.4.1-0.20250309174002-87bf0576a872/go.mod h1:d1RazGXWvKRFv9//rg4MRRR7rbvbE7XLgTSMT5fITTE=
+github.com/argoproj/pkg v0.13.6 h1:36WPD9MNYECHcO1/R1pj6teYspiK7uMQLCgLGft2abM=
+github.com/argoproj/pkg v0.13.6/go.mod h1:I698DoJBKuvNFaixh4vFl2C88cNIT1WS7KCbz5ewyF8=
github.com/argoproj/pkg/v2 v2.0.1 h1:O/gCETzB/3+/hyFL/7d/VM/6pSOIRWIiBOTb2xqAHvc=
github.com/argoproj/pkg/v2 v2.0.1/go.mod h1:sdifF6sUTx9ifs38ZaiNMRJuMpSCBB9GulHfbPgQeRE=
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/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so=
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
+github.com/aws/aws-sdk-go v1.44.39/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo=
github.com/aws/aws-sdk-go v1.55.7 h1:UJrkFq7es5CShfBwlWAC8DA077vp8PyVbQd3lqLiztE=
github.com/aws/aws-sdk-go v1.55.7/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU=
github.com/aws/aws-sdk-go-v2 v1.36.3 h1:mJoei2CxPutQVxaATCzDUjcZEjVRdpsiiXi2o38yqWM=
@@ -191,9 +197,15 @@ github.com/chai2010/gettext-go v1.0.2 h1:1Lwwip6Q2QGsAdl/ZKPCwTe9fe0CjlUbqj5bFNS
github.com/chai2010/gettext-go v1.0.2/go.mod h1:y+wnP2cHYaVj19NZhYKAwEMH2CI1gNHeQQ+5AjwawxA=
github.com/chainguard-dev/git-urls v1.0.2 h1:pSpT7ifrpc5X55n4aTTm7FFUE+ZQHKiqpiwNkJrVcKQ=
github.com/chainguard-dev/git-urls v1.0.2/go.mod h1:rbGgj10OS7UgZlbzdUQIQpT0k/D4+An04HJY7Ol+Y/o=
+github.com/chromedp/cdproto v0.0.0-20230802225258-3cf4e6d46a89/go.mod h1:GKljq0VrfU4D5yc+2qA6OVr8pmO/MBbPEWqWQ/oqGEs=
+github.com/chromedp/chromedp v0.9.2/go.mod h1:LkSXJKONWTCHAfQasKFUZI+mxqS4tZqhmtGzzhLsnLs=
+github.com/chromedp/sysutil v1.0.0/go.mod h1:kgWmDdq8fTzXYcKIBqIYvRRTnYb9aNS9moAV0xufSww=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
+github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
+github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
+github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0=
github.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs=
@@ -202,6 +214,7 @@ github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcju
github.com/codeskyblue/go-sh v0.0.0-20190412065543-76bd3d59ff27/go.mod h1:VQx0hjo2oUeQkQUET7wRwradO6f+fN5jzXgB/zROxxE=
github.com/coreos/go-oidc/v3 v3.14.1 h1:9ePWwfdwC4QKRlCXsJGou56adA/owXczOzwKdOumLqk=
github.com/coreos/go-oidc/v3 v3.14.1/go.mod h1:HaZ3szPaZ0e4r6ebqvsLWlk2Tn+aejfmrfah6hnSYEU=
+github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/cpuguy83/go-md2man/v2 v2.0.6 h1:XJtiaUW6dEEqVuZiMTn1ldk455QWwEIsMIJlo5vtkx0=
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
@@ -225,6 +238,7 @@ github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5Qvfr
github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
github.com/dlclark/regexp2 v1.11.5 h1:Q/sSnsKerHeCkc/jSTNq1oCm7KiVgUMZRDUoRu0JQZQ=
github.com/dlclark/regexp2 v1.11.5/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
+github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
github.com/elazarl/goproxy v1.7.2 h1:Y2o6urb7Eule09PjlhQRGNsqRfPmYI3KKQLFpCAV3+o=
@@ -253,6 +267,7 @@ github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwo
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
+github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
@@ -298,8 +313,14 @@ github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vb
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
+github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
+github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
+github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
@@ -310,8 +331,11 @@ github.com/go-openapi/analysis v0.23.0 h1:aGday7OWupfMs+LbmLZG4k0MYXIANxcuBTYUC0
github.com/go-openapi/analysis v0.23.0/go.mod h1:9mz9ZWaSlV8TvjQHLl2mUW2PbZtemkE8yA5v22ohupo=
github.com/go-openapi/errors v0.22.0 h1:c4xY/OLxUBSTiepAg3j/MHuAv5mJhnf53LLMWFB+u/w=
github.com/go-openapi/errors v0.22.0/go.mod h1:J3DmZScxCDufmIMsdOuDHxJbdOGC0xtUynjIx092vXE=
+github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs=
github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ=
github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY=
+github.com/go-openapi/jsonreference v0.20.1/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=
+github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=
github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ=
github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4=
github.com/go-openapi/loads v0.22.0 h1:ECPGd4jX1U6NApCGG1We+uEozOAvXvJSF4nnwHZ8Aco=
@@ -322,6 +346,7 @@ github.com/go-openapi/spec v0.21.0 h1:LTVzPc3p/RzRnkQqLRndbAzjY0d0BCL72A6j3CdL9Z
github.com/go-openapi/spec v0.21.0/go.mod h1:78u6VdPw81XU44qEWGhtr982gJ5BWg2c0I5XwVMotYk=
github.com/go-openapi/strfmt v0.23.0 h1:nlUS6BCqcnAk0pyhi9Y+kdDVZdZMHfEKQiS4HaMgO/c=
github.com/go-openapi/strfmt v0.23.0/go.mod h1:NrtIpfKtWIygRkKVsxh7XQMDQW5HKQl6S5ik2elW+K4=
+github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE=
github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
github.com/go-openapi/validate v0.24.0 h1:LdfDKwNbpB6Vn40xhTdNZAnfLECL81w+VX3BumrGD58=
@@ -338,8 +363,9 @@ github.com/go-playground/webhooks/v6 v6.4.0/go.mod h1:5lBxopx+cAJiBI4+kyRbuHrEi+
github.com/go-redis/cache/v9 v9.0.0 h1:0thdtFo0xJi0/WXbRVu8B066z8OvVymXTJGaXrVWnN0=
github.com/go-redis/cache/v9 v9.0.0/go.mod h1:cMwi1N8ASBOufbIvk7cdXe2PbPjK/WMRL95FFHWsSgI=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
-github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I=
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
+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/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
github.com/go-test/deep v1.0.4 h1:u2CU3YKy9I2pmu9pX0eq50wCgjfGIt539SqR7FbHiho=
@@ -371,6 +397,7 @@ github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVI
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/glog v1.2.4 h1:CNNw5U8lSiiBk7druxtSHHTsRWcxKoac6kZKm2peBBc=
github.com/golang/glog v1.2.4/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
+github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/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-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
@@ -389,8 +416,10 @@ 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/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg=
github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=
+github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
github.com/google/gnostic-models v0.6.9 h1:MU/8wDLif2qCXZmzncUQ/BOfxWfthHi63KqpoNbWqVw=
github.com/google/gnostic-models v0.6.9/go.mod h1:CiWsm0s6BSQd1hRn8/QmxqB6BesYcbSZxsz9b0KuDBw=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
@@ -406,6 +435,7 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/google/go-github/v69 v69.2.0 h1:wR+Wi/fN2zdUx9YxSmYE0ktiX9IAR/BeePzeaUUbEHE=
@@ -430,6 +460,9 @@ github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hf
github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
+github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw=
+github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo=
+github.com/google/pprof v0.0.0-20240827171923-fa2c70bbbfe5/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db h1:097atOisP2aRj7vFgYQBbFN4U4JNXUNYpxael3UzMyo=
github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
@@ -439,6 +472,7 @@ github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaU
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.6.1-0.20241114170450-2d3c2a9cc518 h1:UBg1xk+oAsIVbFuGg6hdfAm7EvCv3EL80vFxJNsslqw=
github.com/google/uuid v1.6.1-0.20241114170450-2d3c2a9cc518/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/enterprise-certificate-proxy v0.3.4 h1:XYIDZApgAnrN1c855gTgghdIA6Stxb52D5RnLI1SLyw=
@@ -457,6 +491,7 @@ github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB7
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gosimple/slug v1.15.0 h1:wRZHsRrRcs6b0XnxMUBM6WK1U1Vg5B0R7VkIf1Xzobo=
@@ -495,6 +530,7 @@ github.com/huandu/xstrings v1.5.0 h1:2ag3IFq9ZDANvthTwTiqSSZLjDc+BedvHPAp5tJy2TI
github.com/huandu/xstrings v1.5.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
+github.com/ianlancetaylor/demangle v0.0.0-20240312041847-bd984b5ce465/go.mod h1:gx7rwoVhcfuVKG5uya9Hs3Sxj7EIvldVofAWIUtGouw=
github.com/improbable-eng/grpc-web v0.15.1-0.20230209220825-1d9bbb09a099 h1:k07oXM8RqIaaSEF09Frr/iRMlwx2qvx6vRo2XuPIeW8=
github.com/improbable-eng/grpc-web v0.15.1-0.20230209220825-1d9bbb09a099/go.mod h1:Vkb7Iy2LTlRGIAubpODgfeKPzu8nsh1gO+vvZAiZrcs=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
@@ -543,13 +579,17 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
+github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
+github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
+github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/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.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
@@ -561,6 +601,7 @@ github.com/ktrysmt/go-bitbucket v0.9.85 h1:WSKYSmpgasEmtnsr+TEhD2UtiZjCZpeTBF5T4
github.com/ktrysmt/go-bitbucket v0.9.85/go.mod h1:ZgvxUOaC6eHrNaC/DbjFvJUXaKpKeDYvfhh4U592jcs=
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
+github.com/ledongthuc/pdf v0.0.0-20220302134840-0c2507a12d80/go.mod h1:imJHygn/1yfhB7XSJJKlFZKl/J+dCPAknuiaGOshXAs=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0=
@@ -592,8 +633,12 @@ github.com/microsoft/azure-devops-go-api/azuredevops/v7 v7.1.1-0.20241014080628-
github.com/microsoft/azure-devops-go-api/azuredevops/v7 v7.1.1-0.20241014080628-3045bdf43455/go.mod h1:mDunUZ1IUJdJIRHvFb+LPBUtxe3AYB5MI6BMXNg8194=
github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g=
github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ=
+github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw=
+github.com/minio/minio-go/v7 v7.0.29/go.mod h1:x81+AX5gHSfCSqw7jxRKHvxUXMlE5uKX0Vb75Xk5yYg=
+github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
+github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0=
github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
@@ -636,6 +681,7 @@ github.com/olekukonko/ll v0.0.8/go.mod h1:En+sEW0JNETl26+K8eZ6/W4UQ7CYSrrgg/EdIY
github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
github.com/olekukonko/tablewriter v1.0.7 h1:HCC2e3MM+2g72M81ZcJU11uciw6z/p82aEnm4/ySDGw=
github.com/olekukonko/tablewriter v1.0.7/go.mod h1:H428M+HzoUXC6JU2Abj9IT9ooRmdq9CxuDmKMtrOCMs=
+github.com/oliveagle/jsonpath v0.0.0-20180606110733-2e52cf6e6852/go.mod h1:eqOVx5Vwu4gd2mmMZvVZsgIqNSaW3xxRThUJ0k/TPk4=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
@@ -650,6 +696,19 @@ github.com/onsi/ginkgo/v2 v2.3.0/go.mod h1:Eew0uilEqZmIEZr8JrvYlvOM7Rr6xzTmMV8Ay
github.com/onsi/ginkgo/v2 v2.4.0/go.mod h1:iHkDK1fKGcBoEHT5W7YBq4RFWaQulw+caOMkAt4OrFo=
github.com/onsi/ginkgo/v2 v2.5.0/go.mod h1:Luc4sArBICYCS8THh8v3i3i5CuSZO+RaQRaJoeNwomw=
github.com/onsi/ginkgo/v2 v2.7.0/go.mod h1:yjiuMwPokqY1XauOgju45q3sJt6VzQ/Fict1LFVcsAo=
+github.com/onsi/ginkgo/v2 v2.8.1/go.mod h1:N1/NbDngAFcSLdyZ+/aYTYGSlq9qMCS/cNKGJjy+csc=
+github.com/onsi/ginkgo/v2 v2.9.0/go.mod h1:4xkjoL/tZv4SMWeww56BU5kAt19mVB47gTWxmrTcxyk=
+github.com/onsi/ginkgo/v2 v2.9.1/go.mod h1:FEcmzVcCHl+4o9bQZVab+4dC9+j+91t2FHSzmGAPfuo=
+github.com/onsi/ginkgo/v2 v2.9.2/go.mod h1:WHcJJG2dIlcCqVfBAwUCrJxSPFb6v4azBwgxeMeDuts=
+github.com/onsi/ginkgo/v2 v2.9.5/go.mod h1:tvAoo1QUJwNEU2ITftXTpR7R1RbCzoZUOs3RonqW57k=
+github.com/onsi/ginkgo/v2 v2.9.7/go.mod h1:cxrmXWykAwTwhQsJOPfdIDiJ+l2RYq7U8hFU+M/1uw0=
+github.com/onsi/ginkgo/v2 v2.11.0/go.mod h1:ZhrRA5XmEE3x3rhlzamx/JJvujdZoJ2uvgI7kR0iZvM=
+github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o=
+github.com/onsi/ginkgo/v2 v2.17.1/go.mod h1:llBI3WDLL9Z6taip6f33H76YcWtJv+7R3HigUjbIBOs=
+github.com/onsi/ginkgo/v2 v2.17.2/go.mod h1:nP2DPOQoNsQmsVyv5rDA8JkXQoCs6goXIvr/PRJ1eCc=
+github.com/onsi/ginkgo/v2 v2.19.0/go.mod h1:rlwLi9PilAFJ8jCg9UE1QP6VBpd6/xj3SRC0d6TU0To=
+github.com/onsi/ginkgo/v2 v2.20.1/go.mod h1:lG9ey2Z29hR41WMVthyJBGUBcBhGOtoPF2VFMvBXFCI=
+github.com/onsi/ginkgo/v2 v2.21.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo=
github.com/onsi/ginkgo/v2 v2.22.0 h1:Yed107/8DjTr0lKCNt7Dn8yQ6ybuDRQoMGrNFKzMfHg=
github.com/onsi/ginkgo/v2 v2.22.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo=
github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
@@ -664,6 +723,20 @@ github.com/onsi/gomega v1.22.1/go.mod h1:x6n7VNe4hw0vkyYUM4mjIXx3JbLiPaBPNgB7PRQ
github.com/onsi/gomega v1.24.0/go.mod h1:Z/NWtiqwBrwUt4/2loMmHL63EDLnYHmVbuBpDr2vQAg=
github.com/onsi/gomega v1.24.1/go.mod h1:3AOiACssS3/MajrniINInwbfOOtfZvplPzuRSmvt1jM=
github.com/onsi/gomega v1.25.0/go.mod h1:r+zV744Re+DiYCIPRlYOTxn0YkOLcAnW8k1xXdMPGhM=
+github.com/onsi/gomega v1.26.0/go.mod h1:r+zV744Re+DiYCIPRlYOTxn0YkOLcAnW8k1xXdMPGhM=
+github.com/onsi/gomega v1.27.1/go.mod h1:aHX5xOykVYzWOV4WqQy0sy8BQptgukenXpCXfadcIAw=
+github.com/onsi/gomega v1.27.3/go.mod h1:5vG284IBtfDAmDyrK+eGyZmUgUlmi+Wngqo557cZ6Gw=
+github.com/onsi/gomega v1.27.4/go.mod h1:riYq/GJKh8hhoM01HN6Vmuy93AarCXCBGpvFDK3q3fQ=
+github.com/onsi/gomega v1.27.6/go.mod h1:PIQNjfQwkP3aQAH7lf7j87O/5FiNr+ZR8+ipb+qQlhg=
+github.com/onsi/gomega v1.27.7/go.mod h1:1p8OOlwo2iUUDsHnOrjE5UKYJ+e3W8eQ3qSlRahPmr4=
+github.com/onsi/gomega v1.27.8/go.mod h1:2J8vzI/s+2shY9XHRApDkdgPo1TKT7P2u6fXeJKFnNQ=
+github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M=
+github.com/onsi/gomega v1.30.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ=
+github.com/onsi/gomega v1.33.0/go.mod h1:+925n5YtiFsLzzafLUHzVMBpvvRAzrydIBiSIxjX3wY=
+github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0=
+github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY=
+github.com/onsi/gomega v1.34.2/go.mod h1:v1xfxRgk0KIsG+QOdm7p8UosrOzPYRo60fd3B/1Dukc=
+github.com/onsi/gomega v1.35.1/go.mod h1:PvZbdDc8J6XJEpDK4HCuRBm8a6Fzp9/DmhC9C7yFlog=
github.com/onsi/gomega v1.36.1 h1:bJDPBO7ibjxcbHMgSCoo4Yj18UWbKDlLwX1x9sybDcw=
github.com/onsi/gomega v1.36.1/go.mod h1:PvZbdDc8J6XJEpDK4HCuRBm8a6Fzp9/DmhC9C7yFlog=
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
@@ -673,6 +746,7 @@ github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgr
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
github.com/opsgenie/opsgenie-go-sdk-v2 v1.2.23 h1:EFOD/cRfMeq+PCibHddoRTXu8CTN1m8Oj1Tk6eoz8Dw=
github.com/opsgenie/opsgenie-go-sdk-v2 v1.2.23/go.mod h1:1BK0BG3Mz//zeujilvvu3GJ0jnyZwFdT9XjznoPv6kk=
+github.com/orisano/pixelmatch v0.0.0-20220722002657-fb0b55479cde/go.mod h1:nZgzbfBr3hhjoZnS66nKrHmduYNpc34ny7RK4z5/HM0=
github.com/patrickmn/go-cache v2.1.1-0.20191004192108-46f407853014+incompatible h1:IWzUvJ72xMjmrjR9q3H1PF+jwdN0uNQiR2t1BLNalyo=
github.com/patrickmn/go-cache v2.1.1-0.20191004192108-46f407853014+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI=
@@ -681,6 +755,7 @@ github.com/pjbgf/sha1cd v0.3.2 h1:a9wb0bp1oC2TGwStyn0Umc/IGKQnEgF0vVaZ8QF8eo4=
github.com/pjbgf/sha1cd v0.3.2/go.mod h1:zQWigSxVmsHEZow5qaLtPYxpcKMMQpa09ixqBxuCS6A=
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=
+github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
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=
@@ -730,11 +805,14 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L
github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
+github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
+github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA=
github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
+github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8=
@@ -745,6 +823,7 @@ github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPx
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
+github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/skeema/knownhosts v1.3.1 h1:X2osQ+RAjK76shCbvhHHHVl3ZlgDm8apHEHFqRjnBY8=
@@ -755,6 +834,7 @@ github.com/slack-go/slack v0.16.0 h1:khp/WCFv+Hb/B/AJaAwvcxKun0hM6grN0bUZ8xG60P8
github.com/slack-go/slack v0.16.0/go.mod h1:hlGi5oXA+Gt+yWTPP0plCdRKmjsDxecdHxYQdlMQKOw=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
+github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
github.com/soheilhy/cmux v0.1.5 h1:jjzc5WVemNEDTLwv9tlmemhC73tI08BNOIGwBOo10Js=
github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0=
github.com/sony/sonyflake v1.0.0 h1:MpU6Ro7tfXwgn2l5eluf9xQvQJDROTBImNCfRXn/YeM=
@@ -762,6 +842,7 @@ github.com/sony/sonyflake v1.0.0/go.mod h1:Jv3cfhf/UFtolOTTRd3q4Nl6ENqM+KfyZ5Pse
github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y=
github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
+github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM=
github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo=
github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
@@ -782,9 +863,12 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
+github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
@@ -869,14 +953,26 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
+golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio=
+golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw=
+golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
+golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
+golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
+golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg=
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
+golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M=
+golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
+golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M=
+golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54=
+golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U=
golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM=
golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@@ -890,6 +986,7 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw=
+golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY=
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=
@@ -915,6 +1012,15 @@ golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91
golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI=
golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
+golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
+golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
+golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
+golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w=
golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -957,6 +1063,7 @@ golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
@@ -965,9 +1072,22 @@ golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE=
golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
+golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
+golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
+golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA=
+golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI=
+golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
+golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
+golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U=
+golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY=
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
+golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
+golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
+golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE=
+golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg=
+golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU=
golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw=
golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
@@ -976,6 +1096,7 @@ golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4Iltr
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.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
+golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -991,6 +1112,12 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
+golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8=
golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -1044,6 +1171,7 @@ golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -1057,10 +1185,26 @@ golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
+golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=
+golang.org/x/telemetry v0.0.0-20240521205824-bda55230c457/go.mod h1:pRgIJT+bRLFKnoM1ldnzKoxTIn14Yxz928LQRYYgIN0=
+golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
@@ -1068,9 +1212,21 @@ golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA=
golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
+golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
+golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o=
+golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU=
+golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
+golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
+golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0=
+golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY=
golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58=
+golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk=
+golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
+golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4=
+golang.org/x/term v0.23.0/go.mod h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk=
+golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M=
golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg=
golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -1084,13 +1240,22 @@ golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
+golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
+golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
+golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
+golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
+golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
+golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
+golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
+golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M=
golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE=
golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -1143,6 +1308,19 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc
golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA=
golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ=
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
+golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s=
+golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc=
+golang.org/x/tools v0.9.3/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc=
+golang.org/x/tools v0.12.0/go.mod h1:Sc0INKfu04TlqNoRA1hgpFZbhYXHPr4V5DzpSBTPqQM=
+golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
+golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0=
+golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps=
+golang.org/x/tools v0.20.0/go.mod h1:WvitBU7JJf6A4jOdg4S1tviW9bhUxkgeCui/0JHctQg=
+golang.org/x/tools v0.21.0/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
+golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
+golang.org/x/tools v0.23.0/go.mod h1:pnu6ufv6vQkll6szChhK3C3L/ruaIv5eBeztNG8wtsI=
+golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ=
+golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0=
golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc=
golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -1243,6 +1421,9 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
+google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
+google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
+google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
@@ -1263,6 +1444,7 @@ gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AW
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw=
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
+gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME=
@@ -1298,18 +1480,25 @@ k8s.io/component-helpers v0.32.2 h1:2usSAm3zNE5yu5DdAdrKBWLfSYNpU4OPjZywJY5ovP8=
k8s.io/component-helpers v0.32.2/go.mod h1:fvQAoiiOP7jUEUBc9qR0PXiBPuB0I56WTxTkkpcI8g8=
k8s.io/controller-manager v0.32.2 h1:/9XuHWEqofO2Aqa4l7KJGckJUcLVRWfx+qnVkdXoStI=
k8s.io/controller-manager v0.32.2/go.mod h1:o5uo2tLCQhuoMt0RfKcQd0eqaNmSKOKiT+0YELCqXOk=
+k8s.io/gengo/v2 v2.0.0-20240826214909-a7b603a56eb7/go.mod h1:EJykeLsmFC60UQbYJezXkEsG2FLrt0GPNkU5iK5GWxU=
k8s.io/gengo/v2 v2.0.0-20240911193312-2b36238f13e9 h1:si3PfKm8dDYxgfbeA6orqrtLkvvIeH8UqffFJDl0bz4=
k8s.io/gengo/v2 v2.0.0-20240911193312-2b36238f13e9/go.mod h1:EJykeLsmFC60UQbYJezXkEsG2FLrt0GPNkU5iK5GWxU=
+k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
+k8s.io/klog/v2 v2.5.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec=
+k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
k8s.io/kube-aggregator v0.32.2 h1:kg9pke+i2qRbJwX1UKwZV4fsCRvmbaCEFk38R4FqHmw=
k8s.io/kube-aggregator v0.32.2/go.mod h1:rRm+xY1yIFIt3zBc727nG5SBLYywywD87klfIAw+7+c=
+k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f/go.mod h1:R/HEjbvWI0qdfb8viZUeVZm0X6IZnxAydC7YU42CMw4=
k8s.io/kube-openapi v0.0.0-20250304201544-e5f78fe3ede9 h1:t0huyHnz6HsokckRxAF1bY0cqPFwzINKCL7yltEjZQc=
k8s.io/kube-openapi v0.0.0-20250304201544-e5f78fe3ede9/go.mod h1:5jIi+8yX4RIb8wk3XwBo5Pq2ccx4FP10ohkbSKCZoK8=
k8s.io/kubectl v0.32.2 h1:TAkag6+XfSBgkqK9I7ZvwtF0WVtUAvK8ZqTt+5zi1Us=
k8s.io/kubectl v0.32.2/go.mod h1:+h/NQFSPxiDZYX/WZaWw9fwYezGLISP0ud8nQKg+3g8=
k8s.io/kubernetes v1.32.2 h1:mShetlA102UpjRVSGzB+5vjJwy8oPy8FMWrkTH5f37o=
k8s.io/kubernetes v1.32.2/go.mod h1:tiIKO63GcdPRBHW2WiUFm3C0eoLczl3f7qi56Dm1W8I=
+k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
+k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
k8s.io/utils v0.0.0-20241210054802-24370beab758 h1:sdbE21q2nlQtFh65saZY+rRM6x6aJJI8IUa1AmH/qa0=
k8s.io/utils v0.0.0-20241210054802-24370beab758/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
layeh.com/gopher-json v0.0.0-20190114024228-97fed8db8427 h1:RZkKxMR3jbQxdCEcglq3j7wY3PRJIopAwBlx1RE71X0=
@@ -1323,6 +1512,7 @@ rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
sigs.k8s.io/controller-runtime v0.20.4 h1:X3c+Odnxz+iPTRobG4tp092+CvBU9UK0t/bRf+n0DGU=
sigs.k8s.io/controller-runtime v0.20.4/go.mod h1:xg2XB0K5ShQzAgsoujxuKN4LNXR2LfwwHsPj7Iaw+XY=
+sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8=
sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo=
sigs.k8s.io/kustomize/api v0.18.0 h1:hTzp67k+3NEVInwz5BHyzc9rGxIauoXferXyjv5lWPo=
@@ -1332,6 +1522,7 @@ sigs.k8s.io/kustomize/kyaml v0.18.1/go.mod h1:C3L2BFVU1jgcddNBE1TxuVLgS46TjObMwW
sigs.k8s.io/randfill v0.0.0-20250304075658-069ef1bbf016/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY=
sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU=
sigs.k8s.io/randfill v1.0.0/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY=
+sigs.k8s.io/structured-merge-diff/v4 v4.4.2/go.mod h1:N8f93tFZh9U6vpxwRArLiikrE5/2tiu1w1AGfACIGE4=
sigs.k8s.io/structured-merge-diff/v4 v4.7.0 h1:qPeWmscJcXP0snki5IYF79Z8xrl8ETFxgMd7wez1XkI=
sigs.k8s.io/structured-merge-diff/v4 v4.7.0/go.mod h1:dDy58f92j70zLsuZVuUX5Wp9vtxXpaZnkPGWeqDfCps=
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
diff --git a/hack/installers/checksums/add-oras-checksums.sh b/hack/installers/checksums/add-oras-checksums.sh
new file mode 100755
index 0000000000..6be2eb3527
--- /dev/null
+++ b/hack/installers/checksums/add-oras-checksums.sh
@@ -0,0 +1,13 @@
+#!/usr/bin/env sh
+
+# Usage: ./add-oras-checksums.sh 1.2.0 # use the desired version
+
+wget "https://github.com/oras-project/oras/releases/download/v$1/oras_$1_checksums.txt"
+
+while IFS="" read -r line || [ -n "$line" ]
+do
+ filename=$(echo "$line" | awk -F ' ' '{print $2}' | sed "s#v$1#$1#")
+ test "${line#*windows}" == "$line" && echo "$line" | sed "s#v$1#$1#" > "$filename.sha256"
+done < oras_$1_checksums.txt
+
+rm oras_$1_checksums.txt
diff --git a/hack/installers/checksums/oras_1.2.0_darwin_amd64.tar.gz.sha256 b/hack/installers/checksums/oras_1.2.0_darwin_amd64.tar.gz.sha256
new file mode 100644
index 0000000000..e663895750
--- /dev/null
+++ b/hack/installers/checksums/oras_1.2.0_darwin_amd64.tar.gz.sha256
@@ -0,0 +1 @@
+58a8494f5bce778e21d89d90c82e05bd128e7bb9d84dd190d154f8afdbf30541 oras_1.2.0_darwin_amd64.tar.gz
diff --git a/hack/installers/checksums/oras_1.2.0_darwin_arm64.tar.gz.sha256 b/hack/installers/checksums/oras_1.2.0_darwin_arm64.tar.gz.sha256
new file mode 100644
index 0000000000..cc15e93f36
--- /dev/null
+++ b/hack/installers/checksums/oras_1.2.0_darwin_arm64.tar.gz.sha256
@@ -0,0 +1 @@
+fea801b0e02c5342e749ef2860e1faebae03e93ae50e33ed40d227e089cf9435 oras_1.2.0_darwin_arm64.tar.gz
diff --git a/hack/installers/checksums/oras_1.2.0_freebsd_amd64.tar.gz.sha256 b/hack/installers/checksums/oras_1.2.0_freebsd_amd64.tar.gz.sha256
new file mode 100644
index 0000000000..b6d44bd537
--- /dev/null
+++ b/hack/installers/checksums/oras_1.2.0_freebsd_amd64.tar.gz.sha256
@@ -0,0 +1 @@
+73d3a292dce1f0985df084ff50b38ab2deacbcb01902ceebc008d5bea2f2dee9 oras_1.2.0_freebsd_amd64.tar.gz
diff --git a/hack/installers/checksums/oras_1.2.0_linux_amd64.tar.gz.sha256 b/hack/installers/checksums/oras_1.2.0_linux_amd64.tar.gz.sha256
new file mode 100644
index 0000000000..1fb1c961ce
--- /dev/null
+++ b/hack/installers/checksums/oras_1.2.0_linux_amd64.tar.gz.sha256
@@ -0,0 +1 @@
+5b3f1cbb86d869eee68120b9b45b9be983f3738442f87ee5f06b00edd0bab336 oras_1.2.0_linux_amd64.tar.gz
diff --git a/hack/installers/checksums/oras_1.2.0_linux_arm64.tar.gz.sha256 b/hack/installers/checksums/oras_1.2.0_linux_arm64.tar.gz.sha256
new file mode 100644
index 0000000000..b6518c88f6
--- /dev/null
+++ b/hack/installers/checksums/oras_1.2.0_linux_arm64.tar.gz.sha256
@@ -0,0 +1 @@
+27df680a39fc2fcedc549cb737891623bc696c9a92a03fd341e9356a35836bae oras_1.2.0_linux_arm64.tar.gz
diff --git a/hack/installers/checksums/oras_1.2.0_linux_armv7.tar.gz.sha256 b/hack/installers/checksums/oras_1.2.0_linux_armv7.tar.gz.sha256
new file mode 100644
index 0000000000..94efc5e7cf
--- /dev/null
+++ b/hack/installers/checksums/oras_1.2.0_linux_armv7.tar.gz.sha256
@@ -0,0 +1 @@
+054685703cb0c66e51f8143e3bbd3976e217d3d595f0593db43b6dd451e43329 oras_1.2.0_linux_armv7.tar.gz
diff --git a/hack/installers/checksums/oras_1.2.0_linux_ppc64le.tar.gz.sha256 b/hack/installers/checksums/oras_1.2.0_linux_ppc64le.tar.gz.sha256
new file mode 100644
index 0000000000..c5fcd50ba5
--- /dev/null
+++ b/hack/installers/checksums/oras_1.2.0_linux_ppc64le.tar.gz.sha256
@@ -0,0 +1 @@
+af5ee50434c7263b1460978af83e7690570e8999678fae9db6c5dbb38467fed5 oras_1.2.0_linux_ppc64le.tar.gz
diff --git a/hack/installers/checksums/oras_1.2.0_linux_riscv64.tar.gz.sha256 b/hack/installers/checksums/oras_1.2.0_linux_riscv64.tar.gz.sha256
new file mode 100644
index 0000000000..45cb1a306c
--- /dev/null
+++ b/hack/installers/checksums/oras_1.2.0_linux_riscv64.tar.gz.sha256
@@ -0,0 +1 @@
+42c7e5f35b72492dd3ee7c68edad0c0da939b39e6ead7f682329015b283e96f8 oras_1.2.0_linux_riscv64.tar.gz
diff --git a/hack/installers/checksums/oras_1.2.0_linux_s390x.tar.gz.sha256 b/hack/installers/checksums/oras_1.2.0_linux_s390x.tar.gz.sha256
new file mode 100644
index 0000000000..199c187388
--- /dev/null
+++ b/hack/installers/checksums/oras_1.2.0_linux_s390x.tar.gz.sha256
@@ -0,0 +1 @@
+69d2e842e592f4d990b33d58ff3c298c4e4c0921dd54ad9e65e3b6dd9427a750 oras_1.2.0_linux_s390x.tar.gz
diff --git a/hack/installers/install-oras.sh b/hack/installers/install-oras.sh
new file mode 100755
index 0000000000..6b6fc529e1
--- /dev/null
+++ b/hack/installers/install-oras.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+set -eux -o pipefail
+
+. "$(dirname "$0")"/../tool-versions.sh
+
+# shellcheck disable=SC2046
+# shellcheck disable=SC2128
+PROJECT_ROOT=$(cd $(dirname "${BASH_SOURCE}")/../..; pwd)
+INSTALL_PATH="${INSTALL_PATH:-$PROJECT_ROOT/dist}"
+PATH="${INSTALL_PATH}:${PATH}"
+[ -d "$INSTALL_PATH" ] || mkdir -p "$INSTALL_PATH"
+
+# shellcheck disable=SC2154
+export TARGET_FILE=oras_${oras_version}_${INSTALL_OS}_${ARCHITECTURE}.tar.gz
+# shellcheck disable=SC2154
+[ -e "$DOWNLOADS"/"${TARGET_FILE}" ] || curl -sLf --retry 3 -o "${DOWNLOADS}"/"${TARGET_FILE}" "https://github.com/oras-project/oras/releases/download/v${oras_version}/oras_${oras_version}_${INSTALL_OS}_${ARCHITECTURE}.tar.gz"
+"$(dirname "$0")"/compare-chksum.sh
+
+tar -C /tmp -xf "${DOWNLOADS}"/"${TARGET_FILE}"
+sudo install -m 0755 /tmp/oras "$INSTALL_PATH"/oras
diff --git a/hack/tool-versions.sh b/hack/tool-versions.sh
index 8a3b0952c8..749eccc8f4 100644
--- a/hack/tool-versions.sh
+++ b/hack/tool-versions.sh
@@ -14,3 +14,4 @@
helm3_version=3.17.1
kustomize5_version=5.6.0
protoc_version=29.3
+oras_version=1.2.0
diff --git a/mkdocs.yml b/mkdocs.yml
index 42b7ae357d..76d82e85cf 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -161,6 +161,7 @@ nav:
- user-guide/application_sources.md
- user-guide/kustomize.md
- user-guide/helm.md
+ - user-guide/oci.md
- user-guide/import.md
- user-guide/jsonnet.md
- user-guide/directory.md
diff --git a/pkg/apiclient/application/application.pb.go b/pkg/apiclient/application/application.pb.go
index 8b72807e85..61bceaedcb 100644
--- a/pkg/apiclient/application/application.pb.go
+++ b/pkg/apiclient/application/application.pb.go
@@ -2914,182 +2914,184 @@ func init() {
}
var fileDescriptor_df6e82b174b5eaec = []byte{
- // 2801 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0x4d, 0x8c, 0x1c, 0x47,
- 0x15, 0xa6, 0x66, 0x76, 0x76, 0x67, 0xdf, 0xec, 0x7a, 0xed, 0x8a, 0xbd, 0x74, 0xc6, 0x1b, 0x33,
- 0x69, 0xdb, 0xf1, 0x64, 0xed, 0x9d, 0xb1, 0x37, 0x01, 0x92, 0x4d, 0x22, 0x70, 0xd6, 0x8e, 0xb3,
- 0xb0, 0x76, 0x4c, 0xaf, 0x83, 0x51, 0x38, 0x40, 0xa5, 0xbb, 0x76, 0xa6, 0xd9, 0x9e, 0xee, 0x76,
- 0x77, 0xcf, 0x84, 0x55, 0xc8, 0x25, 0x88, 0x5b, 0x04, 0x02, 0x82, 0xc4, 0x01, 0x01, 0x4a, 0x14,
- 0x09, 0x21, 0x10, 0x17, 0x84, 0x90, 0x10, 0x12, 0x1c, 0x40, 0x70, 0x40, 0x8a, 0x40, 0xe2, 0x8c,
- 0x22, 0xc4, 0x0d, 0xb8, 0xe4, 0x8c, 0x50, 0x55, 0x57, 0x75, 0x57, 0xcf, 0x4f, 0xcf, 0x2c, 0x33,
- 0x28, 0xbe, 0xf5, 0xab, 0xa9, 0x7a, 0xef, 0x7b, 0xaf, 0x5e, 0xbd, 0xf7, 0xea, 0xd5, 0xc0, 0xb9,
- 0x90, 0x06, 0x3d, 0x1a, 0x34, 0x89, 0xef, 0x3b, 0xb6, 0x49, 0x22, 0xdb, 0x73, 0xd5, 0xef, 0x86,
- 0x1f, 0x78, 0x91, 0x87, 0x2b, 0xca, 0x50, 0x75, 0xad, 0xe5, 0x79, 0x2d, 0x87, 0x36, 0x89, 0x6f,
- 0x37, 0x89, 0xeb, 0x7a, 0x11, 0x1f, 0x0e, 0xe3, 0xa9, 0x55, 0xfd, 0xe0, 0x89, 0xb0, 0x61, 0x7b,
- 0xfc, 0x57, 0xd3, 0x0b, 0x68, 0xb3, 0x77, 0xa5, 0xd9, 0xa2, 0x2e, 0x0d, 0x48, 0x44, 0x2d, 0x31,
- 0xe7, 0xf1, 0x74, 0x4e, 0x87, 0x98, 0x6d, 0xdb, 0xa5, 0xc1, 0x61, 0xd3, 0x3f, 0x68, 0xb1, 0x81,
- 0xb0, 0xd9, 0xa1, 0x11, 0x19, 0xb6, 0x6a, 0xb7, 0x65, 0x47, 0xed, 0xee, 0xcb, 0x0d, 0xd3, 0xeb,
- 0x34, 0x49, 0xd0, 0xf2, 0xfc, 0xc0, 0xfb, 0x12, 0xff, 0xd8, 0x30, 0xad, 0x66, 0xef, 0xb1, 0x94,
- 0x81, 0xaa, 0x4b, 0xef, 0x0a, 0x71, 0xfc, 0x36, 0x19, 0xe4, 0x76, 0x7d, 0x0c, 0xb7, 0x80, 0xfa,
- 0x9e, 0xb0, 0x0d, 0xff, 0xb4, 0x23, 0x2f, 0x38, 0x54, 0x3e, 0x63, 0x36, 0xfa, 0xfb, 0x08, 0x8e,
- 0x5f, 0x4d, 0xe5, 0x7d, 0xa6, 0x4b, 0x83, 0x43, 0x8c, 0x61, 0xce, 0x25, 0x1d, 0xaa, 0xa1, 0x1a,
- 0xaa, 0x2f, 0x1a, 0xfc, 0x1b, 0x6b, 0xb0, 0x10, 0xd0, 0xfd, 0x80, 0x86, 0x6d, 0xad, 0xc0, 0x87,
- 0x25, 0x89, 0xab, 0x50, 0x66, 0xc2, 0xa9, 0x19, 0x85, 0x5a, 0xb1, 0x56, 0xac, 0x2f, 0x1a, 0x09,
- 0x8d, 0xeb, 0xb0, 0x12, 0xd0, 0xd0, 0xeb, 0x06, 0x26, 0xfd, 0x2c, 0x0d, 0x42, 0xdb, 0x73, 0xb5,
- 0x39, 0xbe, 0xba, 0x7f, 0x98, 0x71, 0x09, 0xa9, 0x43, 0xcd, 0xc8, 0x0b, 0xb4, 0x12, 0x9f, 0x92,
- 0xd0, 0x0c, 0x0f, 0x03, 0xae, 0xcd, 0xc7, 0x78, 0xd8, 0x37, 0xd6, 0x61, 0x89, 0xf8, 0xfe, 0x2d,
- 0xd2, 0xa1, 0xa1, 0x4f, 0x4c, 0xaa, 0x2d, 0xf0, 0xdf, 0x32, 0x63, 0x0c, 0xb3, 0x40, 0xa2, 0x95,
- 0x39, 0x30, 0x49, 0xea, 0xdb, 0xb0, 0x78, 0xcb, 0xb3, 0xe8, 0x68, 0x75, 0xfb, 0xd9, 0x17, 0x06,
- 0xd9, 0xeb, 0xbf, 0x43, 0x70, 0xca, 0xa0, 0x3d, 0x9b, 0xe1, 0xbf, 0x49, 0x23, 0x62, 0x91, 0x88,
- 0xf4, 0x73, 0x2c, 0x24, 0x1c, 0xab, 0x50, 0x0e, 0xc4, 0x64, 0xad, 0xc0, 0xc7, 0x13, 0x7a, 0x40,
- 0x5a, 0x31, 0x5f, 0x99, 0xd8, 0x84, 0x92, 0xc4, 0x35, 0xa8, 0xc4, 0xb6, 0xdc, 0x71, 0x2d, 0xfa,
- 0x65, 0x6e, 0xbd, 0x92, 0xa1, 0x0e, 0xe1, 0x35, 0x58, 0xec, 0xc5, 0x76, 0xde, 0xb1, 0xb8, 0x15,
- 0x4b, 0x46, 0x3a, 0xa0, 0xff, 0x03, 0xc1, 0x19, 0xc5, 0x07, 0x0c, 0xb1, 0x33, 0xd7, 0x7b, 0xd4,
- 0x8d, 0xc2, 0xd1, 0x0a, 0x5d, 0x82, 0x13, 0x72, 0x13, 0xfb, 0xed, 0x34, 0xf8, 0x03, 0x53, 0x51,
- 0x1d, 0x94, 0x2a, 0xaa, 0x63, 0x4c, 0x11, 0x49, 0xbf, 0xb8, 0x73, 0x4d, 0xa8, 0xa9, 0x0e, 0x0d,
- 0x18, 0xaa, 0x94, 0x6f, 0xa8, 0xf9, 0x8c, 0xa1, 0xf4, 0x77, 0x11, 0x68, 0x8a, 0xa2, 0x37, 0x89,
- 0x6b, 0xef, 0xd3, 0x30, 0x9a, 0x74, 0xcf, 0xd0, 0x0c, 0xf7, 0xac, 0x0e, 0x2b, 0xb1, 0x56, 0xb7,
- 0xd9, 0x79, 0x64, 0xf1, 0x47, 0x2b, 0xd5, 0x8a, 0xf5, 0xa2, 0xd1, 0x3f, 0xcc, 0xf6, 0x4e, 0xca,
- 0x0c, 0xb5, 0x79, 0xee, 0xc6, 0xe9, 0x80, 0xfe, 0x30, 0x2c, 0x3e, 0x67, 0x3b, 0x74, 0xbb, 0xdd,
- 0x75, 0x0f, 0xf0, 0x49, 0x28, 0x99, 0xec, 0x83, 0xeb, 0xb0, 0x64, 0xc4, 0x84, 0xfe, 0x4d, 0x04,
- 0x0f, 0x8f, 0xd2, 0xfa, 0xae, 0x1d, 0xb5, 0xd9, 0xfa, 0x70, 0x94, 0xfa, 0x66, 0x9b, 0x9a, 0x07,
- 0x61, 0xb7, 0x23, 0x5d, 0x56, 0xd2, 0xd3, 0xa9, 0xaf, 0xff, 0x18, 0x41, 0x7d, 0x2c, 0xa6, 0xbb,
- 0x01, 0xf1, 0x7d, 0x1a, 0xe0, 0xe7, 0xa0, 0x74, 0x8f, 0xfd, 0xc0, 0x0f, 0x68, 0x65, 0xb3, 0xd1,
- 0x50, 0x03, 0xfc, 0x58, 0x2e, 0xcf, 0x7f, 0xc8, 0x88, 0x97, 0xe3, 0x86, 0x34, 0x4f, 0x81, 0xf3,
- 0x59, 0xcd, 0xf0, 0x49, 0xac, 0xc8, 0xe6, 0xf3, 0x69, 0xcf, 0xce, 0xc3, 0x9c, 0x4f, 0x82, 0x48,
- 0x3f, 0x05, 0x0f, 0x64, 0x8f, 0x87, 0xef, 0xb9, 0x21, 0xd5, 0x7f, 0x95, 0xf5, 0xa6, 0xed, 0x80,
- 0x92, 0x88, 0x1a, 0xf4, 0x5e, 0x97, 0x86, 0x11, 0x3e, 0x00, 0x35, 0xe7, 0x70, 0xab, 0x56, 0x36,
- 0x77, 0x1a, 0x69, 0xd0, 0x6e, 0xc8, 0xa0, 0xcd, 0x3f, 0xbe, 0x60, 0x5a, 0x8d, 0xde, 0x63, 0x0d,
- 0xff, 0xa0, 0xd5, 0x60, 0x29, 0x20, 0x83, 0x4c, 0xa6, 0x00, 0x55, 0x55, 0x43, 0xe5, 0x8e, 0x57,
- 0x61, 0xbe, 0xeb, 0x87, 0x34, 0x88, 0xb8, 0x66, 0x65, 0x43, 0x50, 0x6c, 0xff, 0x7a, 0xc4, 0xb1,
- 0x2d, 0x12, 0xc5, 0xfb, 0x53, 0x36, 0x12, 0x5a, 0xff, 0x75, 0x16, 0xfd, 0x8b, 0xbe, 0xf5, 0x41,
- 0xa1, 0x57, 0x51, 0x16, 0xb2, 0x28, 0x55, 0x0f, 0x2a, 0x66, 0x3d, 0xe8, 0xe7, 0x59, 0xfc, 0xd7,
- 0xa8, 0x43, 0x53, 0xfc, 0xc3, 0x9c, 0x59, 0x83, 0x05, 0x93, 0x84, 0x26, 0xb1, 0xa4, 0x14, 0x49,
- 0xb2, 0x40, 0xe6, 0x07, 0x9e, 0x4f, 0x5a, 0x9c, 0xd3, 0x6d, 0xcf, 0xb1, 0xcd, 0x43, 0x21, 0x6e,
- 0xf0, 0x87, 0x01, 0xc7, 0x9f, 0xcb, 0x77, 0xfc, 0x52, 0x16, 0xf6, 0x59, 0xa8, 0xec, 0x1d, 0xba,
- 0xe6, 0x0b, 0x7e, 0x7c, 0xb8, 0x4f, 0x42, 0xc9, 0x8e, 0x68, 0x27, 0xd4, 0x10, 0x3f, 0xd8, 0x31,
- 0xa1, 0xff, 0xa7, 0x04, 0xab, 0x8a, 0x6e, 0x6c, 0x41, 0x9e, 0x66, 0x79, 0x51, 0x6a, 0x15, 0xe6,
- 0xad, 0xe0, 0xd0, 0xe8, 0xba, 0xc2, 0x01, 0x04, 0xc5, 0x04, 0xfb, 0x41, 0xd7, 0x8d, 0xe1, 0x97,
- 0x8d, 0x98, 0xc0, 0xfb, 0x50, 0x0e, 0x23, 0x56, 0x65, 0xb4, 0x0e, 0x39, 0xf0, 0xca, 0xe6, 0xa7,
- 0xa6, 0xdb, 0x74, 0x06, 0x7d, 0x4f, 0x70, 0x34, 0x12, 0xde, 0xf8, 0x1e, 0x8b, 0x69, 0x71, 0xa0,
- 0x0b, 0xb5, 0x85, 0x5a, 0xb1, 0x5e, 0xd9, 0xdc, 0x9b, 0x5e, 0xd0, 0x0b, 0x3e, 0xab, 0x90, 0x94,
- 0x0c, 0x66, 0xa4, 0x52, 0x58, 0x18, 0xed, 0x88, 0xf8, 0x10, 0x8a, 0x6a, 0x20, 0x1d, 0xc0, 0x9f,
- 0x83, 0x92, 0xed, 0xee, 0x7b, 0xa1, 0xb6, 0xc8, 0xc1, 0x3c, 0x3b, 0x1d, 0x98, 0x1d, 0x77, 0xdf,
- 0x33, 0x62, 0x86, 0xf8, 0x1e, 0x2c, 0x07, 0x34, 0x0a, 0x0e, 0xa5, 0x15, 0x34, 0xe0, 0x76, 0xfd,
- 0xf4, 0x74, 0x12, 0x0c, 0x95, 0xa5, 0x91, 0x95, 0x80, 0xb7, 0xa0, 0x12, 0xa6, 0x3e, 0xa6, 0x55,
- 0xb8, 0x40, 0x2d, 0xc3, 0x48, 0xf1, 0x41, 0x43, 0x9d, 0x3c, 0xe0, 0xdd, 0x4b, 0xf9, 0xde, 0xbd,
- 0x3c, 0x36, 0xab, 0x1d, 0x9b, 0x20, 0xab, 0xad, 0xf4, 0x67, 0xb5, 0x7f, 0x23, 0x58, 0x1b, 0x08,
- 0x4e, 0x7b, 0x3e, 0xcd, 0x3d, 0x06, 0x04, 0xe6, 0x42, 0x9f, 0x9a, 0x3c, 0x53, 0x55, 0x36, 0x6f,
- 0xce, 0x2c, 0x5a, 0x71, 0xb9, 0x9c, 0x75, 0x5e, 0x40, 0x9d, 0x32, 0x2e, 0xfc, 0x00, 0xc1, 0x87,
- 0x15, 0x99, 0xb7, 0x49, 0x64, 0xb6, 0xf3, 0x94, 0x65, 0xe7, 0x97, 0xcd, 0x11, 0x79, 0x39, 0x26,
- 0x98, 0x55, 0xf9, 0xc7, 0x9d, 0x43, 0x9f, 0x01, 0x64, 0xbf, 0xa4, 0x03, 0x53, 0x16, 0x4f, 0x3f,
- 0x41, 0x50, 0x55, 0x63, 0xb8, 0xe7, 0x38, 0x2f, 0x13, 0xf3, 0x20, 0x0f, 0xe4, 0x31, 0x28, 0xd8,
- 0x16, 0x47, 0x58, 0x34, 0x0a, 0xb6, 0x75, 0xc4, 0x60, 0xd4, 0x0f, 0x77, 0x3e, 0x1f, 0xee, 0x42,
- 0x16, 0xee, 0xfb, 0x7d, 0x70, 0x65, 0x48, 0xc8, 0x81, 0xbb, 0x06, 0x8b, 0x6e, 0x5f, 0x21, 0x9b,
- 0x0e, 0x0c, 0x29, 0x60, 0x0b, 0x03, 0x05, 0xac, 0x06, 0x0b, 0xbd, 0xe4, 0x9a, 0xc3, 0x7e, 0x96,
- 0x24, 0x53, 0xb1, 0x15, 0x78, 0x5d, 0x5f, 0x18, 0x3d, 0x26, 0x18, 0x8a, 0x03, 0xdb, 0x65, 0x25,
- 0x39, 0x47, 0xc1, 0xbe, 0x8f, 0x7e, 0xb1, 0xc9, 0xa8, 0xfd, 0xd3, 0x02, 0x7c, 0x64, 0x88, 0xda,
- 0x63, 0xfd, 0xe9, 0xfe, 0xd0, 0x3d, 0xf1, 0xea, 0x85, 0x91, 0x5e, 0x5d, 0x1e, 0xe7, 0xd5, 0x8b,
- 0xf9, 0xf6, 0x82, 0xac, 0xbd, 0x7e, 0x54, 0x80, 0xda, 0x10, 0x7b, 0x8d, 0x2f, 0x27, 0xee, 0x1b,
- 0x83, 0xed, 0x7b, 0x81, 0xf0, 0x92, 0xb2, 0x11, 0x13, 0xec, 0x9c, 0x79, 0x81, 0xdf, 0x26, 0x2e,
- 0xf7, 0x8e, 0xb2, 0x21, 0xa8, 0x29, 0x4d, 0x75, 0x0d, 0x34, 0x69, 0x9e, 0xab, 0x66, 0x1c, 0xa4,
- 0x02, 0xd2, 0xa1, 0x11, 0x0d, 0xc2, 0x51, 0x21, 0xaa, 0x47, 0x9c, 0x2e, 0x95, 0x21, 0x8a, 0x13,
- 0xfa, 0x3f, 0x0b, 0xfd, 0x6c, 0x8c, 0xae, 0x7b, 0xff, 0x1b, 0x7a, 0x15, 0xe6, 0x09, 0x47, 0x2b,
- 0x5c, 0x53, 0x50, 0x03, 0x26, 0x2d, 0xe7, 0x9b, 0x74, 0x31, 0x9b, 0x2f, 0x09, 0x68, 0xc1, 0x08,
- 0x93, 0x6a, 0xc0, 0x2b, 0x91, 0xf3, 0x99, 0xf4, 0x34, 0xca, 0xfe, 0xc6, 0x48, 0x36, 0xfa, 0xd7,
- 0x10, 0x9c, 0xce, 0x2e, 0x0b, 0x77, 0xed, 0x30, 0x92, 0xb7, 0x18, 0xbc, 0x0f, 0x0b, 0xb1, 0x2a,
- 0x71, 0x0d, 0x5a, 0xd9, 0xdc, 0x9d, 0xb6, 0x32, 0xc9, 0xec, 0xad, 0x64, 0xae, 0x3f, 0x09, 0xa7,
- 0x87, 0x86, 0x63, 0x01, 0xa3, 0x0a, 0x65, 0x59, 0x8d, 0x89, 0xdd, 0x4f, 0x68, 0xfd, 0xed, 0xb9,
- 0x6c, 0x6e, 0xf4, 0xac, 0x5d, 0xaf, 0x95, 0xd3, 0x98, 0xc8, 0xf7, 0x18, 0xb6, 0x1b, 0x9e, 0xa5,
- 0xf4, 0x20, 0x24, 0xc9, 0xd6, 0x99, 0x9e, 0x1b, 0x11, 0xdb, 0xa5, 0x81, 0x48, 0xdf, 0xe9, 0x00,
- 0xdb, 0xe9, 0xd0, 0x76, 0x4d, 0xba, 0x47, 0x4d, 0xcf, 0xb5, 0x42, 0xee, 0x32, 0x45, 0x23, 0x33,
- 0x86, 0x9f, 0x87, 0x45, 0x4e, 0xdf, 0xb1, 0x3b, 0x71, 0xbe, 0xaa, 0x6c, 0xae, 0x37, 0xe2, 0x66,
- 0x61, 0x43, 0x6d, 0x16, 0xa6, 0x36, 0xec, 0xd0, 0x88, 0x34, 0x7a, 0x57, 0x1a, 0x6c, 0x85, 0x91,
- 0x2e, 0x66, 0x58, 0x22, 0x62, 0x3b, 0xbb, 0xb6, 0xcb, 0x2b, 0x64, 0x26, 0x2a, 0x1d, 0x60, 0xde,
- 0xb8, 0xef, 0x39, 0x8e, 0xf7, 0x8a, 0x3c, 0xe0, 0x31, 0xc5, 0x56, 0x75, 0xdd, 0xc8, 0x76, 0xb8,
- 0xfc, 0xd8, 0xd7, 0xd2, 0x01, 0xbe, 0xca, 0x76, 0x22, 0x1a, 0x88, 0x93, 0x2d, 0xa8, 0xc4, 0xdf,
- 0x2b, 0x71, 0xff, 0x4b, 0x06, 0x96, 0xf8, 0x64, 0x2c, 0xa9, 0x27, 0xa3, 0xff, 0xb4, 0x2d, 0x0f,
- 0x69, 0xe2, 0xf0, 0x76, 0x20, 0xed, 0xd9, 0x5e, 0x97, 0x15, 0x7f, 0xbc, 0x46, 0x92, 0xf4, 0xc0,
- 0x69, 0x59, 0xc9, 0x3f, 0x2d, 0xc7, 0xb3, 0xa7, 0x85, 0x97, 0xf0, 0x91, 0xd9, 0xde, 0x26, 0x21,
- 0xd5, 0x4e, 0x70, 0xd6, 0xe9, 0x80, 0xfe, 0x1b, 0x04, 0xe5, 0x5d, 0xaf, 0x75, 0xdd, 0x8d, 0x82,
- 0x43, 0x7e, 0xd9, 0xf3, 0xdc, 0x88, 0xba, 0xd2, 0x9b, 0x24, 0xc9, 0xb6, 0x28, 0xb2, 0x3b, 0x74,
- 0x2f, 0x22, 0x1d, 0x5f, 0x94, 0x8a, 0x47, 0xda, 0xa2, 0x64, 0x31, 0x33, 0x9b, 0x43, 0xc2, 0x88,
- 0x87, 0x9c, 0xb2, 0xc1, 0xbf, 0x99, 0x82, 0xc9, 0x84, 0xbd, 0x28, 0x10, 0xf1, 0x26, 0x33, 0xa6,
- 0x3a, 0x60, 0x29, 0xc6, 0x26, 0x48, 0xbd, 0x03, 0x0f, 0x26, 0x77, 0x98, 0x3b, 0x34, 0xe8, 0xd8,
- 0x2e, 0xc9, 0x4f, 0x42, 0x13, 0x74, 0x29, 0x73, 0xae, 0xd0, 0x5e, 0xe6, 0x48, 0xb2, 0x2b, 0xc1,
- 0x5d, 0xdb, 0xb5, 0xbc, 0x57, 0x72, 0x8e, 0xd6, 0x74, 0x02, 0xff, 0x9c, 0x6d, 0x34, 0x2a, 0x12,
- 0x93, 0x38, 0xf0, 0x3c, 0x2c, 0xb3, 0x88, 0xd1, 0xa3, 0xe2, 0x07, 0x11, 0x94, 0xf4, 0x51, 0x3d,
- 0x9f, 0x94, 0x87, 0x91, 0x5d, 0x88, 0x77, 0x61, 0x85, 0x84, 0xa1, 0xdd, 0x72, 0xa9, 0x25, 0x79,
- 0x15, 0x26, 0xe6, 0xd5, 0xbf, 0x34, 0xee, 0x1e, 0xf0, 0x19, 0x62, 0xbf, 0x25, 0xa9, 0x7f, 0x15,
- 0xc1, 0xa9, 0xa1, 0x4c, 0x92, 0x73, 0x85, 0x94, 0x3c, 0x52, 0x85, 0x72, 0x68, 0xb6, 0xa9, 0xd5,
- 0x75, 0x64, 0x5e, 0x4c, 0x68, 0xf6, 0x9b, 0xd5, 0x8d, 0x77, 0x5f, 0xe4, 0xb1, 0x84, 0xc6, 0x67,
- 0x00, 0x3a, 0xc4, 0xed, 0x12, 0x87, 0x43, 0x98, 0xe3, 0x10, 0x94, 0x11, 0x7d, 0x0d, 0xaa, 0xc3,
- 0x5c, 0x47, 0xb4, 0xaa, 0xfe, 0x85, 0xe0, 0x98, 0x0c, 0xb9, 0x62, 0x77, 0xeb, 0xb0, 0xa2, 0x98,
- 0xe1, 0x56, 0xba, 0xd1, 0xfd, 0xc3, 0x63, 0xc2, 0xa9, 0xf4, 0x92, 0x62, 0xf6, 0xad, 0xa0, 0x97,
- 0xe9, 0xf6, 0x4f, 0x9c, 0x70, 0xd1, 0x8c, 0xca, 0xe0, 0xaf, 0x80, 0x76, 0x93, 0xb8, 0xa4, 0x45,
- 0xad, 0x44, 0xed, 0xc4, 0xc5, 0xbe, 0xa8, 0xf6, 0x5c, 0xa6, 0xee, 0x70, 0x24, 0x15, 0xa3, 0xbd,
- 0xbf, 0x2f, 0xfb, 0x37, 0x01, 0x94, 0x77, 0x6d, 0xf7, 0x60, 0xc7, 0xdd, 0xf7, 0x98, 0xc6, 0x91,
- 0x1d, 0x39, 0xd2, 0xba, 0x31, 0x81, 0x8f, 0x43, 0xb1, 0x1b, 0x38, 0xc2, 0x03, 0xd8, 0x27, 0xae,
- 0x41, 0xc5, 0xa2, 0xa1, 0x19, 0xd8, 0xbe, 0xd8, 0x7f, 0xde, 0xfb, 0x56, 0x86, 0xd8, 0x3e, 0xd8,
- 0xa6, 0xe7, 0x6e, 0x3b, 0x24, 0x0c, 0x65, 0x7a, 0x4a, 0x06, 0xf4, 0xa7, 0x61, 0x99, 0xc9, 0x4c,
- 0xd5, 0xbc, 0x98, 0x55, 0xf3, 0x54, 0x06, 0xbe, 0x84, 0x27, 0x11, 0x13, 0x78, 0x80, 0x55, 0x05,
- 0x57, 0x7d, 0x5f, 0x30, 0x99, 0xb0, 0x1e, 0x2b, 0x0e, 0xcb, 0xae, 0x43, 0x5b, 0xbe, 0x9b, 0x7f,
- 0x3d, 0x0b, 0x58, 0x3d, 0x27, 0x34, 0xe8, 0xd9, 0x26, 0xc5, 0xdf, 0x42, 0x30, 0xc7, 0x44, 0xe3,
- 0x87, 0x46, 0x1d, 0x4b, 0xee, 0xaf, 0xd5, 0xd9, 0xdd, 0xe7, 0x99, 0x34, 0x7d, 0xed, 0xf5, 0xbf,
- 0xfc, 0xfd, 0xdb, 0x85, 0x55, 0x7c, 0x92, 0x3f, 0xf4, 0xf5, 0xae, 0xa8, 0x8f, 0x6e, 0x21, 0x7e,
- 0x03, 0x01, 0x16, 0x55, 0x92, 0xf2, 0x14, 0x82, 0x2f, 0x8e, 0x82, 0x38, 0xe4, 0xc9, 0xa4, 0xfa,
- 0x90, 0x92, 0x55, 0x1a, 0xa6, 0x17, 0x50, 0x96, 0x43, 0xf8, 0x04, 0x0e, 0x60, 0x9d, 0x03, 0x38,
- 0x87, 0xf5, 0x61, 0x00, 0x9a, 0xaf, 0x32, 0x8b, 0xbe, 0xd6, 0xa4, 0xb1, 0xdc, 0xb7, 0x10, 0x94,
- 0xee, 0xf2, 0xab, 0xd0, 0x18, 0x23, 0xed, 0xcd, 0xcc, 0x48, 0x5c, 0x1c, 0x47, 0xab, 0x9f, 0xe5,
- 0x48, 0x1f, 0xc2, 0xa7, 0x25, 0xd2, 0x30, 0x0a, 0x28, 0xe9, 0x64, 0x00, 0x5f, 0x46, 0xf8, 0x1d,
- 0x04, 0xf3, 0x71, 0x0f, 0x1c, 0x9f, 0x1f, 0x85, 0x32, 0xd3, 0x23, 0xaf, 0xce, 0xae, 0xa1, 0xac,
- 0x3f, 0xca, 0x31, 0x9e, 0xd5, 0x87, 0x6e, 0xe7, 0x56, 0xa6, 0xdd, 0xfc, 0x26, 0x82, 0xe2, 0x0d,
- 0x3a, 0xd6, 0xdf, 0x66, 0x08, 0x6e, 0xc0, 0x80, 0x43, 0xb6, 0x1a, 0xbf, 0x8d, 0xe0, 0xc1, 0x1b,
- 0x34, 0x1a, 0x9e, 0x1e, 0x71, 0x7d, 0x7c, 0xce, 0x12, 0x6e, 0x77, 0x71, 0x82, 0x99, 0x49, 0x5e,
- 0x68, 0x72, 0x64, 0x8f, 0xe2, 0x0b, 0x79, 0x4e, 0x18, 0x1e, 0xba, 0xe6, 0x2b, 0x02, 0xc7, 0x1f,
- 0x11, 0x1c, 0xef, 0x7f, 0xf2, 0xc4, 0x7a, 0xdf, 0x1d, 0x65, 0xc8, 0x8b, 0x68, 0xf5, 0xd6, 0xb4,
- 0x51, 0x36, 0xcb, 0x54, 0xbf, 0xca, 0x91, 0x3f, 0x85, 0x9f, 0xcc, 0x43, 0x9e, 0x34, 0x14, 0x9b,
- 0xaf, 0xca, 0xcf, 0xd7, 0xf8, 0xf3, 0x3c, 0x87, 0xfd, 0x27, 0x04, 0x27, 0x25, 0xdf, 0xed, 0x36,
- 0x09, 0xa2, 0x6b, 0x94, 0x55, 0xd8, 0xe1, 0x44, 0xfa, 0x4c, 0x99, 0x35, 0x54, 0x79, 0xfa, 0x75,
- 0xae, 0xcb, 0x27, 0xf0, 0x33, 0x47, 0xd6, 0xc5, 0x64, 0x6c, 0x2c, 0x01, 0xfb, 0x75, 0x04, 0x4b,
- 0x37, 0x68, 0x74, 0x33, 0x69, 0x6a, 0x9f, 0x9f, 0xe8, 0xa1, 0xac, 0xba, 0xd6, 0x50, 0xfe, 0x15,
- 0x20, 0x7f, 0x4a, 0x5c, 0x64, 0x83, 0x83, 0xbb, 0x80, 0xcf, 0xe7, 0x81, 0x4b, 0x1b, 0xe9, 0x6f,
- 0x21, 0x38, 0xa5, 0x82, 0x48, 0x1f, 0x18, 0x3f, 0x7a, 0xb4, 0x67, 0x3b, 0xf1, 0xf8, 0x37, 0x06,
- 0xdd, 0x26, 0x47, 0x77, 0x49, 0x1f, 0xee, 0xc0, 0x9d, 0x01, 0x14, 0x5b, 0x68, 0xbd, 0x8e, 0xf0,
- 0x6f, 0x11, 0xcc, 0xc7, 0x3d, 0xe5, 0xd1, 0x36, 0xca, 0x3c, 0x88, 0xcd, 0x32, 0x1a, 0x88, 0xdd,
- 0xae, 0x5e, 0x1e, 0x6e, 0x50, 0x75, 0xbd, 0x74, 0xd5, 0x06, 0xb7, 0x72, 0x36, 0x8c, 0xfd, 0x02,
- 0x01, 0xa4, 0x7d, 0x71, 0xfc, 0x68, 0xbe, 0x1e, 0x4a, 0xef, 0xbc, 0x3a, 0xdb, 0xce, 0xb8, 0xde,
- 0xe0, 0xfa, 0xd4, 0xab, 0xb5, 0xdc, 0x18, 0xe2, 0x53, 0x73, 0x2b, 0xee, 0xa1, 0xff, 0x10, 0x41,
- 0x89, 0xb7, 0x23, 0xf1, 0xb9, 0x51, 0x98, 0xd5, 0x6e, 0xe5, 0x2c, 0x4d, 0xff, 0x08, 0x87, 0x5a,
- 0xdb, 0xcc, 0x0b, 0xc4, 0x5b, 0x68, 0x1d, 0xf7, 0x60, 0x3e, 0x6e, 0x00, 0x8e, 0x76, 0x8f, 0x4c,
- 0x83, 0xb0, 0x5a, 0xcb, 0x29, 0x0c, 0x62, 0x47, 0x15, 0x39, 0x60, 0x7d, 0x5c, 0x0e, 0x98, 0x63,
- 0x61, 0x1a, 0x9f, 0xcd, 0x0b, 0xe2, 0xff, 0x07, 0xc3, 0x5c, 0xe4, 0xe8, 0xce, 0xeb, 0xb5, 0x71,
- 0x79, 0x80, 0x59, 0xe7, 0xbb, 0x08, 0x8e, 0xf7, 0x17, 0xd7, 0xf8, 0xf4, 0xd0, 0x3e, 0x95, 0xc8,
- 0x49, 0x59, 0x2b, 0x8e, 0x2a, 0xcc, 0xf5, 0x4f, 0x72, 0x14, 0x5b, 0xf8, 0x89, 0xb1, 0x27, 0xe3,
- 0x96, 0x8c, 0x3a, 0x8c, 0xd1, 0x46, 0xfa, 0xc8, 0xf7, 0x4b, 0x04, 0x4b, 0x92, 0xef, 0x9d, 0x80,
- 0xd2, 0x7c, 0x58, 0xb3, 0x3b, 0x08, 0x4c, 0x96, 0xfe, 0x34, 0x87, 0xff, 0x31, 0xfc, 0xf8, 0x84,
- 0xf0, 0x25, 0xec, 0x8d, 0x88, 0x21, 0xfd, 0x3d, 0x82, 0x13, 0x77, 0x63, 0xbf, 0xff, 0x80, 0xf0,
- 0x6f, 0x73, 0xfc, 0xcf, 0xe0, 0xa7, 0x72, 0xea, 0xbc, 0x71, 0x6a, 0x5c, 0x46, 0xf8, 0x67, 0x08,
- 0xca, 0xf2, 0x71, 0x08, 0x5f, 0x18, 0x79, 0x30, 0xb2, 0xcf, 0x47, 0xb3, 0x74, 0x66, 0x51, 0xd4,
- 0xe8, 0xe7, 0x72, 0xd3, 0xa9, 0x90, 0xcf, 0x1c, 0xfa, 0x4d, 0x04, 0x38, 0xb9, 0x33, 0x27, 0xb7,
- 0x68, 0xfc, 0x48, 0x46, 0xd4, 0xc8, 0xc6, 0x4c, 0xf5, 0xc2, 0xd8, 0x79, 0xd9, 0x54, 0xba, 0x9e,
- 0x9b, 0x4a, 0xbd, 0x44, 0xfe, 0xd7, 0x11, 0x54, 0x6e, 0xd0, 0xe4, 0x0e, 0x92, 0x63, 0xcb, 0xec,
- 0xdb, 0x56, 0xb5, 0x3e, 0x7e, 0xa2, 0x40, 0x74, 0x89, 0x23, 0x7a, 0x04, 0xe7, 0x9b, 0x4a, 0x02,
- 0xf8, 0x1e, 0x82, 0xe5, 0xdb, 0xaa, 0x8b, 0xe2, 0x4b, 0xe3, 0x24, 0x65, 0x22, 0xf9, 0xe4, 0xb8,
- 0x1e, 0xe3, 0xb8, 0x36, 0xf4, 0x89, 0x70, 0x6d, 0x89, 0x67, 0xa2, 0xef, 0xa3, 0xf8, 0x12, 0xdb,
- 0xd7, 0xed, 0xfe, 0x5f, 0xed, 0x96, 0xd3, 0x34, 0xd7, 0x1f, 0xe7, 0xf8, 0x1a, 0xf8, 0xd2, 0x24,
- 0xf8, 0x9a, 0xa2, 0x05, 0x8e, 0xbf, 0x83, 0xe0, 0x04, 0x7f, 0xec, 0x50, 0x19, 0xe3, 0xbc, 0x0e,
- 0x7f, 0xfa, 0x34, 0x32, 0x41, 0x8a, 0xf9, 0x38, 0x07, 0x75, 0x45, 0x3f, 0x12, 0x28, 0xe6, 0xff,
- 0xdf, 0x40, 0x70, 0x4c, 0xe6, 0x33, 0xb1, 0xb1, 0x1b, 0xe3, 0x6c, 0x76, 0xd4, 0xfc, 0x27, 0x3c,
- 0x6d, 0x7d, 0x32, 0x4f, 0x7b, 0x07, 0xc1, 0x82, 0x68, 0xf3, 0xe7, 0x54, 0x09, 0xca, 0x3b, 0x40,
- 0xb5, 0xaf, 0xbd, 0x21, 0xfa, 0xc0, 0xfa, 0xe7, 0xb9, 0xd8, 0x17, 0x71, 0x33, 0x4f, 0xac, 0xef,
- 0x59, 0x61, 0xf3, 0x55, 0xd1, 0x84, 0x7d, 0xad, 0xe9, 0x78, 0xad, 0xf0, 0x25, 0x1d, 0xe7, 0xe6,
- 0x42, 0x36, 0xe7, 0x32, 0xc2, 0x11, 0x2c, 0x32, 0xbf, 0xe0, 0x3d, 0x13, 0x5c, 0xeb, 0xeb, 0xb0,
- 0x0c, 0xb4, 0x53, 0xaa, 0xd5, 0x81, 0x1e, 0x4c, 0x9a, 0xfc, 0xc4, 0x0d, 0x16, 0x3f, 0x9c, 0x2b,
- 0x96, 0x0b, 0x7a, 0x03, 0xc1, 0x09, 0xd5, 0xd1, 0x63, 0xf1, 0x13, 0xbb, 0x79, 0x1e, 0x0a, 0x51,
- 0x4f, 0xe3, 0xf5, 0x89, 0x7c, 0x88, 0xc3, 0x79, 0xf6, 0xb9, 0x3f, 0xbc, 0x77, 0x06, 0xbd, 0xfb,
- 0xde, 0x19, 0xf4, 0xb7, 0xf7, 0xce, 0xa0, 0x97, 0x9e, 0x98, 0xec, 0x5f, 0xce, 0xa6, 0x63, 0x53,
- 0x37, 0x52, 0xd9, 0xff, 0x37, 0x00, 0x00, 0xff, 0xff, 0x20, 0x14, 0xaf, 0x73, 0xcb, 0x2d, 0x00,
+ // 2833 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0x4f, 0x8f, 0x1c, 0x47,
+ 0x15, 0xa7, 0x66, 0x76, 0x76, 0x67, 0xdf, 0x78, 0xbd, 0x76, 0xc5, 0x5e, 0x3a, 0xe3, 0x8d, 0x99,
+ 0xb4, 0xbd, 0xf1, 0x64, 0xed, 0x9d, 0xb1, 0x37, 0x01, 0x92, 0x4d, 0x02, 0x38, 0x6b, 0xc7, 0x59,
+ 0x58, 0x3b, 0xa6, 0xd7, 0xc1, 0x28, 0x1c, 0xa0, 0xd2, 0x5d, 0x3b, 0xd3, 0x6c, 0x4f, 0x77, 0xbb,
+ 0xbb, 0x67, 0xc2, 0x2a, 0xe4, 0x12, 0xc4, 0x2d, 0x02, 0x01, 0x41, 0xe2, 0x80, 0x02, 0x4a, 0x14,
+ 0x09, 0x21, 0x10, 0x17, 0x84, 0x90, 0x10, 0x12, 0x1c, 0x82, 0xe0, 0x80, 0x14, 0xc1, 0x17, 0x40,
+ 0x11, 0xe2, 0x06, 0x5c, 0x72, 0x46, 0xa8, 0xaa, 0xab, 0xba, 0xab, 0xe7, 0x4f, 0xcf, 0x2c, 0x33,
+ 0x28, 0xb9, 0xf5, 0xab, 0xa9, 0x7a, 0xef, 0xf7, 0x5e, 0xbd, 0x7a, 0xef, 0xd5, 0xab, 0x81, 0xf3,
+ 0x21, 0x0d, 0x7a, 0x34, 0x68, 0x12, 0xdf, 0x77, 0x6c, 0x93, 0x44, 0xb6, 0xe7, 0xaa, 0xdf, 0x0d,
+ 0x3f, 0xf0, 0x22, 0x0f, 0x57, 0x94, 0xa1, 0xea, 0x6a, 0xcb, 0xf3, 0x5a, 0x0e, 0x6d, 0x12, 0xdf,
+ 0x6e, 0x12, 0xd7, 0xf5, 0x22, 0x3e, 0x1c, 0xc6, 0x53, 0xab, 0xfa, 0xc1, 0x63, 0x61, 0xc3, 0xf6,
+ 0xf8, 0xaf, 0xa6, 0x17, 0xd0, 0x66, 0xef, 0x4a, 0xb3, 0x45, 0x5d, 0x1a, 0x90, 0x88, 0x5a, 0x62,
+ 0xce, 0xa3, 0xe9, 0x9c, 0x0e, 0x31, 0xdb, 0xb6, 0x4b, 0x83, 0xc3, 0xa6, 0x7f, 0xd0, 0x62, 0x03,
+ 0x61, 0xb3, 0x43, 0x23, 0x32, 0x6c, 0xd5, 0x6e, 0xcb, 0x8e, 0xda, 0xdd, 0x17, 0x1b, 0xa6, 0xd7,
+ 0x69, 0x92, 0xa0, 0xe5, 0xf9, 0x81, 0xf7, 0x55, 0xfe, 0xb1, 0x61, 0x5a, 0xcd, 0xde, 0x23, 0x29,
+ 0x03, 0x55, 0x97, 0xde, 0x15, 0xe2, 0xf8, 0x6d, 0x32, 0xc8, 0xed, 0xfa, 0x18, 0x6e, 0x01, 0xf5,
+ 0x3d, 0x61, 0x1b, 0xfe, 0x69, 0x47, 0x5e, 0x70, 0xa8, 0x7c, 0xc6, 0x6c, 0xf4, 0xf7, 0x11, 0x9c,
+ 0xb8, 0x9a, 0xca, 0xfb, 0x7c, 0x97, 0x06, 0x87, 0x18, 0xc3, 0x9c, 0x4b, 0x3a, 0x54, 0x43, 0x35,
+ 0x54, 0x5f, 0x34, 0xf8, 0x37, 0xd6, 0x60, 0x21, 0xa0, 0xfb, 0x01, 0x0d, 0xdb, 0x5a, 0x81, 0x0f,
+ 0x4b, 0x12, 0x57, 0xa1, 0xcc, 0x84, 0x53, 0x33, 0x0a, 0xb5, 0x62, 0xad, 0x58, 0x5f, 0x34, 0x12,
+ 0x1a, 0xd7, 0x61, 0x39, 0xa0, 0xa1, 0xd7, 0x0d, 0x4c, 0xfa, 0x05, 0x1a, 0x84, 0xb6, 0xe7, 0x6a,
+ 0x73, 0x7c, 0x75, 0xff, 0x30, 0xe3, 0x12, 0x52, 0x87, 0x9a, 0x91, 0x17, 0x68, 0x25, 0x3e, 0x25,
+ 0xa1, 0x19, 0x1e, 0x06, 0x5c, 0x9b, 0x8f, 0xf1, 0xb0, 0x6f, 0xac, 0xc3, 0x31, 0xe2, 0xfb, 0xb7,
+ 0x48, 0x87, 0x86, 0x3e, 0x31, 0xa9, 0xb6, 0xc0, 0x7f, 0xcb, 0x8c, 0x31, 0xcc, 0x02, 0x89, 0x56,
+ 0xe6, 0xc0, 0x24, 0xa9, 0x6f, 0xc3, 0xe2, 0x2d, 0xcf, 0xa2, 0xa3, 0xd5, 0xed, 0x67, 0x5f, 0x18,
+ 0x64, 0xaf, 0xbf, 0x83, 0xe0, 0xb4, 0x41, 0x7b, 0x36, 0xc3, 0x7f, 0x93, 0x46, 0xc4, 0x22, 0x11,
+ 0xe9, 0xe7, 0x58, 0x48, 0x38, 0x56, 0xa1, 0x1c, 0x88, 0xc9, 0x5a, 0x81, 0x8f, 0x27, 0xf4, 0x80,
+ 0xb4, 0x62, 0xbe, 0x32, 0xb1, 0x09, 0x25, 0x89, 0x6b, 0x50, 0x89, 0x6d, 0xb9, 0xe3, 0x5a, 0xf4,
+ 0x6b, 0xdc, 0x7a, 0x25, 0x43, 0x1d, 0xc2, 0xab, 0xb0, 0xd8, 0x8b, 0xed, 0xbc, 0x63, 0x71, 0x2b,
+ 0x96, 0x8c, 0x74, 0x40, 0xff, 0x07, 0x82, 0xb3, 0x8a, 0x0f, 0x18, 0x62, 0x67, 0xae, 0xf7, 0xa8,
+ 0x1b, 0x85, 0xa3, 0x15, 0xba, 0x04, 0x27, 0xe5, 0x26, 0xf6, 0xdb, 0x69, 0xf0, 0x07, 0xa6, 0xa2,
+ 0x3a, 0x28, 0x55, 0x54, 0xc7, 0x98, 0x22, 0x92, 0x7e, 0x7e, 0xe7, 0x9a, 0x50, 0x53, 0x1d, 0x1a,
+ 0x30, 0x54, 0x29, 0xdf, 0x50, 0xf3, 0x19, 0x43, 0xe9, 0xef, 0x22, 0xd0, 0x14, 0x45, 0x6f, 0x12,
+ 0xd7, 0xde, 0xa7, 0x61, 0x34, 0xe9, 0x9e, 0xa1, 0x19, 0xee, 0x59, 0x1d, 0x96, 0x63, 0xad, 0x6e,
+ 0xb3, 0xf3, 0xc8, 0xe2, 0x8f, 0x56, 0xaa, 0x15, 0xeb, 0x45, 0xa3, 0x7f, 0x98, 0xed, 0x9d, 0x94,
+ 0x19, 0x6a, 0xf3, 0xdc, 0x8d, 0xd3, 0x01, 0xfd, 0x41, 0x58, 0x7c, 0xc6, 0x76, 0xe8, 0x76, 0xbb,
+ 0xeb, 0x1e, 0xe0, 0x53, 0x50, 0x32, 0xd9, 0x07, 0xd7, 0xe1, 0x98, 0x11, 0x13, 0xfa, 0x77, 0x10,
+ 0x3c, 0x38, 0x4a, 0xeb, 0xbb, 0x76, 0xd4, 0x66, 0xeb, 0xc3, 0x51, 0xea, 0x9b, 0x6d, 0x6a, 0x1e,
+ 0x84, 0xdd, 0x8e, 0x74, 0x59, 0x49, 0x4f, 0xa7, 0xbe, 0xfe, 0x53, 0x04, 0xf5, 0xb1, 0x98, 0xee,
+ 0x06, 0xc4, 0xf7, 0x69, 0x80, 0x9f, 0x81, 0xd2, 0x3d, 0xf6, 0x03, 0x3f, 0xa0, 0x95, 0xcd, 0x46,
+ 0x43, 0x0d, 0xf0, 0x63, 0xb9, 0x3c, 0xfb, 0x11, 0x23, 0x5e, 0x8e, 0x1b, 0xd2, 0x3c, 0x05, 0xce,
+ 0x67, 0x25, 0xc3, 0x27, 0xb1, 0x22, 0x9b, 0xcf, 0xa7, 0x3d, 0x3d, 0x0f, 0x73, 0x3e, 0x09, 0x22,
+ 0xfd, 0x34, 0xdc, 0x97, 0x3d, 0x1e, 0xbe, 0xe7, 0x86, 0x54, 0xff, 0x4d, 0xd6, 0x9b, 0xb6, 0x03,
+ 0x4a, 0x22, 0x6a, 0xd0, 0x7b, 0x5d, 0x1a, 0x46, 0xf8, 0x00, 0xd4, 0x9c, 0xc3, 0xad, 0x5a, 0xd9,
+ 0xdc, 0x69, 0xa4, 0x41, 0xbb, 0x21, 0x83, 0x36, 0xff, 0xf8, 0xb2, 0x69, 0x35, 0x7a, 0x8f, 0x34,
+ 0xfc, 0x83, 0x56, 0x83, 0xa5, 0x80, 0x0c, 0x32, 0x99, 0x02, 0x54, 0x55, 0x0d, 0x95, 0x3b, 0x5e,
+ 0x81, 0xf9, 0xae, 0x1f, 0xd2, 0x20, 0xe2, 0x9a, 0x95, 0x0d, 0x41, 0xb1, 0xfd, 0xeb, 0x11, 0xc7,
+ 0xb6, 0x48, 0x14, 0xef, 0x4f, 0xd9, 0x48, 0x68, 0xfd, 0xb7, 0x59, 0xf4, 0xcf, 0xfb, 0xd6, 0x07,
+ 0x85, 0x5e, 0x45, 0x59, 0xc8, 0xa2, 0x54, 0x3d, 0xa8, 0x98, 0xf5, 0xa0, 0x5f, 0x66, 0xf1, 0x5f,
+ 0xa3, 0x0e, 0x4d, 0xf1, 0x0f, 0x73, 0x66, 0x0d, 0x16, 0x4c, 0x12, 0x9a, 0xc4, 0x92, 0x52, 0x24,
+ 0xc9, 0x02, 0x99, 0x1f, 0x78, 0x3e, 0x69, 0x71, 0x4e, 0xb7, 0x3d, 0xc7, 0x36, 0x0f, 0x85, 0xb8,
+ 0xc1, 0x1f, 0x06, 0x1c, 0x7f, 0x2e, 0xdf, 0xf1, 0x4b, 0x59, 0xd8, 0xe7, 0xa0, 0xb2, 0x77, 0xe8,
+ 0x9a, 0xcf, 0xf9, 0xf1, 0xe1, 0x3e, 0x05, 0x25, 0x3b, 0xa2, 0x9d, 0x50, 0x43, 0xfc, 0x60, 0xc7,
+ 0x84, 0xfe, 0x9f, 0x12, 0xac, 0x28, 0xba, 0xb1, 0x05, 0x79, 0x9a, 0xe5, 0x45, 0xa9, 0x15, 0x98,
+ 0xb7, 0x82, 0x43, 0xa3, 0xeb, 0x0a, 0x07, 0x10, 0x14, 0x13, 0xec, 0x07, 0x5d, 0x37, 0x86, 0x5f,
+ 0x36, 0x62, 0x02, 0xef, 0x43, 0x39, 0x8c, 0x58, 0x95, 0xd1, 0x3a, 0xe4, 0xc0, 0x2b, 0x9b, 0x9f,
+ 0x9d, 0x6e, 0xd3, 0x19, 0xf4, 0x3d, 0xc1, 0xd1, 0x48, 0x78, 0xe3, 0x7b, 0x2c, 0xa6, 0xc5, 0x81,
+ 0x2e, 0xd4, 0x16, 0x6a, 0xc5, 0x7a, 0x65, 0x73, 0x6f, 0x7a, 0x41, 0xcf, 0xf9, 0xac, 0x42, 0x52,
+ 0x32, 0x98, 0x91, 0x4a, 0x61, 0x61, 0xb4, 0x23, 0xe2, 0x43, 0x28, 0xaa, 0x81, 0x74, 0x00, 0x7f,
+ 0x11, 0x4a, 0xb6, 0xbb, 0xef, 0x85, 0xda, 0x22, 0x07, 0xf3, 0xf4, 0x74, 0x60, 0x76, 0xdc, 0x7d,
+ 0xcf, 0x88, 0x19, 0xe2, 0x7b, 0xb0, 0x14, 0xd0, 0x28, 0x38, 0x94, 0x56, 0xd0, 0x80, 0xdb, 0xf5,
+ 0x73, 0xd3, 0x49, 0x30, 0x54, 0x96, 0x46, 0x56, 0x02, 0xde, 0x82, 0x4a, 0x98, 0xfa, 0x98, 0x56,
+ 0xe1, 0x02, 0xb5, 0x0c, 0x23, 0xc5, 0x07, 0x0d, 0x75, 0xf2, 0x80, 0x77, 0x1f, 0xcb, 0xf7, 0xee,
+ 0xa5, 0xb1, 0x59, 0xed, 0xf8, 0x04, 0x59, 0x6d, 0xb9, 0x3f, 0xab, 0xfd, 0x1b, 0xc1, 0xea, 0x40,
+ 0x70, 0xda, 0xf3, 0x69, 0xee, 0x31, 0x20, 0x30, 0x17, 0xfa, 0xd4, 0xe4, 0x99, 0xaa, 0xb2, 0x79,
+ 0x73, 0x66, 0xd1, 0x8a, 0xcb, 0xe5, 0xac, 0xf3, 0x02, 0xea, 0x94, 0x71, 0xe1, 0x47, 0x08, 0x3e,
+ 0xaa, 0xc8, 0xbc, 0x4d, 0x22, 0xb3, 0x9d, 0xa7, 0x2c, 0x3b, 0xbf, 0x6c, 0x8e, 0xc8, 0xcb, 0x31,
+ 0xc1, 0xac, 0xca, 0x3f, 0xee, 0x1c, 0xfa, 0x0c, 0x20, 0xfb, 0x25, 0x1d, 0x98, 0xb2, 0x78, 0xfa,
+ 0x19, 0x82, 0xaa, 0x1a, 0xc3, 0x3d, 0xc7, 0x79, 0x91, 0x98, 0x07, 0x79, 0x20, 0x8f, 0x43, 0xc1,
+ 0xb6, 0x38, 0xc2, 0xa2, 0x51, 0xb0, 0xad, 0x23, 0x06, 0xa3, 0x7e, 0xb8, 0xf3, 0xf9, 0x70, 0x17,
+ 0xb2, 0x70, 0xdf, 0xef, 0x83, 0x2b, 0x43, 0x42, 0x0e, 0xdc, 0x55, 0x58, 0x74, 0xfb, 0x0a, 0xd9,
+ 0x74, 0x60, 0x48, 0x01, 0x5b, 0x18, 0x28, 0x60, 0x35, 0x58, 0xe8, 0x25, 0xd7, 0x1c, 0xf6, 0xb3,
+ 0x24, 0x99, 0x8a, 0xad, 0xc0, 0xeb, 0xfa, 0xc2, 0xe8, 0x31, 0xc1, 0x50, 0x1c, 0xd8, 0x2e, 0x2b,
+ 0xc9, 0x39, 0x0a, 0xf6, 0x7d, 0xf4, 0x8b, 0x4d, 0x46, 0xed, 0x9f, 0x17, 0xe0, 0x63, 0x43, 0xd4,
+ 0x1e, 0xeb, 0x4f, 0x1f, 0x0e, 0xdd, 0x13, 0xaf, 0x5e, 0x18, 0xe9, 0xd5, 0xe5, 0x71, 0x5e, 0xbd,
+ 0x98, 0x6f, 0x2f, 0xc8, 0xda, 0xeb, 0x27, 0x05, 0xa8, 0x0d, 0xb1, 0xd7, 0xf8, 0x72, 0xe2, 0x43,
+ 0x63, 0xb0, 0x7d, 0x2f, 0x10, 0x5e, 0x52, 0x36, 0x62, 0x82, 0x9d, 0x33, 0x2f, 0xf0, 0xdb, 0xc4,
+ 0xe5, 0xde, 0x51, 0x36, 0x04, 0x35, 0xa5, 0xa9, 0xae, 0x81, 0x26, 0xcd, 0x73, 0xd5, 0x8c, 0x83,
+ 0x54, 0x40, 0x3a, 0x34, 0xa2, 0x41, 0x38, 0x2a, 0x44, 0xf5, 0x88, 0xd3, 0xa5, 0x32, 0x44, 0x71,
+ 0x42, 0xff, 0x67, 0xa1, 0x9f, 0x8d, 0xd1, 0x75, 0x3f, 0xfc, 0x86, 0x5e, 0x81, 0x79, 0xc2, 0xd1,
+ 0x0a, 0xd7, 0x14, 0xd4, 0x80, 0x49, 0xcb, 0xf9, 0x26, 0x5d, 0xcc, 0xe6, 0x4b, 0x02, 0x5a, 0x30,
+ 0xc2, 0xa4, 0x1a, 0xf0, 0x4a, 0x64, 0x2d, 0x93, 0x9e, 0x46, 0xd9, 0xdf, 0x18, 0xc9, 0x46, 0xff,
+ 0x26, 0x82, 0x33, 0xd9, 0x65, 0xe1, 0xae, 0x1d, 0x46, 0xf2, 0x16, 0x83, 0xf7, 0x61, 0x21, 0x56,
+ 0x25, 0xae, 0x41, 0x2b, 0x9b, 0xbb, 0xd3, 0x56, 0x26, 0x99, 0xbd, 0x95, 0xcc, 0xf5, 0xc7, 0xe1,
+ 0xcc, 0xd0, 0x70, 0x2c, 0x60, 0x54, 0xa1, 0x2c, 0xab, 0x31, 0xb1, 0xfb, 0x09, 0xad, 0xbf, 0x35,
+ 0x97, 0xcd, 0x8d, 0x9e, 0xb5, 0xeb, 0xb5, 0x72, 0x1a, 0x13, 0xf9, 0x1e, 0xc3, 0x76, 0xc3, 0xb3,
+ 0x94, 0x1e, 0x84, 0x24, 0xd9, 0x3a, 0xd3, 0x73, 0x23, 0x62, 0xbb, 0x34, 0x10, 0xe9, 0x3b, 0x1d,
+ 0x60, 0x3b, 0x1d, 0xda, 0xae, 0x49, 0xf7, 0xa8, 0xe9, 0xb9, 0x56, 0xc8, 0x5d, 0xa6, 0x68, 0x64,
+ 0xc6, 0xf0, 0xb3, 0xb0, 0xc8, 0xe9, 0x3b, 0x76, 0x27, 0xce, 0x57, 0x95, 0xcd, 0xf5, 0x46, 0xdc,
+ 0x2c, 0x6c, 0xa8, 0xcd, 0xc2, 0xd4, 0x86, 0x1d, 0x1a, 0x91, 0x46, 0xef, 0x4a, 0x83, 0xad, 0x30,
+ 0xd2, 0xc5, 0x0c, 0x4b, 0x44, 0x6c, 0x67, 0xd7, 0x76, 0x79, 0x85, 0xcc, 0x44, 0xa5, 0x03, 0xcc,
+ 0x1b, 0xf7, 0x3d, 0xc7, 0xf1, 0x5e, 0x92, 0x07, 0x3c, 0xa6, 0xd8, 0xaa, 0xae, 0x1b, 0xd9, 0x0e,
+ 0x97, 0x1f, 0xfb, 0x5a, 0x3a, 0xc0, 0x57, 0xd9, 0x4e, 0x44, 0x03, 0x71, 0xb2, 0x05, 0x95, 0xf8,
+ 0x7b, 0x25, 0xee, 0x7f, 0xc9, 0xc0, 0x12, 0x9f, 0x8c, 0x63, 0xea, 0xc9, 0xe8, 0x3f, 0x6d, 0x4b,
+ 0x43, 0x9a, 0x38, 0xbc, 0x1d, 0x48, 0x7b, 0xb6, 0xd7, 0x65, 0xc5, 0x1f, 0xaf, 0x91, 0x24, 0x3d,
+ 0x70, 0x5a, 0x96, 0xf3, 0x4f, 0xcb, 0x89, 0xec, 0x69, 0xe1, 0x25, 0x7c, 0x64, 0xb6, 0xb7, 0x49,
+ 0x48, 0xb5, 0x93, 0x9c, 0x75, 0x3a, 0xa0, 0xff, 0x0e, 0x41, 0x79, 0xd7, 0x6b, 0x5d, 0x77, 0xa3,
+ 0xe0, 0x90, 0x5f, 0xf6, 0x3c, 0x37, 0xa2, 0xae, 0xf4, 0x26, 0x49, 0xb2, 0x2d, 0x8a, 0xec, 0x0e,
+ 0xdd, 0x8b, 0x48, 0xc7, 0x17, 0xa5, 0xe2, 0x91, 0xb6, 0x28, 0x59, 0xcc, 0xcc, 0xe6, 0x90, 0x30,
+ 0xe2, 0x21, 0xa7, 0x6c, 0xf0, 0x6f, 0xa6, 0x60, 0x32, 0x61, 0x2f, 0x0a, 0x44, 0xbc, 0xc9, 0x8c,
+ 0xa9, 0x0e, 0x58, 0x8a, 0xb1, 0x09, 0x52, 0xef, 0xc0, 0xfd, 0xc9, 0x1d, 0xe6, 0x0e, 0x0d, 0x3a,
+ 0xb6, 0x4b, 0xf2, 0x93, 0xd0, 0x04, 0x5d, 0xca, 0x9c, 0x2b, 0xb4, 0x97, 0x39, 0x92, 0xec, 0x4a,
+ 0x70, 0xd7, 0x76, 0x2d, 0xef, 0xa5, 0x9c, 0xa3, 0x35, 0x9d, 0xc0, 0xbf, 0x64, 0x1b, 0x8d, 0x8a,
+ 0xc4, 0x24, 0x0e, 0x3c, 0x0b, 0x4b, 0x2c, 0x62, 0xf4, 0xa8, 0xf8, 0x41, 0x04, 0x25, 0x7d, 0x54,
+ 0xcf, 0x27, 0xe5, 0x61, 0x64, 0x17, 0xe2, 0x5d, 0x58, 0x26, 0x61, 0x68, 0xb7, 0x5c, 0x6a, 0x49,
+ 0x5e, 0x85, 0x89, 0x79, 0xf5, 0x2f, 0x8d, 0xbb, 0x07, 0x7c, 0x86, 0xd8, 0x6f, 0x49, 0xea, 0xdf,
+ 0x40, 0x70, 0x7a, 0x28, 0x93, 0xe4, 0x5c, 0x21, 0x25, 0x8f, 0x54, 0xa1, 0x1c, 0x9a, 0x6d, 0x6a,
+ 0x75, 0x1d, 0x99, 0x17, 0x13, 0x9a, 0xfd, 0x66, 0x75, 0xe3, 0xdd, 0x17, 0x79, 0x2c, 0xa1, 0xf1,
+ 0x59, 0x80, 0x0e, 0x71, 0xbb, 0xc4, 0xe1, 0x10, 0xe6, 0x38, 0x04, 0x65, 0x44, 0x5f, 0x85, 0xea,
+ 0x30, 0xd7, 0x11, 0xad, 0xaa, 0x7f, 0x21, 0x38, 0x2e, 0x43, 0xae, 0xd8, 0xdd, 0x3a, 0x2c, 0x2b,
+ 0x66, 0xb8, 0x95, 0x6e, 0x74, 0xff, 0xf0, 0x98, 0x70, 0x2a, 0xbd, 0xa4, 0x98, 0x7d, 0x2b, 0xe8,
+ 0x65, 0xba, 0xfd, 0x13, 0x27, 0x5c, 0x34, 0xa3, 0x32, 0xf8, 0xeb, 0xa0, 0xdd, 0x24, 0x2e, 0x69,
+ 0x51, 0x2b, 0x51, 0x3b, 0x71, 0xb1, 0xaf, 0xa8, 0x3d, 0x97, 0xa9, 0x3b, 0x1c, 0x49, 0xc5, 0x68,
+ 0xef, 0xef, 0xcb, 0xfe, 0x4d, 0x00, 0xe5, 0x5d, 0xdb, 0x3d, 0xd8, 0x71, 0xf7, 0x3d, 0xa6, 0x71,
+ 0x64, 0x47, 0x8e, 0xb4, 0x6e, 0x4c, 0xe0, 0x13, 0x50, 0xec, 0x06, 0x8e, 0xf0, 0x00, 0xf6, 0x89,
+ 0x6b, 0x50, 0xb1, 0x68, 0x68, 0x06, 0xb6, 0x2f, 0xf6, 0x9f, 0xf7, 0xbe, 0x95, 0x21, 0xb6, 0x0f,
+ 0xb6, 0xe9, 0xb9, 0xdb, 0x0e, 0x09, 0x43, 0x99, 0x9e, 0x92, 0x01, 0xfd, 0x49, 0x58, 0x62, 0x32,
+ 0x53, 0x35, 0x2f, 0x66, 0xd5, 0x3c, 0x9d, 0x81, 0x2f, 0xe1, 0x49, 0xc4, 0x04, 0xee, 0x63, 0x55,
+ 0xc1, 0x55, 0xdf, 0x17, 0x4c, 0x26, 0xac, 0xc7, 0x8a, 0xc3, 0xb2, 0xeb, 0xd0, 0x96, 0xef, 0xe6,
+ 0x1b, 0x6b, 0x80, 0xd5, 0x73, 0x42, 0x83, 0x9e, 0x6d, 0x52, 0xfc, 0x5d, 0x04, 0x73, 0x4c, 0x34,
+ 0x7e, 0x60, 0xd4, 0xb1, 0xe4, 0xfe, 0x5a, 0x9d, 0xdd, 0x7d, 0x9e, 0x49, 0xd3, 0x57, 0x5f, 0xfd,
+ 0xeb, 0xdf, 0xbf, 0x57, 0x58, 0xc1, 0xa7, 0xf8, 0x43, 0x5f, 0xef, 0x8a, 0xfa, 0xe8, 0x16, 0xe2,
+ 0xd7, 0x10, 0x60, 0x51, 0x25, 0x29, 0x4f, 0x21, 0xf8, 0xe2, 0x28, 0x88, 0x43, 0x9e, 0x4c, 0xaa,
+ 0x0f, 0x28, 0x59, 0xa5, 0x61, 0x7a, 0x01, 0x65, 0x39, 0x84, 0x4f, 0xe0, 0x00, 0xd6, 0x39, 0x80,
+ 0xf3, 0x58, 0x1f, 0x06, 0xa0, 0xf9, 0x32, 0xb3, 0xe8, 0x2b, 0x4d, 0x1a, 0xcb, 0x7d, 0x13, 0x41,
+ 0xe9, 0x2e, 0xbf, 0x0a, 0x8d, 0x31, 0xd2, 0xde, 0xcc, 0x8c, 0xc4, 0xc5, 0x71, 0xb4, 0xfa, 0x39,
+ 0x8e, 0xf4, 0x01, 0x7c, 0x46, 0x22, 0x0d, 0xa3, 0x80, 0x92, 0x4e, 0x06, 0xf0, 0x65, 0x84, 0xdf,
+ 0x46, 0x30, 0x1f, 0xf7, 0xc0, 0xf1, 0xda, 0x28, 0x94, 0x99, 0x1e, 0x79, 0x75, 0x76, 0x0d, 0x65,
+ 0xfd, 0x61, 0x8e, 0xf1, 0x9c, 0x3e, 0x74, 0x3b, 0xb7, 0x32, 0xed, 0xe6, 0xd7, 0x11, 0x14, 0x6f,
+ 0xd0, 0xb1, 0xfe, 0x36, 0x43, 0x70, 0x03, 0x06, 0x1c, 0xb2, 0xd5, 0xf8, 0x2d, 0x04, 0xf7, 0xdf,
+ 0xa0, 0xd1, 0xf0, 0xf4, 0x88, 0xeb, 0xe3, 0x73, 0x96, 0x70, 0xbb, 0x8b, 0x13, 0xcc, 0x4c, 0xf2,
+ 0x42, 0x93, 0x23, 0x7b, 0x18, 0x5f, 0xc8, 0x73, 0xc2, 0xf0, 0xd0, 0x35, 0x5f, 0x12, 0x38, 0xfe,
+ 0x84, 0xe0, 0x44, 0xff, 0x93, 0x27, 0xd6, 0xfb, 0xee, 0x28, 0x43, 0x5e, 0x44, 0xab, 0xb7, 0xa6,
+ 0x8d, 0xb2, 0x59, 0xa6, 0xfa, 0x55, 0x8e, 0xfc, 0x09, 0xfc, 0x78, 0x1e, 0xf2, 0xa4, 0xa1, 0xd8,
+ 0x7c, 0x59, 0x7e, 0xbe, 0xc2, 0x9f, 0xe7, 0x39, 0xec, 0x3f, 0x23, 0x38, 0x25, 0xf9, 0x6e, 0xb7,
+ 0x49, 0x10, 0x5d, 0xa3, 0xac, 0xc2, 0x0e, 0x27, 0xd2, 0x67, 0xca, 0xac, 0xa1, 0xca, 0xd3, 0xaf,
+ 0x73, 0x5d, 0x3e, 0x8d, 0x9f, 0x3a, 0xb2, 0x2e, 0x26, 0x63, 0x63, 0x09, 0xd8, 0xef, 0x20, 0x38,
+ 0x7e, 0x83, 0x46, 0xcf, 0x6d, 0xef, 0x1c, 0x69, 0x67, 0xa6, 0x74, 0x74, 0x45, 0x9c, 0x7e, 0x8d,
+ 0x2b, 0xf2, 0x29, 0xfc, 0xe4, 0x91, 0x15, 0xf1, 0x4c, 0x3b, 0xd9, 0x97, 0x57, 0x11, 0x1c, 0xbb,
+ 0x41, 0xa3, 0x9b, 0x49, 0x73, 0x7e, 0x6d, 0xa2, 0x07, 0xbf, 0xea, 0x6a, 0x43, 0xf9, 0x77, 0x83,
+ 0xfc, 0x29, 0x71, 0xf5, 0x0d, 0x8e, 0xed, 0x02, 0x5e, 0xcb, 0xc3, 0x96, 0x3e, 0x08, 0xbc, 0x89,
+ 0xe0, 0xb4, 0x0a, 0x22, 0x7d, 0x28, 0xfd, 0xf8, 0xd1, 0x9e, 0x1f, 0xc5, 0x23, 0xe6, 0x18, 0x74,
+ 0x9b, 0x1c, 0xdd, 0x25, 0x7d, 0xf8, 0x41, 0xec, 0x0c, 0xa0, 0xd8, 0x42, 0xeb, 0x75, 0x84, 0x7f,
+ 0x8f, 0x60, 0x3e, 0xee, 0x8d, 0x8f, 0xb6, 0x51, 0xe6, 0x61, 0x6f, 0x96, 0x51, 0x4d, 0x78, 0x6d,
+ 0xf5, 0xf2, 0x70, 0x83, 0xaa, 0xeb, 0xe5, 0xd6, 0x36, 0xb8, 0x95, 0xb3, 0xe1, 0xf8, 0x57, 0x08,
+ 0x20, 0xed, 0xef, 0xe3, 0x87, 0xf3, 0xf5, 0x50, 0xde, 0x00, 0xaa, 0xb3, 0xed, 0xf0, 0xeb, 0x0d,
+ 0xae, 0x4f, 0xbd, 0x5a, 0xcb, 0x8d, 0x85, 0x3e, 0x35, 0xb7, 0xe2, 0xb7, 0x80, 0x1f, 0x23, 0x28,
+ 0xf1, 0xb6, 0x2a, 0x3e, 0x3f, 0x0a, 0xb3, 0xda, 0x75, 0x9d, 0xa5, 0xe9, 0x1f, 0xe2, 0x50, 0x6b,
+ 0x9b, 0x79, 0x09, 0x65, 0x0b, 0xad, 0xe3, 0x1e, 0xcc, 0xc7, 0x8d, 0xcc, 0xd1, 0xee, 0x91, 0x69,
+ 0x74, 0x56, 0x6b, 0x39, 0x05, 0x4e, 0xec, 0xa8, 0x22, 0x97, 0xad, 0x8f, 0xcb, 0x65, 0x73, 0x2c,
+ 0xdd, 0xe0, 0x73, 0x79, 0xc9, 0xe8, 0xff, 0x60, 0x98, 0x8b, 0x1c, 0xdd, 0x9a, 0x5e, 0x1b, 0x97,
+ 0xcf, 0x98, 0x75, 0x7e, 0x80, 0xe0, 0x44, 0xff, 0x25, 0x01, 0x9f, 0x19, 0xda, 0x6f, 0x13, 0xb9,
+ 0x35, 0x6b, 0xc5, 0x51, 0x17, 0x0c, 0xfd, 0x33, 0x1c, 0xc5, 0x16, 0x7e, 0x6c, 0xec, 0xc9, 0xb8,
+ 0x25, 0xa3, 0x0e, 0x63, 0xb4, 0x91, 0x3e, 0x56, 0xfe, 0x1a, 0xc1, 0x31, 0xc9, 0xf7, 0x4e, 0x40,
+ 0x69, 0x3e, 0xac, 0xd9, 0x1d, 0x04, 0x26, 0x4b, 0x7f, 0x92, 0xc3, 0xff, 0x04, 0x7e, 0x74, 0x42,
+ 0xf8, 0x12, 0xf6, 0x46, 0xc4, 0x90, 0xfe, 0x01, 0xc1, 0xc9, 0xbb, 0xb1, 0xdf, 0x7f, 0x40, 0xf8,
+ 0xb7, 0x39, 0xfe, 0xa7, 0xf0, 0x13, 0x39, 0xf5, 0xea, 0x38, 0x35, 0x2e, 0x23, 0xfc, 0x0b, 0x04,
+ 0x65, 0xf9, 0xc8, 0x85, 0x2f, 0x8c, 0x3c, 0x18, 0xd9, 0x67, 0xb0, 0x59, 0x3a, 0xb3, 0x28, 0xce,
+ 0xf4, 0xf3, 0xb9, 0xd9, 0x54, 0xc8, 0x67, 0x0e, 0xfd, 0x3a, 0x02, 0x9c, 0xdc, 0xfd, 0x93, 0x6e,
+ 0x00, 0x7e, 0x28, 0x23, 0x6a, 0x64, 0x83, 0xa9, 0x7a, 0x61, 0xec, 0xbc, 0x6c, 0x2a, 0x5d, 0xcf,
+ 0x4d, 0xa5, 0x5e, 0x22, 0xff, 0x5b, 0x08, 0x2a, 0x37, 0x68, 0x72, 0x97, 0xca, 0xb1, 0x65, 0xf6,
+ 0x8d, 0xae, 0x5a, 0x1f, 0x3f, 0x51, 0x20, 0xba, 0xc4, 0x11, 0x3d, 0x84, 0xf3, 0x4d, 0x25, 0x01,
+ 0xfc, 0x10, 0xc1, 0xd2, 0x6d, 0xd5, 0x45, 0xf1, 0xa5, 0x71, 0x92, 0x32, 0x91, 0x7c, 0x72, 0x5c,
+ 0x8f, 0x70, 0x5c, 0x1b, 0xfa, 0x44, 0xb8, 0xb6, 0xc4, 0x73, 0xd7, 0x1b, 0x28, 0xbe, 0x8c, 0xf7,
+ 0x75, 0xed, 0xff, 0x57, 0xbb, 0xe5, 0x34, 0xff, 0xf5, 0x47, 0x39, 0xbe, 0x06, 0xbe, 0x34, 0x09,
+ 0xbe, 0xa6, 0x68, 0xe5, 0xe3, 0xef, 0x23, 0x38, 0xc9, 0x1f, 0x6d, 0x54, 0xc6, 0x38, 0xef, 0xa5,
+ 0x22, 0x7d, 0xe2, 0x99, 0x20, 0xc5, 0x7c, 0x92, 0x83, 0xba, 0xa2, 0x1f, 0x09, 0x14, 0xf3, 0xff,
+ 0x6f, 0x23, 0x38, 0x2e, 0xf3, 0x99, 0xd8, 0xd8, 0x8d, 0x71, 0x36, 0x3b, 0x6a, 0xfe, 0x13, 0x9e,
+ 0xb6, 0x3e, 0x99, 0xa7, 0xbd, 0x8d, 0x60, 0x41, 0x3c, 0x57, 0xe4, 0x54, 0x09, 0xca, 0x7b, 0x46,
+ 0xb5, 0xaf, 0x4d, 0x23, 0xfa, 0xd9, 0xfa, 0x97, 0xb8, 0xd8, 0xe7, 0x71, 0x33, 0x4f, 0xac, 0xef,
+ 0x59, 0x61, 0xf3, 0x65, 0xd1, 0x4c, 0x7e, 0xa5, 0xe9, 0x78, 0xad, 0xf0, 0x05, 0x1d, 0xe7, 0xe6,
+ 0x42, 0x36, 0xe7, 0x32, 0xc2, 0x11, 0x2c, 0x32, 0xbf, 0xe0, 0xbd, 0x1f, 0x5c, 0xeb, 0xeb, 0x14,
+ 0x0d, 0xb4, 0x85, 0xaa, 0xd5, 0x81, 0x5e, 0x52, 0x9a, 0xfc, 0xc4, 0x4d, 0x1c, 0x3f, 0x98, 0x2b,
+ 0x96, 0x0b, 0x7a, 0x0d, 0xc1, 0x49, 0xd5, 0xd1, 0x63, 0xf1, 0x13, 0xbb, 0x79, 0x1e, 0x0a, 0x51,
+ 0x4f, 0xe3, 0xf5, 0x89, 0x7c, 0x88, 0xc3, 0x79, 0xfa, 0x99, 0x3f, 0xbe, 0x77, 0x16, 0xbd, 0xfb,
+ 0xde, 0x59, 0xf4, 0xb7, 0xf7, 0xce, 0xa2, 0x17, 0x1e, 0x9b, 0xec, 0xdf, 0xda, 0xa6, 0x63, 0x53,
+ 0x37, 0x52, 0xd9, 0xff, 0x37, 0x00, 0x00, 0xff, 0xff, 0x47, 0x2b, 0xad, 0x16, 0x93, 0x2e, 0x00,
0x00,
}
@@ -3121,6 +3123,8 @@ type ApplicationServiceClient interface {
RevisionMetadata(ctx context.Context, in *RevisionMetadataQuery, opts ...grpc.CallOption) (*v1alpha1.RevisionMetadata, error)
// Get the chart metadata (description, maintainers, home) for a specific revision of the application
RevisionChartDetails(ctx context.Context, in *RevisionMetadataQuery, opts ...grpc.CallOption) (*v1alpha1.ChartDetails, error)
+ // Get the chart metadata (description, maintainers, home) for a specific revision of the application
+ GetOCIMetadata(ctx context.Context, in *RevisionMetadataQuery, opts ...grpc.CallOption) (*v1alpha1.OCIMetadata, error)
// GetManifests returns application manifests
GetManifests(ctx context.Context, in *ApplicationManifestQuery, opts ...grpc.CallOption) (*apiclient.ManifestResponse, error)
// GetManifestsWithFiles returns application manifests using provided files to generate them
@@ -3266,6 +3270,15 @@ func (c *applicationServiceClient) RevisionChartDetails(ctx context.Context, in
return out, nil
}
+func (c *applicationServiceClient) GetOCIMetadata(ctx context.Context, in *RevisionMetadataQuery, opts ...grpc.CallOption) (*v1alpha1.OCIMetadata, error) {
+ out := new(v1alpha1.OCIMetadata)
+ err := c.cc.Invoke(ctx, "/application.ApplicationService/GetOCIMetadata", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
func (c *applicationServiceClient) GetManifests(ctx context.Context, in *ApplicationManifestQuery, opts ...grpc.CallOption) (*apiclient.ManifestResponse, error) {
out := new(apiclient.ManifestResponse)
err := c.cc.Invoke(ctx, "/application.ApplicationService/GetManifests", in, out, opts...)
@@ -3535,6 +3548,8 @@ type ApplicationServiceServer interface {
RevisionMetadata(context.Context, *RevisionMetadataQuery) (*v1alpha1.RevisionMetadata, error)
// Get the chart metadata (description, maintainers, home) for a specific revision of the application
RevisionChartDetails(context.Context, *RevisionMetadataQuery) (*v1alpha1.ChartDetails, error)
+ // Get the chart metadata (description, maintainers, home) for a specific revision of the application
+ GetOCIMetadata(context.Context, *RevisionMetadataQuery) (*v1alpha1.OCIMetadata, error)
// GetManifests returns application manifests
GetManifests(context.Context, *ApplicationManifestQuery) (*apiclient.ManifestResponse, error)
// GetManifestsWithFiles returns application manifests using provided files to generate them
@@ -3605,6 +3620,9 @@ func (*UnimplementedApplicationServiceServer) RevisionMetadata(ctx context.Conte
func (*UnimplementedApplicationServiceServer) RevisionChartDetails(ctx context.Context, req *RevisionMetadataQuery) (*v1alpha1.ChartDetails, error) {
return nil, status.Errorf(codes.Unimplemented, "method RevisionChartDetails not implemented")
}
+func (*UnimplementedApplicationServiceServer) GetOCIMetadata(ctx context.Context, req *RevisionMetadataQuery) (*v1alpha1.OCIMetadata, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method GetOCIMetadata not implemented")
+}
func (*UnimplementedApplicationServiceServer) GetManifests(ctx context.Context, req *ApplicationManifestQuery) (*apiclient.ManifestResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetManifests not implemented")
}
@@ -3817,6 +3835,24 @@ func _ApplicationService_RevisionChartDetails_Handler(srv interface{}, ctx conte
return interceptor(ctx, in, info, handler)
}
+func _ApplicationService_GetOCIMetadata_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(RevisionMetadataQuery)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(ApplicationServiceServer).GetOCIMetadata(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/application.ApplicationService/GetOCIMetadata",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(ApplicationServiceServer).GetOCIMetadata(ctx, req.(*RevisionMetadataQuery))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
func _ApplicationService_GetManifests_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ApplicationManifestQuery)
if err := dec(in); err != nil {
@@ -4223,6 +4259,10 @@ var _ApplicationService_serviceDesc = grpc.ServiceDesc{
MethodName: "RevisionChartDetails",
Handler: _ApplicationService_RevisionChartDetails_Handler,
},
+ {
+ MethodName: "GetOCIMetadata",
+ Handler: _ApplicationService_GetOCIMetadata_Handler,
+ },
{
MethodName: "GetManifests",
Handler: _ApplicationService_GetManifests_Handler,
diff --git a/pkg/apiclient/application/application.pb.gw.go b/pkg/apiclient/application/application.pb.gw.go
index 1085fe040c..e302d60d03 100644
--- a/pkg/apiclient/application/application.pb.gw.go
+++ b/pkg/apiclient/application/application.pb.gw.go
@@ -553,6 +553,100 @@ func local_request_ApplicationService_RevisionChartDetails_0(ctx context.Context
}
+var (
+ filter_ApplicationService_GetOCIMetadata_0 = &utilities.DoubleArray{Encoding: map[string]int{"name": 0, "revision": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}}
+)
+
+func request_ApplicationService_GetOCIMetadata_0(ctx context.Context, marshaler runtime.Marshaler, client ApplicationServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+ var protoReq RevisionMetadataQuery
+ var metadata runtime.ServerMetadata
+
+ var (
+ val string
+ ok bool
+ err error
+ _ = err
+ )
+
+ val, ok = pathParams["name"]
+ if !ok {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
+ }
+
+ protoReq.Name, err = runtime.StringP(val)
+
+ if err != nil {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
+ }
+
+ val, ok = pathParams["revision"]
+ if !ok {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "revision")
+ }
+
+ protoReq.Revision, err = runtime.StringP(val)
+
+ if err != nil {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "revision", err)
+ }
+
+ if err := req.ParseForm(); err != nil {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+ }
+ if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ApplicationService_GetOCIMetadata_0); err != nil {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+ }
+
+ msg, err := client.GetOCIMetadata(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
+ return msg, metadata, err
+
+}
+
+func local_request_ApplicationService_GetOCIMetadata_0(ctx context.Context, marshaler runtime.Marshaler, server ApplicationServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+ var protoReq RevisionMetadataQuery
+ var metadata runtime.ServerMetadata
+
+ var (
+ val string
+ ok bool
+ err error
+ _ = err
+ )
+
+ val, ok = pathParams["name"]
+ if !ok {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
+ }
+
+ protoReq.Name, err = runtime.StringP(val)
+
+ if err != nil {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
+ }
+
+ val, ok = pathParams["revision"]
+ if !ok {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "revision")
+ }
+
+ protoReq.Revision, err = runtime.StringP(val)
+
+ if err != nil {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "revision", err)
+ }
+
+ if err := req.ParseForm(); err != nil {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+ }
+ if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ApplicationService_GetOCIMetadata_0); err != nil {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+ }
+
+ msg, err := server.GetOCIMetadata(ctx, &protoReq)
+ return msg, metadata, err
+
+}
+
var (
filter_ApplicationService_GetManifests_0 = &utilities.DoubleArray{Encoding: map[string]int{"name": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}
)
@@ -2184,6 +2278,29 @@ func RegisterApplicationServiceHandlerServer(ctx context.Context, mux *runtime.S
})
+ mux.Handle("GET", pattern_ApplicationService_GetOCIMetadata_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+ ctx, cancel := context.WithCancel(req.Context())
+ defer cancel()
+ var stream runtime.ServerTransportStream
+ ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
+ inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+ rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
+ if err != nil {
+ runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+ return
+ }
+ resp, md, err := local_request_ApplicationService_GetOCIMetadata_0(rctx, inboundMarshaler, server, req, pathParams)
+ md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
+ ctx = runtime.NewServerMetadataContext(ctx, md)
+ if err != nil {
+ runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+ return
+ }
+
+ forward_ApplicationService_GetOCIMetadata_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+ })
+
mux.Handle("GET", pattern_ApplicationService_GetManifests_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
@@ -2804,6 +2921,26 @@ func RegisterApplicationServiceHandlerClient(ctx context.Context, mux *runtime.S
})
+ mux.Handle("GET", pattern_ApplicationService_GetOCIMetadata_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+ ctx, cancel := context.WithCancel(req.Context())
+ defer cancel()
+ inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+ rctx, err := runtime.AnnotateContext(ctx, mux, req)
+ if err != nil {
+ runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+ return
+ }
+ resp, md, err := request_ApplicationService_GetOCIMetadata_0(rctx, inboundMarshaler, client, req, pathParams)
+ ctx = runtime.NewServerMetadataContext(ctx, md)
+ if err != nil {
+ runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+ return
+ }
+
+ forward_ApplicationService_GetOCIMetadata_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+ })
+
mux.Handle("GET", pattern_ApplicationService_GetManifests_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
@@ -3244,6 +3381,8 @@ var (
pattern_ApplicationService_RevisionChartDetails_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"api", "v1", "applications", "name", "revisions", "revision", "chartdetails"}, "", runtime.AssumeColonVerbOpt(true)))
+ pattern_ApplicationService_GetOCIMetadata_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"api", "v1", "applications", "name", "revisions", "revision", "ocimetadata"}, "", runtime.AssumeColonVerbOpt(true)))
+
pattern_ApplicationService_GetManifests_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"api", "v1", "applications", "name", "manifests"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_ApplicationService_GetManifestsWithFiles_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"api", "v1", "applications", "manifestsWithFiles"}, "", runtime.AssumeColonVerbOpt(true)))
@@ -3304,6 +3443,8 @@ var (
forward_ApplicationService_RevisionChartDetails_0 = runtime.ForwardResponseMessage
+ forward_ApplicationService_GetOCIMetadata_0 = runtime.ForwardResponseMessage
+
forward_ApplicationService_GetManifests_0 = runtime.ForwardResponseMessage
forward_ApplicationService_GetManifestsWithFiles_0 = runtime.ForwardResponseMessage
diff --git a/pkg/apiclient/repository/repository.pb.go b/pkg/apiclient/repository/repository.pb.go
index e9e8951a6e..f9d9d6a417 100644
--- a/pkg/apiclient/repository/repository.pb.go
+++ b/pkg/apiclient/repository/repository.pb.go
@@ -399,7 +399,9 @@ type RepoAccessQuery struct {
// Whether to use azure workload identity for authentication
UseAzureWorkloadIdentity bool `protobuf:"varint,20,opt,name=useAzureWorkloadIdentity,proto3" json:"useAzureWorkloadIdentity,omitempty"`
// BearerToken contains the bearer token used for Git auth at the repo server
- BearerToken string `protobuf:"bytes,21,opt,name=bearerToken,proto3" json:"bearerToken,omitempty"`
+ BearerToken string `protobuf:"bytes,21,opt,name=bearerToken,proto3" json:"bearerToken,omitempty"`
+ // Whether https should be disabled for an OCI repo
+ InsecureOciForceHttp bool `protobuf:"varint,22,opt,name=insecureOciForceHttp,proto3" json:"insecureOciForceHttp,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@@ -578,6 +580,13 @@ func (m *RepoAccessQuery) GetBearerToken() string {
return ""
}
+func (m *RepoAccessQuery) GetInsecureOciForceHttp() bool {
+ if m != nil {
+ return m.InsecureOciForceHttp
+ }
+ return false
+}
+
type RepoResponse struct {
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
@@ -748,92 +757,94 @@ func init() {
}
var fileDescriptor_8d38260443475705 = []byte{
- // 1349 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x98, 0xcf, 0x6f, 0x1c, 0x35,
- 0x14, 0xc7, 0x35, 0x49, 0xb3, 0x4d, 0x5e, 0x9a, 0x76, 0xeb, 0x24, 0x65, 0xd8, 0xa6, 0x69, 0x98,
- 0x96, 0x2a, 0x8d, 0xda, 0xd9, 0x66, 0x0b, 0xa2, 0x2a, 0x02, 0x69, 0x9b, 0x54, 0x6d, 0x44, 0x44,
- 0xcb, 0x94, 0x52, 0x09, 0x81, 0x90, 0x33, 0xfb, 0xb2, 0x3b, 0xcd, 0x64, 0xc6, 0xb5, 0xbd, 0xdb,
- 0x2e, 0x55, 0x2f, 0x1c, 0x10, 0x12, 0x5c, 0x10, 0x02, 0x71, 0x02, 0x0e, 0x48, 0x48, 0x70, 0xe7,
- 0x6f, 0xe0, 0x88, 0xc4, 0x3f, 0x80, 0x2a, 0xfe, 0x08, 0x6e, 0x20, 0xdb, 0xb3, 0x33, 0xb3, 0xc9,
- 0xfe, 0x48, 0xd5, 0x34, 0x37, 0xfb, 0xd9, 0xf3, 0xde, 0xc7, 0x5f, 0xbf, 0x67, 0x7b, 0x17, 0x1c,
- 0x81, 0xbc, 0x85, 0xbc, 0xcc, 0x91, 0xc5, 0x22, 0x90, 0x31, 0x6f, 0xe7, 0x9a, 0x2e, 0xe3, 0xb1,
- 0x8c, 0x09, 0x64, 0x96, 0xd2, 0x5c, 0x3d, 0x8e, 0xeb, 0x21, 0x96, 0x29, 0x0b, 0xca, 0x34, 0x8a,
- 0x62, 0x49, 0x65, 0x10, 0x47, 0xc2, 0xcc, 0x2c, 0xad, 0xd7, 0x03, 0xd9, 0x68, 0x6e, 0xb8, 0x7e,
- 0xbc, 0x5d, 0xa6, 0xbc, 0x1e, 0x33, 0x1e, 0xdf, 0xd7, 0x8d, 0x8b, 0x7e, 0xad, 0xdc, 0xba, 0x5c,
- 0x66, 0x5b, 0x75, 0xf5, 0xa5, 0x28, 0x53, 0xc6, 0xc2, 0xc0, 0xd7, 0xdf, 0x96, 0x5b, 0xcb, 0x34,
- 0x64, 0x0d, 0xba, 0x5c, 0xae, 0x63, 0x84, 0x9c, 0x4a, 0xac, 0x25, 0xde, 0xae, 0x0f, 0xf1, 0xa6,
- 0xb1, 0x86, 0xe2, 0x3b, 0x6d, 0x98, 0xf2, 0x90, 0xc5, 0x55, 0xc6, 0xc4, 0x7b, 0x4d, 0xe4, 0x6d,
- 0x42, 0xe0, 0x90, 0x9a, 0x64, 0x5b, 0x0b, 0xd6, 0xe2, 0x84, 0xa7, 0xdb, 0xa4, 0x04, 0xe3, 0x1c,
- 0x5b, 0x81, 0x08, 0xe2, 0xc8, 0x1e, 0xd1, 0xf6, 0xb4, 0x4f, 0x6c, 0x38, 0x4c, 0x19, 0x7b, 0x97,
- 0x6e, 0xa3, 0x3d, 0xaa, 0x87, 0x3a, 0x5d, 0x32, 0x0f, 0x40, 0x19, 0xbb, 0xcd, 0xe3, 0xfb, 0xe8,
- 0x4b, 0xfb, 0x90, 0x1e, 0xcc, 0x59, 0x9c, 0x65, 0x38, 0x5c, 0x65, 0x6c, 0x2d, 0xda, 0x8c, 0x55,
- 0x50, 0xd9, 0x66, 0xd8, 0x09, 0xaa, 0xda, 0xca, 0xc6, 0xa8, 0x6c, 0x24, 0x01, 0x75, 0xdb, 0xf9,
- 0xd7, 0x82, 0xe9, 0x04, 0x77, 0x15, 0x25, 0x0d, 0xc2, 0x04, 0xba, 0x0e, 0x05, 0x11, 0x37, 0xb9,
- 0x6f, 0x3c, 0x4c, 0x56, 0x6e, 0xb9, 0x99, 0x3a, 0x6e, 0x47, 0x1d, 0xdd, 0xf8, 0xc4, 0xaf, 0xb9,
- 0xad, 0xcb, 0x2e, 0xdb, 0xaa, 0xbb, 0x4a, 0x6b, 0x37, 0xa7, 0xb5, 0xdb, 0xd1, 0xda, 0xad, 0x66,
- 0xc6, 0x3b, 0xda, 0xad, 0x97, 0xb8, 0xcf, 0xaf, 0x76, 0x64, 0xd0, 0x6a, 0x47, 0x77, 0xae, 0x96,
- 0x2c, 0xc0, 0xa4, 0xf1, 0xb1, 0x16, 0xd5, 0xf0, 0x91, 0x96, 0x63, 0xcc, 0xcb, 0x9b, 0xc8, 0x1c,
- 0x4c, 0xb4, 0x90, 0x2b, 0x51, 0xd7, 0x6a, 0xf6, 0x98, 0x1e, 0xcf, 0x0c, 0xce, 0x5b, 0x50, 0xec,
- 0x6c, 0x94, 0x87, 0x82, 0xc5, 0x91, 0x40, 0x72, 0x1e, 0xc6, 0x02, 0x89, 0xdb, 0xc2, 0xb6, 0x16,
- 0x46, 0x17, 0x27, 0x2b, 0xd3, 0x6e, 0x6e, 0x7b, 0x13, 0x69, 0x3d, 0x33, 0xc3, 0xf1, 0x61, 0x42,
- 0x7d, 0xde, 0x7f, 0x8f, 0x1d, 0x38, 0xb2, 0x19, 0xab, 0xa5, 0xe2, 0x26, 0x47, 0x61, 0x64, 0x1f,
- 0xf7, 0xba, 0x6c, 0xc3, 0xd6, 0xe8, 0xfc, 0x37, 0x06, 0xc7, 0x34, 0xa4, 0xef, 0xa3, 0x18, 0x9c,
- 0x4f, 0x4d, 0x81, 0x3c, 0xca, 0x64, 0x4c, 0xfb, 0x6a, 0x8c, 0x51, 0x21, 0x1e, 0xc6, 0xbc, 0x96,
- 0x44, 0x48, 0xfb, 0xe4, 0x2c, 0x4c, 0x09, 0xd1, 0xb8, 0xcd, 0x83, 0x16, 0x95, 0xf8, 0x0e, 0xb6,
- 0x93, 0xa4, 0xea, 0x36, 0x2a, 0x0f, 0x41, 0x24, 0xd0, 0x6f, 0x72, 0xd4, 0x32, 0x8e, 0x7b, 0x69,
- 0x9f, 0x5c, 0x80, 0xe3, 0x32, 0x14, 0x2b, 0x61, 0x80, 0x91, 0x5c, 0x41, 0x2e, 0x57, 0xa9, 0xa4,
- 0x76, 0x41, 0x7b, 0xd9, 0x3d, 0x40, 0x96, 0xa0, 0xd8, 0x65, 0x54, 0x21, 0x0f, 0xeb, 0xc9, 0xbb,
- 0xec, 0x69, 0x0a, 0x4f, 0x74, 0xa7, 0xb0, 0x5e, 0x23, 0x18, 0x9b, 0x5e, 0xdf, 0x1c, 0x4c, 0x60,
- 0x44, 0x37, 0x42, 0xbc, 0xe5, 0x07, 0xf6, 0xa4, 0xc6, 0xcb, 0x0c, 0xe4, 0x12, 0x4c, 0x9b, 0xcc,
- 0xad, 0x2a, 0x55, 0xd3, 0x75, 0x1e, 0xd1, 0x0e, 0x7a, 0x0d, 0xa9, 0xbc, 0x4a, 0xcd, 0x6b, 0xab,
- 0xf6, 0xd4, 0x82, 0xb5, 0x38, 0xea, 0xe5, 0x4d, 0xe4, 0x0a, 0xbc, 0x94, 0x75, 0x23, 0x21, 0x69,
- 0x18, 0xea, 0xd4, 0x5e, 0x5b, 0xb5, 0x8f, 0xea, 0xd9, 0xfd, 0x86, 0xc9, 0xdb, 0x50, 0x4a, 0x87,
- 0xae, 0x47, 0x12, 0x39, 0xe3, 0x81, 0xc0, 0x6b, 0x54, 0xe0, 0x5d, 0x1e, 0xda, 0xc7, 0x34, 0xd4,
- 0x80, 0x19, 0x64, 0x06, 0xc6, 0x18, 0x8f, 0x1f, 0xb5, 0xed, 0xa2, 0x9e, 0x6a, 0x3a, 0xaa, 0x86,
- 0x58, 0x92, 0x42, 0xc7, 0x4d, 0x0d, 0x25, 0x5d, 0x52, 0x81, 0x99, 0xba, 0xcf, 0xee, 0x20, 0x6f,
- 0x05, 0x3e, 0x56, 0x7d, 0x3f, 0x6e, 0x46, 0x5a, 0x73, 0xa2, 0xa7, 0xf5, 0x1c, 0x23, 0x2e, 0x10,
- 0x9d, 0xa3, 0x37, 0xa5, 0x64, 0xd7, 0xa8, 0x08, 0xfc, 0x6a, 0x53, 0x36, 0xec, 0x69, 0x2d, 0x6c,
- 0x8f, 0x11, 0x72, 0x15, 0xec, 0xa6, 0xc0, 0xea, 0xa7, 0x4d, 0x8e, 0xf7, 0x62, 0xbe, 0x15, 0xc6,
- 0xb4, 0xb6, 0x56, 0xc3, 0x48, 0x06, 0xb2, 0x6d, 0xcf, 0xe8, 0xaf, 0xfa, 0x8e, 0x2b, 0xad, 0x37,
- 0x90, 0x72, 0xe4, 0xef, 0xc7, 0x5b, 0x18, 0xd9, 0xb3, 0x1a, 0x2b, 0x6f, 0x72, 0x8e, 0xc2, 0x11,
- 0x55, 0x00, 0x9d, 0x0a, 0x75, 0x7e, 0xb1, 0xe0, 0xb8, 0x32, 0xac, 0x70, 0xa4, 0x12, 0x3d, 0x7c,
- 0xd0, 0x44, 0x21, 0xc9, 0x47, 0xb9, 0x9a, 0x98, 0xac, 0xdc, 0x7c, 0xbe, 0xc3, 0xca, 0x4b, 0x6b,
- 0x3e, 0xa9, 0xae, 0x13, 0x50, 0x68, 0x32, 0x81, 0x5c, 0x26, 0x35, 0x9c, 0xf4, 0x54, 0xe6, 0xf9,
- 0x1c, 0x6b, 0xe2, 0x56, 0x14, 0xb6, 0x75, 0x69, 0x8d, 0x7b, 0x99, 0xc1, 0x79, 0x60, 0x40, 0xef,
- 0xb2, 0xda, 0x41, 0x81, 0x56, 0x7e, 0x38, 0x61, 0x62, 0x1a, 0x63, 0xb2, 0xb5, 0xe4, 0x2b, 0x0b,
- 0x0e, 0xad, 0x07, 0x42, 0x92, 0xd9, 0xfc, 0x71, 0x96, 0x1e, 0x5e, 0xa5, 0xf5, 0xfd, 0xa2, 0x50,
- 0x41, 0x9c, 0xd3, 0x9f, 0xfd, 0xf5, 0xcf, 0x37, 0x23, 0x27, 0xc8, 0x8c, 0xbe, 0xb4, 0x5b, 0xcb,
- 0xd9, 0x0d, 0x19, 0xa0, 0xf8, 0x62, 0xc4, 0x22, 0x5f, 0x5a, 0x30, 0x7a, 0x03, 0xfb, 0xd2, 0xec,
- 0x9b, 0x26, 0xce, 0x19, 0x4d, 0x72, 0x8a, 0x9c, 0xec, 0x45, 0x52, 0x7e, 0xac, 0x7a, 0x4f, 0xc8,
- 0x77, 0x16, 0x8c, 0xdf, 0x40, 0x79, 0x8f, 0x07, 0x12, 0x5f, 0x3c, 0xd2, 0x79, 0x8d, 0x74, 0x86,
- 0xbc, 0xd2, 0x41, 0x7a, 0xa8, 0xe2, 0x5e, 0xec, 0x05, 0xf6, 0xad, 0x05, 0x45, 0x25, 0xa8, 0x97,
- 0x1b, 0x3b, 0x98, 0x1d, 0x9c, 0x1b, 0xb4, 0x83, 0xe4, 0x27, 0x0b, 0x66, 0xd5, 0x34, 0xad, 0xd8,
- 0xc1, 0xc3, 0x39, 0x1a, 0x6e, 0x8e, 0x94, 0xfa, 0x2b, 0x48, 0x3e, 0x86, 0x71, 0xa3, 0xdc, 0x66,
- 0x5f, 0xa8, 0x62, 0xb7, 0x79, 0x53, 0x38, 0x8b, 0xda, 0xb1, 0x43, 0x16, 0x06, 0x64, 0x4b, 0x99,
- 0x2b, 0x97, 0xdb, 0xc6, 0xbd, 0x7a, 0x38, 0x90, 0x97, 0x77, 0xba, 0x4f, 0xdf, 0x7d, 0xa5, 0xb9,
- 0x5e, 0x43, 0xe9, 0x39, 0xb6, 0xa7, 0x70, 0x54, 0x85, 0xf8, 0xda, 0x82, 0xa9, 0x1b, 0x28, 0xb3,
- 0x17, 0x1a, 0x39, 0xdd, 0xc3, 0x73, 0xfe, 0xf5, 0x56, 0x72, 0xfa, 0x4f, 0x48, 0x01, 0xde, 0xd4,
- 0x00, 0xaf, 0x3b, 0x97, 0x7a, 0x03, 0x98, 0x77, 0x94, 0xf6, 0x73, 0xd7, 0x5b, 0xd7, 0x28, 0x35,
- 0xe3, 0xe1, 0xaa, 0xb5, 0x44, 0x5a, 0x1a, 0xe9, 0x26, 0x86, 0xdb, 0x2b, 0x0d, 0xca, 0x65, 0x5f,
- 0x99, 0xe7, 0xf3, 0xe6, 0x6c, 0x7a, 0x0a, 0xe1, 0x6a, 0x88, 0x45, 0x72, 0x6e, 0x90, 0x0a, 0x0d,
- 0x0c, 0xb7, 0x7d, 0x13, 0xe6, 0x7b, 0x0b, 0x0a, 0xe6, 0xe4, 0x27, 0xa7, 0x76, 0x46, 0xec, 0xba,
- 0x11, 0xf6, 0xb1, 0x66, 0x5f, 0x35, 0x19, 0xe7, 0xf4, 0x2c, 0x87, 0xab, 0xfa, 0xe0, 0x55, 0xc7,
- 0xda, 0x8f, 0x16, 0x14, 0x3b, 0x08, 0x9d, 0x6f, 0x0f, 0x0e, 0xd2, 0x19, 0x0e, 0x49, 0x7e, 0xb5,
- 0x60, 0xd6, 0xc4, 0xef, 0xae, 0xdd, 0x03, 0xc4, 0x4c, 0xb2, 0xde, 0x19, 0x50, 0xbd, 0x09, 0xec,
- 0xcf, 0x16, 0x14, 0xcc, 0xd5, 0xb9, 0x9b, 0xae, 0xeb, 0x4a, 0xdd, 0x47, 0xba, 0x65, 0x93, 0x8d,
- 0xa5, 0x01, 0x35, 0xa9, 0x51, 0x9e, 0x64, 0xbb, 0xfe, 0x9b, 0x05, 0xc5, 0x0e, 0x4e, 0x7f, 0x39,
- 0x5f, 0x14, 0xb0, 0xfb, 0x6c, 0xc0, 0xe4, 0x77, 0x0b, 0x66, 0x0d, 0xcb, 0xd0, 0x0c, 0x78, 0x51,
- 0xc8, 0xaf, 0x69, 0x64, 0xb7, 0x74, 0x6e, 0xd8, 0x0d, 0xd8, 0x05, 0x4e, 0xa1, 0xb0, 0x8a, 0x21,
- 0xf6, 0xbf, 0xa2, 0xed, 0x9d, 0xe6, 0xf4, 0x88, 0x39, 0x67, 0x5e, 0x01, 0x4b, 0x83, 0x5e, 0x01,
- 0x6a, 0x27, 0x1b, 0x50, 0x34, 0x21, 0x72, 0xaa, 0x3c, 0x73, 0xb0, 0x33, 0x7b, 0x08, 0x46, 0x04,
- 0xcc, 0x9a, 0x48, 0x3b, 0x37, 0xe1, 0x99, 0xc3, 0x25, 0xcf, 0x89, 0xa5, 0x3d, 0x3c, 0x27, 0x1e,
- 0xc3, 0xd1, 0x0f, 0x68, 0x18, 0xa8, 0x4d, 0x35, 0x3f, 0x26, 0xc9, 0xc9, 0x5d, 0x97, 0x44, 0xf6,
- 0x23, 0x73, 0x40, 0xcc, 0x8a, 0x8e, 0x79, 0xc1, 0x39, 0x3b, 0xe8, 0xc8, 0x6e, 0x25, 0xa1, 0x92,
- 0xed, 0xfb, 0xdc, 0x82, 0xe9, 0x4e, 0x74, 0xbd, 0xe8, 0xe7, 0x43, 0xb8, 0xa2, 0x11, 0x2a, 0xce,
- 0xd2, 0xd0, 0x65, 0xef, 0x00, 0xb9, 0x76, 0xfd, 0x8f, 0xa7, 0xf3, 0xd6, 0x9f, 0x4f, 0xe7, 0xad,
- 0xbf, 0x9f, 0xce, 0x5b, 0x1f, 0xbe, 0xb1, 0xb7, 0xff, 0x8f, 0x7c, 0xfd, 0xb3, 0x34, 0xf7, 0x4f,
- 0xcf, 0x46, 0x41, 0xff, 0xd5, 0x73, 0xf9, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb8, 0x97, 0xe0,
- 0xc3, 0xcf, 0x12, 0x00, 0x00,
+ // 1392 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xdf, 0x6e, 0x1b, 0xc5,
+ 0x17, 0xd6, 0x26, 0x8d, 0x9b, 0x4c, 0x9a, 0xd6, 0x9d, 0x24, 0xed, 0xfe, 0xdc, 0x34, 0xcd, 0x6f,
+ 0x5b, 0xa2, 0x34, 0x6a, 0xd7, 0x4d, 0x0a, 0xa2, 0x2a, 0x02, 0xc9, 0x4d, 0x4a, 0x6b, 0x11, 0x91,
+ 0xb2, 0x6d, 0xa9, 0x84, 0x40, 0x68, 0xb2, 0x3e, 0xb1, 0xb7, 0xd9, 0xec, 0x4e, 0x67, 0xc6, 0x6e,
+ 0x4d, 0xd5, 0x1b, 0x84, 0x10, 0x12, 0xdc, 0x20, 0x04, 0xe2, 0x0e, 0x2e, 0x90, 0x90, 0xe0, 0x12,
+ 0x89, 0x67, 0xe0, 0x12, 0x89, 0x17, 0x40, 0x15, 0x0f, 0xc1, 0x25, 0x9a, 0x33, 0xeb, 0xf5, 0x3a,
+ 0xf1, 0x9f, 0x44, 0x4d, 0x73, 0x37, 0x73, 0xce, 0xec, 0xf9, 0xbe, 0xf3, 0xcd, 0x99, 0x33, 0x63,
+ 0x13, 0x47, 0x82, 0x68, 0x80, 0x28, 0x0a, 0xe0, 0xb1, 0x0c, 0x54, 0x2c, 0x9a, 0x99, 0xa1, 0xcb,
+ 0x45, 0xac, 0x62, 0x4a, 0xda, 0x96, 0xc2, 0x4c, 0x35, 0x8e, 0xab, 0x21, 0x14, 0x19, 0x0f, 0x8a,
+ 0x2c, 0x8a, 0x62, 0xc5, 0x54, 0x10, 0x47, 0xd2, 0xac, 0x2c, 0xac, 0x55, 0x03, 0x55, 0xab, 0x6f,
+ 0xb8, 0x7e, 0xbc, 0x5d, 0x64, 0xa2, 0x1a, 0x73, 0x11, 0x3f, 0xc4, 0xc1, 0x65, 0xbf, 0x52, 0x6c,
+ 0x5c, 0x2d, 0xf2, 0xad, 0xaa, 0xfe, 0x52, 0x16, 0x19, 0xe7, 0x61, 0xe0, 0xe3, 0xb7, 0xc5, 0xc6,
+ 0x12, 0x0b, 0x79, 0x8d, 0x2d, 0x15, 0xab, 0x10, 0x81, 0x60, 0x0a, 0x2a, 0x49, 0xb4, 0x9b, 0x03,
+ 0xa2, 0x21, 0xad, 0x81, 0xf4, 0x9d, 0x26, 0x99, 0xf0, 0x80, 0xc7, 0x25, 0xce, 0xe5, 0x7b, 0x75,
+ 0x10, 0x4d, 0x4a, 0xc9, 0x11, 0xbd, 0xc8, 0xb6, 0xe6, 0xac, 0x85, 0x31, 0x0f, 0xc7, 0xb4, 0x40,
+ 0x46, 0x05, 0x34, 0x02, 0x19, 0xc4, 0x91, 0x3d, 0x84, 0xf6, 0x74, 0x4e, 0x6d, 0x72, 0x94, 0x71,
+ 0xfe, 0x2e, 0xdb, 0x06, 0x7b, 0x18, 0x5d, 0xad, 0x29, 0x9d, 0x25, 0x84, 0x71, 0x7e, 0x47, 0xc4,
+ 0x0f, 0xc1, 0x57, 0xf6, 0x11, 0x74, 0x66, 0x2c, 0xce, 0x12, 0x39, 0x5a, 0xe2, 0xbc, 0x1c, 0x6d,
+ 0xc6, 0x1a, 0x54, 0x35, 0x39, 0xb4, 0x40, 0xf5, 0x58, 0xdb, 0x38, 0x53, 0xb5, 0x04, 0x10, 0xc7,
+ 0xce, 0xbf, 0x16, 0x99, 0x4c, 0xe8, 0xae, 0x82, 0x62, 0x41, 0x98, 0x90, 0xae, 0x92, 0x9c, 0x8c,
+ 0xeb, 0xc2, 0x37, 0x11, 0xc6, 0x97, 0xd7, 0xdd, 0xb6, 0x3a, 0x6e, 0x4b, 0x1d, 0x1c, 0x7c, 0xec,
+ 0x57, 0xdc, 0xc6, 0x55, 0x97, 0x6f, 0x55, 0x5d, 0xad, 0xb5, 0x9b, 0xd1, 0xda, 0x6d, 0x69, 0xed,
+ 0x96, 0xda, 0xc6, 0xbb, 0x18, 0xd6, 0x4b, 0xc2, 0x67, 0xb3, 0x1d, 0xea, 0x97, 0xed, 0xf0, 0xce,
+ 0x6c, 0xe9, 0x1c, 0x19, 0x37, 0x31, 0xca, 0x51, 0x05, 0x9e, 0xa0, 0x1c, 0x23, 0x5e, 0xd6, 0x44,
+ 0x67, 0xc8, 0x58, 0x03, 0x84, 0x16, 0xb5, 0x5c, 0xb1, 0x47, 0xd0, 0xdf, 0x36, 0x38, 0x6f, 0x92,
+ 0x7c, 0x6b, 0xa3, 0x3c, 0x90, 0x3c, 0x8e, 0x24, 0xd0, 0x8b, 0x64, 0x24, 0x50, 0xb0, 0x2d, 0x6d,
+ 0x6b, 0x6e, 0x78, 0x61, 0x7c, 0x79, 0xd2, 0xcd, 0x6c, 0x6f, 0x22, 0xad, 0x67, 0x56, 0x38, 0x3e,
+ 0x19, 0xd3, 0x9f, 0xf7, 0xde, 0x63, 0x87, 0x1c, 0xdb, 0x8c, 0x75, 0xaa, 0xb0, 0x29, 0x40, 0x1a,
+ 0xd9, 0x47, 0xbd, 0x0e, 0xdb, 0xa0, 0x1c, 0x9d, 0xdf, 0x72, 0xe4, 0x04, 0x92, 0xf4, 0x7d, 0x90,
+ 0xfd, 0xeb, 0xa9, 0x2e, 0x41, 0x44, 0x6d, 0x19, 0xd3, 0xb9, 0xf6, 0x71, 0x26, 0xe5, 0xe3, 0x58,
+ 0x54, 0x12, 0x84, 0x74, 0x4e, 0x2f, 0x90, 0x09, 0x29, 0x6b, 0x77, 0x44, 0xd0, 0x60, 0x0a, 0xde,
+ 0x81, 0x66, 0x52, 0x54, 0x9d, 0x46, 0x1d, 0x21, 0x88, 0x24, 0xf8, 0x75, 0x01, 0x28, 0xe3, 0xa8,
+ 0x97, 0xce, 0xe9, 0x25, 0x72, 0x52, 0x85, 0x72, 0x25, 0x0c, 0x20, 0x52, 0x2b, 0x20, 0xd4, 0x2a,
+ 0x53, 0xcc, 0xce, 0x61, 0x94, 0xdd, 0x0e, 0xba, 0x48, 0xf2, 0x1d, 0x46, 0x0d, 0x79, 0x14, 0x17,
+ 0xef, 0xb2, 0xa7, 0x25, 0x3c, 0xd6, 0x59, 0xc2, 0x98, 0x23, 0x31, 0x36, 0xcc, 0x6f, 0x86, 0x8c,
+ 0x41, 0xc4, 0x36, 0x42, 0x58, 0xf7, 0x03, 0x7b, 0x1c, 0xe9, 0xb5, 0x0d, 0xf4, 0x0a, 0x99, 0x34,
+ 0x95, 0x5b, 0xd2, 0xaa, 0xa6, 0x79, 0x1e, 0xc3, 0x00, 0xdd, 0x5c, 0xba, 0xae, 0x52, 0x73, 0x79,
+ 0xd5, 0x9e, 0x98, 0xb3, 0x16, 0x86, 0xbd, 0xac, 0x89, 0x5e, 0x23, 0xa7, 0xdb, 0xd3, 0x48, 0x2a,
+ 0x16, 0x86, 0x58, 0xda, 0xe5, 0x55, 0xfb, 0x38, 0xae, 0xee, 0xe5, 0xa6, 0x6f, 0x91, 0x42, 0xea,
+ 0xba, 0x19, 0x29, 0x10, 0x5c, 0x04, 0x12, 0x6e, 0x30, 0x09, 0xf7, 0x45, 0x68, 0x9f, 0x40, 0x52,
+ 0x7d, 0x56, 0xd0, 0x29, 0x32, 0xc2, 0x45, 0xfc, 0xa4, 0x69, 0xe7, 0x71, 0xa9, 0x99, 0xe8, 0x33,
+ 0xc4, 0x93, 0x12, 0x3a, 0x69, 0xce, 0x50, 0x32, 0xa5, 0xcb, 0x64, 0xaa, 0xea, 0xf3, 0xbb, 0x20,
+ 0x1a, 0x81, 0x0f, 0x25, 0xdf, 0x8f, 0xeb, 0x11, 0x6a, 0x4e, 0x71, 0x59, 0x57, 0x1f, 0x75, 0x09,
+ 0xc5, 0x1a, 0xbd, 0xad, 0x14, 0xbf, 0xc1, 0x64, 0xe0, 0x97, 0xea, 0xaa, 0x66, 0x4f, 0xa2, 0xb0,
+ 0x5d, 0x3c, 0xf4, 0x3a, 0xb1, 0xeb, 0x12, 0x4a, 0x9f, 0xd4, 0x05, 0x3c, 0x88, 0xc5, 0x56, 0x18,
+ 0xb3, 0x4a, 0xb9, 0x02, 0x91, 0x0a, 0x54, 0xd3, 0x9e, 0xc2, 0xaf, 0x7a, 0xfa, 0xb5, 0xd6, 0x1b,
+ 0xc0, 0x04, 0x88, 0x7b, 0xf1, 0x16, 0x44, 0xf6, 0x34, 0xd2, 0xca, 0x9a, 0x74, 0x06, 0xad, 0x5a,
+ 0x5b, 0xf7, 0x83, 0xb7, 0x5b, 0xf0, 0xf6, 0x29, 0x8c, 0xdc, 0xd5, 0xe7, 0x1c, 0x27, 0xc7, 0xf4,
+ 0xa1, 0x69, 0x9d, 0x6a, 0xe7, 0x67, 0x8b, 0x9c, 0xd4, 0x86, 0x15, 0x01, 0x4c, 0x81, 0x07, 0x8f,
+ 0xea, 0x20, 0x15, 0xfd, 0x30, 0x73, 0x8e, 0xc6, 0x97, 0x6f, 0xbf, 0x58, 0x83, 0xf3, 0xd2, 0x3e,
+ 0x91, 0x9c, 0xc8, 0x53, 0x24, 0x57, 0xe7, 0x12, 0x84, 0x4a, 0xce, 0x7d, 0x32, 0xd3, 0xd5, 0xea,
+ 0x0b, 0xa8, 0xc8, 0xf5, 0x28, 0x6c, 0xe2, 0x71, 0x1c, 0xf5, 0xda, 0x06, 0xe7, 0x91, 0x21, 0x7a,
+ 0x9f, 0x57, 0x0e, 0x8b, 0xe8, 0xf2, 0x67, 0xa7, 0x0d, 0xa6, 0x31, 0x26, 0xe5, 0x40, 0xbf, 0xb2,
+ 0xc8, 0x91, 0xb5, 0x40, 0x2a, 0x3a, 0x9d, 0x6d, 0x81, 0x69, 0xc3, 0x2b, 0xac, 0x1d, 0x14, 0x0b,
+ 0x0d, 0xe2, 0x9c, 0xfb, 0xf4, 0xaf, 0x7f, 0xbe, 0x19, 0x3a, 0x45, 0xa7, 0xf0, 0xa2, 0x6f, 0x2c,
+ 0xb5, 0x6f, 0xd5, 0x00, 0xe4, 0x17, 0x43, 0x16, 0xfd, 0xd2, 0x22, 0xc3, 0xb7, 0xa0, 0x27, 0x9b,
+ 0x03, 0xd3, 0xc4, 0x39, 0x8f, 0x4c, 0xce, 0xd2, 0x33, 0xdd, 0x98, 0x14, 0x9f, 0xea, 0xd9, 0x33,
+ 0xfa, 0x9d, 0x45, 0x46, 0x6f, 0x81, 0x7a, 0x20, 0x02, 0x05, 0x2f, 0x9f, 0xd2, 0x45, 0xa4, 0x74,
+ 0x9e, 0xfe, 0xbf, 0x45, 0xe9, 0xb1, 0xc6, 0xbd, 0xdc, 0x8d, 0xd8, 0xb7, 0x16, 0xc9, 0x6b, 0x41,
+ 0xbd, 0x8c, 0xef, 0x70, 0x76, 0x70, 0xa6, 0xdf, 0x0e, 0xd2, 0x1f, 0x2d, 0x32, 0xad, 0x97, 0xa1,
+ 0x62, 0x87, 0x4f, 0xce, 0x41, 0x72, 0x33, 0xb4, 0xd0, 0x5b, 0x41, 0xfa, 0x11, 0x19, 0x35, 0xca,
+ 0x6d, 0xf6, 0x24, 0x95, 0xef, 0x34, 0x6f, 0x4a, 0x67, 0x01, 0x03, 0x3b, 0x74, 0xae, 0x4f, 0xb5,
+ 0x14, 0x85, 0x0e, 0x59, 0x21, 0xe3, 0x3a, 0xfc, 0xfa, 0x4a, 0xf9, 0x1e, 0xab, 0xee, 0x03, 0xe1,
+ 0x12, 0x22, 0xcc, 0xd3, 0x0b, 0xfd, 0x10, 0x62, 0x3f, 0xb8, 0xac, 0x74, 0xd8, 0x6d, 0x93, 0x84,
+ 0x7e, 0xd2, 0xd0, 0xff, 0xed, 0x84, 0x48, 0x5f, 0xa4, 0x85, 0x99, 0x6e, 0xae, 0xb4, 0x5b, 0xee,
+ 0x29, 0x29, 0xa6, 0x21, 0xbe, 0xb6, 0xc8, 0xc4, 0x2d, 0x50, 0xed, 0xb7, 0x23, 0x3d, 0xd7, 0x25,
+ 0x72, 0xf6, 0x5d, 0x59, 0x70, 0x7a, 0x2f, 0x48, 0x09, 0xbc, 0x81, 0x04, 0x5e, 0x73, 0xae, 0x74,
+ 0x27, 0x60, 0x5e, 0x78, 0x18, 0xe7, 0xbe, 0xb7, 0x86, 0x54, 0x2a, 0x26, 0xc2, 0x75, 0x6b, 0x91,
+ 0x36, 0x90, 0xd2, 0x6d, 0x08, 0xb7, 0x57, 0x6a, 0x4c, 0xa8, 0x9e, 0x52, 0xcf, 0x66, 0xcd, 0xed,
+ 0xe5, 0x29, 0x09, 0x17, 0x49, 0x2c, 0xd0, 0xf9, 0x7e, 0x2a, 0xd4, 0x20, 0xdc, 0xf6, 0x0d, 0xcc,
+ 0xf7, 0x16, 0xc9, 0x99, 0xfb, 0x85, 0x9e, 0xdd, 0x89, 0xd8, 0x71, 0xef, 0x1c, 0x60, 0x67, 0x78,
+ 0xc5, 0xd4, 0xb5, 0xd3, 0xf5, 0xd0, 0x5d, 0xc7, 0xf6, 0xae, 0x9b, 0xe7, 0x0f, 0x16, 0xc9, 0xb7,
+ 0x28, 0xb4, 0xbe, 0x3d, 0x3c, 0x92, 0xce, 0x60, 0x92, 0xf4, 0x17, 0x8b, 0x4c, 0x1b, 0xfc, 0xce,
+ 0x0e, 0x71, 0x88, 0x34, 0x93, 0xaa, 0x77, 0xfa, 0xf4, 0x88, 0x84, 0xec, 0x4f, 0x16, 0xc9, 0x99,
+ 0x0b, 0x7a, 0x37, 0xbb, 0x8e, 0x8b, 0xfb, 0x00, 0xd9, 0x2d, 0x99, 0x6a, 0x2c, 0xf4, 0x39, 0x93,
+ 0x48, 0xe5, 0x59, 0x7b, 0xd7, 0x7f, 0xb5, 0x48, 0xbe, 0x45, 0xa7, 0xb7, 0x9c, 0x2f, 0x8b, 0xb0,
+ 0xbb, 0x3f, 0xc2, 0xf4, 0x77, 0x8b, 0x4c, 0x1b, 0x2e, 0x03, 0x2b, 0xe0, 0x65, 0x51, 0x7e, 0x15,
+ 0x29, 0xbb, 0x85, 0xf9, 0x41, 0xf7, 0x6c, 0x07, 0x71, 0x46, 0x72, 0xab, 0x10, 0x42, 0xef, 0x87,
+ 0x80, 0xbd, 0xd3, 0x9c, 0xb6, 0x98, 0x79, 0xf3, 0xd6, 0x58, 0xec, 0xf7, 0xd6, 0xd0, 0x3b, 0x59,
+ 0x23, 0x79, 0x03, 0x91, 0x51, 0x65, 0xdf, 0x60, 0xe7, 0xf7, 0x00, 0x46, 0x25, 0x99, 0x36, 0x48,
+ 0x3b, 0x37, 0x61, 0xdf, 0x70, 0xc9, 0xa3, 0x65, 0x71, 0x0f, 0x8f, 0x96, 0xa7, 0xe4, 0xf8, 0xfb,
+ 0x2c, 0x0c, 0xf4, 0xa6, 0x9a, 0x9f, 0xb9, 0xf4, 0xcc, 0xae, 0x4b, 0xa2, 0xfd, 0xf3, 0xb7, 0x0f,
+ 0xe6, 0x32, 0x62, 0x5e, 0x72, 0xfa, 0xde, 0x95, 0x8d, 0x04, 0x2a, 0xd9, 0xbe, 0xcf, 0x2d, 0x32,
+ 0xd9, 0x42, 0xc7, 0xa4, 0x5f, 0x8c, 0xc2, 0x35, 0xa4, 0xb0, 0xec, 0x2c, 0x0e, 0x4c, 0x7b, 0x07,
+ 0x91, 0x1b, 0x37, 0xff, 0x78, 0x3e, 0x6b, 0xfd, 0xf9, 0x7c, 0xd6, 0xfa, 0xfb, 0xf9, 0xac, 0xf5,
+ 0xc1, 0xeb, 0x7b, 0xfb, 0x67, 0xcb, 0xc7, 0x1f, 0xcc, 0x99, 0xff, 0xa0, 0x36, 0x72, 0xf8, 0x27,
+ 0xd4, 0xd5, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0xbc, 0x0b, 0xd2, 0x3f, 0x69, 0x13, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@@ -859,6 +870,7 @@ type RepositoryServiceClient interface {
// ListWriteRepositories gets a list of all configured write repositories
ListWriteRepositories(ctx context.Context, in *RepoQuery, opts ...grpc.CallOption) (*v1alpha1.RepositoryList, error)
ListRefs(ctx context.Context, in *RepoQuery, opts ...grpc.CallOption) (*apiclient.Refs, error)
+ ListOCITags(ctx context.Context, in *RepoQuery, opts ...grpc.CallOption) (*apiclient.Refs, error)
// ListApps returns list of apps in the repo
ListApps(ctx context.Context, in *RepoAppsQuery, opts ...grpc.CallOption) (*RepoAppsResponse, error)
// GetAppDetails returns application details by given path
@@ -952,6 +964,15 @@ func (c *repositoryServiceClient) ListRefs(ctx context.Context, in *RepoQuery, o
return out, nil
}
+func (c *repositoryServiceClient) ListOCITags(ctx context.Context, in *RepoQuery, opts ...grpc.CallOption) (*apiclient.Refs, error) {
+ out := new(apiclient.Refs)
+ err := c.cc.Invoke(ctx, "/repository.RepositoryService/ListOCITags", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
func (c *repositoryServiceClient) ListApps(ctx context.Context, in *RepoAppsQuery, opts ...grpc.CallOption) (*RepoAppsResponse, error) {
out := new(RepoAppsResponse)
err := c.cc.Invoke(ctx, "/repository.RepositoryService/ListApps", in, out, opts...)
@@ -1094,6 +1115,7 @@ type RepositoryServiceServer interface {
// ListWriteRepositories gets a list of all configured write repositories
ListWriteRepositories(context.Context, *RepoQuery) (*v1alpha1.RepositoryList, error)
ListRefs(context.Context, *RepoQuery) (*apiclient.Refs, error)
+ ListOCITags(context.Context, *RepoQuery) (*apiclient.Refs, error)
// ListApps returns list of apps in the repo
ListApps(context.Context, *RepoAppsQuery) (*RepoAppsResponse, error)
// GetAppDetails returns application details by given path
@@ -1146,6 +1168,9 @@ func (*UnimplementedRepositoryServiceServer) ListWriteRepositories(ctx context.C
func (*UnimplementedRepositoryServiceServer) ListRefs(ctx context.Context, req *RepoQuery) (*apiclient.Refs, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListRefs not implemented")
}
+func (*UnimplementedRepositoryServiceServer) ListOCITags(ctx context.Context, req *RepoQuery) (*apiclient.Refs, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method ListOCITags not implemented")
+}
func (*UnimplementedRepositoryServiceServer) ListApps(ctx context.Context, req *RepoAppsQuery) (*RepoAppsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListApps not implemented")
}
@@ -1301,6 +1326,24 @@ func _RepositoryService_ListRefs_Handler(srv interface{}, ctx context.Context, d
return interceptor(ctx, in, info, handler)
}
+func _RepositoryService_ListOCITags_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(RepoQuery)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(RepositoryServiceServer).ListOCITags(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/repository.RepositoryService/ListOCITags",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(RepositoryServiceServer).ListOCITags(ctx, req.(*RepoQuery))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
func _RepositoryService_ListApps_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(RepoAppsQuery)
if err := dec(in); err != nil {
@@ -1581,6 +1624,10 @@ var _RepositoryService_serviceDesc = grpc.ServiceDesc{
MethodName: "ListRefs",
Handler: _RepositoryService_ListRefs_Handler,
},
+ {
+ MethodName: "ListOCITags",
+ Handler: _RepositoryService_ListOCITags_Handler,
+ },
{
MethodName: "ListApps",
Handler: _RepositoryService_ListApps_Handler,
@@ -1917,6 +1964,18 @@ func (m *RepoAccessQuery) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i -= len(m.XXX_unrecognized)
copy(dAtA[i:], m.XXX_unrecognized)
}
+ if m.InsecureOciForceHttp {
+ i--
+ if m.InsecureOciForceHttp {
+ dAtA[i] = 1
+ } else {
+ dAtA[i] = 0
+ }
+ i--
+ dAtA[i] = 0x1
+ i--
+ dAtA[i] = 0xb0
+ }
if len(m.BearerToken) > 0 {
i -= len(m.BearerToken)
copy(dAtA[i:], m.BearerToken)
@@ -2415,6 +2474,9 @@ func (m *RepoAccessQuery) Size() (n int) {
if l > 0 {
n += 2 + l + sovRepository(uint64(l))
}
+ if m.InsecureOciForceHttp {
+ n += 3
+ }
if m.XXX_unrecognized != nil {
n += len(m.XXX_unrecognized)
}
@@ -3775,6 +3837,26 @@ func (m *RepoAccessQuery) Unmarshal(dAtA []byte) error {
}
m.BearerToken = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
+ case 22:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field InsecureOciForceHttp", wireType)
+ }
+ var v int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowRepository
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.InsecureOciForceHttp = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := skipRepository(dAtA[iNdEx:])
diff --git a/pkg/apiclient/repository/repository.pb.gw.go b/pkg/apiclient/repository/repository.pb.gw.go
index 0a40de1928..192a689bb8 100644
--- a/pkg/apiclient/repository/repository.pb.gw.go
+++ b/pkg/apiclient/repository/repository.pb.gw.go
@@ -357,6 +357,78 @@ func local_request_RepositoryService_ListRefs_0(ctx context.Context, marshaler r
}
+var (
+ filter_RepositoryService_ListOCITags_0 = &utilities.DoubleArray{Encoding: map[string]int{"repo": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}
+)
+
+func request_RepositoryService_ListOCITags_0(ctx context.Context, marshaler runtime.Marshaler, client RepositoryServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+ var protoReq RepoQuery
+ var metadata runtime.ServerMetadata
+
+ var (
+ val string
+ ok bool
+ err error
+ _ = err
+ )
+
+ val, ok = pathParams["repo"]
+ if !ok {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "repo")
+ }
+
+ protoReq.Repo, err = runtime.String(val)
+
+ if err != nil {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "repo", err)
+ }
+
+ if err := req.ParseForm(); err != nil {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+ }
+ if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_RepositoryService_ListOCITags_0); err != nil {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+ }
+
+ msg, err := client.ListOCITags(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
+ return msg, metadata, err
+
+}
+
+func local_request_RepositoryService_ListOCITags_0(ctx context.Context, marshaler runtime.Marshaler, server RepositoryServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+ var protoReq RepoQuery
+ var metadata runtime.ServerMetadata
+
+ var (
+ val string
+ ok bool
+ err error
+ _ = err
+ )
+
+ val, ok = pathParams["repo"]
+ if !ok {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "repo")
+ }
+
+ protoReq.Repo, err = runtime.String(val)
+
+ if err != nil {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "repo", err)
+ }
+
+ if err := req.ParseForm(); err != nil {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+ }
+ if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_RepositoryService_ListOCITags_0); err != nil {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+ }
+
+ msg, err := server.ListOCITags(ctx, &protoReq)
+ return msg, metadata, err
+
+}
+
var (
filter_RepositoryService_ListApps_0 = &utilities.DoubleArray{Encoding: map[string]int{"repo": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}
)
@@ -1473,6 +1545,29 @@ func RegisterRepositoryServiceHandlerServer(ctx context.Context, mux *runtime.Se
})
+ mux.Handle("GET", pattern_RepositoryService_ListOCITags_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+ ctx, cancel := context.WithCancel(req.Context())
+ defer cancel()
+ var stream runtime.ServerTransportStream
+ ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
+ inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+ rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
+ if err != nil {
+ runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+ return
+ }
+ resp, md, err := local_request_RepositoryService_ListOCITags_0(rctx, inboundMarshaler, server, req, pathParams)
+ md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
+ ctx = runtime.NewServerMetadataContext(ctx, md)
+ if err != nil {
+ runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+ return
+ }
+
+ forward_RepositoryService_ListOCITags_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+ })
+
mux.Handle("GET", pattern_RepositoryService_ListApps_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
@@ -1956,6 +2051,26 @@ func RegisterRepositoryServiceHandlerClient(ctx context.Context, mux *runtime.Se
})
+ mux.Handle("GET", pattern_RepositoryService_ListOCITags_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+ ctx, cancel := context.WithCancel(req.Context())
+ defer cancel()
+ inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+ rctx, err := runtime.AnnotateContext(ctx, mux, req)
+ if err != nil {
+ runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+ return
+ }
+ resp, md, err := request_RepositoryService_ListOCITags_0(rctx, inboundMarshaler, client, req, pathParams)
+ ctx = runtime.NewServerMetadataContext(ctx, md)
+ if err != nil {
+ runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+ return
+ }
+
+ forward_RepositoryService_ListOCITags_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+ })
+
mux.Handle("GET", pattern_RepositoryService_ListApps_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
@@ -2252,6 +2367,8 @@ var (
pattern_RepositoryService_ListRefs_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"api", "v1", "repositories", "repo", "refs"}, "", runtime.AssumeColonVerbOpt(true)))
+ pattern_RepositoryService_ListOCITags_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"api", "v1", "repositories", "repo", "oci-tags"}, "", runtime.AssumeColonVerbOpt(true)))
+
pattern_RepositoryService_ListApps_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"api", "v1", "repositories", "repo", "apps"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_RepositoryService_GetAppDetails_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"api", "v1", "repositories", "source.repoURL", "appdetails"}, "", runtime.AssumeColonVerbOpt(true)))
@@ -2294,6 +2411,8 @@ var (
forward_RepositoryService_ListRefs_0 = runtime.ForwardResponseMessage
+ forward_RepositoryService_ListOCITags_0 = runtime.ForwardResponseMessage
+
forward_RepositoryService_ListApps_0 = runtime.ForwardResponseMessage
forward_RepositoryService_GetAppDetails_0 = runtime.ForwardResponseMessage
diff --git a/pkg/apis/application/v1alpha1/generated.pb.go b/pkg/apis/application/v1alpha1/generated.pb.go
index 0d39b5b8ca..82cbe14ad7 100644
--- a/pkg/apis/application/v1alpha1/generated.pb.go
+++ b/pkg/apis/application/v1alpha1/generated.pb.go
@@ -2701,10 +2701,38 @@ func (m *NestedMergeGenerator) XXX_DiscardUnknown() {
var xxx_messageInfo_NestedMergeGenerator proto.InternalMessageInfo
+func (m *OCIMetadata) Reset() { *m = OCIMetadata{} }
+func (*OCIMetadata) ProtoMessage() {}
+func (*OCIMetadata) Descriptor() ([]byte, []int) {
+ return fileDescriptor_c078c3c476799f44, []int{95}
+}
+func (m *OCIMetadata) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *OCIMetadata) 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 *OCIMetadata) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_OCIMetadata.Merge(m, src)
+}
+func (m *OCIMetadata) XXX_Size() int {
+ return m.Size()
+}
+func (m *OCIMetadata) XXX_DiscardUnknown() {
+ xxx_messageInfo_OCIMetadata.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OCIMetadata proto.InternalMessageInfo
+
func (m *Operation) Reset() { *m = Operation{} }
func (*Operation) ProtoMessage() {}
func (*Operation) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{95}
+ return fileDescriptor_c078c3c476799f44, []int{96}
}
func (m *Operation) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2732,7 +2760,7 @@ var xxx_messageInfo_Operation proto.InternalMessageInfo
func (m *OperationInitiator) Reset() { *m = OperationInitiator{} }
func (*OperationInitiator) ProtoMessage() {}
func (*OperationInitiator) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{96}
+ return fileDescriptor_c078c3c476799f44, []int{97}
}
func (m *OperationInitiator) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2760,7 +2788,7 @@ var xxx_messageInfo_OperationInitiator proto.InternalMessageInfo
func (m *OperationState) Reset() { *m = OperationState{} }
func (*OperationState) ProtoMessage() {}
func (*OperationState) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{97}
+ return fileDescriptor_c078c3c476799f44, []int{98}
}
func (m *OperationState) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2788,7 +2816,7 @@ var xxx_messageInfo_OperationState proto.InternalMessageInfo
func (m *OptionalArray) Reset() { *m = OptionalArray{} }
func (*OptionalArray) ProtoMessage() {}
func (*OptionalArray) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{98}
+ return fileDescriptor_c078c3c476799f44, []int{99}
}
func (m *OptionalArray) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2816,7 +2844,7 @@ var xxx_messageInfo_OptionalArray proto.InternalMessageInfo
func (m *OptionalMap) Reset() { *m = OptionalMap{} }
func (*OptionalMap) ProtoMessage() {}
func (*OptionalMap) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{99}
+ return fileDescriptor_c078c3c476799f44, []int{100}
}
func (m *OptionalMap) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2844,7 +2872,7 @@ var xxx_messageInfo_OptionalMap proto.InternalMessageInfo
func (m *OrphanedResourceKey) Reset() { *m = OrphanedResourceKey{} }
func (*OrphanedResourceKey) ProtoMessage() {}
func (*OrphanedResourceKey) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{100}
+ return fileDescriptor_c078c3c476799f44, []int{101}
}
func (m *OrphanedResourceKey) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2872,7 +2900,7 @@ var xxx_messageInfo_OrphanedResourceKey proto.InternalMessageInfo
func (m *OrphanedResourcesMonitorSettings) Reset() { *m = OrphanedResourcesMonitorSettings{} }
func (*OrphanedResourcesMonitorSettings) ProtoMessage() {}
func (*OrphanedResourcesMonitorSettings) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{101}
+ return fileDescriptor_c078c3c476799f44, []int{102}
}
func (m *OrphanedResourcesMonitorSettings) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2900,7 +2928,7 @@ var xxx_messageInfo_OrphanedResourcesMonitorSettings proto.InternalMessageInfo
func (m *OverrideIgnoreDiff) Reset() { *m = OverrideIgnoreDiff{} }
func (*OverrideIgnoreDiff) ProtoMessage() {}
func (*OverrideIgnoreDiff) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{102}
+ return fileDescriptor_c078c3c476799f44, []int{103}
}
func (m *OverrideIgnoreDiff) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2928,7 +2956,7 @@ var xxx_messageInfo_OverrideIgnoreDiff proto.InternalMessageInfo
func (m *PluginConfigMapRef) Reset() { *m = PluginConfigMapRef{} }
func (*PluginConfigMapRef) ProtoMessage() {}
func (*PluginConfigMapRef) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{103}
+ return fileDescriptor_c078c3c476799f44, []int{104}
}
func (m *PluginConfigMapRef) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2956,7 +2984,7 @@ var xxx_messageInfo_PluginConfigMapRef proto.InternalMessageInfo
func (m *PluginGenerator) Reset() { *m = PluginGenerator{} }
func (*PluginGenerator) ProtoMessage() {}
func (*PluginGenerator) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{104}
+ return fileDescriptor_c078c3c476799f44, []int{105}
}
func (m *PluginGenerator) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2984,7 +3012,7 @@ var xxx_messageInfo_PluginGenerator proto.InternalMessageInfo
func (m *PluginInput) Reset() { *m = PluginInput{} }
func (*PluginInput) ProtoMessage() {}
func (*PluginInput) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{105}
+ return fileDescriptor_c078c3c476799f44, []int{106}
}
func (m *PluginInput) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3012,7 +3040,7 @@ var xxx_messageInfo_PluginInput proto.InternalMessageInfo
func (m *ProjectRole) Reset() { *m = ProjectRole{} }
func (*ProjectRole) ProtoMessage() {}
func (*ProjectRole) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{106}
+ return fileDescriptor_c078c3c476799f44, []int{107}
}
func (m *ProjectRole) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3040,7 +3068,7 @@ var xxx_messageInfo_ProjectRole proto.InternalMessageInfo
func (m *PullRequestGenerator) Reset() { *m = PullRequestGenerator{} }
func (*PullRequestGenerator) ProtoMessage() {}
func (*PullRequestGenerator) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{107}
+ return fileDescriptor_c078c3c476799f44, []int{108}
}
func (m *PullRequestGenerator) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3068,7 +3096,7 @@ var xxx_messageInfo_PullRequestGenerator proto.InternalMessageInfo
func (m *PullRequestGeneratorAzureDevOps) Reset() { *m = PullRequestGeneratorAzureDevOps{} }
func (*PullRequestGeneratorAzureDevOps) ProtoMessage() {}
func (*PullRequestGeneratorAzureDevOps) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{108}
+ return fileDescriptor_c078c3c476799f44, []int{109}
}
func (m *PullRequestGeneratorAzureDevOps) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3096,7 +3124,7 @@ var xxx_messageInfo_PullRequestGeneratorAzureDevOps proto.InternalMessageInfo
func (m *PullRequestGeneratorBitbucket) Reset() { *m = PullRequestGeneratorBitbucket{} }
func (*PullRequestGeneratorBitbucket) ProtoMessage() {}
func (*PullRequestGeneratorBitbucket) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{109}
+ return fileDescriptor_c078c3c476799f44, []int{110}
}
func (m *PullRequestGeneratorBitbucket) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3124,7 +3152,7 @@ var xxx_messageInfo_PullRequestGeneratorBitbucket proto.InternalMessageInfo
func (m *PullRequestGeneratorBitbucketServer) Reset() { *m = PullRequestGeneratorBitbucketServer{} }
func (*PullRequestGeneratorBitbucketServer) ProtoMessage() {}
func (*PullRequestGeneratorBitbucketServer) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{110}
+ return fileDescriptor_c078c3c476799f44, []int{111}
}
func (m *PullRequestGeneratorBitbucketServer) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3152,7 +3180,7 @@ var xxx_messageInfo_PullRequestGeneratorBitbucketServer proto.InternalMessageInf
func (m *PullRequestGeneratorFilter) Reset() { *m = PullRequestGeneratorFilter{} }
func (*PullRequestGeneratorFilter) ProtoMessage() {}
func (*PullRequestGeneratorFilter) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{111}
+ return fileDescriptor_c078c3c476799f44, []int{112}
}
func (m *PullRequestGeneratorFilter) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3180,7 +3208,7 @@ var xxx_messageInfo_PullRequestGeneratorFilter proto.InternalMessageInfo
func (m *PullRequestGeneratorGitLab) Reset() { *m = PullRequestGeneratorGitLab{} }
func (*PullRequestGeneratorGitLab) ProtoMessage() {}
func (*PullRequestGeneratorGitLab) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{112}
+ return fileDescriptor_c078c3c476799f44, []int{113}
}
func (m *PullRequestGeneratorGitLab) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3208,7 +3236,7 @@ var xxx_messageInfo_PullRequestGeneratorGitLab proto.InternalMessageInfo
func (m *PullRequestGeneratorGitea) Reset() { *m = PullRequestGeneratorGitea{} }
func (*PullRequestGeneratorGitea) ProtoMessage() {}
func (*PullRequestGeneratorGitea) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{113}
+ return fileDescriptor_c078c3c476799f44, []int{114}
}
func (m *PullRequestGeneratorGitea) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3236,7 +3264,7 @@ var xxx_messageInfo_PullRequestGeneratorGitea proto.InternalMessageInfo
func (m *PullRequestGeneratorGithub) Reset() { *m = PullRequestGeneratorGithub{} }
func (*PullRequestGeneratorGithub) ProtoMessage() {}
func (*PullRequestGeneratorGithub) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{114}
+ return fileDescriptor_c078c3c476799f44, []int{115}
}
func (m *PullRequestGeneratorGithub) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3264,7 +3292,7 @@ var xxx_messageInfo_PullRequestGeneratorGithub proto.InternalMessageInfo
func (m *RefTarget) Reset() { *m = RefTarget{} }
func (*RefTarget) ProtoMessage() {}
func (*RefTarget) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{115}
+ return fileDescriptor_c078c3c476799f44, []int{116}
}
func (m *RefTarget) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3292,7 +3320,7 @@ var xxx_messageInfo_RefTarget proto.InternalMessageInfo
func (m *RepoCreds) Reset() { *m = RepoCreds{} }
func (*RepoCreds) ProtoMessage() {}
func (*RepoCreds) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{116}
+ return fileDescriptor_c078c3c476799f44, []int{117}
}
func (m *RepoCreds) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3320,7 +3348,7 @@ var xxx_messageInfo_RepoCreds proto.InternalMessageInfo
func (m *RepoCredsList) Reset() { *m = RepoCredsList{} }
func (*RepoCredsList) ProtoMessage() {}
func (*RepoCredsList) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{117}
+ return fileDescriptor_c078c3c476799f44, []int{118}
}
func (m *RepoCredsList) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3348,7 +3376,7 @@ var xxx_messageInfo_RepoCredsList proto.InternalMessageInfo
func (m *Repository) Reset() { *m = Repository{} }
func (*Repository) ProtoMessage() {}
func (*Repository) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{118}
+ return fileDescriptor_c078c3c476799f44, []int{119}
}
func (m *Repository) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3376,7 +3404,7 @@ var xxx_messageInfo_Repository proto.InternalMessageInfo
func (m *RepositoryCertificate) Reset() { *m = RepositoryCertificate{} }
func (*RepositoryCertificate) ProtoMessage() {}
func (*RepositoryCertificate) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{119}
+ return fileDescriptor_c078c3c476799f44, []int{120}
}
func (m *RepositoryCertificate) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3404,7 +3432,7 @@ var xxx_messageInfo_RepositoryCertificate proto.InternalMessageInfo
func (m *RepositoryCertificateList) Reset() { *m = RepositoryCertificateList{} }
func (*RepositoryCertificateList) ProtoMessage() {}
func (*RepositoryCertificateList) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{120}
+ return fileDescriptor_c078c3c476799f44, []int{121}
}
func (m *RepositoryCertificateList) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3432,7 +3460,7 @@ var xxx_messageInfo_RepositoryCertificateList proto.InternalMessageInfo
func (m *RepositoryList) Reset() { *m = RepositoryList{} }
func (*RepositoryList) ProtoMessage() {}
func (*RepositoryList) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{121}
+ return fileDescriptor_c078c3c476799f44, []int{122}
}
func (m *RepositoryList) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3460,7 +3488,7 @@ var xxx_messageInfo_RepositoryList proto.InternalMessageInfo
func (m *ResourceAction) Reset() { *m = ResourceAction{} }
func (*ResourceAction) ProtoMessage() {}
func (*ResourceAction) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{122}
+ return fileDescriptor_c078c3c476799f44, []int{123}
}
func (m *ResourceAction) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3488,7 +3516,7 @@ var xxx_messageInfo_ResourceAction proto.InternalMessageInfo
func (m *ResourceActionDefinition) Reset() { *m = ResourceActionDefinition{} }
func (*ResourceActionDefinition) ProtoMessage() {}
func (*ResourceActionDefinition) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{123}
+ return fileDescriptor_c078c3c476799f44, []int{124}
}
func (m *ResourceActionDefinition) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3516,7 +3544,7 @@ var xxx_messageInfo_ResourceActionDefinition proto.InternalMessageInfo
func (m *ResourceActionParam) Reset() { *m = ResourceActionParam{} }
func (*ResourceActionParam) ProtoMessage() {}
func (*ResourceActionParam) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{124}
+ return fileDescriptor_c078c3c476799f44, []int{125}
}
func (m *ResourceActionParam) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3544,7 +3572,7 @@ var xxx_messageInfo_ResourceActionParam proto.InternalMessageInfo
func (m *ResourceActions) Reset() { *m = ResourceActions{} }
func (*ResourceActions) ProtoMessage() {}
func (*ResourceActions) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{125}
+ return fileDescriptor_c078c3c476799f44, []int{126}
}
func (m *ResourceActions) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3572,7 +3600,7 @@ var xxx_messageInfo_ResourceActions proto.InternalMessageInfo
func (m *ResourceDiff) Reset() { *m = ResourceDiff{} }
func (*ResourceDiff) ProtoMessage() {}
func (*ResourceDiff) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{126}
+ return fileDescriptor_c078c3c476799f44, []int{127}
}
func (m *ResourceDiff) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3600,7 +3628,7 @@ var xxx_messageInfo_ResourceDiff proto.InternalMessageInfo
func (m *ResourceIgnoreDifferences) Reset() { *m = ResourceIgnoreDifferences{} }
func (*ResourceIgnoreDifferences) ProtoMessage() {}
func (*ResourceIgnoreDifferences) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{127}
+ return fileDescriptor_c078c3c476799f44, []int{128}
}
func (m *ResourceIgnoreDifferences) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3628,7 +3656,7 @@ var xxx_messageInfo_ResourceIgnoreDifferences proto.InternalMessageInfo
func (m *ResourceNetworkingInfo) Reset() { *m = ResourceNetworkingInfo{} }
func (*ResourceNetworkingInfo) ProtoMessage() {}
func (*ResourceNetworkingInfo) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{128}
+ return fileDescriptor_c078c3c476799f44, []int{129}
}
func (m *ResourceNetworkingInfo) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3656,7 +3684,7 @@ var xxx_messageInfo_ResourceNetworkingInfo proto.InternalMessageInfo
func (m *ResourceNode) Reset() { *m = ResourceNode{} }
func (*ResourceNode) ProtoMessage() {}
func (*ResourceNode) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{129}
+ return fileDescriptor_c078c3c476799f44, []int{130}
}
func (m *ResourceNode) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3684,7 +3712,7 @@ var xxx_messageInfo_ResourceNode proto.InternalMessageInfo
func (m *ResourceOverride) Reset() { *m = ResourceOverride{} }
func (*ResourceOverride) ProtoMessage() {}
func (*ResourceOverride) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{130}
+ return fileDescriptor_c078c3c476799f44, []int{131}
}
func (m *ResourceOverride) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3712,7 +3740,7 @@ var xxx_messageInfo_ResourceOverride proto.InternalMessageInfo
func (m *ResourceRef) Reset() { *m = ResourceRef{} }
func (*ResourceRef) ProtoMessage() {}
func (*ResourceRef) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{131}
+ return fileDescriptor_c078c3c476799f44, []int{132}
}
func (m *ResourceRef) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3740,7 +3768,7 @@ var xxx_messageInfo_ResourceRef proto.InternalMessageInfo
func (m *ResourceResult) Reset() { *m = ResourceResult{} }
func (*ResourceResult) ProtoMessage() {}
func (*ResourceResult) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{132}
+ return fileDescriptor_c078c3c476799f44, []int{133}
}
func (m *ResourceResult) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3768,7 +3796,7 @@ var xxx_messageInfo_ResourceResult proto.InternalMessageInfo
func (m *ResourceStatus) Reset() { *m = ResourceStatus{} }
func (*ResourceStatus) ProtoMessage() {}
func (*ResourceStatus) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{133}
+ return fileDescriptor_c078c3c476799f44, []int{134}
}
func (m *ResourceStatus) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3796,7 +3824,7 @@ var xxx_messageInfo_ResourceStatus proto.InternalMessageInfo
func (m *RetryStrategy) Reset() { *m = RetryStrategy{} }
func (*RetryStrategy) ProtoMessage() {}
func (*RetryStrategy) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{134}
+ return fileDescriptor_c078c3c476799f44, []int{135}
}
func (m *RetryStrategy) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3824,7 +3852,7 @@ var xxx_messageInfo_RetryStrategy proto.InternalMessageInfo
func (m *RevisionHistory) Reset() { *m = RevisionHistory{} }
func (*RevisionHistory) ProtoMessage() {}
func (*RevisionHistory) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{135}
+ return fileDescriptor_c078c3c476799f44, []int{136}
}
func (m *RevisionHistory) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3852,7 +3880,7 @@ var xxx_messageInfo_RevisionHistory proto.InternalMessageInfo
func (m *RevisionMetadata) Reset() { *m = RevisionMetadata{} }
func (*RevisionMetadata) ProtoMessage() {}
func (*RevisionMetadata) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{136}
+ return fileDescriptor_c078c3c476799f44, []int{137}
}
func (m *RevisionMetadata) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3880,7 +3908,7 @@ var xxx_messageInfo_RevisionMetadata proto.InternalMessageInfo
func (m *SCMProviderGenerator) Reset() { *m = SCMProviderGenerator{} }
func (*SCMProviderGenerator) ProtoMessage() {}
func (*SCMProviderGenerator) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{137}
+ return fileDescriptor_c078c3c476799f44, []int{138}
}
func (m *SCMProviderGenerator) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3908,7 +3936,7 @@ var xxx_messageInfo_SCMProviderGenerator proto.InternalMessageInfo
func (m *SCMProviderGeneratorAWSCodeCommit) Reset() { *m = SCMProviderGeneratorAWSCodeCommit{} }
func (*SCMProviderGeneratorAWSCodeCommit) ProtoMessage() {}
func (*SCMProviderGeneratorAWSCodeCommit) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{138}
+ return fileDescriptor_c078c3c476799f44, []int{139}
}
func (m *SCMProviderGeneratorAWSCodeCommit) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3936,7 +3964,7 @@ var xxx_messageInfo_SCMProviderGeneratorAWSCodeCommit proto.InternalMessageInfo
func (m *SCMProviderGeneratorAzureDevOps) Reset() { *m = SCMProviderGeneratorAzureDevOps{} }
func (*SCMProviderGeneratorAzureDevOps) ProtoMessage() {}
func (*SCMProviderGeneratorAzureDevOps) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{139}
+ return fileDescriptor_c078c3c476799f44, []int{140}
}
func (m *SCMProviderGeneratorAzureDevOps) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3964,7 +3992,7 @@ var xxx_messageInfo_SCMProviderGeneratorAzureDevOps proto.InternalMessageInfo
func (m *SCMProviderGeneratorBitbucket) Reset() { *m = SCMProviderGeneratorBitbucket{} }
func (*SCMProviderGeneratorBitbucket) ProtoMessage() {}
func (*SCMProviderGeneratorBitbucket) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{140}
+ return fileDescriptor_c078c3c476799f44, []int{141}
}
func (m *SCMProviderGeneratorBitbucket) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3992,7 +4020,7 @@ var xxx_messageInfo_SCMProviderGeneratorBitbucket proto.InternalMessageInfo
func (m *SCMProviderGeneratorBitbucketServer) Reset() { *m = SCMProviderGeneratorBitbucketServer{} }
func (*SCMProviderGeneratorBitbucketServer) ProtoMessage() {}
func (*SCMProviderGeneratorBitbucketServer) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{141}
+ return fileDescriptor_c078c3c476799f44, []int{142}
}
func (m *SCMProviderGeneratorBitbucketServer) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4020,7 +4048,7 @@ var xxx_messageInfo_SCMProviderGeneratorBitbucketServer proto.InternalMessageInf
func (m *SCMProviderGeneratorFilter) Reset() { *m = SCMProviderGeneratorFilter{} }
func (*SCMProviderGeneratorFilter) ProtoMessage() {}
func (*SCMProviderGeneratorFilter) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{142}
+ return fileDescriptor_c078c3c476799f44, []int{143}
}
func (m *SCMProviderGeneratorFilter) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4048,7 +4076,7 @@ var xxx_messageInfo_SCMProviderGeneratorFilter proto.InternalMessageInfo
func (m *SCMProviderGeneratorGitea) Reset() { *m = SCMProviderGeneratorGitea{} }
func (*SCMProviderGeneratorGitea) ProtoMessage() {}
func (*SCMProviderGeneratorGitea) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{143}
+ return fileDescriptor_c078c3c476799f44, []int{144}
}
func (m *SCMProviderGeneratorGitea) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4076,7 +4104,7 @@ var xxx_messageInfo_SCMProviderGeneratorGitea proto.InternalMessageInfo
func (m *SCMProviderGeneratorGithub) Reset() { *m = SCMProviderGeneratorGithub{} }
func (*SCMProviderGeneratorGithub) ProtoMessage() {}
func (*SCMProviderGeneratorGithub) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{144}
+ return fileDescriptor_c078c3c476799f44, []int{145}
}
func (m *SCMProviderGeneratorGithub) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4104,7 +4132,7 @@ var xxx_messageInfo_SCMProviderGeneratorGithub proto.InternalMessageInfo
func (m *SCMProviderGeneratorGitlab) Reset() { *m = SCMProviderGeneratorGitlab{} }
func (*SCMProviderGeneratorGitlab) ProtoMessage() {}
func (*SCMProviderGeneratorGitlab) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{145}
+ return fileDescriptor_c078c3c476799f44, []int{146}
}
func (m *SCMProviderGeneratorGitlab) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4132,7 +4160,7 @@ var xxx_messageInfo_SCMProviderGeneratorGitlab proto.InternalMessageInfo
func (m *SecretRef) Reset() { *m = SecretRef{} }
func (*SecretRef) ProtoMessage() {}
func (*SecretRef) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{146}
+ return fileDescriptor_c078c3c476799f44, []int{147}
}
func (m *SecretRef) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4160,7 +4188,7 @@ var xxx_messageInfo_SecretRef proto.InternalMessageInfo
func (m *SignatureKey) Reset() { *m = SignatureKey{} }
func (*SignatureKey) ProtoMessage() {}
func (*SignatureKey) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{147}
+ return fileDescriptor_c078c3c476799f44, []int{148}
}
func (m *SignatureKey) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4188,7 +4216,7 @@ var xxx_messageInfo_SignatureKey proto.InternalMessageInfo
func (m *SourceHydrator) Reset() { *m = SourceHydrator{} }
func (*SourceHydrator) ProtoMessage() {}
func (*SourceHydrator) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{148}
+ return fileDescriptor_c078c3c476799f44, []int{149}
}
func (m *SourceHydrator) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4216,7 +4244,7 @@ var xxx_messageInfo_SourceHydrator proto.InternalMessageInfo
func (m *SourceHydratorStatus) Reset() { *m = SourceHydratorStatus{} }
func (*SourceHydratorStatus) ProtoMessage() {}
func (*SourceHydratorStatus) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{149}
+ return fileDescriptor_c078c3c476799f44, []int{150}
}
func (m *SourceHydratorStatus) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4244,7 +4272,7 @@ var xxx_messageInfo_SourceHydratorStatus proto.InternalMessageInfo
func (m *SuccessfulHydrateOperation) Reset() { *m = SuccessfulHydrateOperation{} }
func (*SuccessfulHydrateOperation) ProtoMessage() {}
func (*SuccessfulHydrateOperation) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{150}
+ return fileDescriptor_c078c3c476799f44, []int{151}
}
func (m *SuccessfulHydrateOperation) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4272,7 +4300,7 @@ var xxx_messageInfo_SuccessfulHydrateOperation proto.InternalMessageInfo
func (m *SyncOperation) Reset() { *m = SyncOperation{} }
func (*SyncOperation) ProtoMessage() {}
func (*SyncOperation) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{151}
+ return fileDescriptor_c078c3c476799f44, []int{152}
}
func (m *SyncOperation) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4300,7 +4328,7 @@ var xxx_messageInfo_SyncOperation proto.InternalMessageInfo
func (m *SyncOperationResource) Reset() { *m = SyncOperationResource{} }
func (*SyncOperationResource) ProtoMessage() {}
func (*SyncOperationResource) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{152}
+ return fileDescriptor_c078c3c476799f44, []int{153}
}
func (m *SyncOperationResource) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4328,7 +4356,7 @@ var xxx_messageInfo_SyncOperationResource proto.InternalMessageInfo
func (m *SyncOperationResult) Reset() { *m = SyncOperationResult{} }
func (*SyncOperationResult) ProtoMessage() {}
func (*SyncOperationResult) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{153}
+ return fileDescriptor_c078c3c476799f44, []int{154}
}
func (m *SyncOperationResult) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4356,7 +4384,7 @@ var xxx_messageInfo_SyncOperationResult proto.InternalMessageInfo
func (m *SyncPolicy) Reset() { *m = SyncPolicy{} }
func (*SyncPolicy) ProtoMessage() {}
func (*SyncPolicy) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{154}
+ return fileDescriptor_c078c3c476799f44, []int{155}
}
func (m *SyncPolicy) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4384,7 +4412,7 @@ var xxx_messageInfo_SyncPolicy proto.InternalMessageInfo
func (m *SyncPolicyAutomated) Reset() { *m = SyncPolicyAutomated{} }
func (*SyncPolicyAutomated) ProtoMessage() {}
func (*SyncPolicyAutomated) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{155}
+ return fileDescriptor_c078c3c476799f44, []int{156}
}
func (m *SyncPolicyAutomated) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4412,7 +4440,7 @@ var xxx_messageInfo_SyncPolicyAutomated proto.InternalMessageInfo
func (m *SyncSource) Reset() { *m = SyncSource{} }
func (*SyncSource) ProtoMessage() {}
func (*SyncSource) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{156}
+ return fileDescriptor_c078c3c476799f44, []int{157}
}
func (m *SyncSource) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4440,7 +4468,7 @@ var xxx_messageInfo_SyncSource proto.InternalMessageInfo
func (m *SyncStatus) Reset() { *m = SyncStatus{} }
func (*SyncStatus) ProtoMessage() {}
func (*SyncStatus) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{157}
+ return fileDescriptor_c078c3c476799f44, []int{158}
}
func (m *SyncStatus) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4468,7 +4496,7 @@ var xxx_messageInfo_SyncStatus proto.InternalMessageInfo
func (m *SyncStrategy) Reset() { *m = SyncStrategy{} }
func (*SyncStrategy) ProtoMessage() {}
func (*SyncStrategy) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{158}
+ return fileDescriptor_c078c3c476799f44, []int{159}
}
func (m *SyncStrategy) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4496,7 +4524,7 @@ var xxx_messageInfo_SyncStrategy proto.InternalMessageInfo
func (m *SyncStrategyApply) Reset() { *m = SyncStrategyApply{} }
func (*SyncStrategyApply) ProtoMessage() {}
func (*SyncStrategyApply) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{159}
+ return fileDescriptor_c078c3c476799f44, []int{160}
}
func (m *SyncStrategyApply) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4524,7 +4552,7 @@ var xxx_messageInfo_SyncStrategyApply proto.InternalMessageInfo
func (m *SyncStrategyHook) Reset() { *m = SyncStrategyHook{} }
func (*SyncStrategyHook) ProtoMessage() {}
func (*SyncStrategyHook) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{160}
+ return fileDescriptor_c078c3c476799f44, []int{161}
}
func (m *SyncStrategyHook) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4552,7 +4580,7 @@ var xxx_messageInfo_SyncStrategyHook proto.InternalMessageInfo
func (m *SyncWindow) Reset() { *m = SyncWindow{} }
func (*SyncWindow) ProtoMessage() {}
func (*SyncWindow) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{161}
+ return fileDescriptor_c078c3c476799f44, []int{162}
}
func (m *SyncWindow) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4580,7 +4608,7 @@ var xxx_messageInfo_SyncWindow proto.InternalMessageInfo
func (m *TLSClientConfig) Reset() { *m = TLSClientConfig{} }
func (*TLSClientConfig) ProtoMessage() {}
func (*TLSClientConfig) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{162}
+ return fileDescriptor_c078c3c476799f44, []int{163}
}
func (m *TLSClientConfig) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4608,7 +4636,7 @@ var xxx_messageInfo_TLSClientConfig proto.InternalMessageInfo
func (m *TagFilter) Reset() { *m = TagFilter{} }
func (*TagFilter) ProtoMessage() {}
func (*TagFilter) Descriptor() ([]byte, []int) {
- return fileDescriptor_c078c3c476799f44, []int{163}
+ return fileDescriptor_c078c3c476799f44, []int{164}
}
func (m *TagFilter) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4743,6 +4771,7 @@ func init() {
proto.RegisterType((*MergeGenerator)(nil), "github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.MergeGenerator")
proto.RegisterType((*NestedMatrixGenerator)(nil), "github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.NestedMatrixGenerator")
proto.RegisterType((*NestedMergeGenerator)(nil), "github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.NestedMergeGenerator")
+ proto.RegisterType((*OCIMetadata)(nil), "github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.OCIMetadata")
proto.RegisterType((*Operation)(nil), "github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.Operation")
proto.RegisterType((*OperationInitiator)(nil), "github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.OperationInitiator")
proto.RegisterType((*OperationState)(nil), "github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.OperationState")
@@ -4826,759 +4855,767 @@ func init() {
}
var fileDescriptor_c078c3c476799f44 = []byte{
- // 12030 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x5b, 0x70, 0x24, 0xc9,
- 0x71, 0x18, 0x7b, 0x06, 0x03, 0xcc, 0x24, 0x5e, 0xbb, 0xb5, 0xbb, 0x77, 0xd8, 0xbd, 0x07, 0x56,
- 0x7d, 0xd4, 0xf1, 0x64, 0xde, 0x01, 0xba, 0x17, 0x75, 0xd6, 0xf1, 0x21, 0x3c, 0xf6, 0x81, 0x5d,
- 0x60, 0x81, 0xab, 0xc1, 0xee, 0x92, 0x47, 0x1e, 0x8f, 0x8d, 0x99, 0xc2, 0xa0, 0x17, 0x3d, 0xdd,
- 0x73, 0xdd, 0x3d, 0x58, 0xcc, 0x89, 0xa4, 0x48, 0x91, 0x94, 0x28, 0xf1, 0x69, 0x52, 0x61, 0x1d,
- 0x6d, 0x93, 0xa6, 0x2c, 0xf9, 0x15, 0x0e, 0x86, 0x68, 0xeb, 0xc3, 0x8a, 0x90, 0x14, 0x0a, 0x49,
- 0x36, 0x83, 0xb6, 0xec, 0x90, 0xcc, 0x60, 0x88, 0xb2, 0x25, 0xc2, 0xe4, 0xda, 0x0e, 0x2a, 0x1c,
- 0x21, 0x45, 0x58, 0xf6, 0x87, 0x63, 0xed, 0x70, 0x38, 0xea, 0x5d, 0xdd, 0xd3, 0x03, 0x0c, 0x16,
- 0x0d, 0xec, 0x92, 0xbc, 0xbf, 0x99, 0xca, 0xec, 0xca, 0xec, 0xea, 0xaa, 0xcc, 0xac, 0xac, 0xcc,
- 0x2c, 0x58, 0x6c, 0xb8, 0xf1, 0x46, 0x7b, 0x6d, 0xaa, 0x16, 0x34, 0xa7, 0x9d, 0xb0, 0x11, 0xb4,
- 0xc2, 0xe0, 0x06, 0xfb, 0xf1, 0x44, 0xad, 0x3e, 0xbd, 0xf5, 0xf4, 0x74, 0x6b, 0xb3, 0x31, 0xed,
- 0xb4, 0xdc, 0x68, 0xda, 0x69, 0xb5, 0x3c, 0xb7, 0xe6, 0xc4, 0x6e, 0xe0, 0x4f, 0x6f, 0x3d, 0xe9,
- 0x78, 0xad, 0x0d, 0xe7, 0xc9, 0xe9, 0x06, 0xf1, 0x49, 0xe8, 0xc4, 0xa4, 0x3e, 0xd5, 0x0a, 0x83,
- 0x38, 0x40, 0x6f, 0xd5, 0xbd, 0x4d, 0xc9, 0xde, 0xd8, 0x8f, 0x97, 0x6b, 0xf5, 0xa9, 0xad, 0xa7,
- 0xa7, 0x5a, 0x9b, 0x8d, 0x29, 0xda, 0xdb, 0x94, 0xd1, 0xdb, 0x94, 0xec, 0xed, 0xcc, 0x13, 0x06,
- 0x2f, 0x8d, 0xa0, 0x11, 0x4c, 0xb3, 0x4e, 0xd7, 0xda, 0xeb, 0xec, 0x1f, 0xfb, 0xc3, 0x7e, 0x71,
- 0x62, 0x67, 0xec, 0xcd, 0xe7, 0xa2, 0x29, 0x37, 0xa0, 0xec, 0x4d, 0xd7, 0x82, 0x90, 0x4c, 0x6f,
- 0x75, 0x31, 0x74, 0xe6, 0xa2, 0xc6, 0x21, 0xdb, 0x31, 0xf1, 0x23, 0x37, 0xf0, 0xa3, 0x27, 0x28,
- 0x0b, 0x24, 0xdc, 0x22, 0xa1, 0xf9, 0x7a, 0x06, 0x42, 0x56, 0x4f, 0xcf, 0xe8, 0x9e, 0x9a, 0x4e,
- 0x6d, 0xc3, 0xf5, 0x49, 0xd8, 0xd1, 0x8f, 0x37, 0x49, 0xec, 0x64, 0x3d, 0x35, 0xdd, 0xeb, 0xa9,
- 0xb0, 0xed, 0xc7, 0x6e, 0x93, 0x74, 0x3d, 0xf0, 0x96, 0xbd, 0x1e, 0x88, 0x6a, 0x1b, 0xa4, 0xe9,
- 0x74, 0x3d, 0xf7, 0x74, 0xaf, 0xe7, 0xda, 0xb1, 0xeb, 0x4d, 0xbb, 0x7e, 0x1c, 0xc5, 0x61, 0xfa,
- 0x21, 0xfb, 0xef, 0x59, 0x30, 0x3a, 0x73, 0xbd, 0x3a, 0xd3, 0x8e, 0x37, 0xe6, 0x02, 0x7f, 0xdd,
- 0x6d, 0xa0, 0x67, 0x61, 0xb8, 0xe6, 0xb5, 0xa3, 0x98, 0x84, 0x57, 0x9c, 0x26, 0x99, 0xb0, 0xce,
- 0x5a, 0x8f, 0x55, 0x66, 0x4f, 0x7c, 0x7d, 0x67, 0xf2, 0x0d, 0xb7, 0x76, 0x26, 0x87, 0xe7, 0x34,
- 0x08, 0x9b, 0x78, 0xe8, 0xc7, 0x60, 0x28, 0x0c, 0x3c, 0x32, 0x83, 0xaf, 0x4c, 0x14, 0xd8, 0x23,
- 0xe3, 0xe2, 0x91, 0x21, 0xcc, 0x9b, 0xb1, 0x84, 0x53, 0xd4, 0x56, 0x18, 0xac, 0xbb, 0x1e, 0x99,
- 0x28, 0x26, 0x51, 0x57, 0x78, 0x33, 0x96, 0x70, 0xfb, 0x0b, 0x05, 0x18, 0x9f, 0x69, 0xb5, 0x2e,
- 0x12, 0xc7, 0x8b, 0x37, 0xaa, 0xb1, 0x13, 0xb7, 0x23, 0xd4, 0x80, 0xc1, 0x88, 0xfd, 0x12, 0xbc,
- 0x2d, 0x8b, 0xa7, 0x07, 0x39, 0xfc, 0xf6, 0xce, 0xe4, 0xdb, 0xb2, 0x66, 0x74, 0xc3, 0x8d, 0x83,
- 0x56, 0xf4, 0x04, 0xf1, 0x1b, 0xae, 0x4f, 0xd8, 0xb8, 0x6c, 0xb0, 0x5e, 0xa7, 0xcc, 0xce, 0xe7,
- 0x82, 0x3a, 0xc1, 0xa2, 0x7b, 0xca, 0x67, 0x93, 0x44, 0x91, 0xd3, 0x20, 0xe9, 0x57, 0x5a, 0xe2,
- 0xcd, 0x58, 0xc2, 0x51, 0x08, 0xc8, 0x73, 0xa2, 0x78, 0x35, 0x74, 0xfc, 0xc8, 0xa5, 0x53, 0x7a,
- 0xd5, 0x6d, 0xf2, 0xb7, 0x1b, 0x7e, 0xea, 0x6f, 0x4c, 0xf1, 0x0f, 0x33, 0x65, 0x7e, 0x18, 0xbd,
- 0x0e, 0xe8, 0xbc, 0x99, 0xda, 0x7a, 0x72, 0x8a, 0x3e, 0x31, 0x7b, 0xdf, 0xad, 0x9d, 0x49, 0xb4,
- 0xd8, 0xd5, 0x13, 0xce, 0xe8, 0xdd, 0xfe, 0x93, 0x02, 0xc0, 0x4c, 0xab, 0xb5, 0x12, 0x06, 0x37,
- 0x48, 0x2d, 0x46, 0xef, 0x83, 0x32, 0xed, 0xaa, 0xee, 0xc4, 0x0e, 0x1b, 0x98, 0xe1, 0xa7, 0x7e,
- 0xbc, 0x3f, 0xc2, 0xcb, 0x6b, 0xf4, 0xf9, 0x25, 0x12, 0x3b, 0xb3, 0x48, 0xbc, 0x20, 0xe8, 0x36,
- 0xac, 0x7a, 0x45, 0x3e, 0x0c, 0x44, 0x2d, 0x52, 0x63, 0x83, 0x31, 0xfc, 0xd4, 0xe2, 0xd4, 0x41,
- 0x56, 0xfa, 0x94, 0xe6, 0xbc, 0xda, 0x22, 0xb5, 0xd9, 0x11, 0x41, 0x79, 0x80, 0xfe, 0xc3, 0x8c,
- 0x0e, 0xda, 0x52, 0x1f, 0x9a, 0x0f, 0xe4, 0x95, 0xdc, 0x28, 0xb2, 0x5e, 0x67, 0xc7, 0x92, 0x13,
- 0x47, 0x7e, 0x77, 0xfb, 0xdb, 0x16, 0x8c, 0x69, 0xe4, 0x45, 0x37, 0x8a, 0xd1, 0x7b, 0xba, 0x06,
- 0x77, 0xaa, 0xbf, 0xc1, 0xa5, 0x4f, 0xb3, 0xa1, 0x3d, 0x26, 0x88, 0x95, 0x65, 0x8b, 0x31, 0xb0,
- 0x4d, 0x28, 0xb9, 0x31, 0x69, 0x46, 0x13, 0x85, 0xb3, 0xc5, 0xc7, 0x86, 0x9f, 0xba, 0x98, 0xd7,
- 0x7b, 0xce, 0x8e, 0x0a, 0xa2, 0xa5, 0x05, 0xda, 0x3d, 0xe6, 0x54, 0xec, 0xbf, 0x1e, 0x35, 0xdf,
- 0x8f, 0x0e, 0x38, 0x7a, 0x12, 0x86, 0xa3, 0xa0, 0x1d, 0xd6, 0x08, 0x26, 0xad, 0x80, 0x2e, 0xac,
- 0x22, 0x9d, 0xee, 0x74, 0xc1, 0x57, 0x75, 0x33, 0x36, 0x71, 0xd0, 0xa7, 0x2d, 0x18, 0xa9, 0x93,
- 0x28, 0x76, 0x7d, 0x46, 0x5f, 0x32, 0xbf, 0x7a, 0x60, 0xe6, 0x65, 0xe3, 0xbc, 0xee, 0x7c, 0xf6,
- 0xa4, 0x78, 0x91, 0x11, 0xa3, 0x31, 0xc2, 0x09, 0xfa, 0x54, 0x70, 0xd5, 0x49, 0x54, 0x0b, 0xdd,
- 0x16, 0xfd, 0x2f, 0x44, 0x8b, 0x12, 0x5c, 0xf3, 0x1a, 0x84, 0x4d, 0x3c, 0xe4, 0x43, 0x89, 0x0a,
- 0xa6, 0x68, 0x62, 0x80, 0xf1, 0xbf, 0x70, 0x30, 0xfe, 0xc5, 0xa0, 0x52, 0x99, 0xa7, 0x47, 0x9f,
- 0xfe, 0x8b, 0x30, 0x27, 0x83, 0x3e, 0x65, 0xc1, 0x84, 0x10, 0x9c, 0x98, 0xf0, 0x01, 0xbd, 0xbe,
- 0xe1, 0xc6, 0xc4, 0x73, 0xa3, 0x78, 0xa2, 0xc4, 0x78, 0x98, 0xee, 0x6f, 0x6e, 0x5d, 0x08, 0x83,
- 0x76, 0xeb, 0xb2, 0xeb, 0xd7, 0x67, 0xcf, 0x0a, 0x4a, 0x13, 0x73, 0x3d, 0x3a, 0xc6, 0x3d, 0x49,
- 0xa2, 0xcf, 0x5b, 0x70, 0xc6, 0x77, 0x9a, 0x24, 0x6a, 0x39, 0xf4, 0xd3, 0x72, 0xf0, 0xac, 0xe7,
- 0xd4, 0x36, 0x19, 0x47, 0x83, 0x77, 0xc6, 0x91, 0x2d, 0x38, 0x3a, 0x73, 0xa5, 0x67, 0xd7, 0x78,
- 0x17, 0xb2, 0xe8, 0x57, 0x2d, 0x38, 0x1e, 0x84, 0xad, 0x0d, 0xc7, 0x27, 0x75, 0x09, 0x8d, 0x26,
- 0x86, 0xd8, 0xd2, 0x7b, 0xef, 0xc1, 0x3e, 0xd1, 0x72, 0xba, 0xdb, 0xa5, 0xc0, 0x77, 0xe3, 0x20,
- 0xac, 0x92, 0x38, 0x76, 0xfd, 0x46, 0x34, 0x7b, 0xea, 0xd6, 0xce, 0xe4, 0xf1, 0x2e, 0x2c, 0xdc,
- 0xcd, 0x0f, 0xfa, 0x69, 0x18, 0x8e, 0x3a, 0x7e, 0xed, 0xba, 0xeb, 0xd7, 0x83, 0x9b, 0xd1, 0x44,
- 0x39, 0x8f, 0xe5, 0x5b, 0x55, 0x1d, 0x8a, 0x05, 0xa8, 0x09, 0x60, 0x93, 0x5a, 0xf6, 0x87, 0xd3,
- 0x53, 0xa9, 0x92, 0xf7, 0x87, 0xd3, 0x93, 0x69, 0x17, 0xb2, 0xe8, 0xe7, 0x2d, 0x18, 0x8d, 0xdc,
- 0x86, 0xef, 0xc4, 0xed, 0x90, 0x5c, 0x26, 0x9d, 0x68, 0x02, 0x18, 0x23, 0x97, 0x0e, 0x38, 0x2a,
- 0x46, 0x97, 0xb3, 0xa7, 0x04, 0x8f, 0xa3, 0x66, 0x6b, 0x84, 0x93, 0x74, 0xb3, 0x16, 0x9a, 0x9e,
- 0xd6, 0xc3, 0xf9, 0x2e, 0x34, 0x3d, 0xa9, 0x7b, 0x92, 0x44, 0x3f, 0x05, 0xc7, 0x78, 0x93, 0x1a,
- 0xd9, 0x68, 0x62, 0x84, 0x09, 0xda, 0x93, 0xb7, 0x76, 0x26, 0x8f, 0x55, 0x53, 0x30, 0xdc, 0x85,
- 0x8d, 0x5e, 0x81, 0xc9, 0x16, 0x09, 0x9b, 0x6e, 0xbc, 0xec, 0x7b, 0x1d, 0x29, 0xbe, 0x6b, 0x41,
- 0x8b, 0xd4, 0x05, 0x3b, 0xd1, 0xc4, 0xe8, 0x59, 0xeb, 0xb1, 0xf2, 0xec, 0x9b, 0x04, 0x9b, 0x93,
- 0x2b, 0xbb, 0xa3, 0xe3, 0xbd, 0xfa, 0x43, 0x5f, 0xb3, 0xe0, 0x8c, 0x21, 0x65, 0xab, 0x24, 0xdc,
- 0x72, 0x6b, 0x64, 0xa6, 0x56, 0x0b, 0xda, 0x7e, 0x1c, 0x4d, 0x8c, 0xb1, 0x61, 0x5c, 0x3b, 0x0c,
- 0x99, 0x9f, 0x24, 0xa5, 0xe7, 0x65, 0x4f, 0x94, 0x08, 0xef, 0xc2, 0xa9, 0xfd, 0x6f, 0x0a, 0x70,
- 0x2c, 0x6d, 0x01, 0xa0, 0x7f, 0x64, 0xc1, 0xf8, 0x8d, 0x9b, 0xf1, 0x6a, 0xb0, 0x49, 0xfc, 0x68,
- 0xb6, 0x43, 0xe5, 0x34, 0xd3, 0x7d, 0xc3, 0x4f, 0xd5, 0xf2, 0xb5, 0x35, 0xa6, 0x2e, 0x25, 0xa9,
- 0x9c, 0xf3, 0xe3, 0xb0, 0x33, 0x7b, 0xbf, 0x78, 0xa7, 0xf1, 0x4b, 0xd7, 0x57, 0x4d, 0x28, 0x4e,
- 0x33, 0x75, 0xe6, 0x13, 0x16, 0x9c, 0xcc, 0xea, 0x02, 0x1d, 0x83, 0xe2, 0x26, 0xe9, 0x70, 0x4b,
- 0x18, 0xd3, 0x9f, 0xe8, 0x25, 0x28, 0x6d, 0x39, 0x5e, 0x9b, 0x08, 0x33, 0xed, 0xc2, 0xc1, 0x5e,
- 0x44, 0x71, 0x86, 0x79, 0xaf, 0x3f, 0x59, 0x78, 0xce, 0xb2, 0xff, 0xa8, 0x08, 0xc3, 0xc6, 0x47,
- 0x3b, 0x02, 0xd3, 0x33, 0x48, 0x98, 0x9e, 0x4b, 0xb9, 0xcd, 0xb7, 0x9e, 0xb6, 0xe7, 0xcd, 0x94,
- 0xed, 0xb9, 0x9c, 0x1f, 0xc9, 0x5d, 0x8d, 0x4f, 0x14, 0x43, 0x25, 0x68, 0xd1, 0x2d, 0x1a, 0xb5,
- 0x61, 0x06, 0xf2, 0xf8, 0x84, 0xcb, 0xb2, 0xbb, 0xd9, 0xd1, 0x5b, 0x3b, 0x93, 0x15, 0xf5, 0x17,
- 0x6b, 0x42, 0xf6, 0xb7, 0x2c, 0x38, 0x69, 0xf0, 0x38, 0x17, 0xf8, 0x75, 0xb6, 0xd1, 0x40, 0x67,
- 0x61, 0x20, 0xee, 0xb4, 0xe4, 0x36, 0x50, 0x8d, 0xd4, 0x6a, 0xa7, 0x45, 0x30, 0x83, 0xdc, 0xeb,
- 0xbb, 0xa4, 0xcf, 0x5b, 0x70, 0x5f, 0xb6, 0x80, 0x41, 0x8f, 0xc2, 0x20, 0xf7, 0x01, 0x88, 0xb7,
- 0xd3, 0x9f, 0x84, 0xb5, 0x62, 0x01, 0x45, 0xd3, 0x50, 0x51, 0x0a, 0x4f, 0xbc, 0xe3, 0x71, 0x81,
- 0x5a, 0xd1, 0x5a, 0x52, 0xe3, 0xd0, 0x41, 0xa3, 0x7f, 0x84, 0x09, 0xaa, 0x06, 0x8d, 0x6d, 0x9a,
- 0x19, 0xc4, 0xfe, 0xa6, 0x05, 0x6f, 0xec, 0x47, 0xec, 0x1d, 0x1e, 0x8f, 0x55, 0x38, 0x55, 0x27,
- 0xeb, 0x4e, 0xdb, 0x8b, 0x93, 0x14, 0x05, 0xd3, 0x0f, 0x89, 0x87, 0x4f, 0xcd, 0x67, 0x21, 0xe1,
- 0xec, 0x67, 0xed, 0xff, 0x6c, 0xb1, 0xed, 0xba, 0x7c, 0xad, 0x23, 0xd8, 0x3a, 0xf9, 0xc9, 0xad,
- 0xd3, 0x42, 0x6e, 0xcb, 0xb4, 0xc7, 0xde, 0xe9, 0x53, 0x16, 0x9c, 0x31, 0xb0, 0x96, 0x9c, 0xb8,
- 0xb6, 0x71, 0x6e, 0xbb, 0x15, 0x92, 0x28, 0xa2, 0x53, 0xea, 0x21, 0x43, 0x1c, 0xcf, 0x0e, 0x8b,
- 0x1e, 0x8a, 0x97, 0x49, 0x87, 0xcb, 0xe6, 0xc7, 0xa1, 0xcc, 0xd7, 0x5c, 0x10, 0x8a, 0x8f, 0xa4,
- 0xde, 0x6d, 0x59, 0xb4, 0x63, 0x85, 0x81, 0x6c, 0x18, 0x64, 0x32, 0x97, 0xca, 0x20, 0x6a, 0x26,
- 0x00, 0xfd, 0xee, 0xd7, 0x58, 0x0b, 0x16, 0x10, 0x3b, 0x4a, 0xb0, 0xb3, 0x12, 0x12, 0x36, 0x1f,
- 0xea, 0xe7, 0x5d, 0xe2, 0xd5, 0x23, 0xba, 0xad, 0x73, 0x7c, 0x3f, 0x88, 0xc5, 0x0e, 0xcd, 0xd8,
- 0xd6, 0xcd, 0xe8, 0x66, 0x6c, 0xe2, 0x50, 0xa2, 0x9e, 0xb3, 0x46, 0x3c, 0x3e, 0xa2, 0x82, 0xe8,
- 0x22, 0x6b, 0xc1, 0x02, 0x62, 0xdf, 0x2a, 0xb0, 0x0d, 0xa4, 0x92, 0x68, 0xe4, 0x28, 0xbc, 0x0f,
- 0x61, 0x42, 0x05, 0xac, 0xe4, 0x27, 0x8f, 0x49, 0x6f, 0x0f, 0xc4, 0xab, 0x29, 0x2d, 0x80, 0x73,
- 0xa5, 0xba, 0xbb, 0x17, 0xe2, 0x43, 0x45, 0x98, 0x4c, 0x3e, 0xd0, 0xa5, 0x44, 0xe8, 0x96, 0xd7,
- 0x20, 0x94, 0xf6, 0xd5, 0x19, 0xf8, 0xd8, 0xc4, 0xeb, 0x21, 0x87, 0x0b, 0x87, 0x29, 0x87, 0x4d,
- 0x35, 0x51, 0xdc, 0x43, 0x4d, 0x3c, 0xaa, 0x46, 0x7d, 0x20, 0x25, 0xf3, 0x92, 0xaa, 0xf2, 0x2c,
- 0x0c, 0x44, 0x31, 0x69, 0x4d, 0x94, 0x92, 0x62, 0xb6, 0x1a, 0x93, 0x16, 0x66, 0x10, 0xf4, 0x36,
- 0x18, 0x8f, 0x9d, 0xb0, 0x41, 0xe2, 0x90, 0x6c, 0xb9, 0xcc, 0xaf, 0xcb, 0xf6, 0xb3, 0x95, 0xd9,
- 0x13, 0xd4, 0xea, 0x5a, 0x65, 0x20, 0x2c, 0x41, 0x38, 0x8d, 0x6b, 0xff, 0xf7, 0x02, 0xdc, 0x9f,
- 0xfc, 0x04, 0x5a, 0x31, 0xbe, 0x23, 0xa1, 0x18, 0xdf, 0x6c, 0x2a, 0xc6, 0xdb, 0x3b, 0x93, 0x0f,
- 0xf4, 0x78, 0xec, 0xfb, 0x46, 0x6f, 0xa2, 0x0b, 0xa9, 0x8f, 0x30, 0xdd, 0xe5, 0x65, 0x7d, 0xa8,
- 0xc7, 0x3b, 0xa6, 0xbe, 0xd2, 0xa3, 0x30, 0x18, 0x12, 0x27, 0x0a, 0x7c, 0xf1, 0x9d, 0xd4, 0xd7,
- 0xc4, 0xac, 0x15, 0x0b, 0xa8, 0xfd, 0x8d, 0x4a, 0x7a, 0xb0, 0x2f, 0x70, 0x5f, 0x75, 0x10, 0x22,
- 0x17, 0x06, 0xd8, 0xae, 0x8d, 0x4b, 0x96, 0xcb, 0x07, 0x5b, 0x85, 0x54, 0x8b, 0xa8, 0xae, 0x67,
- 0xcb, 0xf4, 0xab, 0xd1, 0x26, 0xcc, 0x48, 0xa0, 0x6d, 0x28, 0xd7, 0xe4, 0x66, 0xaa, 0x90, 0x87,
- 0xdb, 0x51, 0x6c, 0xa5, 0x34, 0xc5, 0x11, 0x2a, 0xee, 0xd5, 0x0e, 0x4c, 0x51, 0x43, 0x04, 0x8a,
- 0x0d, 0x37, 0x16, 0x9f, 0xf5, 0x80, 0xdb, 0xe5, 0x0b, 0xae, 0xf1, 0x8a, 0x43, 0x54, 0x07, 0x5d,
- 0x70, 0x63, 0x4c, 0xfb, 0x47, 0x1f, 0xb3, 0x60, 0x38, 0xaa, 0x35, 0x57, 0xc2, 0x60, 0xcb, 0xad,
- 0x93, 0x50, 0xd8, 0x98, 0x07, 0x94, 0x6c, 0xd5, 0xb9, 0x25, 0xd9, 0xa1, 0xa6, 0xcb, 0xdd, 0x17,
- 0x1a, 0x82, 0x4d, 0xba, 0x74, 0xef, 0x75, 0xbf, 0x78, 0xf7, 0x79, 0x52, 0x63, 0x2b, 0x4e, 0xee,
- 0x99, 0xd9, 0x4c, 0x39, 0xb0, 0xcd, 0x3d, 0xdf, 0xae, 0x6d, 0xd2, 0xf5, 0xa6, 0x19, 0x7a, 0xe0,
- 0xd6, 0xce, 0xe4, 0xfd, 0x73, 0xd9, 0x34, 0x71, 0x2f, 0x66, 0xd8, 0x80, 0xb5, 0xda, 0x9e, 0x87,
- 0xc9, 0x2b, 0x6d, 0xc2, 0x3c, 0x62, 0x39, 0x0c, 0xd8, 0x8a, 0xee, 0x30, 0x35, 0x60, 0x06, 0x04,
- 0x9b, 0x74, 0xd1, 0x2b, 0x30, 0xd8, 0x74, 0xe2, 0xd0, 0xdd, 0x16, 0x6e, 0xb0, 0x03, 0xee, 0x82,
- 0x96, 0x58, 0x5f, 0x9a, 0x38, 0x53, 0xf4, 0xbc, 0x11, 0x0b, 0x42, 0xa8, 0x09, 0xa5, 0x26, 0x09,
- 0x1b, 0x64, 0xa2, 0x9c, 0x87, 0xcb, 0x7f, 0x89, 0x76, 0xa5, 0x09, 0x56, 0xa8, 0x71, 0xc5, 0xda,
- 0x30, 0xa7, 0x82, 0x5e, 0x82, 0x72, 0x44, 0x3c, 0x52, 0xa3, 0xe6, 0x51, 0x85, 0x51, 0x7c, 0xba,
- 0x4f, 0x53, 0x91, 0xda, 0x25, 0x55, 0xf1, 0x28, 0x5f, 0x60, 0xf2, 0x1f, 0x56, 0x5d, 0xd2, 0x01,
- 0x6c, 0x79, 0xed, 0x86, 0xeb, 0x4f, 0x40, 0x1e, 0x03, 0xb8, 0xc2, 0xfa, 0x4a, 0x0d, 0x20, 0x6f,
- 0xc4, 0x82, 0x90, 0xfd, 0xdf, 0x2c, 0x40, 0x49, 0xa1, 0x76, 0x04, 0x36, 0xf1, 0x2b, 0x49, 0x9b,
- 0x78, 0x31, 0x4f, 0xa3, 0xa5, 0x87, 0x59, 0xfc, 0x5b, 0x15, 0x48, 0xa9, 0x83, 0x2b, 0x24, 0x8a,
- 0x49, 0xfd, 0x75, 0x11, 0xfe, 0xba, 0x08, 0x7f, 0x5d, 0x84, 0x2b, 0x11, 0xbe, 0x96, 0x12, 0xe1,
- 0x6f, 0x37, 0x56, 0xbd, 0x8e, 0x3d, 0x78, 0x59, 0x05, 0x27, 0x98, 0x1c, 0x18, 0x08, 0x54, 0x12,
- 0x5c, 0xaa, 0x2e, 0x5f, 0xc9, 0x94, 0xd9, 0x2f, 0x27, 0x65, 0xf6, 0x41, 0x49, 0xfc, 0x30, 0x48,
- 0xe9, 0xaf, 0x59, 0xf0, 0xa6, 0xa4, 0xf4, 0x92, 0x33, 0x67, 0xa1, 0xe1, 0x07, 0x21, 0x99, 0x77,
- 0xd7, 0xd7, 0x49, 0x48, 0xfc, 0x1a, 0x89, 0x94, 0x6f, 0xc7, 0xea, 0xe5, 0xdb, 0x41, 0xcf, 0xc0,
- 0xc8, 0x8d, 0x28, 0xf0, 0x57, 0x02, 0xd7, 0x17, 0x22, 0x88, 0xee, 0x38, 0x8e, 0xdd, 0xda, 0x99,
- 0x1c, 0xa1, 0x23, 0x2a, 0xdb, 0x71, 0x02, 0x0b, 0xcd, 0xc1, 0xf1, 0x1b, 0xaf, 0xac, 0x38, 0xb1,
- 0xe1, 0x4d, 0x90, 0xfb, 0x7e, 0x76, 0x1e, 0x75, 0xe9, 0x85, 0x14, 0x10, 0x77, 0xe3, 0xdb, 0x7f,
- 0xb7, 0x00, 0xa7, 0x53, 0x2f, 0x12, 0x78, 0x5e, 0xd0, 0x8e, 0xe9, 0x9e, 0x08, 0x7d, 0xc9, 0x82,
- 0x63, 0xcd, 0xa4, 0xc3, 0x22, 0x12, 0xee, 0xee, 0x77, 0xe6, 0xa6, 0x23, 0x52, 0x1e, 0x91, 0xd9,
- 0x09, 0x31, 0x42, 0xc7, 0x52, 0x80, 0x08, 0x77, 0xf1, 0x82, 0x5e, 0x82, 0x4a, 0xd3, 0xd9, 0xbe,
- 0xda, 0xaa, 0x3b, 0xb1, 0xdc, 0x8e, 0xf6, 0xf6, 0x22, 0xb4, 0x63, 0xd7, 0x9b, 0xe2, 0x51, 0x2d,
- 0x53, 0x0b, 0x7e, 0xbc, 0x1c, 0x56, 0xe3, 0xd0, 0xf5, 0x1b, 0xdc, 0xc9, 0xb9, 0x24, 0xbb, 0xc1,
- 0xba, 0x47, 0xfb, 0x8b, 0x56, 0x5a, 0x49, 0xa9, 0xd1, 0x09, 0x9d, 0x98, 0x34, 0x3a, 0xe8, 0xfd,
- 0x50, 0xa2, 0xfb, 0x46, 0x39, 0x2a, 0xd7, 0xf3, 0xd4, 0x9c, 0xc6, 0x97, 0xd0, 0x4a, 0x94, 0xfe,
- 0x8b, 0x30, 0x27, 0x6a, 0x7f, 0xa9, 0x92, 0x36, 0x16, 0xd8, 0xd9, 0xfc, 0x53, 0x00, 0x8d, 0x60,
- 0x95, 0x34, 0x5b, 0x1e, 0x1d, 0x16, 0x8b, 0x1d, 0xf0, 0x28, 0x57, 0xc9, 0x05, 0x05, 0xc1, 0x06,
- 0x16, 0xfa, 0x05, 0x0b, 0xa0, 0x21, 0xe7, 0xbc, 0x34, 0x04, 0xae, 0xe6, 0xf9, 0x3a, 0x7a, 0x45,
- 0x69, 0x5e, 0x14, 0x41, 0x6c, 0x10, 0x47, 0x3f, 0x6b, 0x41, 0x39, 0x96, 0xec, 0x73, 0xd5, 0xb8,
- 0x9a, 0x27, 0x27, 0xf2, 0xa5, 0xb5, 0x4d, 0xa4, 0x86, 0x44, 0xd1, 0x45, 0x3f, 0x67, 0x01, 0x44,
- 0x1d, 0xbf, 0xb6, 0x12, 0x78, 0x6e, 0xad, 0x23, 0x34, 0xe6, 0xb5, 0x5c, 0xdd, 0x39, 0xaa, 0xf7,
- 0xd9, 0x31, 0x3a, 0x1a, 0xfa, 0x3f, 0x36, 0x28, 0xa3, 0x0f, 0x42, 0x39, 0x12, 0xd3, 0x4d, 0xe8,
- 0xc8, 0xd5, 0x7c, 0x9d, 0x4a, 0xbc, 0x6f, 0x21, 0x5e, 0xc5, 0x3f, 0xac, 0x68, 0xa2, 0x5f, 0xb6,
- 0x60, 0xbc, 0x95, 0x74, 0x13, 0x0a, 0x75, 0x98, 0x9f, 0x0c, 0x48, 0xb9, 0x21, 0xb9, 0xb7, 0x25,
- 0xd5, 0x88, 0xd3, 0x5c, 0x50, 0x09, 0xa8, 0x67, 0xf0, 0x72, 0x8b, 0xbb, 0x2c, 0x87, 0xb4, 0x04,
- 0xbc, 0x90, 0x06, 0xe2, 0x6e, 0x7c, 0xb4, 0x02, 0x27, 0x29, 0x77, 0x1d, 0x6e, 0x7e, 0x4a, 0xf5,
- 0x12, 0x31, 0x65, 0x58, 0x9e, 0x7d, 0x50, 0xcc, 0x10, 0x76, 0xd6, 0x91, 0xc6, 0xc1, 0x99, 0x4f,
- 0xa2, 0x3f, 0xb2, 0xe0, 0x41, 0x97, 0xa9, 0x01, 0xd3, 0x61, 0xaf, 0x35, 0x82, 0x38, 0x68, 0x27,
- 0xb9, 0xca, 0x8a, 0x5e, 0xea, 0x67, 0xf6, 0x8d, 0xe2, 0x0d, 0x1e, 0x5c, 0xd8, 0x85, 0x25, 0xbc,
- 0x2b, 0xc3, 0xe8, 0x27, 0x60, 0x54, 0xae, 0x8b, 0x15, 0x2a, 0x82, 0x99, 0xa2, 0xad, 0xcc, 0x1e,
- 0xbf, 0xb5, 0x33, 0x39, 0xba, 0x6a, 0x02, 0x70, 0x12, 0xcf, 0xfe, 0xb7, 0xc5, 0xc4, 0x29, 0x91,
- 0xf2, 0x61, 0x32, 0x71, 0x53, 0x93, 0xfe, 0x1f, 0x29, 0x3d, 0x73, 0x15, 0x37, 0xca, 0xbb, 0xa4,
- 0xc5, 0x8d, 0x6a, 0x8a, 0xb0, 0x41, 0x9c, 0x1a, 0xa5, 0xc7, 0x9d, 0xb4, 0xa7, 0x54, 0x48, 0xc0,
- 0x97, 0xf2, 0x64, 0xa9, 0xfb, 0x4c, 0xef, 0xb4, 0x60, 0xed, 0x78, 0x17, 0x08, 0x77, 0xb3, 0x84,
- 0x3e, 0x00, 0x95, 0x50, 0x45, 0xb6, 0x14, 0xf3, 0xd8, 0xaa, 0xc9, 0x69, 0x23, 0xd8, 0x51, 0x07,
- 0x40, 0x3a, 0x86, 0x45, 0x53, 0xb4, 0xff, 0x30, 0x79, 0x30, 0x66, 0xc8, 0x8e, 0x3e, 0x0e, 0xfd,
- 0x3e, 0x6d, 0xc1, 0x70, 0x18, 0x78, 0x9e, 0xeb, 0x37, 0xa8, 0x9c, 0x13, 0xca, 0xfa, 0xdd, 0x87,
- 0xa2, 0x2f, 0x85, 0x40, 0x63, 0x96, 0x35, 0xd6, 0x34, 0xb1, 0xc9, 0x80, 0xfd, 0x6d, 0x0b, 0x26,
- 0x7a, 0xc9, 0x63, 0x44, 0xe0, 0x01, 0x29, 0x6c, 0xd4, 0x50, 0x2c, 0xfb, 0xf3, 0xc4, 0x23, 0xca,
- 0x6d, 0x5e, 0x9e, 0x7d, 0x44, 0xbc, 0xe6, 0x03, 0x2b, 0xbd, 0x51, 0xf1, 0x6e, 0xfd, 0xa0, 0x17,
- 0xe1, 0x98, 0xf1, 0x5e, 0x91, 0x1a, 0x98, 0xca, 0xec, 0x14, 0x35, 0x80, 0x66, 0x52, 0xb0, 0xdb,
- 0x3b, 0x93, 0xf7, 0xa5, 0xdb, 0x84, 0xc2, 0xe8, 0xea, 0xc7, 0xfe, 0xb5, 0x42, 0xfa, 0x6b, 0x29,
- 0x5d, 0xff, 0x9a, 0xd5, 0xe5, 0x4d, 0x78, 0xe7, 0x61, 0xe8, 0x57, 0xe6, 0x77, 0x50, 0x61, 0x18,
- 0xbd, 0x71, 0xee, 0xe2, 0xb1, 0xbd, 0xfd, 0xef, 0x06, 0x60, 0x17, 0xce, 0xfa, 0x30, 0xde, 0xf7,
- 0x7d, 0x8e, 0xfa, 0x49, 0x4b, 0x1d, 0x98, 0xf1, 0x35, 0x5c, 0x3f, 0xac, 0xb1, 0xe7, 0xfb, 0xa7,
- 0x88, 0x87, 0x8e, 0x28, 0x2f, 0x7a, 0xf2, 0x68, 0x0e, 0x7d, 0xd9, 0x4a, 0x1e, 0xf9, 0xf1, 0xa0,
- 0x46, 0xf7, 0xd0, 0x78, 0x32, 0xce, 0x11, 0x39, 0x63, 0xfa, 0xf4, 0xa9, 0xd7, 0x09, 0xe3, 0x14,
- 0xc0, 0xba, 0xeb, 0x3b, 0x9e, 0xfb, 0x2a, 0xdd, 0x1d, 0x95, 0x98, 0x82, 0x67, 0x16, 0xd3, 0x79,
- 0xd5, 0x8a, 0x0d, 0x8c, 0x33, 0x7f, 0x13, 0x86, 0x8d, 0x37, 0xcf, 0x88, 0x78, 0x39, 0x69, 0x46,
- 0xbc, 0x54, 0x8c, 0x40, 0x95, 0x33, 0x6f, 0x87, 0x63, 0x69, 0x06, 0xf7, 0xf3, 0xbc, 0xfd, 0xbf,
- 0x87, 0xd2, 0x67, 0x70, 0xab, 0x24, 0x6c, 0x52, 0xd6, 0x5e, 0x77, 0x6c, 0xbd, 0xee, 0xd8, 0x7a,
- 0xdd, 0xb1, 0x65, 0x9e, 0x4d, 0x08, 0xa7, 0xcd, 0xd0, 0x11, 0x39, 0x6d, 0x12, 0x6e, 0xa8, 0x72,
- 0xee, 0x6e, 0x28, 0xfb, 0x63, 0x5d, 0x9e, 0xfb, 0xd5, 0x90, 0x10, 0x14, 0x40, 0xc9, 0x0f, 0xea,
- 0x44, 0xda, 0xb8, 0x97, 0xf2, 0x31, 0xd8, 0xae, 0x04, 0x75, 0x23, 0x5c, 0x9c, 0xfe, 0x8b, 0x30,
- 0xa7, 0x63, 0x7f, 0x74, 0x10, 0x12, 0xe6, 0x24, 0xff, 0xee, 0x3f, 0x06, 0x43, 0x21, 0x69, 0x05,
- 0x57, 0xf1, 0xa2, 0xd0, 0x65, 0x3a, 0xdb, 0x86, 0x37, 0x63, 0x09, 0xa7, 0x3a, 0xaf, 0xe5, 0xc4,
- 0x1b, 0x42, 0x99, 0x29, 0x9d, 0xb7, 0xe2, 0xc4, 0x1b, 0x98, 0x41, 0xd0, 0xdb, 0x61, 0x2c, 0x4e,
- 0x1c, 0x85, 0x8b, 0x23, 0xdf, 0xfb, 0x04, 0xee, 0x58, 0xf2, 0xa0, 0x1c, 0xa7, 0xb0, 0xd1, 0x2b,
- 0x30, 0xb0, 0x41, 0xbc, 0xa6, 0xf8, 0xf4, 0xd5, 0xfc, 0x74, 0x0d, 0x7b, 0xd7, 0x8b, 0xc4, 0x6b,
- 0x72, 0x49, 0x48, 0x7f, 0x61, 0x46, 0x8a, 0xce, 0xfb, 0xca, 0x66, 0x3b, 0x8a, 0x83, 0xa6, 0xfb,
- 0xaa, 0xf4, 0x74, 0xbe, 0x33, 0x67, 0xc2, 0x97, 0x65, 0xff, 0xdc, 0xa5, 0xa4, 0xfe, 0x62, 0x4d,
- 0x99, 0xf1, 0x51, 0x77, 0x43, 0x36, 0x65, 0x3a, 0xc2, 0x61, 0x99, 0x37, 0x1f, 0xf3, 0xb2, 0x7f,
- 0xce, 0x87, 0xfa, 0x8b, 0x35, 0x65, 0xd4, 0x51, 0xeb, 0x6f, 0x98, 0xf1, 0x70, 0x35, 0x67, 0x1e,
- 0xf8, 0xda, 0xcb, 0x5c, 0x87, 0x8f, 0x40, 0xa9, 0xb6, 0xe1, 0x84, 0xf1, 0xc4, 0x08, 0x9b, 0x34,
- 0x6a, 0x16, 0xcf, 0xd1, 0x46, 0xcc, 0x61, 0xe8, 0x21, 0x28, 0x86, 0x64, 0x9d, 0x45, 0x27, 0x1b,
- 0x71, 0x51, 0x98, 0xac, 0x63, 0xda, 0xae, 0xec, 0xb2, 0xb1, 0x9e, 0x01, 0x73, 0xbf, 0x52, 0x48,
- 0x1a, 0x76, 0xc9, 0x91, 0xe1, 0xeb, 0xa1, 0xd6, 0x0e, 0x23, 0xe9, 0x20, 0x33, 0xd6, 0x03, 0x6b,
- 0xc6, 0x12, 0x8e, 0x3e, 0x6c, 0xc1, 0xd0, 0x8d, 0x28, 0xf0, 0x7d, 0x12, 0x0b, 0x25, 0x7a, 0x2d,
- 0xe7, 0xc1, 0xba, 0xc4, 0x7b, 0xd7, 0x3c, 0x88, 0x06, 0x2c, 0xe9, 0x52, 0x76, 0xc9, 0x76, 0xcd,
- 0x6b, 0xd7, 0xbb, 0x82, 0x61, 0xce, 0xf1, 0x66, 0x2c, 0xe1, 0x14, 0xd5, 0xf5, 0x39, 0xea, 0x40,
- 0x12, 0x75, 0xc1, 0x17, 0xa8, 0x02, 0x6e, 0xff, 0x46, 0x19, 0x4e, 0x65, 0x2e, 0x1f, 0x6a, 0x72,
- 0x31, 0xa3, 0xe6, 0xbc, 0xeb, 0x11, 0x19, 0x06, 0xc6, 0x4c, 0xae, 0x6b, 0xaa, 0x15, 0x1b, 0x18,
- 0xe8, 0x67, 0x00, 0x5a, 0x4e, 0xe8, 0x34, 0x89, 0x72, 0x60, 0x1f, 0xd8, 0xb2, 0xa1, 0x7c, 0xac,
- 0xc8, 0x3e, 0xf5, 0x26, 0x5e, 0x35, 0x45, 0xd8, 0x20, 0x89, 0x9e, 0x85, 0xe1, 0x90, 0x78, 0xc4,
- 0x89, 0x58, 0xf8, 0x7b, 0x3a, 0x97, 0x07, 0x6b, 0x10, 0x36, 0xf1, 0xd0, 0xa3, 0x2a, 0x62, 0x2e,
- 0x15, 0x39, 0x94, 0x8c, 0x9a, 0x43, 0x9f, 0xb1, 0x60, 0x6c, 0xdd, 0xf5, 0x88, 0xa6, 0x2e, 0x32,
- 0x6f, 0x96, 0x0f, 0xfe, 0x92, 0xe7, 0xcd, 0x7e, 0xb5, 0x0c, 0x4d, 0x34, 0x47, 0x38, 0x45, 0x9e,
- 0x7e, 0xe6, 0x2d, 0x12, 0x32, 0xe1, 0x3b, 0x98, 0xfc, 0xcc, 0xd7, 0x78, 0x33, 0x96, 0x70, 0x34,
- 0x03, 0xe3, 0x2d, 0x27, 0x8a, 0xe6, 0x42, 0x52, 0x27, 0x7e, 0xec, 0x3a, 0x1e, 0xcf, 0x8b, 0x29,
- 0xeb, 0x70, 0xf2, 0x95, 0x24, 0x18, 0xa7, 0xf1, 0xd1, 0xbb, 0xe0, 0x7e, 0xee, 0x21, 0x5a, 0x72,
- 0xa3, 0xc8, 0xf5, 0x1b, 0x7a, 0x1a, 0x08, 0x47, 0xd9, 0xa4, 0xe8, 0xea, 0xfe, 0x85, 0x6c, 0x34,
- 0xdc, 0xeb, 0x79, 0xf4, 0x38, 0x94, 0xa3, 0x4d, 0xb7, 0x35, 0x17, 0xd6, 0x23, 0x76, 0x3a, 0x54,
- 0xd6, 0x6e, 0xd9, 0xaa, 0x68, 0xc7, 0x0a, 0x03, 0xd5, 0x60, 0x84, 0x7f, 0x12, 0x1e, 0xf2, 0x27,
- 0x24, 0xe8, 0x13, 0x3d, 0x15, 0xb9, 0x48, 0x81, 0x9d, 0xc2, 0xce, 0xcd, 0x73, 0xf2, 0xac, 0x8a,
- 0x1f, 0xad, 0x5c, 0x33, 0xba, 0xc1, 0x89, 0x4e, 0x93, 0x7b, 0xba, 0xe1, 0x3e, 0xf6, 0x74, 0xcf,
- 0xc2, 0xf0, 0x66, 0x7b, 0x8d, 0x88, 0x91, 0x17, 0x82, 0x4d, 0xcd, 0xbe, 0xcb, 0x1a, 0x84, 0x4d,
- 0x3c, 0x16, 0x6d, 0xd9, 0x72, 0xc5, 0xbf, 0x68, 0x62, 0xd4, 0x88, 0xb6, 0x5c, 0x59, 0x90, 0xcd,
- 0xd8, 0xc4, 0xa1, 0xac, 0xd1, 0xb1, 0x58, 0x25, 0x11, 0x4b, 0xa6, 0xa0, 0xc3, 0xa5, 0x58, 0xab,
- 0x4a, 0x00, 0xd6, 0x38, 0x68, 0x05, 0x4e, 0xd2, 0x3f, 0x55, 0x96, 0x02, 0x7c, 0xcd, 0xf1, 0xdc,
- 0x3a, 0x0f, 0xfd, 0x1b, 0x4f, 0xfa, 0x37, 0xab, 0x19, 0x38, 0x38, 0xf3, 0x49, 0xfb, 0x0b, 0x85,
- 0xa4, 0xe7, 0xc4, 0x14, 0x61, 0x28, 0xa2, 0x82, 0x2a, 0xbe, 0xe6, 0x84, 0xd2, 0xe0, 0x39, 0x60,
- 0x72, 0x93, 0xe8, 0xf7, 0x9a, 0x13, 0x9a, 0x22, 0x8f, 0x11, 0xc0, 0x92, 0x12, 0xba, 0x01, 0x03,
- 0xb1, 0xe7, 0xe4, 0x94, 0x0d, 0x69, 0x50, 0xd4, 0x8e, 0xac, 0xc5, 0x99, 0x08, 0x33, 0x1a, 0xe8,
- 0x41, 0xba, 0x7b, 0x5b, 0x93, 0x27, 0x6d, 0x62, 0xc3, 0xb5, 0x16, 0x61, 0xd6, 0x6a, 0xff, 0xd2,
- 0x68, 0x86, 0xd6, 0x51, 0x86, 0x00, 0x7a, 0x0a, 0x80, 0x4e, 0x9a, 0x95, 0x90, 0xac, 0xbb, 0xdb,
- 0xc2, 0x10, 0x53, 0x92, 0xed, 0x8a, 0x82, 0x60, 0x03, 0x4b, 0x3e, 0x53, 0x6d, 0xaf, 0xd3, 0x67,
- 0x0a, 0xdd, 0xcf, 0x70, 0x08, 0x36, 0xb0, 0xd0, 0x33, 0x30, 0xe8, 0x36, 0x9d, 0x86, 0x0a, 0x04,
- 0x7e, 0x90, 0x8a, 0xb4, 0x05, 0xd6, 0x72, 0x7b, 0x67, 0x72, 0x4c, 0x31, 0xc4, 0x9a, 0xb0, 0xc0,
- 0x45, 0xbf, 0x66, 0xc1, 0x48, 0x2d, 0x68, 0x36, 0x03, 0x9f, 0x6f, 0x9f, 0x85, 0x2f, 0xe0, 0xc6,
- 0x61, 0x99, 0x49, 0x53, 0x73, 0x06, 0x31, 0xee, 0x0c, 0x50, 0x69, 0x9b, 0x26, 0x08, 0x27, 0xb8,
- 0x32, 0x25, 0x5f, 0x69, 0x0f, 0xc9, 0xf7, 0x9b, 0x16, 0x1c, 0xe7, 0xcf, 0x1a, 0xbb, 0x7a, 0x91,
- 0xa1, 0x18, 0x1c, 0xf2, 0x6b, 0x75, 0x39, 0x3a, 0x94, 0xb3, 0xb7, 0x0b, 0x8e, 0xbb, 0x99, 0x44,
- 0x17, 0xe0, 0xf8, 0x7a, 0x10, 0xd6, 0x88, 0x39, 0x10, 0x42, 0x6c, 0xab, 0x8e, 0xce, 0xa7, 0x11,
- 0x70, 0xf7, 0x33, 0xe8, 0x1a, 0xdc, 0x67, 0x34, 0x9a, 0xe3, 0xc0, 0x25, 0xf7, 0xc3, 0xa2, 0xb7,
- 0xfb, 0xce, 0x67, 0x62, 0xe1, 0x1e, 0x4f, 0x27, 0x85, 0x64, 0xa5, 0x0f, 0x21, 0xf9, 0x32, 0x9c,
- 0xae, 0x75, 0x8f, 0xcc, 0x56, 0xd4, 0x5e, 0x8b, 0xb8, 0x1c, 0x2f, 0xcf, 0xfe, 0x88, 0xe8, 0xe0,
- 0xf4, 0x5c, 0x2f, 0x44, 0xdc, 0xbb, 0x0f, 0xf4, 0x7e, 0x28, 0x87, 0x84, 0x7d, 0x95, 0x48, 0xa4,
- 0xeb, 0x1d, 0xd0, 0xdb, 0xa1, 0x2d, 0x78, 0xde, 0xad, 0xd6, 0x4c, 0xa2, 0x21, 0xc2, 0x8a, 0x22,
- 0xba, 0x09, 0x43, 0x2d, 0x27, 0xae, 0x6d, 0x88, 0x24, 0xbd, 0x03, 0xfb, 0xe6, 0x15, 0x71, 0x76,
- 0x94, 0x62, 0x94, 0x3c, 0xe0, 0x44, 0xb0, 0xa4, 0x46, 0x6d, 0xb5, 0x5a, 0xd0, 0x6c, 0x05, 0x3e,
- 0xf1, 0x63, 0xa9, 0x44, 0xc6, 0xf8, 0x79, 0x87, 0x6c, 0xc5, 0x06, 0x46, 0x97, 0x2e, 0xd7, 0x68,
- 0x13, 0xc7, 0x77, 0xd1, 0xe5, 0x46, 0x6f, 0xbd, 0x9e, 0xa7, 0xca, 0x86, 0xb9, 0x15, 0xaf, 0xbb,
- 0xf1, 0x46, 0xd0, 0x8e, 0xe5, 0x2e, 0x59, 0x28, 0x2a, 0xa5, 0x6c, 0x16, 0x33, 0x70, 0x70, 0xe6,
- 0x93, 0x69, 0xcd, 0x3a, 0x7e, 0x67, 0x9a, 0xf5, 0x58, 0x1f, 0x9a, 0xb5, 0x0a, 0xa7, 0x18, 0x07,
- 0xc2, 0x4a, 0x96, 0x4e, 0xcb, 0x68, 0x02, 0x31, 0xe6, 0x55, 0x7e, 0xcb, 0x62, 0x16, 0x12, 0xce,
- 0x7e, 0xf6, 0xcc, 0x3b, 0xe0, 0x78, 0x97, 0x90, 0xdb, 0x97, 0x43, 0x72, 0x1e, 0xee, 0xcb, 0x16,
- 0x27, 0xfb, 0x72, 0x4b, 0xfe, 0x46, 0x2a, 0x2e, 0xdd, 0xd8, 0xa2, 0xf5, 0xe1, 0xe2, 0x76, 0xa0,
- 0x48, 0xfc, 0x2d, 0xa1, 0x5d, 0xcf, 0x1f, 0x6c, 0x56, 0x9f, 0xf3, 0xb7, 0xb8, 0x34, 0x64, 0x7e,
- 0xbc, 0x73, 0xfe, 0x16, 0xa6, 0x7d, 0xa3, 0xcf, 0x59, 0x89, 0x0d, 0x04, 0x77, 0x8c, 0xbf, 0xf7,
- 0x50, 0xf6, 0xa4, 0x7d, 0xef, 0x29, 0xec, 0x7f, 0x5f, 0x80, 0xb3, 0x7b, 0x75, 0xd2, 0xc7, 0xf0,
- 0x3d, 0x02, 0x83, 0x11, 0x8b, 0x34, 0x11, 0xea, 0x6a, 0x98, 0xae, 0x62, 0x1e, 0x7b, 0xf2, 0x32,
- 0x16, 0x20, 0xe4, 0x41, 0xb1, 0xe9, 0xb4, 0x84, 0xbf, 0x74, 0xe1, 0xa0, 0xf9, 0x7b, 0xf4, 0xbf,
- 0xe3, 0x2d, 0x39, 0x2d, 0x3e, 0xe7, 0x8d, 0x06, 0x4c, 0xc9, 0xa0, 0x18, 0x4a, 0x4e, 0x18, 0x3a,
- 0x32, 0xac, 0xe1, 0x72, 0x3e, 0xf4, 0x66, 0x68, 0x97, 0xfc, 0x54, 0x38, 0xd1, 0x84, 0x39, 0x31,
- 0xfb, 0x97, 0xcb, 0x89, 0x64, 0x2f, 0x16, 0xab, 0x12, 0xc1, 0xa0, 0x70, 0x93, 0x5a, 0x79, 0xa7,
- 0x4d, 0xf2, 0x6c, 0x6a, 0xe6, 0x81, 0x10, 0x35, 0x29, 0x04, 0x29, 0xf4, 0x09, 0x8b, 0x55, 0x7e,
- 0x90, 0x19, 0x74, 0x62, 0x57, 0x7f, 0x38, 0x85, 0x28, 0xcc, 0x7a, 0x12, 0xb2, 0x11, 0x9b, 0xd4,
- 0x45, 0x75, 0x1b, 0xb6, 0x9b, 0xe9, 0xae, 0x6e, 0xc3, 0x76, 0x27, 0x12, 0x8e, 0xb6, 0x33, 0x62,
- 0x52, 0x72, 0xa8, 0x1e, 0xd0, 0x47, 0x14, 0xca, 0x97, 0x2d, 0x38, 0xee, 0xa6, 0x83, 0x0b, 0xc4,
- 0x1e, 0xf8, 0x7a, 0x3e, 0x3e, 0xcd, 0xee, 0xd8, 0x05, 0x65, 0xe8, 0x74, 0x81, 0x70, 0x37, 0x33,
- 0xa8, 0x0e, 0x03, 0xae, 0xbf, 0x1e, 0x08, 0xf3, 0x6e, 0xf6, 0x60, 0x4c, 0x2d, 0xf8, 0xeb, 0x81,
- 0x5e, 0xcd, 0xf4, 0x1f, 0x66, 0xbd, 0xa3, 0x45, 0x38, 0x29, 0xf3, 0x7d, 0x2e, 0xba, 0x51, 0x1c,
- 0x84, 0x9d, 0x45, 0xb7, 0xe9, 0xc6, 0xcc, 0x34, 0x2b, 0xce, 0x4e, 0x50, 0xf5, 0x86, 0x33, 0xe0,
- 0x38, 0xf3, 0x29, 0xf4, 0x2a, 0x0c, 0xc9, 0x03, 0xfd, 0x72, 0x1e, 0xfe, 0x84, 0xee, 0xf9, 0xaf,
- 0x26, 0x53, 0x55, 0x9c, 0xe8, 0x4b, 0x82, 0xe8, 0xe3, 0x16, 0x8c, 0xf1, 0xdf, 0x17, 0x3b, 0x75,
- 0x9e, 0x62, 0x58, 0xc9, 0x23, 0x6a, 0xbf, 0x9a, 0xe8, 0x73, 0x16, 0xdd, 0xda, 0x99, 0x1c, 0x4b,
- 0xb6, 0xe1, 0x14, 0x5d, 0xfb, 0x1f, 0x8f, 0x40, 0x77, 0x08, 0x44, 0x32, 0xde, 0xc1, 0x3a, 0xea,
- 0x78, 0x07, 0xba, 0xab, 0x8c, 0x74, 0xa8, 0x42, 0x0e, 0xcb, 0x4c, 0x50, 0xd5, 0xc7, 0xd0, 0x1d,
- 0xbf, 0x86, 0x19, 0x0d, 0xd4, 0x86, 0x41, 0x5e, 0x5c, 0x4a, 0x68, 0x80, 0x83, 0x9f, 0x7c, 0x9b,
- 0x45, 0xaa, 0xb4, 0x5b, 0x8b, 0xb7, 0x62, 0x41, 0x0c, 0x6d, 0xc3, 0xd0, 0x06, 0x9f, 0x8e, 0x62,
- 0xaf, 0xb7, 0x74, 0xd0, 0xf1, 0x4d, 0xcc, 0x71, 0x3d, 0xf9, 0x44, 0x03, 0x96, 0xe4, 0x58, 0x78,
- 0x9d, 0x11, 0x00, 0xc4, 0x05, 0x49, 0x7e, 0xd9, 0x92, 0xfd, 0x47, 0xff, 0xbc, 0x0f, 0x46, 0x42,
- 0x52, 0x0b, 0xfc, 0x9a, 0xeb, 0x91, 0xfa, 0x8c, 0x3c, 0x10, 0xdb, 0x4f, 0x92, 0x1c, 0xf3, 0x26,
- 0x61, 0xa3, 0x0f, 0x9c, 0xe8, 0x91, 0xad, 0x33, 0x95, 0x38, 0x4f, 0x3f, 0x08, 0x11, 0x07, 0x1f,
- 0x8b, 0x39, 0xa5, 0xe9, 0xb3, 0x3e, 0xf9, 0x3a, 0x4b, 0xb6, 0xe1, 0x14, 0x5d, 0xf4, 0x22, 0x40,
- 0xb0, 0xc6, 0x63, 0xe8, 0x66, 0x62, 0x71, 0x0a, 0xb2, 0x9f, 0x57, 0x1d, 0xe3, 0xc9, 0xb6, 0xb2,
- 0x07, 0x6c, 0xf4, 0x86, 0x2e, 0x03, 0xf0, 0x95, 0xb3, 0xda, 0x69, 0xc9, 0x0d, 0xa1, 0xcc, 0x72,
- 0x84, 0xaa, 0x82, 0xdc, 0xde, 0x99, 0xec, 0xf6, 0x39, 0xb3, 0x40, 0x21, 0xe3, 0x71, 0xf4, 0xd3,
- 0x30, 0x14, 0xb5, 0x9b, 0x4d, 0x47, 0x9d, 0x91, 0xe4, 0x98, 0xbe, 0xcb, 0xfb, 0x35, 0x04, 0x23,
- 0x6f, 0xc0, 0x92, 0x22, 0xba, 0x41, 0x45, 0xbc, 0x90, 0x50, 0x7c, 0x15, 0x71, 0x0b, 0x85, 0x7b,
- 0x02, 0xdf, 0x22, 0x77, 0x31, 0x38, 0x03, 0xe7, 0xf6, 0xce, 0xe4, 0x7d, 0xc9, 0xf6, 0xc5, 0x40,
- 0x24, 0xd4, 0x66, 0xf6, 0x89, 0x2e, 0xc9, 0x3a, 0x5a, 0xf4, 0xb5, 0x65, 0x79, 0x97, 0xc7, 0x74,
- 0x1d, 0x2d, 0xd6, 0xdc, 0x7b, 0xcc, 0xcc, 0x87, 0xd1, 0x12, 0x9c, 0xa8, 0x05, 0x7e, 0x1c, 0x06,
- 0x9e, 0xc7, 0x6b, 0xec, 0xf1, 0xbd, 0x39, 0x3f, 0x43, 0x79, 0x40, 0xb0, 0x7d, 0x62, 0xae, 0x1b,
- 0x05, 0x67, 0x3d, 0x47, 0x6d, 0xf2, 0xb4, 0x7e, 0x18, 0xcb, 0xe5, 0x78, 0x3d, 0xd1, 0xa7, 0x90,
- 0x50, 0xca, 0xed, 0xbd, 0x87, 0xa6, 0xf0, 0x93, 0x87, 0xac, 0xe2, 0x8b, 0x3d, 0x03, 0x23, 0x64,
- 0x3b, 0x26, 0xa1, 0xef, 0x78, 0x57, 0xf1, 0xa2, 0x3c, 0xb0, 0x60, 0x0b, 0xf3, 0x9c, 0xd1, 0x8e,
- 0x13, 0x58, 0xc8, 0x56, 0x5e, 0x32, 0x23, 0x73, 0x9d, 0x7b, 0xc9, 0xa4, 0x4f, 0xcc, 0xfe, 0x6a,
- 0x31, 0x61, 0xb3, 0xde, 0x95, 0x23, 0x5d, 0x56, 0x22, 0x49, 0xd6, 0x92, 0x62, 0x00, 0xb1, 0x17,
- 0xcb, 0x93, 0xb2, 0x2a, 0x91, 0xb4, 0x6c, 0x12, 0xc2, 0x49, 0xba, 0x68, 0x13, 0x4a, 0x1b, 0x41,
- 0x14, 0xcb, 0x1d, 0xda, 0x01, 0x37, 0x83, 0x17, 0x83, 0x28, 0x66, 0x86, 0x96, 0x7a, 0x6d, 0xda,
- 0x12, 0x61, 0x4e, 0x83, 0xee, 0xfd, 0xa3, 0x0d, 0x27, 0xac, 0x47, 0x73, 0xac, 0xce, 0xc4, 0x00,
- 0xb3, 0xb0, 0x94, 0x3d, 0x5d, 0xd5, 0x20, 0x6c, 0xe2, 0xd9, 0xdf, 0xb3, 0x12, 0xa7, 0x5a, 0xd7,
- 0x59, 0xd2, 0xc0, 0x16, 0xf1, 0xa9, 0x88, 0x32, 0xc3, 0x14, 0x7f, 0x22, 0x95, 0x82, 0xfd, 0xa6,
- 0x5e, 0xe5, 0x30, 0x6f, 0xd2, 0x1e, 0xa6, 0x58, 0x17, 0x46, 0x44, 0xe3, 0x87, 0xac, 0x64, 0x2e,
- 0x7d, 0x21, 0x8f, 0xad, 0x9b, 0x59, 0x4f, 0x62, 0xcf, 0xb4, 0x7c, 0xfb, 0x73, 0x16, 0x0c, 0xcd,
- 0x3a, 0xb5, 0xcd, 0x60, 0x7d, 0x1d, 0x3d, 0x0e, 0xe5, 0x7a, 0x3b, 0x34, 0xd3, 0xfa, 0x95, 0xb3,
- 0x6a, 0x5e, 0xb4, 0x63, 0x85, 0x41, 0xa7, 0xfe, 0xba, 0x53, 0x93, 0x55, 0x25, 0x8a, 0x7c, 0xea,
- 0x9f, 0x67, 0x2d, 0x58, 0x40, 0xe8, 0xf0, 0x37, 0x9d, 0x6d, 0xf9, 0x70, 0xfa, 0x48, 0x6d, 0x49,
- 0x83, 0xb0, 0x89, 0x67, 0xff, 0x2b, 0x0b, 0x26, 0x66, 0x9d, 0xc8, 0xad, 0xcd, 0xb4, 0xe3, 0x8d,
- 0x59, 0x37, 0x5e, 0x6b, 0xd7, 0x36, 0x49, 0xcc, 0xab, 0x8f, 0x50, 0x2e, 0xdb, 0x11, 0x5d, 0x81,
- 0x6a, 0xc7, 0xac, 0xb8, 0xbc, 0x2a, 0xda, 0xb1, 0xc2, 0x40, 0xaf, 0xc2, 0x70, 0xcb, 0x89, 0xa2,
- 0x9b, 0x41, 0x58, 0xc7, 0x64, 0x3d, 0x9f, 0xfa, 0x44, 0x55, 0x52, 0x0b, 0x49, 0x8c, 0xc9, 0xba,
- 0x08, 0x50, 0xd1, 0xfd, 0x63, 0x93, 0x98, 0xfd, 0x0b, 0x16, 0x9c, 0x9c, 0x25, 0x4e, 0x48, 0x42,
- 0x56, 0xce, 0x48, 0xbd, 0x08, 0x7a, 0x05, 0xca, 0x31, 0x6d, 0xa1, 0x1c, 0x59, 0xf9, 0x72, 0xc4,
- 0x42, 0x4b, 0x56, 0x45, 0xe7, 0x58, 0x91, 0xb1, 0x3f, 0x6d, 0xc1, 0xe9, 0x2c, 0x5e, 0xe6, 0xbc,
- 0xa0, 0x5d, 0xbf, 0x1b, 0x0c, 0xfd, 0x1d, 0x0b, 0x46, 0xd8, 0x71, 0xfd, 0x3c, 0x89, 0x1d, 0xd7,
- 0xeb, 0x2a, 0xa5, 0x68, 0xf5, 0x59, 0x4a, 0xf1, 0x2c, 0x0c, 0x6c, 0x04, 0x4d, 0x92, 0x0e, 0x35,
- 0xb9, 0x18, 0x34, 0x09, 0x66, 0x10, 0xf4, 0x24, 0x9d, 0x84, 0xae, 0x1f, 0x3b, 0x74, 0x39, 0xca,
- 0xe3, 0x8c, 0x71, 0x3e, 0x01, 0x55, 0x33, 0x36, 0x71, 0xec, 0xdf, 0xab, 0xc0, 0x90, 0x88, 0x8b,
- 0xea, 0xbb, 0x1a, 0x8e, 0xf4, 0xe2, 0x14, 0x7a, 0x7a, 0x71, 0x22, 0x18, 0xac, 0xb1, 0x7a, 0xb7,
- 0xc2, 0x42, 0xbf, 0x9c, 0x4b, 0x20, 0x1d, 0x2f, 0xa1, 0xab, 0xd9, 0xe2, 0xff, 0xb1, 0x20, 0x85,
- 0x3e, 0x6b, 0xc1, 0x78, 0x2d, 0xf0, 0x7d, 0x52, 0xd3, 0xb6, 0xe3, 0x40, 0x1e, 0x1b, 0x84, 0xb9,
- 0x64, 0xa7, 0xfa, 0x24, 0x38, 0x05, 0xc0, 0x69, 0xf2, 0xe8, 0x79, 0x18, 0xe5, 0x63, 0x76, 0x2d,
- 0x71, 0x06, 0xa3, 0x2b, 0xec, 0x99, 0x40, 0x9c, 0xc4, 0x45, 0x53, 0xfc, 0x2c, 0x4b, 0xd4, 0xb2,
- 0x1b, 0xd4, 0xae, 0x6a, 0xa3, 0x8a, 0x9d, 0x81, 0x81, 0x42, 0x40, 0x21, 0x59, 0x0f, 0x49, 0xb4,
- 0x21, 0xe2, 0xc6, 0x98, 0xdd, 0x3a, 0x74, 0x67, 0x75, 0x2c, 0x70, 0x57, 0x4f, 0x38, 0xa3, 0x77,
- 0xb4, 0x29, 0xdc, 0x08, 0xe5, 0x3c, 0xe4, 0xb9, 0xf8, 0xcc, 0x3d, 0xbd, 0x09, 0x93, 0x50, 0x62,
- 0xaa, 0x8b, 0xd9, 0xcb, 0x45, 0x9e, 0x3b, 0xc9, 0x14, 0x1b, 0xe6, 0xed, 0x68, 0x1e, 0x8e, 0xa5,
- 0xea, 0x03, 0x46, 0xe2, 0xac, 0x44, 0xe5, 0xc9, 0xa5, 0x2a, 0x0b, 0x46, 0xb8, 0xeb, 0x09, 0xd3,
- 0xc5, 0x34, 0xbc, 0x87, 0x8b, 0xa9, 0xa3, 0xa2, 0x93, 0xf9, 0x29, 0xc6, 0x0b, 0xb9, 0x0c, 0x40,
- 0x5f, 0xa1, 0xc8, 0x9f, 0x4a, 0x85, 0x22, 0x8f, 0x32, 0x06, 0xae, 0xe5, 0xc3, 0xc0, 0xfe, 0xe3,
- 0x8e, 0xef, 0x66, 0x1c, 0xf1, 0xff, 0xb2, 0x40, 0x7e, 0xd7, 0x39, 0xa7, 0xb6, 0x41, 0xe8, 0x94,
- 0x41, 0x6f, 0x87, 0x31, 0xe5, 0x9d, 0xe0, 0x26, 0x91, 0xc5, 0x66, 0x8d, 0xb2, 0x9d, 0x71, 0x02,
- 0x8a, 0x53, 0xd8, 0x68, 0x1a, 0x2a, 0x74, 0x9c, 0xf8, 0xa3, 0x5c, 0xef, 0x2b, 0x0f, 0xc8, 0xcc,
- 0xca, 0x82, 0x78, 0x4a, 0xe3, 0xa0, 0x00, 0x8e, 0x7b, 0x4e, 0x14, 0x33, 0x0e, 0xaa, 0x1d, 0xbf,
- 0x76, 0x87, 0x55, 0x64, 0x58, 0x32, 0xd6, 0x62, 0xba, 0x23, 0xdc, 0xdd, 0xb7, 0xfd, 0x1f, 0x4a,
- 0x30, 0x9a, 0x90, 0x8c, 0xfb, 0x34, 0x18, 0x1e, 0x87, 0xb2, 0xd4, 0xe1, 0xe9, 0x72, 0x59, 0x4a,
- 0xd1, 0x2b, 0x0c, 0xaa, 0xb4, 0xd6, 0xb4, 0x56, 0x4d, 0x1b, 0x38, 0x86, 0xc2, 0xc5, 0x26, 0x1e,
- 0x13, 0xca, 0xb1, 0x17, 0xcd, 0x79, 0x2e, 0xf1, 0x63, 0xce, 0x66, 0x3e, 0x42, 0x79, 0x75, 0xb1,
- 0x6a, 0x76, 0xaa, 0x85, 0x72, 0x0a, 0x80, 0xd3, 0xe4, 0xd1, 0x47, 0x2d, 0x18, 0x75, 0x6e, 0x46,
- 0xba, 0x28, 0xbb, 0x08, 0x3a, 0x3e, 0xa0, 0x92, 0x4a, 0xd4, 0x79, 0xe7, 0x8e, 0xfd, 0x44, 0x13,
- 0x4e, 0x12, 0x45, 0xaf, 0x59, 0x80, 0xc8, 0x36, 0xa9, 0xc9, 0xb0, 0x68, 0xc1, 0xcb, 0x60, 0x1e,
- 0x3b, 0xf8, 0x73, 0x5d, 0xfd, 0x72, 0xa9, 0xde, 0xdd, 0x8e, 0x33, 0x78, 0x40, 0x97, 0x00, 0xd5,
- 0xdd, 0xc8, 0x59, 0xf3, 0xc8, 0x5c, 0xd0, 0x94, 0x09, 0xc4, 0xe2, 0x3c, 0xfd, 0x8c, 0x18, 0x67,
- 0x34, 0xdf, 0x85, 0x81, 0x33, 0x9e, 0x62, 0xb3, 0x2c, 0x0c, 0xb6, 0x3b, 0x57, 0x43, 0x8f, 0x69,
- 0x09, 0x73, 0x96, 0x89, 0x76, 0xac, 0x30, 0xec, 0xbf, 0x28, 0xaa, 0xa5, 0xac, 0x73, 0x00, 0x1c,
- 0x23, 0x16, 0xd9, 0xba, 0xf3, 0x58, 0x64, 0x1d, 0x29, 0xd5, 0x9d, 0x16, 0x9f, 0xc8, 0xa2, 0x2d,
- 0xdc, 0xa5, 0x2c, 0xda, 0x9f, 0xb5, 0x12, 0x25, 0xe9, 0x86, 0x9f, 0x7a, 0x31, 0xdf, 0xfc, 0x83,
- 0x29, 0x1e, 0xc5, 0x95, 0xd2, 0x2b, 0xa9, 0xe0, 0xbd, 0xc7, 0xa1, 0xbc, 0xee, 0x39, 0xac, 0x90,
- 0x0a, 0x5b, 0xa8, 0x46, 0x84, 0xd9, 0x79, 0xd1, 0x8e, 0x15, 0x06, 0x95, 0xfa, 0x46, 0xa7, 0xfb,
- 0x92, 0xda, 0xff, 0xa9, 0x08, 0xc3, 0x86, 0xc6, 0xcf, 0x34, 0xdf, 0xac, 0x7b, 0xcc, 0x7c, 0x2b,
- 0xec, 0xc3, 0x7c, 0xfb, 0x19, 0xa8, 0xd4, 0xa4, 0x36, 0xca, 0xa7, 0xc4, 0x7e, 0x5a, 0xc7, 0x69,
- 0x85, 0xa4, 0x9a, 0xb0, 0xa6, 0x89, 0x2e, 0x24, 0x32, 0x35, 0x13, 0x7e, 0x81, 0xac, 0x54, 0x4a,
- 0xa1, 0xd1, 0xba, 0x9f, 0x49, 0xc7, 0x07, 0x94, 0xf6, 0x8e, 0x0f, 0xb0, 0xbf, 0x65, 0xa9, 0x8f,
- 0x7b, 0x04, 0x25, 0x79, 0x6e, 0x24, 0x4b, 0xf2, 0x9c, 0xcb, 0x65, 0x98, 0x7b, 0xd4, 0xe2, 0xb9,
- 0x02, 0x43, 0x73, 0x41, 0xb3, 0xe9, 0xf8, 0x75, 0xf4, 0xa3, 0x30, 0x54, 0xe3, 0x3f, 0x85, 0x0f,
- 0x8d, 0x1d, 0x56, 0x0b, 0x28, 0x96, 0x30, 0xf4, 0x20, 0x0c, 0x38, 0x61, 0x43, 0xfa, 0xcd, 0x58,
- 0x10, 0xdc, 0x4c, 0xd8, 0x88, 0x30, 0x6b, 0xb5, 0xff, 0xc5, 0x00, 0xb0, 0xd8, 0x13, 0x27, 0x24,
- 0xf5, 0xd5, 0x80, 0x55, 0xc6, 0x3d, 0xd4, 0x23, 0x5e, 0xbd, 0xa9, 0xbb, 0x97, 0x8f, 0x79, 0x8d,
- 0xa3, 0xbe, 0xe2, 0x51, 0x1f, 0xf5, 0x65, 0x9f, 0xde, 0x0e, 0xdc, 0x43, 0xa7, 0xb7, 0xf6, 0x27,
- 0x2d, 0x40, 0x2a, 0x92, 0x48, 0x87, 0x57, 0x4c, 0x43, 0x45, 0x85, 0x2e, 0x09, 0x03, 0x50, 0x8b,
- 0x08, 0x09, 0xc0, 0x1a, 0xa7, 0x8f, 0x9d, 0xfc, 0x23, 0x52, 0x7e, 0x17, 0x93, 0xf9, 0x07, 0x4c,
- 0xea, 0x0b, 0x71, 0x6e, 0xff, 0x7e, 0x01, 0xee, 0xe3, 0xa6, 0xc3, 0x92, 0xe3, 0x3b, 0x0d, 0xd2,
- 0xa4, 0x5c, 0xf5, 0x1b, 0x30, 0x53, 0xa3, 0x5b, 0x48, 0x57, 0x66, 0x0b, 0x1c, 0x74, 0xed, 0xf2,
- 0x35, 0xc7, 0x57, 0xd9, 0x82, 0xef, 0xc6, 0x98, 0x75, 0x8e, 0x22, 0x28, 0xcb, 0xbb, 0x79, 0x84,
- 0x2c, 0xce, 0x89, 0x90, 0x12, 0x4b, 0x42, 0xcb, 0x12, 0xac, 0x08, 0x51, 0x55, 0xea, 0x05, 0xb5,
- 0x4d, 0x4c, 0x5a, 0x41, 0x5a, 0x95, 0x2e, 0x8a, 0x76, 0xac, 0x30, 0xec, 0x26, 0x8c, 0xcb, 0x31,
- 0x6c, 0x5d, 0x26, 0x1d, 0x4c, 0xd6, 0xa9, 0xfe, 0xa9, 0xc9, 0x26, 0xe3, 0xba, 0x20, 0xa5, 0x7f,
- 0xe6, 0x4c, 0x20, 0x4e, 0xe2, 0xca, 0x62, 0xb9, 0x85, 0xec, 0x62, 0xb9, 0xf6, 0xef, 0x5b, 0x90,
- 0x56, 0x80, 0x46, 0x69, 0x50, 0x6b, 0xd7, 0xd2, 0xa0, 0xfb, 0x28, 0xae, 0xf9, 0x1e, 0x18, 0x76,
- 0x62, 0x6a, 0xe1, 0x70, 0x6f, 0x44, 0xf1, 0xce, 0x4e, 0xd1, 0x96, 0x82, 0xba, 0xbb, 0xee, 0x32,
- 0x2f, 0x84, 0xd9, 0x9d, 0xfd, 0x9a, 0x05, 0x95, 0xf9, 0xb0, 0xb3, 0xff, 0xb4, 0xad, 0xee, 0xa4,
- 0xac, 0xc2, 0xbe, 0x92, 0xb2, 0x64, 0xda, 0x57, 0xb1, 0x57, 0xda, 0x97, 0xfd, 0xd7, 0x03, 0x70,
- 0xbc, 0x2b, 0x0f, 0x11, 0x3d, 0x07, 0x23, 0xea, 0x2b, 0x49, 0x17, 0x64, 0xc5, 0x0c, 0xe4, 0xd5,
- 0x30, 0x9c, 0xc0, 0xec, 0x63, 0xa9, 0x2e, 0xc0, 0x89, 0x90, 0xbc, 0xd2, 0x26, 0x6d, 0x32, 0xb3,
- 0x1e, 0x93, 0xb0, 0x4a, 0x6a, 0x81, 0x5f, 0xe7, 0xb5, 0x75, 0x8b, 0xb3, 0xf7, 0xdf, 0xda, 0x99,
- 0x3c, 0x81, 0xbb, 0xc1, 0x38, 0xeb, 0x19, 0xd4, 0x82, 0x51, 0xcf, 0xb4, 0x9d, 0xc5, 0x96, 0xed,
- 0x8e, 0xcc, 0x6e, 0x35, 0x5b, 0x13, 0xcd, 0x38, 0x49, 0x20, 0x69, 0x80, 0x97, 0xee, 0x92, 0x01,
- 0xfe, 0x11, 0x6d, 0x80, 0xf3, 0xb8, 0x98, 0x77, 0xe7, 0x9c, 0x87, 0xda, 0x8f, 0x05, 0x7e, 0x10,
- 0x9b, 0xfa, 0x05, 0x28, 0xcb, 0x98, 0xc1, 0xbe, 0x62, 0xed, 0xcc, 0x7e, 0x7a, 0xc8, 0xf6, 0x47,
- 0xe1, 0x8d, 0xe7, 0xc2, 0xd0, 0x18, 0xcc, 0x2b, 0x41, 0x3c, 0xe3, 0x79, 0xc1, 0x4d, 0x6a, 0xae,
- 0x5c, 0x8d, 0x88, 0xf0, 0x89, 0xd9, 0xb7, 0x0b, 0x90, 0xb1, 0xbd, 0xa4, 0x6b, 0x52, 0xdb, 0x48,
- 0x89, 0x35, 0xb9, 0x3f, 0x3b, 0x09, 0x6d, 0xf3, 0xb8, 0x4a, 0x6e, 0x0d, 0xbc, 0x2b, 0xef, 0xed,
- 0xb1, 0x0e, 0xb5, 0x54, 0x92, 0x52, 0x85, 0x5b, 0x3e, 0x05, 0xa0, 0x4d, 0x5b, 0x91, 0xfa, 0xa4,
- 0x02, 0x25, 0xb4, 0x05, 0x8c, 0x0d, 0x2c, 0xf4, 0x2c, 0x0c, 0xbb, 0x7e, 0x14, 0x3b, 0x9e, 0x77,
- 0xd1, 0xf5, 0x63, 0xe1, 0xf6, 0x55, 0x66, 0xcf, 0x82, 0x06, 0x61, 0x13, 0xef, 0xcc, 0x5b, 0x8c,
- 0xef, 0xb7, 0x9f, 0xef, 0xbe, 0x01, 0xa7, 0x2f, 0xb8, 0xb1, 0x4a, 0xd8, 0x53, 0xf3, 0x8d, 0x5a,
- 0xae, 0x4a, 0x56, 0x59, 0x3d, 0x53, 0x54, 0x8d, 0x84, 0xb9, 0x42, 0x32, 0xbf, 0x2f, 0x9d, 0x30,
- 0x67, 0xd7, 0xe0, 0xe4, 0x05, 0x37, 0x3e, 0xef, 0x7a, 0xe4, 0x10, 0x89, 0xfc, 0xee, 0x20, 0x8c,
- 0x98, 0x79, 0xec, 0xfb, 0x91, 0xec, 0x9f, 0xa6, 0x76, 0xac, 0x18, 0x08, 0x57, 0x1d, 0xfe, 0x5e,
- 0x3f, 0x70, 0x52, 0x7d, 0xf6, 0xe0, 0x1a, 0xa6, 0xac, 0xa6, 0x89, 0x4d, 0x06, 0xd0, 0x4d, 0x28,
- 0xad, 0xb3, 0xdc, 0xaf, 0x62, 0x1e, 0x61, 0x3b, 0x59, 0x83, 0xaf, 0x57, 0x2e, 0xcf, 0x1e, 0xe3,
- 0xf4, 0xa8, 0xf9, 0x11, 0x26, 0x53, 0x8e, 0x8d, 0x88, 0x7c, 0xa1, 0xd7, 0x14, 0x46, 0x2f, 0xed,
- 0x51, 0xba, 0x03, 0xed, 0x91, 0x90, 0xe5, 0x83, 0x77, 0x49, 0x96, 0xb3, 0x3c, 0xbe, 0x78, 0x83,
- 0x19, 0xc7, 0x22, 0x85, 0x68, 0x88, 0x0d, 0x82, 0x91, 0xc7, 0x97, 0x00, 0xe3, 0x34, 0x3e, 0xfa,
- 0xa0, 0xd2, 0x06, 0xe5, 0x3c, 0x9c, 0xeb, 0xe6, 0x8c, 0x3e, 0x6c, 0x45, 0xf0, 0xc9, 0x02, 0x8c,
- 0x5d, 0xf0, 0xdb, 0x2b, 0x17, 0x56, 0xda, 0x6b, 0x9e, 0x5b, 0xbb, 0x4c, 0x3a, 0x54, 0xda, 0x6f,
- 0x92, 0xce, 0xc2, 0xbc, 0x58, 0x41, 0x6a, 0xce, 0x5c, 0xa6, 0x8d, 0x98, 0xc3, 0xa8, 0xdc, 0x5a,
- 0x77, 0xfd, 0x06, 0x09, 0x5b, 0xa1, 0x2b, 0xfc, 0xde, 0x86, 0xdc, 0x3a, 0xaf, 0x41, 0xd8, 0xc4,
- 0xa3, 0x7d, 0x07, 0x37, 0x7d, 0x12, 0xa6, 0x77, 0x09, 0xcb, 0xb4, 0x11, 0x73, 0x18, 0x45, 0x8a,
- 0xc3, 0xb6, 0x70, 0x2b, 0x19, 0x48, 0xab, 0xb4, 0x11, 0x73, 0x18, 0x5d, 0xe9, 0x51, 0x7b, 0x8d,
- 0x45, 0x45, 0xa5, 0xf2, 0x95, 0xaa, 0xbc, 0x19, 0x4b, 0x38, 0x45, 0xdd, 0x24, 0x9d, 0x79, 0x27,
- 0x76, 0xd2, 0x49, 0x9d, 0x97, 0x79, 0x33, 0x96, 0x70, 0x56, 0x28, 0x38, 0x39, 0x1c, 0xdf, 0x77,
- 0x85, 0x82, 0x93, 0xec, 0xf7, 0x70, 0x4e, 0xfc, 0xed, 0x02, 0x8c, 0xbc, 0x7e, 0x9b, 0x67, 0xc6,
- 0x3d, 0x35, 0xd7, 0xe1, 0x78, 0x57, 0xf6, 0x70, 0x1f, 0x16, 0xd2, 0x9e, 0xd5, 0x1d, 0x6c, 0x0c,
- 0xc3, 0xb4, 0x63, 0x59, 0x20, 0x6f, 0x0e, 0x8e, 0xf3, 0xc5, 0x4b, 0x29, 0xb1, 0x64, 0x50, 0x95,
- 0x11, 0xce, 0x0e, 0x76, 0xae, 0xa5, 0x81, 0xb8, 0x1b, 0xdf, 0xfe, 0x94, 0x05, 0xa3, 0x89, 0x84,
- 0xee, 0x9c, 0x6c, 0x39, 0xb6, 0xba, 0x03, 0x16, 0xd1, 0xcb, 0x32, 0x2c, 0x8a, 0x4c, 0x0d, 0xeb,
- 0xd5, 0xad, 0x41, 0xd8, 0xc4, 0xb3, 0x3f, 0x57, 0x80, 0xb2, 0x8c, 0x3e, 0xea, 0x83, 0x95, 0x4f,
- 0x58, 0x30, 0xaa, 0x0e, 0xd3, 0x98, 0xf7, 0xb3, 0x90, 0x47, 0x7e, 0x19, 0xe5, 0x40, 0xf9, 0x4f,
- 0xfc, 0xf5, 0x40, 0x6f, 0x2c, 0xb0, 0x49, 0x0c, 0x27, 0x69, 0xa3, 0x6b, 0x00, 0x51, 0x27, 0x8a,
- 0x49, 0xd3, 0xf0, 0xc3, 0xda, 0xc6, 0x2c, 0x9b, 0xaa, 0x05, 0x21, 0xa1, 0x73, 0xea, 0x4a, 0x50,
- 0x27, 0x55, 0x85, 0xa9, 0x2d, 0x3c, 0xdd, 0x86, 0x8d, 0x9e, 0xec, 0x5f, 0x2f, 0xc0, 0xb1, 0x34,
- 0x4b, 0xe8, 0xdd, 0x30, 0x22, 0xa9, 0x1b, 0xfb, 0x75, 0x19, 0x3b, 0x35, 0x82, 0x0d, 0xd8, 0xed,
- 0x9d, 0xc9, 0xc9, 0xee, 0xfb, 0x95, 0xa7, 0x4c, 0x14, 0x9c, 0xe8, 0x8c, 0x9f, 0x68, 0x8a, 0xa3,
- 0xf7, 0xd9, 0xce, 0x4c, 0xab, 0x25, 0x8e, 0x25, 0x8d, 0x13, 0x4d, 0x13, 0x8a, 0x53, 0xd8, 0x68,
- 0x05, 0x4e, 0x1a, 0x2d, 0x57, 0x88, 0xdb, 0xd8, 0x58, 0x0b, 0x42, 0xb9, 0x41, 0x7c, 0x50, 0x47,
- 0x6a, 0x76, 0xe3, 0xe0, 0xcc, 0x27, 0xa9, 0x85, 0x51, 0x73, 0x5a, 0x4e, 0xcd, 0x8d, 0x3b, 0xc2,
- 0xb1, 0xac, 0xe4, 0xe1, 0x9c, 0x68, 0xc7, 0x0a, 0xc3, 0xfe, 0x07, 0x03, 0x70, 0x8c, 0x87, 0x26,
- 0x12, 0x15, 0x79, 0x8b, 0xde, 0x0d, 0x95, 0x28, 0x76, 0x42, 0xee, 0x1d, 0xb0, 0xf6, 0x2d, 0x03,
- 0x74, 0x3a, 0xb7, 0xec, 0x04, 0xeb, 0xfe, 0xd0, 0x8b, 0xac, 0x16, 0x96, 0x1b, 0x6d, 0xb0, 0xde,
- 0x0b, 0x77, 0xe6, 0x7b, 0x38, 0xaf, 0x7a, 0xc0, 0x46, 0x6f, 0xe8, 0xad, 0x50, 0x6a, 0x6d, 0x38,
- 0x91, 0x74, 0x8c, 0x3d, 0x2a, 0x17, 0xdc, 0x0a, 0x6d, 0xbc, 0xbd, 0x33, 0x79, 0x2a, 0xfd, 0xaa,
- 0x0c, 0x80, 0xf9, 0x43, 0xa6, 0xb8, 0x1c, 0xd8, 0xfb, 0xbe, 0x96, 0x7a, 0xd8, 0xa9, 0x5e, 0x9c,
- 0x49, 0xdf, 0xf0, 0x31, 0xcf, 0x5a, 0xb1, 0x80, 0xd2, 0xc5, 0xbd, 0xc1, 0x49, 0xd6, 0x29, 0xf2,
- 0x60, 0x52, 0x75, 0x5f, 0xd4, 0x20, 0x6c, 0xe2, 0xa1, 0x4f, 0x76, 0x07, 0xae, 0x0e, 0x1d, 0x42,
- 0x62, 0x43, 0xbf, 0x21, 0xab, 0xe7, 0xa0, 0x22, 0x58, 0x5d, 0x0d, 0xd0, 0x73, 0x30, 0xc2, 0xfd,
- 0x2e, 0xb3, 0xa1, 0xe3, 0xd7, 0x36, 0xd2, 0xde, 0x92, 0x55, 0x03, 0x86, 0x13, 0x98, 0xf6, 0x12,
- 0x0c, 0xf4, 0x29, 0xad, 0xfa, 0xda, 0x04, 0xbf, 0x00, 0x65, 0xda, 0x9d, 0xdc, 0xe9, 0xe4, 0xd1,
- 0x65, 0x00, 0x65, 0x79, 0xfb, 0x1f, 0xb2, 0xa1, 0xe8, 0x3a, 0x32, 0x40, 0x41, 0x2d, 0xa1, 0x85,
- 0x28, 0x6a, 0xb3, 0x69, 0x47, 0x81, 0xe8, 0x11, 0x28, 0x92, 0xed, 0x56, 0x3a, 0x12, 0xe1, 0xdc,
- 0x76, 0xcb, 0x0d, 0x49, 0x44, 0x91, 0xc8, 0x76, 0x0b, 0x9d, 0x81, 0x82, 0x5b, 0x17, 0x33, 0x12,
- 0x04, 0x4e, 0x61, 0x61, 0x1e, 0x17, 0xdc, 0xba, 0xbd, 0x0d, 0x15, 0x75, 0xdd, 0x20, 0xda, 0x94,
- 0xb6, 0x89, 0x95, 0x47, 0x68, 0xaa, 0xec, 0xb7, 0x87, 0x55, 0xd2, 0x06, 0xd0, 0x75, 0x02, 0xf2,
- 0xd2, 0x65, 0x67, 0x61, 0xa0, 0x16, 0x88, 0x0a, 0x2f, 0x65, 0xdd, 0x0d, 0x33, 0x4a, 0x18, 0xc4,
- 0xbe, 0x0e, 0x63, 0x97, 0xfd, 0xe0, 0x26, 0xbb, 0x15, 0x88, 0x15, 0xc1, 0xa5, 0x1d, 0xaf, 0xd3,
- 0x1f, 0x69, 0x13, 0x98, 0x41, 0x31, 0x87, 0xa9, 0xf2, 0x9c, 0x85, 0x5e, 0xe5, 0x39, 0xed, 0x0f,
- 0x59, 0x30, 0xa2, 0x12, 0x8e, 0x2f, 0x6c, 0x6d, 0xd2, 0x7e, 0x1b, 0x61, 0xd0, 0x6e, 0xa5, 0xfb,
- 0x65, 0x37, 0x9b, 0x62, 0x0e, 0x33, 0x33, 0xf1, 0x0b, 0x7b, 0x64, 0xe2, 0x9f, 0x85, 0x81, 0x4d,
- 0xd7, 0xaf, 0xa7, 0xbd, 0x8b, 0x97, 0x5d, 0xbf, 0x8e, 0x19, 0x84, 0xb2, 0x70, 0x4c, 0xb1, 0x20,
- 0x8d, 0x8f, 0xe7, 0x60, 0x64, 0xad, 0xed, 0x7a, 0x75, 0x59, 0xdd, 0x37, 0xb5, 0x5c, 0x66, 0x0d,
- 0x18, 0x4e, 0x60, 0xa2, 0xa7, 0x00, 0xd6, 0x5c, 0xdf, 0x09, 0x3b, 0x2b, 0xda, 0xda, 0x51, 0x0a,
- 0x70, 0x56, 0x41, 0xb0, 0x81, 0x65, 0x7f, 0xa6, 0x08, 0x63, 0xc9, 0xb4, 0xeb, 0x3e, 0x9c, 0x00,
- 0x8f, 0x40, 0x89, 0x65, 0x62, 0xa7, 0x3f, 0x2d, 0x2f, 0x88, 0xcb, 0x61, 0x28, 0x82, 0x41, 0xbe,
- 0x98, 0xf3, 0xb9, 0x1d, 0x52, 0x31, 0xa9, 0x5c, 0x92, 0x2c, 0x80, 0x57, 0x78, 0x78, 0x05, 0x29,
- 0xf4, 0x51, 0x0b, 0x86, 0x82, 0x96, 0x59, 0xd6, 0xf1, 0x5d, 0x79, 0xa6, 0xa4, 0x8b, 0xbc, 0x4f,
- 0xb1, 0xe3, 0x53, 0x9f, 0x5e, 0x7e, 0x0e, 0x49, 0xfa, 0xcc, 0x4f, 0xc2, 0x88, 0x89, 0xb9, 0xd7,
- 0xa6, 0xaf, 0x6c, 0x6e, 0xfa, 0x3e, 0x61, 0x4e, 0x0a, 0x91, 0x74, 0xdf, 0xc7, 0x72, 0xbb, 0x0a,
- 0xa5, 0x9a, 0x8a, 0x72, 0xba, 0xa3, 0x9a, 0xf0, 0xaa, 0x28, 0x15, 0x3b, 0x41, 0xe6, 0xbd, 0xd9,
- 0xdf, 0xb2, 0x8c, 0xf9, 0x81, 0x49, 0xb4, 0x50, 0x47, 0x21, 0x14, 0x1b, 0x5b, 0x9b, 0x42, 0xcd,
- 0x5f, 0xca, 0x69, 0x78, 0x2f, 0x6c, 0x6d, 0xea, 0x39, 0x6e, 0xb6, 0x62, 0x4a, 0xac, 0x0f, 0xbf,
- 0x79, 0xa2, 0x36, 0x43, 0x71, 0xef, 0xda, 0x0c, 0xf6, 0x6b, 0x05, 0x38, 0xde, 0x35, 0xa9, 0xd0,
- 0xab, 0x50, 0x0a, 0xe9, 0x5b, 0x8a, 0xd7, 0x5b, 0xcc, 0xad, 0x9a, 0x42, 0xb4, 0x50, 0xd7, 0xea,
- 0x33, 0xd9, 0x8e, 0x39, 0x49, 0x74, 0x09, 0x90, 0x8e, 0xc5, 0x53, 0x4e, 0x7b, 0xfe, 0xca, 0x2a,
- 0x60, 0x67, 0xa6, 0x0b, 0x03, 0x67, 0x3c, 0x85, 0x9e, 0x4f, 0xfb, 0xfe, 0x8b, 0xc9, 0x43, 0xa7,
- 0xdd, 0xdc, 0xf8, 0xf6, 0x6f, 0x17, 0x60, 0x34, 0x51, 0x65, 0x13, 0x79, 0x50, 0x26, 0x1e, 0x3b,
- 0x11, 0x94, 0xca, 0xe6, 0xa0, 0x77, 0x66, 0x28, 0x05, 0x79, 0x4e, 0xf4, 0x8b, 0x15, 0x85, 0x7b,
- 0x23, 0x8e, 0xe7, 0x39, 0x18, 0x91, 0x0c, 0xbd, 0xcb, 0x69, 0x7a, 0x62, 0x00, 0xd5, 0x1c, 0x3d,
- 0x67, 0xc0, 0x70, 0x02, 0xd3, 0xfe, 0x83, 0x22, 0x4c, 0xf0, 0x23, 0xd4, 0xba, 0x9a, 0x79, 0x4b,
- 0xd2, 0x9f, 0xf0, 0x8b, 0xba, 0x16, 0xae, 0x95, 0xc7, 0xc5, 0xd0, 0xbd, 0x08, 0xf5, 0x15, 0x7e,
- 0xfa, 0xa5, 0x54, 0xf8, 0x29, 0xdf, 0xe2, 0x35, 0x0e, 0x89, 0xa3, 0xef, 0xaf, 0x78, 0xd4, 0x7f,
- 0x52, 0x80, 0xf1, 0xd4, 0xfd, 0x5f, 0xe8, 0x33, 0xc9, 0x2b, 0x23, 0xac, 0x3c, 0x8e, 0x97, 0x76,
- 0xbd, 0x12, 0x6a, 0x7f, 0x17, 0x47, 0xdc, 0xa5, 0xa5, 0x62, 0x7f, 0xb3, 0x00, 0x63, 0xc9, 0x8b,
- 0xcb, 0xee, 0xc1, 0x91, 0x7a, 0x33, 0x54, 0xd8, 0xdd, 0x3c, 0xec, 0xbe, 0x7d, 0x7e, 0x3a, 0xc5,
- 0xaf, 0x41, 0x91, 0x8d, 0x58, 0xc3, 0xef, 0x89, 0xfb, 0x38, 0xec, 0x7f, 0x66, 0xc1, 0x29, 0xfe,
- 0x96, 0xe9, 0x79, 0xf8, 0xb7, 0xb2, 0x46, 0xf7, 0xa5, 0x7c, 0x19, 0x4c, 0xd5, 0x70, 0xde, 0x6b,
- 0x7c, 0xd9, 0xf5, 0xd8, 0x82, 0xdb, 0xe4, 0x54, 0xb8, 0x07, 0x99, 0xdd, 0xd7, 0x64, 0xb0, 0xbf,
- 0x59, 0x04, 0x7d, 0x23, 0x38, 0x72, 0x45, 0x8e, 0x7c, 0x2e, 0xb5, 0xac, 0xab, 0x1d, 0xbf, 0xa6,
- 0xef, 0x1e, 0x2f, 0xa7, 0x52, 0xe4, 0x7f, 0xde, 0x82, 0x61, 0xd7, 0x77, 0x63, 0xd7, 0x61, 0x2e,
- 0x9b, 0x7c, 0xae, 0xf5, 0x55, 0xe4, 0x16, 0x78, 0xcf, 0x41, 0x68, 0x1e, 0x69, 0x2a, 0x62, 0xd8,
- 0xa4, 0x8c, 0xde, 0x27, 0x32, 0x44, 0x8a, 0xb9, 0x15, 0x9a, 0x28, 0xa7, 0xd2, 0x42, 0x5a, 0xd4,
- 0xf0, 0x8a, 0xc3, 0x9c, 0xea, 0xb3, 0x60, 0xda, 0x95, 0xba, 0x16, 0x41, 0x99, 0xb6, 0xac, 0x19,
- 0x73, 0x42, 0x76, 0x04, 0xa8, 0x7b, 0x2c, 0xf6, 0x19, 0x7d, 0x3f, 0x0d, 0x15, 0xa7, 0x1d, 0x07,
- 0x4d, 0x3a, 0x4c, 0xe2, 0x40, 0x54, 0xe7, 0x17, 0x48, 0x00, 0xd6, 0x38, 0xf6, 0x67, 0x4a, 0x90,
- 0xca, 0x58, 0x47, 0xdb, 0xe6, 0x6d, 0xf6, 0x56, 0xbe, 0xb7, 0xd9, 0x2b, 0x66, 0xb2, 0x6e, 0xb4,
- 0x47, 0x0d, 0xe9, 0xfd, 0xe2, 0x36, 0xe6, 0x0b, 0x69, 0xef, 0xd7, 0x4f, 0xf5, 0x77, 0xaa, 0x40,
- 0xe7, 0xea, 0x34, 0xaf, 0x51, 0x36, 0xb5, 0xa7, 0xa3, 0x6c, 0xaf, 0x8b, 0x8d, 0x3f, 0x2c, 0x2e,
- 0x21, 0xc2, 0x24, 0x6a, 0x7b, 0xb1, 0x98, 0x0d, 0x2f, 0xe4, 0xb8, 0xca, 0x78, 0xc7, 0xba, 0xf2,
- 0x0b, 0xff, 0x8f, 0x0d, 0xa2, 0x49, 0x77, 0xe6, 0xe0, 0xa1, 0xba, 0x33, 0x87, 0x72, 0x75, 0x67,
- 0x3e, 0x05, 0xc0, 0xe6, 0x36, 0x8f, 0x12, 0x2e, 0x33, 0x2f, 0x93, 0x12, 0x85, 0x58, 0x41, 0xb0,
- 0x81, 0x65, 0xff, 0x38, 0x24, 0x4b, 0x17, 0xa1, 0x49, 0x59, 0x29, 0x89, 0x9f, 0x78, 0xb0, 0x04,
- 0xad, 0x44, 0x51, 0xa3, 0xdf, 0xb4, 0xc0, 0xac, 0xaf, 0x84, 0x5e, 0xe1, 0x85, 0x9c, 0xac, 0x3c,
- 0x4e, 0xc6, 0x8d, 0x7e, 0xa7, 0x96, 0x9c, 0x56, 0x2a, 0x9a, 0x43, 0x56, 0x73, 0x3a, 0xf3, 0x16,
- 0x28, 0x4b, 0xe8, 0xbe, 0x8c, 0xba, 0x0f, 0xc2, 0x09, 0x99, 0xec, 0x2d, 0x7d, 0xf4, 0xe2, 0x54,
- 0x75, 0x6f, 0xd7, 0x8f, 0xf4, 0xe7, 0x14, 0x7a, 0xf9, 0x73, 0xd4, 0x2e, 0xb5, 0xd8, 0xb3, 0x44,
- 0xf3, 0x6f, 0x59, 0x70, 0x36, 0xcd, 0x40, 0xb4, 0x14, 0xf8, 0x6e, 0x1c, 0x84, 0x55, 0x12, 0xc7,
- 0xae, 0xdf, 0x60, 0xf5, 0x36, 0x6f, 0x3a, 0xa1, 0xbc, 0x73, 0x85, 0x09, 0xca, 0xeb, 0x4e, 0xe8,
- 0x63, 0xd6, 0x8a, 0x3a, 0x30, 0xc8, 0x43, 0x49, 0x85, 0xb5, 0x7e, 0xc0, 0xb5, 0x91, 0x31, 0x1c,
- 0x7a, 0xbb, 0xc0, 0xc3, 0x58, 0xb1, 0x20, 0x68, 0x7f, 0xc7, 0x02, 0xb4, 0xbc, 0x45, 0xc2, 0xd0,
- 0xad, 0x1b, 0xc1, 0xaf, 0xec, 0x32, 0x3f, 0xe3, 0xd2, 0x3e, 0xb3, 0x14, 0x41, 0xea, 0x32, 0x3f,
- 0xe3, 0x5f, 0xf6, 0x65, 0x7e, 0x85, 0xfd, 0x5d, 0xe6, 0x87, 0x96, 0xe1, 0x54, 0x93, 0x6f, 0x37,
- 0xf8, 0x05, 0x59, 0x7c, 0xef, 0xa1, 0xb2, 0x66, 0x4f, 0xdf, 0xda, 0x99, 0x3c, 0xb5, 0x94, 0x85,
- 0x80, 0xb3, 0x9f, 0xb3, 0xdf, 0x02, 0x88, 0xc7, 0xbc, 0xce, 0x65, 0x85, 0xed, 0xf5, 0x74, 0xbf,
- 0xd8, 0x5f, 0x2c, 0xc1, 0x78, 0xaa, 0x22, 0x3f, 0xdd, 0xea, 0x75, 0xc7, 0x09, 0x1e, 0x58, 0x7f,
- 0x77, 0xb3, 0xd7, 0x57, 0xe4, 0xa1, 0x0f, 0x25, 0xd7, 0x6f, 0xb5, 0xe3, 0x7c, 0x92, 0xf6, 0x39,
- 0x13, 0x0b, 0xb4, 0x43, 0xc3, 0x5d, 0x4c, 0xff, 0x62, 0x4e, 0x26, 0xcf, 0x38, 0xc6, 0x84, 0x31,
- 0x3e, 0x70, 0x97, 0xdc, 0x01, 0x1f, 0xd6, 0x51, 0x85, 0xa5, 0x3c, 0x1c, 0x8b, 0xa9, 0xc9, 0x72,
- 0xd8, 0xa1, 0x24, 0x5f, 0x2d, 0xc0, 0xb0, 0xf1, 0xd1, 0xd0, 0xaf, 0x24, 0xab, 0x0f, 0x5a, 0xf9,
- 0xbd, 0x12, 0xeb, 0x7f, 0x4a, 0xd7, 0x17, 0xe4, 0xaf, 0xf4, 0x68, 0x77, 0xe1, 0xc1, 0xdb, 0x3b,
- 0x93, 0xc7, 0x52, 0xa5, 0x05, 0x13, 0xc5, 0x08, 0xcf, 0x7c, 0x00, 0xc6, 0x53, 0xdd, 0x64, 0xbc,
- 0xf2, 0xaa, 0xf9, 0xca, 0x07, 0x76, 0x4b, 0x99, 0x43, 0xf6, 0x15, 0x3a, 0x64, 0x22, 0x57, 0x38,
- 0xf0, 0x48, 0x1f, 0x3e, 0xd8, 0x54, 0x49, 0x80, 0x42, 0x9f, 0x25, 0x01, 0x1e, 0x83, 0x72, 0x2b,
- 0xf0, 0xdc, 0x9a, 0xab, 0x8a, 0x17, 0xb3, 0x22, 0x04, 0x2b, 0xa2, 0x0d, 0x2b, 0x28, 0xba, 0x09,
- 0x95, 0x1b, 0x37, 0x63, 0x7e, 0xfa, 0x23, 0xfc, 0xdb, 0x79, 0x1d, 0xfa, 0x28, 0xa3, 0x45, 0x1d,
- 0x2f, 0x61, 0x4d, 0x0b, 0xd9, 0x30, 0xc8, 0x94, 0xa0, 0xcc, 0x1b, 0x62, 0xbe, 0x77, 0xa6, 0x1d,
- 0x23, 0x2c, 0x20, 0xf6, 0xf7, 0x00, 0x4e, 0x66, 0x5d, 0x8b, 0x82, 0xde, 0x0f, 0x83, 0x9c, 0xc7,
- 0x7c, 0x6e, 0xde, 0xca, 0xa2, 0x71, 0x81, 0x75, 0x28, 0xd8, 0x62, 0xbf, 0xb1, 0xa0, 0x29, 0xa8,
- 0x7b, 0xce, 0x9a, 0x98, 0x21, 0x87, 0x43, 0x7d, 0xd1, 0xd1, 0xd4, 0x17, 0x1d, 0x4e, 0xdd, 0x73,
- 0xd6, 0xd0, 0x36, 0x94, 0x1a, 0x6e, 0x4c, 0x1c, 0xe1, 0x44, 0xb8, 0x7e, 0x28, 0xc4, 0x89, 0xc3,
- 0xad, 0x34, 0xf6, 0x13, 0x73, 0x82, 0xe8, 0xcb, 0x16, 0x8c, 0xaf, 0x25, 0x6b, 0x91, 0x08, 0xe1,
- 0xe9, 0x1c, 0xc2, 0xd5, 0x37, 0x49, 0x42, 0xfc, 0x36, 0xcb, 0x54, 0x23, 0x4e, 0xb3, 0x83, 0x3e,
- 0x62, 0xc1, 0xd0, 0xba, 0xeb, 0x19, 0x77, 0x0b, 0x1c, 0xc2, 0xc7, 0x39, 0xcf, 0x08, 0xe8, 0x1d,
- 0x07, 0xff, 0x1f, 0x61, 0x49, 0xb9, 0x97, 0xa6, 0x1a, 0x3c, 0xa8, 0xa6, 0x1a, 0xba, 0x4b, 0x9a,
- 0xea, 0xe3, 0x16, 0x54, 0xd4, 0x48, 0x8b, 0x9a, 0x0e, 0xef, 0x3e, 0xc4, 0x4f, 0xce, 0x3d, 0x27,
- 0xea, 0x2f, 0xd6, 0xc4, 0xd1, 0x67, 0x2d, 0x18, 0x76, 0x5e, 0x6d, 0x87, 0xa4, 0x4e, 0xb6, 0x82,
- 0x56, 0x24, 0x8a, 0x2d, 0xbe, 0x94, 0x3f, 0x33, 0x33, 0x94, 0xc8, 0x3c, 0xd9, 0x5a, 0x6e, 0x45,
- 0x22, 0xa7, 0x51, 0x37, 0x60, 0x93, 0x05, 0xf4, 0x73, 0x5a, 0x8f, 0x43, 0x1e, 0x25, 0x77, 0xb3,
- 0xb8, 0x39, 0x6c, 0x65, 0xbe, 0x53, 0x80, 0xc9, 0x3d, 0x46, 0x01, 0x3d, 0x07, 0x23, 0x41, 0xd8,
- 0x70, 0x7c, 0xf7, 0x55, 0xb3, 0x40, 0x92, 0xb2, 0x14, 0x97, 0x0d, 0x18, 0x4e, 0x60, 0x9a, 0x95,
- 0x33, 0x0a, 0x7b, 0x54, 0xce, 0x38, 0x0b, 0x03, 0x21, 0x69, 0x05, 0xe9, 0x0d, 0x0f, 0xcb, 0x89,
- 0x62, 0x10, 0xf4, 0x10, 0x14, 0x9d, 0x96, 0x2b, 0xc2, 0x63, 0xd4, 0x3e, 0x6e, 0x66, 0x65, 0x01,
- 0xd3, 0xf6, 0x44, 0x21, 0x9f, 0xd2, 0x91, 0x14, 0xf2, 0xa1, 0xaa, 0x4c, 0x9c, 0xbf, 0x0c, 0x6a,
- 0x55, 0x96, 0x3c, 0x17, 0xb1, 0x5f, 0x2b, 0xc2, 0x43, 0xbb, 0xce, 0x79, 0x1d, 0x2b, 0x6b, 0xed,
- 0x12, 0x2b, 0x2b, 0x87, 0xa7, 0xb0, 0xd7, 0xf0, 0x14, 0x7b, 0x0c, 0xcf, 0x47, 0xe8, 0x52, 0x96,
- 0x85, 0xa5, 0xf2, 0xb9, 0x90, 0xb9, 0x57, 0x9d, 0x2a, 0xb1, 0x8a, 0x25, 0x14, 0x6b, 0xba, 0x74,
- 0x1f, 0x93, 0xa8, 0x1a, 0x51, 0xca, 0x43, 0x95, 0xf5, 0x2c, 0xee, 0xc4, 0xd7, 0x6f, 0xaf, 0x52,
- 0x14, 0xf6, 0xef, 0x0c, 0xc0, 0x23, 0x7d, 0x68, 0x20, 0x73, 0x16, 0x5b, 0x7d, 0xce, 0xe2, 0xef,
- 0xf3, 0xcf, 0xf4, 0xb1, 0xcc, 0xcf, 0x84, 0xf3, 0xff, 0x4c, 0xbb, 0x7f, 0x21, 0xf4, 0x38, 0x94,
- 0x5d, 0x3f, 0x22, 0xb5, 0x76, 0xc8, 0xf3, 0x06, 0x8c, 0x84, 0xc9, 0x05, 0xd1, 0x8e, 0x15, 0x06,
- 0xdd, 0x97, 0xd6, 0x1c, 0xba, 0xfc, 0x87, 0x72, 0xaa, 0x12, 0x60, 0xe6, 0x5e, 0x72, 0xb3, 0x68,
- 0x6e, 0x86, 0x4a, 0x00, 0x4e, 0xc6, 0xfe, 0x25, 0x0b, 0xce, 0xf4, 0x36, 0x13, 0xd0, 0x93, 0x30,
- 0xbc, 0xc6, 0x82, 0xcf, 0xd8, 0x55, 0xfc, 0x72, 0xea, 0xb0, 0xf7, 0xd5, 0xcd, 0xd8, 0xc4, 0x41,
- 0x73, 0x70, 0xdc, 0x8c, 0x5a, 0x5b, 0x32, 0x22, 0x63, 0x98, 0x23, 0x63, 0x35, 0x0d, 0xc4, 0xdd,
- 0xf8, 0xf6, 0x77, 0x8b, 0xd9, 0x6c, 0x71, 0x73, 0x72, 0x3f, 0xb3, 0x59, 0xcc, 0xd5, 0x42, 0x1f,
- 0x12, 0xb7, 0x78, 0xd4, 0x12, 0x77, 0xa0, 0x97, 0xc4, 0x45, 0xf3, 0x70, 0xcc, 0xb8, 0x2b, 0x91,
- 0xd7, 0x8d, 0xe0, 0x91, 0x92, 0xaa, 0xe8, 0xd3, 0x4a, 0x0a, 0x8e, 0xbb, 0x9e, 0xb8, 0xc7, 0xa7,
- 0xde, 0xd7, 0x0a, 0x70, 0xba, 0xa7, 0x05, 0x7f, 0x44, 0x1a, 0xc5, 0xfc, 0xfc, 0x03, 0x47, 0xf3,
- 0xf9, 0xcd, 0x8f, 0x52, 0xda, 0xf3, 0xa3, 0xf4, 0xa3, 0x9e, 0xff, 0xa4, 0xd0, 0x73, 0xb1, 0xd0,
- 0x1d, 0xdf, 0x0f, 0xec, 0x48, 0x3e, 0x0f, 0xa3, 0x4e, 0xab, 0xc5, 0xf1, 0x58, 0x64, 0x7a, 0xaa,
- 0x10, 0xdd, 0x8c, 0x09, 0xc4, 0x49, 0xdc, 0xbe, 0x06, 0xf6, 0xcf, 0x2d, 0xa8, 0x60, 0xb2, 0xce,
- 0x25, 0x16, 0xba, 0x21, 0x86, 0xc8, 0xca, 0xa3, 0x1a, 0x38, 0x1d, 0xd8, 0xc8, 0x65, 0x25, 0xb2,
- 0xb3, 0x06, 0xfb, 0xa0, 0xa9, 0xdc, 0xea, 0x86, 0xc5, 0x62, 0xef, 0x1b, 0x16, 0xed, 0xbf, 0x2c,
- 0xd3, 0xd7, 0x6b, 0x05, 0x73, 0x21, 0xa9, 0x47, 0xf4, 0xfb, 0xb6, 0x43, 0x4f, 0x4c, 0x12, 0xf5,
- 0x7d, 0xaf, 0xe2, 0x45, 0x4c, 0xdb, 0x13, 0x07, 0x81, 0x85, 0x7d, 0x95, 0xe1, 0x2a, 0xee, 0x59,
- 0x86, 0xeb, 0x79, 0x18, 0x8d, 0xa2, 0x8d, 0x95, 0xd0, 0xdd, 0x72, 0x62, 0x72, 0x99, 0x74, 0x84,
- 0x7d, 0xac, 0x4b, 0xd2, 0x54, 0x2f, 0x6a, 0x20, 0x4e, 0xe2, 0xa2, 0x0b, 0x70, 0x5c, 0x17, 0xc3,
- 0x22, 0x61, 0xcc, 0x72, 0xa7, 0xf8, 0x4c, 0x50, 0xf5, 0x27, 0x74, 0xf9, 0x2c, 0x81, 0x80, 0xbb,
- 0x9f, 0xa1, 0x32, 0x37, 0xd1, 0x48, 0x19, 0x19, 0x4c, 0xca, 0xdc, 0x44, 0x3f, 0x94, 0x97, 0xae,
- 0x27, 0xd0, 0x12, 0x9c, 0xe0, 0x13, 0x63, 0xa6, 0xd5, 0x32, 0xde, 0x68, 0x28, 0x59, 0x82, 0xf9,
- 0x42, 0x37, 0x0a, 0xce, 0x7a, 0x0e, 0x3d, 0x0b, 0xc3, 0xaa, 0x79, 0x61, 0x5e, 0x9c, 0x61, 0x29,
- 0x1f, 0x9a, 0xea, 0x66, 0xa1, 0x8e, 0x4d, 0x3c, 0xf4, 0x2e, 0xb8, 0x5f, 0xff, 0xe5, 0xb9, 0xb8,
- 0xfc, 0x60, 0x77, 0x5e, 0xd4, 0x19, 0x54, 0x37, 0xfc, 0x5c, 0xc8, 0x44, 0xab, 0xe3, 0x5e, 0xcf,
- 0xa3, 0x35, 0x38, 0xa3, 0x40, 0xe7, 0xfc, 0x98, 0x65, 0xcb, 0x45, 0x64, 0xd6, 0x89, 0xc8, 0xd5,
- 0xd0, 0x63, 0x95, 0x09, 0x2b, 0xfa, 0xca, 0xf7, 0x0b, 0x6e, 0x7c, 0x31, 0x0b, 0x13, 0x2f, 0xe2,
- 0x5d, 0x7a, 0x41, 0xd3, 0x50, 0x21, 0xbe, 0xb3, 0xe6, 0x91, 0xe5, 0xb9, 0x05, 0x56, 0xaf, 0xd0,
- 0x38, 0x47, 0x3e, 0x27, 0x01, 0x58, 0xe3, 0xa8, 0xf8, 0xe6, 0x91, 0x5e, 0xf1, 0xcd, 0x68, 0x05,
- 0x4e, 0x36, 0x6a, 0x2d, 0x6a, 0x35, 0xba, 0x35, 0x32, 0x53, 0x63, 0xe1, 0x9c, 0xf4, 0xc3, 0xf0,
- 0xda, 0xd8, 0x2a, 0x51, 0xe4, 0xc2, 0xdc, 0x4a, 0x17, 0x0e, 0xce, 0x7c, 0x92, 0x85, 0xfd, 0x86,
- 0xc1, 0x76, 0x67, 0xe2, 0x44, 0x2a, 0xec, 0x97, 0x36, 0x62, 0x0e, 0x43, 0x97, 0x00, 0xb1, 0xac,
- 0xa3, 0x8b, 0x71, 0xdc, 0x52, 0x66, 0xea, 0xc4, 0xc9, 0x64, 0xd5, 0xb1, 0xf3, 0x5d, 0x18, 0x38,
- 0xe3, 0x29, 0x6a, 0xf5, 0xf8, 0x01, 0xeb, 0x7d, 0xe2, 0xfe, 0xa4, 0xd5, 0x73, 0x85, 0x37, 0x63,
- 0x09, 0x47, 0xef, 0x81, 0x89, 0x76, 0x44, 0xd8, 0x06, 0xf8, 0x7a, 0x10, 0x6e, 0x7a, 0x81, 0x53,
- 0x5f, 0x60, 0x57, 0x39, 0xc6, 0x9d, 0x89, 0x09, 0x46, 0xfc, 0xac, 0x78, 0x76, 0xe2, 0x6a, 0x0f,
- 0x3c, 0xdc, 0xb3, 0x87, 0x74, 0xd9, 0xbc, 0xd3, 0xfd, 0x95, 0xcd, 0xb3, 0xff, 0xcc, 0x82, 0x51,
- 0x25, 0x6f, 0x8e, 0x20, 0x57, 0xd1, 0x4b, 0xe6, 0x2a, 0x5e, 0x38, 0xb8, 0xc4, 0x66, 0x9c, 0xf7,
- 0x48, 0x08, 0xf8, 0xd7, 0x23, 0x00, 0x5a, 0xaa, 0x2b, 0x85, 0x6a, 0xf5, 0x54, 0xa8, 0xf7, 0xac,
- 0x44, 0xcd, 0x2a, 0x5a, 0x56, 0xba, 0xbb, 0x45, 0xcb, 0xaa, 0x70, 0x4a, 0x9a, 0x44, 0xfc, 0xa4,
- 0xf5, 0x62, 0x10, 0x29, 0x01, 0x6d, 0x5c, 0xcd, 0xb5, 0x90, 0x85, 0x84, 0xb3, 0x9f, 0x4d, 0x58,
- 0x62, 0x43, 0x7b, 0x5a, 0x62, 0x4a, 0x26, 0x2d, 0xae, 0xcb, 0x8b, 0xf3, 0x52, 0x32, 0x69, 0xf1,
- 0x7c, 0x15, 0x6b, 0x9c, 0x6c, 0xc5, 0x54, 0xc9, 0x49, 0x31, 0xc1, 0xbe, 0x15, 0x93, 0x14, 0x91,
- 0xc3, 0x3d, 0x45, 0xa4, 0x3c, 0xd1, 0x19, 0xe9, 0x79, 0xa2, 0xf3, 0x76, 0x18, 0x73, 0xfd, 0x0d,
- 0x12, 0xba, 0x31, 0xa9, 0xb3, 0xb5, 0xc0, 0xc4, 0x67, 0x59, 0x9b, 0x25, 0x0b, 0x09, 0x28, 0x4e,
- 0x61, 0x27, 0xe5, 0xfa, 0x58, 0x1f, 0x72, 0xbd, 0x87, 0x36, 0x1d, 0xcf, 0x47, 0x9b, 0x1e, 0x3b,
- 0xb8, 0x36, 0x3d, 0x7e, 0xa8, 0xda, 0x14, 0xe5, 0xa2, 0x4d, 0xfb, 0x52, 0x54, 0xc6, 0x96, 0xfa,
- 0xe4, 0x1e, 0x5b, 0xea, 0x5e, 0xaa, 0xf4, 0xd4, 0x1d, 0xab, 0xd2, 0x6c, 0x2d, 0x79, 0xdf, 0x0f,
- 0xa5, 0x96, 0xfc, 0x78, 0x01, 0x4e, 0x69, 0x3d, 0x42, 0x57, 0xaf, 0xbb, 0x4e, 0x25, 0x29, 0xbb,
- 0x3b, 0x96, 0x9f, 0xda, 0x1a, 0x69, 0xb8, 0x3a, 0xa3, 0x57, 0x41, 0xb0, 0x81, 0xc5, 0xb2, 0x59,
- 0x49, 0xc8, 0x6e, 0x2d, 0x48, 0x2b, 0x99, 0x39, 0xd1, 0x8e, 0x15, 0x06, 0x65, 0x99, 0xfe, 0x16,
- 0x55, 0x09, 0xd2, 0xf5, 0x70, 0xe7, 0x34, 0x08, 0x9b, 0x78, 0xe8, 0x31, 0x4e, 0x84, 0x09, 0x38,
- 0xaa, 0x68, 0x46, 0xf8, 0x96, 0x4d, 0xc9, 0x34, 0x05, 0x95, 0xec, 0xb0, 0xb4, 0xe5, 0x52, 0x37,
- 0x3b, 0x2c, 0x00, 0x52, 0x61, 0xd8, 0xff, 0xd3, 0x82, 0xd3, 0x99, 0x43, 0x71, 0x04, 0xc6, 0xc3,
- 0x76, 0xd2, 0x78, 0xa8, 0xe6, 0xb5, 0xdd, 0x33, 0xde, 0xa2, 0x87, 0x21, 0xf1, 0x1f, 0x2d, 0x18,
- 0xd3, 0xf8, 0x47, 0xf0, 0xaa, 0x6e, 0xf2, 0x55, 0xf3, 0xdb, 0xd9, 0x56, 0xba, 0xde, 0xed, 0x0f,
- 0x0a, 0xa0, 0x6a, 0x54, 0xcf, 0xd4, 0xe4, 0x0d, 0x00, 0x7b, 0xc4, 0x11, 0x74, 0x60, 0x90, 0x85,
- 0x41, 0x44, 0xf9, 0x84, 0x78, 0x25, 0xe9, 0xb3, 0x90, 0x0a, 0x7d, 0x2a, 0xc5, 0xfe, 0x46, 0x58,
- 0x10, 0x64, 0x77, 0x6a, 0xf0, 0xf2, 0xbf, 0x75, 0x91, 0x94, 0xa9, 0xef, 0xd4, 0x10, 0xed, 0x58,
- 0x61, 0x50, 0xf5, 0xe6, 0xd6, 0x02, 0x7f, 0xce, 0x73, 0x22, 0x79, 0x9d, 0xbc, 0x52, 0x6f, 0x0b,
- 0x12, 0x80, 0x35, 0x0e, 0x8b, 0x90, 0x70, 0xa3, 0x96, 0xe7, 0x74, 0x0c, 0xff, 0x85, 0x51, 0x7d,
- 0x47, 0x81, 0xb0, 0x89, 0x67, 0x37, 0x61, 0x22, 0xf9, 0x12, 0xf3, 0x64, 0x9d, 0x85, 0x27, 0xf7,
- 0x35, 0x9c, 0xd3, 0x50, 0x71, 0xd8, 0x53, 0x8b, 0x6d, 0x47, 0xc8, 0x04, 0x1d, 0xa4, 0x2b, 0x01,
- 0x58, 0xe3, 0xd8, 0xff, 0xd4, 0x82, 0x13, 0x19, 0x83, 0x96, 0x63, 0xd2, 0x6b, 0xac, 0xa5, 0x4d,
- 0x96, 0x61, 0xf2, 0x63, 0x30, 0x54, 0x27, 0xeb, 0x8e, 0x0c, 0x80, 0x35, 0x44, 0xfa, 0x3c, 0x6f,
- 0xc6, 0x12, 0x6e, 0xff, 0x76, 0x01, 0xc6, 0x93, 0xbc, 0x46, 0x2c, 0x91, 0x8c, 0x0f, 0x93, 0x1b,
- 0xd5, 0x82, 0x2d, 0x12, 0x76, 0xe8, 0x9b, 0x5b, 0xa9, 0x44, 0xb2, 0x2e, 0x0c, 0x9c, 0xf1, 0x14,
- 0xab, 0x50, 0x5f, 0x57, 0xa3, 0x2d, 0x67, 0xe4, 0xb5, 0x3c, 0x67, 0xa4, 0xfe, 0x98, 0x66, 0xb0,
- 0x8c, 0x22, 0x89, 0x4d, 0xfa, 0xd4, 0x40, 0x62, 0x91, 0xf9, 0xb3, 0x6d, 0xd7, 0x8b, 0x5d, 0x5f,
- 0xbc, 0xb2, 0x98, 0xab, 0xca, 0x40, 0x5a, 0xea, 0x46, 0xc1, 0x59, 0xcf, 0xd9, 0xdf, 0x19, 0x00,
- 0x55, 0xd0, 0x81, 0x05, 0x33, 0xe6, 0x14, 0x0a, 0xba, 0xdf, 0x74, 0x44, 0x35, 0xb7, 0x06, 0x76,
- 0x8b, 0x2e, 0xe2, 0x4e, 0x2f, 0xd3, 0x3b, 0xae, 0x06, 0x6c, 0x55, 0x83, 0xb0, 0x89, 0x47, 0x39,
- 0xf1, 0xdc, 0x2d, 0xc2, 0x1f, 0x1a, 0x4c, 0x72, 0xb2, 0x28, 0x01, 0x58, 0xe3, 0x50, 0x4e, 0xea,
- 0xee, 0xfa, 0xba, 0xf0, 0xe0, 0x28, 0x4e, 0xe8, 0xe8, 0x60, 0x06, 0xe1, 0x77, 0x98, 0x04, 0x9b,
- 0x62, 0x53, 0x60, 0xdc, 0x61, 0x12, 0x6c, 0x62, 0x06, 0xa1, 0x5f, 0xc9, 0x0f, 0xc2, 0xa6, 0xe3,
- 0xb9, 0xaf, 0x92, 0xba, 0xa2, 0x22, 0x36, 0x03, 0xea, 0x2b, 0x5d, 0xe9, 0x46, 0xc1, 0x59, 0xcf,
- 0xd1, 0x09, 0xdd, 0x0a, 0x49, 0xdd, 0xad, 0xc5, 0x66, 0x6f, 0x90, 0x9c, 0xd0, 0x2b, 0x5d, 0x18,
- 0x38, 0xe3, 0x29, 0x34, 0x03, 0xe3, 0xb2, 0x20, 0x87, 0xac, 0x06, 0x37, 0x9c, 0x2c, 0x29, 0x85,
- 0x93, 0x60, 0x9c, 0xc6, 0xa7, 0x42, 0xb2, 0x29, 0x6a, 0x59, 0xb2, 0xbd, 0x83, 0x21, 0x24, 0x65,
- 0x8d, 0x4b, 0xac, 0x30, 0xec, 0x0f, 0x17, 0xa9, 0x52, 0xef, 0x51, 0x32, 0xf6, 0xc8, 0x42, 0x8f,
- 0x93, 0x33, 0x72, 0xa0, 0x8f, 0x19, 0xf9, 0x0c, 0x8c, 0xdc, 0x88, 0x02, 0x5f, 0x85, 0xf5, 0x96,
- 0x7a, 0x86, 0xf5, 0x1a, 0x58, 0xd9, 0x61, 0xbd, 0x83, 0x79, 0x85, 0xf5, 0x0e, 0xdd, 0x61, 0x58,
- 0xef, 0x1f, 0x96, 0x40, 0x5d, 0x52, 0x77, 0x85, 0xc4, 0x37, 0x83, 0x70, 0xd3, 0xf5, 0x1b, 0xac,
- 0xb8, 0xc4, 0x97, 0x2d, 0x59, 0x9f, 0x62, 0xd1, 0x4c, 0xcb, 0x5c, 0xcf, 0xe9, 0xa2, 0xb1, 0x04,
- 0xb1, 0xa9, 0x55, 0x83, 0x50, 0xea, 0xfa, 0x7f, 0x13, 0x84, 0x13, 0x1c, 0xa1, 0x0f, 0x00, 0x48,
- 0x77, 0xf7, 0xba, 0x94, 0xc0, 0x0b, 0xf9, 0xf0, 0x87, 0xc9, 0xba, 0x36, 0xa9, 0x57, 0x15, 0x11,
- 0x6c, 0x10, 0x44, 0x1f, 0xd7, 0x29, 0xab, 0x3c, 0xff, 0xe7, 0x7d, 0x87, 0x32, 0x36, 0xfd, 0x24,
- 0xac, 0x62, 0x18, 0x72, 0xfd, 0x06, 0x9d, 0x27, 0x22, 0xfc, 0xf1, 0x4d, 0x59, 0x45, 0x80, 0x16,
- 0x03, 0xa7, 0x3e, 0xeb, 0x78, 0x8e, 0x5f, 0x23, 0xe1, 0x02, 0x47, 0xd7, 0x1a, 0x54, 0x34, 0x60,
- 0xd9, 0x51, 0xd7, 0x4d, 0x7a, 0xa5, 0x7e, 0x6e, 0xd2, 0x3b, 0xf3, 0x0e, 0x38, 0xde, 0xf5, 0x31,
- 0xf7, 0x95, 0x9f, 0x7a, 0xe7, 0xa9, 0xad, 0xf6, 0xef, 0x0c, 0x6a, 0xa5, 0x75, 0x25, 0xa8, 0xf3,
- 0x8b, 0xd9, 0x42, 0xfd, 0x45, 0x85, 0xc9, 0x9c, 0xe3, 0x14, 0x51, 0x6a, 0xc6, 0x68, 0xc4, 0x26,
- 0x49, 0x3a, 0x47, 0x5b, 0x4e, 0x48, 0xfc, 0xc3, 0x9e, 0xa3, 0x2b, 0x8a, 0x08, 0x36, 0x08, 0xa2,
- 0x8d, 0x44, 0x82, 0xda, 0xf9, 0x83, 0x27, 0xa8, 0xb1, 0x92, 0x8c, 0x59, 0xf7, 0x17, 0x7d, 0xd6,
- 0x82, 0x31, 0x3f, 0x31, 0x73, 0xf3, 0x89, 0x49, 0xcf, 0x5e, 0x15, 0xfc, 0x8e, 0xd3, 0x64, 0x1b,
- 0x4e, 0xd1, 0xcf, 0x52, 0x69, 0xa5, 0x7d, 0xaa, 0x34, 0x7d, 0x31, 0xe4, 0x60, 0xaf, 0x8b, 0x21,
- 0x91, 0xaf, 0x6e, 0xec, 0x1d, 0xca, 0xa3, 0xf6, 0x43, 0xe2, 0xba, 0x5e, 0xc8, 0xb8, 0xaa, 0xf7,
- 0x3a, 0x54, 0x6a, 0x21, 0x71, 0xe2, 0x3b, 0xbc, 0xb9, 0x95, 0x45, 0xca, 0xcc, 0xc9, 0x0e, 0xb0,
- 0xee, 0xcb, 0xfe, 0x3f, 0x03, 0x70, 0x4c, 0x8e, 0x88, 0xcc, 0x67, 0xa1, 0xfa, 0x91, 0xd3, 0xd5,
- 0xb6, 0xb2, 0xd2, 0x8f, 0x17, 0x25, 0x00, 0x6b, 0x1c, 0x6a, 0x8f, 0xb5, 0x23, 0xb2, 0xdc, 0x22,
- 0xfe, 0xa2, 0xbb, 0x16, 0x89, 0xa3, 0x6d, 0xb5, 0x50, 0xae, 0x6a, 0x10, 0x36, 0xf1, 0xa8, 0x6d,
- 0xef, 0x18, 0x46, 0xab, 0x61, 0xdb, 0x4b, 0x43, 0x55, 0xc2, 0xd1, 0x17, 0x32, 0x6b, 0xd8, 0xe7,
- 0x93, 0x05, 0xda, 0x95, 0xc6, 0xb3, 0xcf, 0xab, 0xc7, 0xff, 0xa1, 0x05, 0xa7, 0x78, 0xab, 0x1c,
- 0xc9, 0xab, 0xad, 0xba, 0x13, 0x93, 0x28, 0x9f, 0xbb, 0x6f, 0x32, 0xf8, 0xd3, 0x3e, 0xef, 0x2c,
- 0xb2, 0x38, 0x9b, 0x1b, 0xf4, 0x19, 0x0b, 0xc6, 0x37, 0x13, 0x05, 0x84, 0xa4, 0xea, 0x38, 0x68,
- 0x6d, 0x8f, 0x44, 0xa7, 0x7a, 0xa9, 0x25, 0xdb, 0x23, 0x9c, 0xa6, 0x6e, 0xff, 0x0f, 0x0b, 0x4c,
- 0x31, 0x7a, 0xf4, 0x75, 0x87, 0xf6, 0x6f, 0x0a, 0x4a, 0xeb, 0xb2, 0xd4, 0xd3, 0xba, 0x7c, 0x08,
- 0x8a, 0x6d, 0xb7, 0x2e, 0xf6, 0x17, 0xfa, 0x30, 0x7d, 0x61, 0x1e, 0xd3, 0x76, 0xfb, 0xdb, 0x25,
- 0xed, 0x06, 0x11, 0x49, 0x96, 0x3f, 0x10, 0xaf, 0xbd, 0xae, 0x2a, 0x73, 0xf2, 0x37, 0xbf, 0xd2,
- 0x55, 0x99, 0xf3, 0xad, 0xfb, 0xcf, 0xa1, 0xe5, 0x03, 0xd4, 0xab, 0x30, 0xe7, 0xd0, 0x1e, 0x09,
- 0xb4, 0x37, 0xa0, 0x4c, 0xb7, 0x60, 0xcc, 0x9f, 0x59, 0x4e, 0x30, 0x55, 0xbe, 0x28, 0xda, 0x6f,
- 0xef, 0x4c, 0xfe, 0xe4, 0xfe, 0xd9, 0x92, 0x4f, 0x63, 0xd5, 0x3f, 0x8a, 0xa0, 0x42, 0x7f, 0xb3,
- 0x5c, 0x5f, 0xb1, 0xb9, 0xbb, 0xaa, 0x64, 0xa6, 0x04, 0xe4, 0x92, 0x48, 0xac, 0xe9, 0x20, 0x1f,
- 0x2a, 0x14, 0x91, 0x13, 0xe5, 0x7b, 0xc0, 0x15, 0x95, 0x71, 0x2b, 0x01, 0xb7, 0x77, 0x26, 0x9f,
- 0xdf, 0x3f, 0x51, 0xf5, 0x38, 0xd6, 0x24, 0x0c, 0xd5, 0x38, 0xdc, 0xf3, 0xce, 0xe4, 0xff, 0x3b,
- 0xa0, 0xe7, 0xb7, 0x28, 0xda, 0xfa, 0x03, 0x31, 0xbf, 0x9f, 0x4b, 0xcd, 0xef, 0xb3, 0x5d, 0xf3,
- 0x7b, 0x4c, 0x5f, 0xf3, 0x9f, 0x98, 0xb1, 0x47, 0x6d, 0x2c, 0xec, 0xed, 0x93, 0x60, 0x56, 0xd2,
- 0x2b, 0x6d, 0x37, 0x24, 0xd1, 0x4a, 0xd8, 0xf6, 0x5d, 0xbf, 0xc1, 0xa6, 0x6c, 0xd9, 0xb4, 0x92,
- 0x12, 0x60, 0x9c, 0xc6, 0xa7, 0x1b, 0x7f, 0x3a, 0x2f, 0xae, 0x3b, 0x5b, 0x7c, 0xe6, 0x19, 0x75,
- 0xfe, 0xaa, 0xa2, 0x1d, 0x2b, 0x0c, 0xb4, 0x01, 0x0f, 0xca, 0x0e, 0xe6, 0x89, 0x47, 0xc4, 0x25,
- 0xfd, 0xeb, 0x6e, 0xd8, 0xe4, 0x21, 0xf9, 0x3c, 0xce, 0xe3, 0x8d, 0xa2, 0x87, 0x07, 0xf1, 0x2e,
- 0xb8, 0x78, 0xd7, 0x9e, 0xec, 0xaf, 0xb0, 0x40, 0x03, 0xa3, 0xe4, 0x01, 0x9d, 0x7d, 0x9e, 0xdb,
- 0x74, 0x65, 0x39, 0x42, 0x35, 0xfb, 0x16, 0x69, 0x23, 0xe6, 0x30, 0x74, 0x13, 0x86, 0xd6, 0xf8,
- 0x5d, 0xca, 0xf9, 0xdc, 0xdb, 0x22, 0x2e, 0x66, 0x66, 0x35, 0x7d, 0xe5, 0x2d, 0xcd, 0xb7, 0xf5,
- 0x4f, 0x2c, 0xa9, 0xd9, 0xdf, 0x28, 0xc1, 0xb8, 0x0c, 0xdd, 0xba, 0xe8, 0x46, 0x2c, 0x7e, 0xc0,
- 0x2c, 0x74, 0x5e, 0xd8, 0xb3, 0xd0, 0xf9, 0x7b, 0x01, 0xea, 0xa4, 0xe5, 0x05, 0x1d, 0x66, 0x1c,
- 0x0e, 0xec, 0xdb, 0x38, 0x54, 0xfb, 0x89, 0x79, 0xd5, 0x0b, 0x36, 0x7a, 0x14, 0x35, 0x18, 0x79,
- 0xdd, 0xf4, 0x54, 0x0d, 0x46, 0xe3, 0x76, 0xa7, 0xc1, 0xa3, 0xbd, 0xdd, 0xc9, 0x85, 0x71, 0xce,
- 0xa2, 0x2a, 0x2c, 0x70, 0x07, 0xf5, 0x03, 0x58, 0x6a, 0xd6, 0x7c, 0xb2, 0x1b, 0x9c, 0xee, 0xd7,
- 0xbc, 0xba, 0xa9, 0x7c, 0xd4, 0x57, 0x37, 0xbd, 0x19, 0x2a, 0xf2, 0x3b, 0x47, 0x13, 0x15, 0x5d,
- 0x9c, 0x45, 0x4e, 0x83, 0x08, 0x6b, 0x78, 0x57, 0x8d, 0x14, 0xb8, 0x5b, 0x35, 0x52, 0xec, 0x4f,
- 0x17, 0xe8, 0xae, 0x82, 0xf3, 0xa5, 0xca, 0x7d, 0x3d, 0x0a, 0x83, 0x4e, 0x3b, 0xde, 0x08, 0xba,
- 0x6e, 0x63, 0x9e, 0x61, 0xad, 0x58, 0x40, 0xd1, 0x22, 0x0c, 0xd4, 0x75, 0x09, 0xa7, 0xfd, 0x7c,
- 0x4f, 0xed, 0xa0, 0x75, 0x62, 0x82, 0x59, 0x2f, 0xe8, 0x41, 0x18, 0x88, 0x9d, 0x86, 0xcc, 0x26,
- 0x65, 0x15, 0x04, 0x56, 0x9d, 0x46, 0x84, 0x59, 0xeb, 0x7e, 0xca, 0xd6, 0x3e, 0x0f, 0xa3, 0x91,
- 0xdb, 0xf0, 0x9d, 0xb8, 0x1d, 0x12, 0xe3, 0x0c, 0x53, 0x87, 0xd5, 0x98, 0x40, 0x9c, 0xc4, 0xb5,
- 0x7f, 0x77, 0x04, 0x4e, 0x56, 0xe7, 0x96, 0xe4, 0x1d, 0x1d, 0x87, 0x96, 0x10, 0x9a, 0x45, 0xe3,
- 0xe8, 0x12, 0x42, 0x7b, 0x50, 0xf7, 0x8c, 0x84, 0x50, 0xcf, 0x48, 0x08, 0x4d, 0x66, 0xe7, 0x15,
- 0xf3, 0xc8, 0xce, 0xcb, 0xe2, 0xa0, 0x9f, 0xec, 0xbc, 0x43, 0xcb, 0x10, 0xdd, 0x95, 0xa1, 0x7d,
- 0x65, 0x88, 0xaa, 0xf4, 0xd9, 0x5c, 0x72, 0x8e, 0x7a, 0x7c, 0xaa, 0xcc, 0xf4, 0x59, 0x95, 0xba,
- 0xc8, 0xf3, 0xe9, 0x84, 0xa8, 0x7f, 0x29, 0x7f, 0x06, 0xfa, 0x48, 0x5d, 0x14, 0x29, 0x7d, 0x66,
- 0xba, 0xec, 0x50, 0x1e, 0xe9, 0xb2, 0x59, 0xec, 0xec, 0x99, 0x2e, 0xfb, 0x3c, 0x8c, 0xd6, 0xbc,
- 0xc0, 0x27, 0x2b, 0x61, 0x10, 0x07, 0xb5, 0x40, 0xde, 0x07, 0xab, 0xaf, 0x33, 0x33, 0x81, 0x38,
- 0x89, 0xdb, 0x2b, 0xd7, 0xb6, 0x72, 0xd0, 0x5c, 0x5b, 0xb8, 0x4b, 0xb9, 0xb6, 0x46, 0x36, 0xe9,
- 0x70, 0x1e, 0xd9, 0xa4, 0x59, 0x5f, 0xa4, 0xaf, 0x0b, 0x5f, 0x5f, 0xe3, 0xd7, 0x21, 0x53, 0x13,
- 0x7c, 0x2e, 0x68, 0x52, 0xc3, 0x6f, 0x84, 0x0d, 0xc9, 0xcb, 0x87, 0x30, 0x61, 0xaf, 0x57, 0x35,
- 0x19, 0x75, 0x45, 0xb2, 0x6e, 0xc2, 0x49, 0x46, 0x0e, 0x92, 0xe8, 0xfa, 0xc5, 0x02, 0xfc, 0xc8,
- 0x9e, 0x2c, 0xa0, 0x9b, 0x00, 0xb1, 0xd3, 0x10, 0x13, 0x55, 0x1c, 0xdf, 0x1c, 0x30, 0xf6, 0x75,
- 0x55, 0xf6, 0xc7, 0xcb, 0x2d, 0xa9, 0xbf, 0xec, 0x60, 0x44, 0xfe, 0x66, 0x21, 0xaf, 0x81, 0xd7,
- 0x55, 0x95, 0x16, 0x07, 0x1e, 0xc1, 0x0c, 0x42, 0xd5, 0x7f, 0x48, 0x1a, 0xd4, 0xa4, 0x2d, 0x26,
- 0xd5, 0x3f, 0x66, 0xad, 0x58, 0x40, 0xd1, 0xb3, 0x30, 0xec, 0x78, 0x1e, 0x4f, 0x08, 0x23, 0x91,
- 0xb8, 0x67, 0x50, 0x97, 0xc7, 0xd4, 0x20, 0x6c, 0xe2, 0xd9, 0x7f, 0x55, 0x80, 0xc9, 0x3d, 0x64,
- 0x4a, 0x57, 0x22, 0x70, 0xa9, 0xef, 0x44, 0x60, 0x91, 0x00, 0x33, 0xd8, 0x23, 0x01, 0xe6, 0x59,
- 0x18, 0x8e, 0x89, 0xd3, 0x14, 0xd1, 0x72, 0xc2, 0x2f, 0xa1, 0xcf, 0xa3, 0x35, 0x08, 0x9b, 0x78,
- 0x54, 0x8a, 0x8d, 0x39, 0xb5, 0x1a, 0x89, 0x22, 0x99, 0xe1, 0x22, 0x7c, 0xbb, 0xb9, 0xa5, 0xcf,
- 0x30, 0x97, 0xf9, 0x4c, 0x82, 0x04, 0x4e, 0x91, 0x4c, 0x0f, 0x78, 0xa5, 0xcf, 0x01, 0xff, 0xd5,
- 0x02, 0x3c, 0xb4, 0xab, 0x76, 0xeb, 0x3b, 0xf9, 0xa8, 0x1d, 0x91, 0x30, 0x3d, 0x71, 0xae, 0x46,
- 0x24, 0xc4, 0x0c, 0xc2, 0x47, 0xa9, 0xd5, 0x52, 0x91, 0xce, 0xf9, 0x67, 0xeb, 0xf1, 0x51, 0x4a,
- 0x90, 0xc0, 0x29, 0x92, 0x77, 0x3a, 0x2d, 0xbf, 0x31, 0x00, 0x8f, 0xf4, 0x61, 0x03, 0xe4, 0x98,
- 0xd5, 0x98, 0xcc, 0xc0, 0x2d, 0xde, 0xa5, 0x0c, 0xdc, 0x3b, 0x1b, 0xae, 0xd7, 0x13, 0x77, 0xfb,
- 0xca, 0x9e, 0xfc, 0x4a, 0x01, 0xce, 0xf4, 0x36, 0x58, 0xd0, 0xdb, 0x60, 0x3c, 0x54, 0x81, 0x78,
- 0x66, 0xf2, 0xee, 0x09, 0xee, 0xd9, 0x49, 0x80, 0x70, 0x1a, 0x17, 0x4d, 0x01, 0xb4, 0x9c, 0x78,
- 0x23, 0x3a, 0xb7, 0xed, 0x46, 0xb1, 0x28, 0x43, 0x36, 0xc6, 0xcf, 0x1b, 0x65, 0x2b, 0x36, 0x30,
- 0x28, 0x39, 0xf6, 0x6f, 0x3e, 0xb8, 0x12, 0xc4, 0xfc, 0x21, 0xbe, 0xd9, 0x3a, 0x21, 0x2f, 0x25,
- 0x33, 0x40, 0x38, 0x8d, 0x4b, 0xc9, 0xb1, 0x13, 0x6d, 0xce, 0x28, 0xdf, 0x85, 0x31, 0x72, 0x8b,
- 0xaa, 0x15, 0x1b, 0x18, 0xe9, 0xb4, 0xe4, 0xd2, 0xde, 0x69, 0xc9, 0xf6, 0xbf, 0x2c, 0xc0, 0xe9,
- 0x9e, 0x06, 0x6f, 0x7f, 0x62, 0xea, 0xde, 0x4b, 0x25, 0xbe, 0xc3, 0x15, 0xb6, 0xaf, 0x14, 0x54,
- 0xfb, 0xcf, 0x7b, 0xcc, 0x34, 0x91, 0x5e, 0x7a, 0xe7, 0x95, 0x35, 0xee, 0xbd, 0xf1, 0xec, 0xca,
- 0x28, 0x1d, 0xd8, 0x47, 0x46, 0x69, 0xea, 0x63, 0x94, 0xfa, 0xd4, 0x0e, 0xff, 0x75, 0xa0, 0xe7,
- 0xf0, 0xd2, 0x0d, 0x72, 0x5f, 0x7e, 0xf3, 0x79, 0x38, 0xe6, 0xfa, 0xec, 0x9a, 0xc9, 0x6a, 0x7b,
- 0x4d, 0x54, 0xa6, 0xe2, 0xe5, 0x57, 0x55, 0x86, 0xc8, 0x42, 0x0a, 0x8e, 0xbb, 0x9e, 0xb8, 0x07,
- 0x33, 0x7c, 0xef, 0x6c, 0x48, 0xf7, 0x29, 0xb9, 0x97, 0xe1, 0x94, 0x1c, 0x8a, 0x0d, 0x27, 0x24,
- 0x75, 0xa1, 0x6c, 0x23, 0x91, 0x13, 0x74, 0x9a, 0xe7, 0x15, 0x65, 0x20, 0xe0, 0xec, 0xe7, 0xd8,
- 0x9d, 0x80, 0x41, 0xcb, 0xad, 0x89, 0xad, 0xa0, 0xbe, 0x13, 0x90, 0x36, 0x62, 0x0e, 0xd3, 0xfa,
- 0xa2, 0x72, 0x34, 0xfa, 0xe2, 0xbd, 0x50, 0x51, 0xe3, 0xcd, 0x33, 0x09, 0xd4, 0x24, 0xef, 0xca,
- 0x24, 0x50, 0x33, 0xdc, 0xc0, 0xda, 0xeb, 0xea, 0xed, 0xa7, 0x61, 0x44, 0x79, 0xbf, 0xfa, 0xbd,
- 0x99, 0xd1, 0xfe, 0x7f, 0x05, 0x48, 0xdd, 0x9d, 0x84, 0xb6, 0xa1, 0x52, 0x97, 0x97, 0x5f, 0xe7,
- 0x53, 0xfe, 0x57, 0xdd, 0xa5, 0xad, 0x8f, 0x7f, 0x54, 0x13, 0xd6, 0xc4, 0xd0, 0xfb, 0x79, 0xa5,
- 0x5d, 0x41, 0xba, 0x90, 0x47, 0x96, 0x77, 0x55, 0xf5, 0x67, 0x5e, 0xbd, 0x26, 0xdb, 0xb0, 0x41,
- 0x0f, 0xc5, 0x50, 0xd9, 0x90, 0x77, 0x44, 0xe5, 0x23, 0xee, 0xd4, 0x95, 0x53, 0xdc, 0x44, 0x53,
- 0x7f, 0xb1, 0x26, 0x64, 0xff, 0x59, 0x01, 0x4e, 0x26, 0x3f, 0x80, 0x38, 0xae, 0xfb, 0x75, 0x0b,
- 0xee, 0xf7, 0x9c, 0x28, 0xae, 0xb6, 0xd9, 0x46, 0x61, 0xbd, 0xed, 0x2d, 0xa7, 0x8a, 0x32, 0x1f,
- 0xd4, 0xd9, 0xa2, 0x3a, 0x4e, 0xdf, 0x29, 0x36, 0xfb, 0xc0, 0xad, 0x9d, 0xc9, 0xfb, 0x17, 0xb3,
- 0x89, 0xe3, 0x5e, 0x5c, 0xa1, 0xcf, 0x5a, 0x70, 0xac, 0xd6, 0x0e, 0x43, 0xe2, 0xc7, 0x9a, 0x55,
- 0xfe, 0x15, 0xaf, 0xe4, 0x32, 0x90, 0x9a, 0xc1, 0x93, 0x54, 0xa0, 0xce, 0xa5, 0x68, 0xe1, 0x2e,
- 0xea, 0xf6, 0x2f, 0x52, 0xcd, 0xd9, 0xf3, 0x3d, 0x7f, 0xc8, 0x2e, 0x41, 0xfb, 0xde, 0x20, 0x8c,
- 0x26, 0x2a, 0x4f, 0x27, 0x8e, 0xb8, 0xac, 0x3d, 0x8f, 0xb8, 0x58, 0x16, 0x5b, 0xdb, 0x97, 0x17,
- 0x2d, 0x1b, 0x59, 0x6c, 0x6d, 0x9f, 0x60, 0x0e, 0x13, 0x43, 0x8a, 0xdb, 0xbe, 0x88, 0x80, 0x37,
- 0x87, 0x14, 0xb7, 0x7d, 0x2c, 0xa0, 0xe8, 0x43, 0x16, 0x8c, 0xb0, 0xc5, 0x27, 0x0e, 0x08, 0x85,
- 0x42, 0xbb, 0x94, 0xc3, 0x72, 0x97, 0x55, 0xd6, 0x59, 0xc4, 0xa4, 0xd9, 0x82, 0x13, 0x14, 0xd1,
- 0x47, 0x2d, 0xa8, 0xa8, 0x5b, 0x1d, 0xc5, 0xd5, 0xec, 0xd5, 0x7c, 0x0b, 0x7b, 0xa7, 0xa4, 0x9e,
- 0xaa, 0xb0, 0x8c, 0x35, 0x61, 0x14, 0xa9, 0xd3, 0xbb, 0xa1, 0xc3, 0x39, 0xbd, 0x83, 0x8c, 0x93,
- 0xbb, 0x37, 0x43, 0xa5, 0xe9, 0xf8, 0xee, 0x3a, 0x89, 0x62, 0x7e, 0xa0, 0x26, 0xef, 0x1b, 0x90,
- 0x8d, 0x58, 0xc3, 0xa9, 0xb1, 0x1f, 0xb1, 0x17, 0x8b, 0x8d, 0x13, 0x30, 0x66, 0xec, 0x57, 0x75,
- 0x33, 0x36, 0x71, 0xcc, 0xe3, 0x3a, 0xb8, 0xab, 0xc7, 0x75, 0xc3, 0x7b, 0x1c, 0xd7, 0x55, 0xe1,
- 0x94, 0xd3, 0x8e, 0x83, 0x8b, 0xc4, 0xf1, 0x66, 0xe2, 0x98, 0x34, 0x5b, 0x71, 0xc4, 0x8b, 0x95,
- 0x8f, 0x30, 0x17, 0xb0, 0x8a, 0xf1, 0xaa, 0x12, 0x6f, 0xbd, 0x0b, 0x09, 0x67, 0x3f, 0x6b, 0xff,
- 0x73, 0x0b, 0x4e, 0x65, 0x4e, 0x85, 0x7b, 0x37, 0xba, 0xde, 0xfe, 0x7c, 0x09, 0x4e, 0x64, 0xd4,
- 0xa5, 0x47, 0x1d, 0x73, 0x91, 0x58, 0x79, 0x04, 0xaa, 0x25, 0xe3, 0xae, 0xe4, 0xb7, 0xc9, 0x58,
- 0x19, 0xfb, 0x3b, 0x81, 0xd7, 0xa7, 0xe0, 0xc5, 0xa3, 0x3d, 0x05, 0x37, 0xe6, 0xfa, 0xc0, 0x5d,
- 0x9d, 0xeb, 0xa5, 0x3d, 0xe6, 0xfa, 0x57, 0x2d, 0x98, 0x68, 0xf6, 0xb8, 0x0c, 0x49, 0x9c, 0x27,
- 0x5d, 0x3b, 0x9c, 0xab, 0x96, 0x66, 0x1f, 0xbc, 0xb5, 0x33, 0xd9, 0xf3, 0x0e, 0x2a, 0xdc, 0x93,
- 0x2b, 0xfb, 0x3b, 0x45, 0x60, 0xf6, 0x1a, 0xab, 0x3d, 0xdc, 0x41, 0x1f, 0x34, 0xaf, 0xb7, 0xb0,
- 0xf2, 0xba, 0x8a, 0x81, 0x77, 0xae, 0xae, 0xc7, 0xe0, 0x23, 0x98, 0x75, 0x5b, 0x46, 0x5a, 0x12,
- 0x16, 0xfa, 0x90, 0x84, 0x9e, 0xbc, 0x47, 0xa4, 0x98, 0xff, 0x3d, 0x22, 0x95, 0xf4, 0x1d, 0x22,
- 0xbb, 0x7f, 0xe2, 0x81, 0x7b, 0xf2, 0x13, 0xff, 0x9e, 0xc5, 0x05, 0x4f, 0xea, 0x2b, 0x68, 0x73,
- 0xc3, 0xda, 0xc5, 0xdc, 0x78, 0x1c, 0xca, 0x91, 0x90, 0xcc, 0xc2, 0x2c, 0xd1, 0x01, 0x50, 0xa2,
- 0x1d, 0x2b, 0x0c, 0xba, 0xeb, 0x72, 0x3c, 0x2f, 0xb8, 0x79, 0xae, 0xd9, 0x8a, 0x3b, 0xc2, 0x40,
- 0x51, 0xdb, 0x82, 0x19, 0x05, 0xc1, 0x06, 0x16, 0x7a, 0x04, 0x06, 0x79, 0x35, 0x04, 0xe1, 0xdc,
- 0x19, 0xa6, 0xeb, 0x90, 0x97, 0x4a, 0xa8, 0x63, 0x01, 0xb2, 0x37, 0xc0, 0xd8, 0x55, 0xdc, 0xf9,
- 0x05, 0xb3, 0x7d, 0xdc, 0x0c, 0xfe, 0xf7, 0x0b, 0x82, 0x14, 0xdf, 0x25, 0x3c, 0x97, 0xba, 0x89,
- 0xbd, 0xff, 0x78, 0xb8, 0xf7, 0x03, 0xd4, 0x82, 0x66, 0x8b, 0xee, 0x9b, 0x57, 0x83, 0x7c, 0x36,
- 0x5b, 0x73, 0xaa, 0x3f, 0x3d, 0xaa, 0xba, 0x0d, 0x1b, 0xf4, 0x12, 0xa2, 0xbd, 0xb8, 0xa7, 0x68,
- 0x4f, 0x48, 0xb9, 0x81, 0xdd, 0xa5, 0x9c, 0xfd, 0x57, 0x16, 0x24, 0xac, 0x3e, 0xd4, 0x82, 0x12,
- 0x65, 0xb7, 0x23, 0x04, 0xc6, 0x72, 0x7e, 0x26, 0x26, 0x95, 0xd4, 0x62, 0x15, 0xb2, 0x9f, 0x98,
- 0x13, 0x42, 0x9e, 0x88, 0xfd, 0xcb, 0x65, 0xf3, 0x63, 0x12, 0xbc, 0x18, 0x04, 0x9b, 0x3c, 0x7c,
- 0x46, 0xc7, 0x11, 0xda, 0xcf, 0xc1, 0xf1, 0x2e, 0xa6, 0xd8, 0xa5, 0xb4, 0x81, 0xdc, 0xc1, 0x1b,
- 0xab, 0x87, 0xd5, 0x70, 0xc0, 0x1c, 0x66, 0x7f, 0xc5, 0x82, 0x63, 0xe9, 0xee, 0xd1, 0x6b, 0x16,
- 0x1c, 0x8f, 0xd2, 0xfd, 0x1d, 0xd6, 0xd8, 0xa9, 0x18, 0xff, 0x2e, 0x10, 0xee, 0x66, 0xc2, 0xfe,
- 0x4b, 0xa1, 0x0d, 0xae, 0xbb, 0x7e, 0x3d, 0xb8, 0xa9, 0xec, 0x24, 0xab, 0xa7, 0x9d, 0x44, 0xc5,
- 0x43, 0x6d, 0x83, 0xd4, 0xdb, 0x5e, 0x57, 0xf1, 0x85, 0xaa, 0x68, 0xc7, 0x0a, 0x83, 0xe5, 0x9a,
- 0xb7, 0xc5, 0xbe, 0x35, 0x35, 0x29, 0xe7, 0x45, 0x3b, 0x56, 0x18, 0xe8, 0x19, 0x18, 0x31, 0x5e,
- 0x52, 0xce, 0x4b, 0xb6, 0xe9, 0x30, 0x34, 0x78, 0x84, 0x13, 0x58, 0x68, 0x0a, 0x40, 0xd9, 0x5c,
- 0x52, 0x63, 0x33, 0x47, 0xbb, 0x12, 0x8c, 0x11, 0x36, 0x30, 0x58, 0x65, 0x07, 0xaf, 0x1d, 0xb1,
- 0x93, 0xe4, 0x41, 0x5d, 0x8b, 0x7f, 0x4e, 0xb4, 0x61, 0x05, 0xa5, 0xc2, 0xad, 0xe9, 0xf8, 0x6d,
- 0xc7, 0xa3, 0x23, 0x24, 0x5c, 0x67, 0x6a, 0x19, 0x2e, 0x29, 0x08, 0x36, 0xb0, 0xe8, 0x1b, 0xc7,
- 0x6e, 0x93, 0xbc, 0x18, 0xf8, 0x32, 0x36, 0x5b, 0x07, 0x17, 0x88, 0x76, 0xac, 0x30, 0xd0, 0x73,
- 0x30, 0xec, 0xf8, 0x75, 0x6e, 0x20, 0x06, 0xa1, 0x38, 0xa3, 0x54, 0xbb, 0xcf, 0xab, 0x11, 0x99,
- 0xd1, 0x50, 0x6c, 0xa2, 0xa6, 0x2f, 0x22, 0x80, 0xfe, 0x2e, 0x22, 0xb0, 0xff, 0xc2, 0x82, 0x71,
- 0x5d, 0x58, 0x87, 0x79, 0xd8, 0x12, 0xae, 0x45, 0x6b, 0x4f, 0xd7, 0x62, 0xb2, 0x62, 0x47, 0xa1,
- 0xaf, 0x8a, 0x1d, 0x66, 0x31, 0x8d, 0xe2, 0xae, 0xc5, 0x34, 0x7e, 0x14, 0x86, 0x36, 0x49, 0xc7,
- 0xa8, 0xba, 0xc1, 0x94, 0xc3, 0x65, 0xde, 0x84, 0x25, 0x0c, 0xd9, 0x30, 0x58, 0x73, 0x54, 0x55,
- 0xbc, 0x11, 0xbe, 0x21, 0x9b, 0x9b, 0x61, 0x48, 0x02, 0x62, 0x2f, 0x43, 0x45, 0x1d, 0xea, 0x4b,
- 0x4f, 0x9f, 0x95, 0xed, 0xe9, 0xeb, 0x2b, 0xa9, 0x7f, 0x76, 0xed, 0xeb, 0xdf, 0x7d, 0xf8, 0x0d,
- 0x7f, 0xfc, 0xdd, 0x87, 0xdf, 0xf0, 0xa7, 0xdf, 0x7d, 0xf8, 0x0d, 0x1f, 0xba, 0xf5, 0xb0, 0xf5,
- 0xf5, 0x5b, 0x0f, 0x5b, 0x7f, 0x7c, 0xeb, 0x61, 0xeb, 0x4f, 0x6f, 0x3d, 0x6c, 0x7d, 0xe7, 0xd6,
- 0xc3, 0xd6, 0x67, 0xff, 0xcb, 0xc3, 0x6f, 0x78, 0x31, 0x33, 0x1b, 0x80, 0xfe, 0x78, 0xa2, 0x56,
- 0x9f, 0xde, 0x7a, 0x9a, 0x05, 0xa4, 0xd3, 0xf5, 0x3c, 0x6d, 0x4c, 0xe2, 0x69, 0xb9, 0x9e, 0xff,
- 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x59, 0x4d, 0xa5, 0x1a, 0x86, 0xfa, 0x00, 0x00,
+ // 12150 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6b, 0x70, 0x24, 0xc9,
+ 0x71, 0x18, 0xcc, 0x9e, 0xc1, 0x00, 0x33, 0x89, 0xd7, 0x6e, 0xed, 0xee, 0x1d, 0x76, 0xef, 0x81,
+ 0x55, 0x1f, 0x75, 0x3c, 0x7d, 0xbc, 0x03, 0x74, 0x2f, 0xea, 0x3e, 0x1d, 0x1f, 0xc2, 0x63, 0x1f,
+ 0xd8, 0x05, 0x16, 0xb8, 0x1a, 0xec, 0x2e, 0x79, 0xe4, 0xf1, 0xd8, 0x98, 0x29, 0x0c, 0x7a, 0xd1,
+ 0xd3, 0x3d, 0xd7, 0xdd, 0x83, 0xc5, 0x9c, 0x48, 0x8a, 0x14, 0x49, 0x89, 0x12, 0x9f, 0x26, 0x15,
+ 0xe6, 0xd1, 0x36, 0x69, 0xca, 0x92, 0x5f, 0xe1, 0x60, 0x88, 0xb6, 0x7e, 0x58, 0x11, 0x92, 0x82,
+ 0x21, 0xc9, 0xc1, 0xa0, 0x2d, 0x3b, 0x24, 0x33, 0x68, 0x51, 0xb6, 0x44, 0x98, 0x5c, 0xdb, 0x41,
+ 0x85, 0x23, 0xac, 0x08, 0xcb, 0xfe, 0xe1, 0x58, 0x3b, 0x1c, 0x8e, 0x7a, 0x57, 0xf7, 0xf4, 0x00,
+ 0x83, 0x45, 0x03, 0xbb, 0xa4, 0xee, 0xdf, 0x4c, 0x65, 0x76, 0x65, 0x76, 0x75, 0x55, 0x66, 0x56,
+ 0x56, 0x66, 0x16, 0x2c, 0x36, 0xdc, 0x78, 0xa3, 0xbd, 0x36, 0x55, 0x0b, 0x9a, 0xd3, 0x4e, 0xd8,
+ 0x08, 0x5a, 0x61, 0x70, 0x83, 0xfd, 0x78, 0xa2, 0x56, 0x9f, 0xde, 0x7a, 0x7a, 0xba, 0xb5, 0xd9,
+ 0x98, 0x76, 0x5a, 0x6e, 0x34, 0xed, 0xb4, 0x5a, 0x9e, 0x5b, 0x73, 0x62, 0x37, 0xf0, 0xa7, 0xb7,
+ 0x9e, 0x74, 0xbc, 0xd6, 0x86, 0xf3, 0xe4, 0x74, 0x83, 0xf8, 0x24, 0x74, 0x62, 0x52, 0x9f, 0x6a,
+ 0x85, 0x41, 0x1c, 0xa0, 0xb7, 0xea, 0xde, 0xa6, 0x64, 0x6f, 0xec, 0xc7, 0xcb, 0xb5, 0xfa, 0xd4,
+ 0xd6, 0xd3, 0x53, 0xad, 0xcd, 0xc6, 0x14, 0xed, 0x6d, 0xca, 0xe8, 0x6d, 0x4a, 0xf6, 0x76, 0xe6,
+ 0x09, 0x83, 0x97, 0x46, 0xd0, 0x08, 0xa6, 0x59, 0xa7, 0x6b, 0xed, 0x75, 0xf6, 0x8f, 0xfd, 0x61,
+ 0xbf, 0x38, 0xb1, 0x33, 0xf6, 0xe6, 0x73, 0xd1, 0x94, 0x1b, 0x50, 0xf6, 0xa6, 0x6b, 0x41, 0x48,
+ 0xa6, 0xb7, 0xba, 0x18, 0x3a, 0x73, 0x51, 0xe3, 0x90, 0xed, 0x98, 0xf8, 0x91, 0x1b, 0xf8, 0xd1,
+ 0x13, 0x94, 0x05, 0x12, 0x6e, 0x91, 0xd0, 0x7c, 0x3d, 0x03, 0x21, 0xab, 0xa7, 0x67, 0x74, 0x4f,
+ 0x4d, 0xa7, 0xb6, 0xe1, 0xfa, 0x24, 0xec, 0xe8, 0xc7, 0x9b, 0x24, 0x76, 0xb2, 0x9e, 0x9a, 0xee,
+ 0xf5, 0x54, 0xd8, 0xf6, 0x63, 0xb7, 0x49, 0xba, 0x1e, 0x78, 0xcb, 0x5e, 0x0f, 0x44, 0xb5, 0x0d,
+ 0xd2, 0x74, 0xba, 0x9e, 0x7b, 0xba, 0xd7, 0x73, 0xed, 0xd8, 0xf5, 0xa6, 0x5d, 0x3f, 0x8e, 0xe2,
+ 0x30, 0xfd, 0x90, 0xfd, 0x77, 0x2c, 0x18, 0x9d, 0xb9, 0x5e, 0x9d, 0x69, 0xc7, 0x1b, 0x73, 0x81,
+ 0xbf, 0xee, 0x36, 0xd0, 0xb3, 0x30, 0x5c, 0xf3, 0xda, 0x51, 0x4c, 0xc2, 0x2b, 0x4e, 0x93, 0x4c,
+ 0x58, 0x67, 0xad, 0xc7, 0x2a, 0xb3, 0x27, 0xbe, 0xb9, 0x33, 0xf9, 0x86, 0x5b, 0x3b, 0x93, 0xc3,
+ 0x73, 0x1a, 0x84, 0x4d, 0x3c, 0xf4, 0x13, 0x30, 0x14, 0x06, 0x1e, 0x99, 0xc1, 0x57, 0x26, 0x0a,
+ 0xec, 0x91, 0x71, 0xf1, 0xc8, 0x10, 0xe6, 0xcd, 0x58, 0xc2, 0x29, 0x6a, 0x2b, 0x0c, 0xd6, 0x5d,
+ 0x8f, 0x4c, 0x14, 0x93, 0xa8, 0x2b, 0xbc, 0x19, 0x4b, 0xb8, 0xfd, 0xc5, 0x02, 0x8c, 0xcf, 0xb4,
+ 0x5a, 0x17, 0x89, 0xe3, 0xc5, 0x1b, 0xd5, 0xd8, 0x89, 0xdb, 0x11, 0x6a, 0xc0, 0x60, 0xc4, 0x7e,
+ 0x09, 0xde, 0x96, 0xc5, 0xd3, 0x83, 0x1c, 0x7e, 0x7b, 0x67, 0xf2, 0x6d, 0x59, 0x33, 0xba, 0xe1,
+ 0xc6, 0x41, 0x2b, 0x7a, 0x82, 0xf8, 0x0d, 0xd7, 0x27, 0x6c, 0x5c, 0x36, 0x58, 0xaf, 0x53, 0x66,
+ 0xe7, 0x73, 0x41, 0x9d, 0x60, 0xd1, 0x3d, 0xe5, 0xb3, 0x49, 0xa2, 0xc8, 0x69, 0x90, 0xf4, 0x2b,
+ 0x2d, 0xf1, 0x66, 0x2c, 0xe1, 0x28, 0x04, 0xe4, 0x39, 0x51, 0xbc, 0x1a, 0x3a, 0x7e, 0xe4, 0xd2,
+ 0x29, 0xbd, 0xea, 0x36, 0xf9, 0xdb, 0x0d, 0x3f, 0xf5, 0xff, 0x4d, 0xf1, 0x0f, 0x33, 0x65, 0x7e,
+ 0x18, 0xbd, 0x0e, 0xe8, 0xbc, 0x99, 0xda, 0x7a, 0x72, 0x8a, 0x3e, 0x31, 0x7b, 0xdf, 0xad, 0x9d,
+ 0x49, 0xb4, 0xd8, 0xd5, 0x13, 0xce, 0xe8, 0xdd, 0xfe, 0x93, 0x02, 0xc0, 0x4c, 0xab, 0xb5, 0x12,
+ 0x06, 0x37, 0x48, 0x2d, 0x46, 0xef, 0x83, 0x32, 0xed, 0xaa, 0xee, 0xc4, 0x0e, 0x1b, 0x98, 0xe1,
+ 0xa7, 0x7e, 0xb2, 0x3f, 0xc2, 0xcb, 0x6b, 0xf4, 0xf9, 0x25, 0x12, 0x3b, 0xb3, 0x48, 0xbc, 0x20,
+ 0xe8, 0x36, 0xac, 0x7a, 0x45, 0x3e, 0x0c, 0x44, 0x2d, 0x52, 0x63, 0x83, 0x31, 0xfc, 0xd4, 0xe2,
+ 0xd4, 0x41, 0x56, 0xfa, 0x94, 0xe6, 0xbc, 0xda, 0x22, 0xb5, 0xd9, 0x11, 0x41, 0x79, 0x80, 0xfe,
+ 0xc3, 0x8c, 0x0e, 0xda, 0x52, 0x1f, 0x9a, 0x0f, 0xe4, 0x95, 0xdc, 0x28, 0xb2, 0x5e, 0x67, 0xc7,
+ 0x92, 0x13, 0x47, 0x7e, 0x77, 0xfb, 0xbb, 0x16, 0x8c, 0x69, 0xe4, 0x45, 0x37, 0x8a, 0xd1, 0x7b,
+ 0xba, 0x06, 0x77, 0xaa, 0xbf, 0xc1, 0xa5, 0x4f, 0xb3, 0xa1, 0x3d, 0x26, 0x88, 0x95, 0x65, 0x8b,
+ 0x31, 0xb0, 0x4d, 0x28, 0xb9, 0x31, 0x69, 0x46, 0x13, 0x85, 0xb3, 0xc5, 0xc7, 0x86, 0x9f, 0xba,
+ 0x98, 0xd7, 0x7b, 0xce, 0x8e, 0x0a, 0xa2, 0xa5, 0x05, 0xda, 0x3d, 0xe6, 0x54, 0xec, 0xbf, 0x1a,
+ 0x35, 0xdf, 0x8f, 0x0e, 0x38, 0x7a, 0x12, 0x86, 0xa3, 0xa0, 0x1d, 0xd6, 0x08, 0x26, 0xad, 0x80,
+ 0x2e, 0xac, 0x22, 0x9d, 0xee, 0x74, 0xc1, 0x57, 0x75, 0x33, 0x36, 0x71, 0xd0, 0xa7, 0x2d, 0x18,
+ 0xa9, 0x93, 0x28, 0x76, 0x7d, 0x46, 0x5f, 0x32, 0xbf, 0x7a, 0x60, 0xe6, 0x65, 0xe3, 0xbc, 0xee,
+ 0x7c, 0xf6, 0xa4, 0x78, 0x91, 0x11, 0xa3, 0x31, 0xc2, 0x09, 0xfa, 0x54, 0x70, 0xd5, 0x49, 0x54,
+ 0x0b, 0xdd, 0x16, 0xfd, 0x2f, 0x44, 0x8b, 0x12, 0x5c, 0xf3, 0x1a, 0x84, 0x4d, 0x3c, 0xe4, 0x43,
+ 0x89, 0x0a, 0xa6, 0x68, 0x62, 0x80, 0xf1, 0xbf, 0x70, 0x30, 0xfe, 0xc5, 0xa0, 0x52, 0x99, 0xa7,
+ 0x47, 0x9f, 0xfe, 0x8b, 0x30, 0x27, 0x83, 0x3e, 0x65, 0xc1, 0x84, 0x10, 0x9c, 0x98, 0xf0, 0x01,
+ 0xbd, 0xbe, 0xe1, 0xc6, 0xc4, 0x73, 0xa3, 0x78, 0xa2, 0xc4, 0x78, 0x98, 0xee, 0x6f, 0x6e, 0x5d,
+ 0x08, 0x83, 0x76, 0xeb, 0xb2, 0xeb, 0xd7, 0x67, 0xcf, 0x0a, 0x4a, 0x13, 0x73, 0x3d, 0x3a, 0xc6,
+ 0x3d, 0x49, 0xa2, 0xcf, 0x5b, 0x70, 0xc6, 0x77, 0x9a, 0x24, 0x6a, 0x39, 0xf4, 0xd3, 0x72, 0xf0,
+ 0xac, 0xe7, 0xd4, 0x36, 0x19, 0x47, 0x83, 0x77, 0xc6, 0x91, 0x2d, 0x38, 0x3a, 0x73, 0xa5, 0x67,
+ 0xd7, 0x78, 0x17, 0xb2, 0xe8, 0xd7, 0x2c, 0x38, 0x1e, 0x84, 0xad, 0x0d, 0xc7, 0x27, 0x75, 0x09,
+ 0x8d, 0x26, 0x86, 0xd8, 0xd2, 0x7b, 0xef, 0xc1, 0x3e, 0xd1, 0x72, 0xba, 0xdb, 0xa5, 0xc0, 0x77,
+ 0xe3, 0x20, 0xac, 0x92, 0x38, 0x76, 0xfd, 0x46, 0x34, 0x7b, 0xea, 0xd6, 0xce, 0xe4, 0xf1, 0x2e,
+ 0x2c, 0xdc, 0xcd, 0x0f, 0xfa, 0x59, 0x18, 0x8e, 0x3a, 0x7e, 0xed, 0xba, 0xeb, 0xd7, 0x83, 0x9b,
+ 0xd1, 0x44, 0x39, 0x8f, 0xe5, 0x5b, 0x55, 0x1d, 0x8a, 0x05, 0xa8, 0x09, 0x60, 0x93, 0x5a, 0xf6,
+ 0x87, 0xd3, 0x53, 0xa9, 0x92, 0xf7, 0x87, 0xd3, 0x93, 0x69, 0x17, 0xb2, 0xe8, 0x17, 0x2d, 0x18,
+ 0x8d, 0xdc, 0x86, 0xef, 0xc4, 0xed, 0x90, 0x5c, 0x26, 0x9d, 0x68, 0x02, 0x18, 0x23, 0x97, 0x0e,
+ 0x38, 0x2a, 0x46, 0x97, 0xb3, 0xa7, 0x04, 0x8f, 0xa3, 0x66, 0x6b, 0x84, 0x93, 0x74, 0xb3, 0x16,
+ 0x9a, 0x9e, 0xd6, 0xc3, 0xf9, 0x2e, 0x34, 0x3d, 0xa9, 0x7b, 0x92, 0x44, 0x3f, 0x03, 0xc7, 0x78,
+ 0x93, 0x1a, 0xd9, 0x68, 0x62, 0x84, 0x09, 0xda, 0x93, 0xb7, 0x76, 0x26, 0x8f, 0x55, 0x53, 0x30,
+ 0xdc, 0x85, 0x8d, 0x5e, 0x81, 0xc9, 0x16, 0x09, 0x9b, 0x6e, 0xbc, 0xec, 0x7b, 0x1d, 0x29, 0xbe,
+ 0x6b, 0x41, 0x8b, 0xd4, 0x05, 0x3b, 0xd1, 0xc4, 0xe8, 0x59, 0xeb, 0xb1, 0xf2, 0xec, 0x9b, 0x04,
+ 0x9b, 0x93, 0x2b, 0xbb, 0xa3, 0xe3, 0xbd, 0xfa, 0x43, 0xdf, 0xb0, 0xe0, 0x8c, 0x21, 0x65, 0xab,
+ 0x24, 0xdc, 0x72, 0x6b, 0x64, 0xa6, 0x56, 0x0b, 0xda, 0x7e, 0x1c, 0x4d, 0x8c, 0xb1, 0x61, 0x5c,
+ 0x3b, 0x0c, 0x99, 0x9f, 0x24, 0xa5, 0xe7, 0x65, 0x4f, 0x94, 0x08, 0xef, 0xc2, 0xa9, 0xfd, 0x2f,
+ 0x0b, 0x70, 0x2c, 0x6d, 0x01, 0xa0, 0x7f, 0x60, 0xc1, 0xf8, 0x8d, 0x9b, 0xf1, 0x6a, 0xb0, 0x49,
+ 0xfc, 0x68, 0xb6, 0x43, 0xe5, 0x34, 0xd3, 0x7d, 0xc3, 0x4f, 0xd5, 0xf2, 0xb5, 0x35, 0xa6, 0x2e,
+ 0x25, 0xa9, 0x9c, 0xf3, 0xe3, 0xb0, 0x33, 0x7b, 0xbf, 0x78, 0xa7, 0xf1, 0x4b, 0xd7, 0x57, 0x4d,
+ 0x28, 0x4e, 0x33, 0x75, 0xe6, 0x13, 0x16, 0x9c, 0xcc, 0xea, 0x02, 0x1d, 0x83, 0xe2, 0x26, 0xe9,
+ 0x70, 0x4b, 0x18, 0xd3, 0x9f, 0xe8, 0x25, 0x28, 0x6d, 0x39, 0x5e, 0x9b, 0x08, 0x33, 0xed, 0xc2,
+ 0xc1, 0x5e, 0x44, 0x71, 0x86, 0x79, 0xaf, 0x3f, 0x5d, 0x78, 0xce, 0xb2, 0xff, 0xa8, 0x08, 0xc3,
+ 0xc6, 0x47, 0x3b, 0x02, 0xd3, 0x33, 0x48, 0x98, 0x9e, 0x4b, 0xb9, 0xcd, 0xb7, 0x9e, 0xb6, 0xe7,
+ 0xcd, 0x94, 0xed, 0xb9, 0x9c, 0x1f, 0xc9, 0x5d, 0x8d, 0x4f, 0x14, 0x43, 0x25, 0x68, 0xd1, 0x2d,
+ 0x1a, 0xb5, 0x61, 0x06, 0xf2, 0xf8, 0x84, 0xcb, 0xb2, 0xbb, 0xd9, 0xd1, 0x5b, 0x3b, 0x93, 0x15,
+ 0xf5, 0x17, 0x6b, 0x42, 0xf6, 0x77, 0x2c, 0x38, 0x69, 0xf0, 0x38, 0x17, 0xf8, 0x75, 0xb6, 0xd1,
+ 0x40, 0x67, 0x61, 0x20, 0xee, 0xb4, 0xe4, 0x36, 0x50, 0x8d, 0xd4, 0x6a, 0xa7, 0x45, 0x30, 0x83,
+ 0xdc, 0xeb, 0xbb, 0xa4, 0xcf, 0x5b, 0x70, 0x5f, 0xb6, 0x80, 0x41, 0x8f, 0xc2, 0x20, 0xf7, 0x01,
+ 0x88, 0xb7, 0xd3, 0x9f, 0x84, 0xb5, 0x62, 0x01, 0x45, 0xd3, 0x50, 0x51, 0x0a, 0x4f, 0xbc, 0xe3,
+ 0x71, 0x81, 0x5a, 0xd1, 0x5a, 0x52, 0xe3, 0xd0, 0x41, 0xa3, 0x7f, 0x84, 0x09, 0xaa, 0x06, 0x8d,
+ 0x6d, 0x9a, 0x19, 0xc4, 0xfe, 0xb6, 0x05, 0x6f, 0xec, 0x47, 0xec, 0x1d, 0x1e, 0x8f, 0x55, 0x38,
+ 0x55, 0x27, 0xeb, 0x4e, 0xdb, 0x8b, 0x93, 0x14, 0x05, 0xd3, 0x0f, 0x89, 0x87, 0x4f, 0xcd, 0x67,
+ 0x21, 0xe1, 0xec, 0x67, 0xed, 0xff, 0x68, 0xb1, 0xed, 0xba, 0x7c, 0xad, 0x23, 0xd8, 0x3a, 0xf9,
+ 0xc9, 0xad, 0xd3, 0x42, 0x6e, 0xcb, 0xb4, 0xc7, 0xde, 0xe9, 0x53, 0x16, 0x9c, 0x31, 0xb0, 0x96,
+ 0x9c, 0xb8, 0xb6, 0x71, 0x6e, 0xbb, 0x15, 0x92, 0x28, 0xa2, 0x53, 0xea, 0x21, 0x43, 0x1c, 0xcf,
+ 0x0e, 0x8b, 0x1e, 0x8a, 0x97, 0x49, 0x87, 0xcb, 0xe6, 0xc7, 0xa1, 0xcc, 0xd7, 0x5c, 0x10, 0x8a,
+ 0x8f, 0xa4, 0xde, 0x6d, 0x59, 0xb4, 0x63, 0x85, 0x81, 0x6c, 0x18, 0x64, 0x32, 0x97, 0xca, 0x20,
+ 0x6a, 0x26, 0x00, 0xfd, 0xee, 0xd7, 0x58, 0x0b, 0x16, 0x10, 0x3b, 0x4a, 0xb0, 0xb3, 0x12, 0x12,
+ 0x36, 0x1f, 0xea, 0xe7, 0x5d, 0xe2, 0xd5, 0x23, 0xba, 0xad, 0x73, 0x7c, 0x3f, 0x88, 0xc5, 0x0e,
+ 0xcd, 0xd8, 0xd6, 0xcd, 0xe8, 0x66, 0x6c, 0xe2, 0x50, 0xa2, 0x9e, 0xb3, 0x46, 0x3c, 0x3e, 0xa2,
+ 0x82, 0xe8, 0x22, 0x6b, 0xc1, 0x02, 0x62, 0xdf, 0x2a, 0xb0, 0x0d, 0xa4, 0x92, 0x68, 0xe4, 0x28,
+ 0xbc, 0x0f, 0x61, 0x42, 0x05, 0xac, 0xe4, 0x27, 0x8f, 0x49, 0x6f, 0x0f, 0xc4, 0xab, 0x29, 0x2d,
+ 0x80, 0x73, 0xa5, 0xba, 0xbb, 0x17, 0xe2, 0x43, 0x45, 0x98, 0x4c, 0x3e, 0xd0, 0xa5, 0x44, 0xe8,
+ 0x96, 0xd7, 0x20, 0x94, 0xf6, 0xd5, 0x19, 0xf8, 0xd8, 0xc4, 0xeb, 0x21, 0x87, 0x0b, 0x87, 0x29,
+ 0x87, 0x4d, 0x35, 0x51, 0xdc, 0x43, 0x4d, 0x3c, 0xaa, 0x46, 0x7d, 0x20, 0x25, 0xf3, 0x92, 0xaa,
+ 0xf2, 0x2c, 0x0c, 0x44, 0x31, 0x69, 0x4d, 0x94, 0x92, 0x62, 0xb6, 0x1a, 0x93, 0x16, 0x66, 0x10,
+ 0xf4, 0x36, 0x18, 0x8f, 0x9d, 0xb0, 0x41, 0xe2, 0x90, 0x6c, 0xb9, 0xcc, 0xaf, 0xcb, 0xf6, 0xb3,
+ 0x95, 0xd9, 0x13, 0xd4, 0xea, 0x5a, 0x65, 0x20, 0x2c, 0x41, 0x38, 0x8d, 0x6b, 0xff, 0xd7, 0x02,
+ 0xdc, 0x9f, 0xfc, 0x04, 0x5a, 0x31, 0xbe, 0x23, 0xa1, 0x18, 0xdf, 0x6c, 0x2a, 0xc6, 0xdb, 0x3b,
+ 0x93, 0x0f, 0xf4, 0x78, 0xec, 0x87, 0x46, 0x6f, 0xa2, 0x0b, 0xa9, 0x8f, 0x30, 0xdd, 0xe5, 0x65,
+ 0x7d, 0xa8, 0xc7, 0x3b, 0xa6, 0xbe, 0xd2, 0xa3, 0x30, 0x18, 0x12, 0x27, 0x0a, 0x7c, 0xf1, 0x9d,
+ 0xd4, 0xd7, 0xc4, 0xac, 0x15, 0x0b, 0xa8, 0xfd, 0xad, 0x4a, 0x7a, 0xb0, 0x2f, 0x70, 0x5f, 0x75,
+ 0x10, 0x22, 0x17, 0x06, 0xd8, 0xae, 0x8d, 0x4b, 0x96, 0xcb, 0x07, 0x5b, 0x85, 0x54, 0x8b, 0xa8,
+ 0xae, 0x67, 0xcb, 0xf4, 0xab, 0xd1, 0x26, 0xcc, 0x48, 0xa0, 0x6d, 0x28, 0xd7, 0xe4, 0x66, 0xaa,
+ 0x90, 0x87, 0xdb, 0x51, 0x6c, 0xa5, 0x34, 0xc5, 0x11, 0x2a, 0xee, 0xd5, 0x0e, 0x4c, 0x51, 0x43,
+ 0x04, 0x8a, 0x0d, 0x37, 0x16, 0x9f, 0xf5, 0x80, 0xdb, 0xe5, 0x0b, 0xae, 0xf1, 0x8a, 0x43, 0x54,
+ 0x07, 0x5d, 0x70, 0x63, 0x4c, 0xfb, 0x47, 0x1f, 0xb3, 0x60, 0x38, 0xaa, 0x35, 0x57, 0xc2, 0x60,
+ 0xcb, 0xad, 0x93, 0x50, 0xd8, 0x98, 0x07, 0x94, 0x6c, 0xd5, 0xb9, 0x25, 0xd9, 0xa1, 0xa6, 0xcb,
+ 0xdd, 0x17, 0x1a, 0x82, 0x4d, 0xba, 0x74, 0xef, 0x75, 0xbf, 0x78, 0xf7, 0x79, 0x52, 0x63, 0x2b,
+ 0x4e, 0xee, 0x99, 0xd9, 0x4c, 0x39, 0xb0, 0xcd, 0x3d, 0xdf, 0xae, 0x6d, 0xd2, 0xf5, 0xa6, 0x19,
+ 0x7a, 0xe0, 0xd6, 0xce, 0xe4, 0xfd, 0x73, 0xd9, 0x34, 0x71, 0x2f, 0x66, 0xd8, 0x80, 0xb5, 0xda,
+ 0x9e, 0x87, 0xc9, 0x2b, 0x6d, 0xc2, 0x3c, 0x62, 0x39, 0x0c, 0xd8, 0x8a, 0xee, 0x30, 0x35, 0x60,
+ 0x06, 0x04, 0x9b, 0x74, 0xd1, 0x2b, 0x30, 0xd8, 0x74, 0xe2, 0xd0, 0xdd, 0x16, 0x6e, 0xb0, 0x03,
+ 0xee, 0x82, 0x96, 0x58, 0x5f, 0x9a, 0x38, 0x53, 0xf4, 0xbc, 0x11, 0x0b, 0x42, 0xa8, 0x09, 0xa5,
+ 0x26, 0x09, 0x1b, 0x64, 0xa2, 0x9c, 0x87, 0xcb, 0x7f, 0x89, 0x76, 0xa5, 0x09, 0x56, 0xa8, 0x71,
+ 0xc5, 0xda, 0x30, 0xa7, 0x82, 0x5e, 0x82, 0x72, 0x44, 0x3c, 0x52, 0xa3, 0xe6, 0x51, 0x85, 0x51,
+ 0x7c, 0xba, 0x4f, 0x53, 0x91, 0xda, 0x25, 0x55, 0xf1, 0x28, 0x5f, 0x60, 0xf2, 0x1f, 0x56, 0x5d,
+ 0xd2, 0x01, 0x6c, 0x79, 0xed, 0x86, 0xeb, 0x4f, 0x40, 0x1e, 0x03, 0xb8, 0xc2, 0xfa, 0x4a, 0x0d,
+ 0x20, 0x6f, 0xc4, 0x82, 0x90, 0xfd, 0x5f, 0x2c, 0x40, 0x49, 0xa1, 0x76, 0x04, 0x36, 0xf1, 0x2b,
+ 0x49, 0x9b, 0x78, 0x31, 0x4f, 0xa3, 0xa5, 0x87, 0x59, 0xfc, 0xdb, 0x15, 0x48, 0xa9, 0x83, 0x2b,
+ 0x24, 0x8a, 0x49, 0xfd, 0x75, 0x11, 0xfe, 0xba, 0x08, 0x7f, 0x5d, 0x84, 0x2b, 0x11, 0xbe, 0x96,
+ 0x12, 0xe1, 0x6f, 0x37, 0x56, 0xbd, 0x8e, 0x3d, 0x78, 0x59, 0x05, 0x27, 0x98, 0x1c, 0x18, 0x08,
+ 0x54, 0x12, 0x5c, 0xaa, 0x2e, 0x5f, 0xc9, 0x94, 0xd9, 0x2f, 0x27, 0x65, 0xf6, 0x41, 0x49, 0xfc,
+ 0x75, 0x90, 0xd2, 0xdf, 0xb0, 0xe0, 0x4d, 0x49, 0xe9, 0x25, 0x67, 0xce, 0x42, 0xc3, 0x0f, 0x42,
+ 0x32, 0xef, 0xae, 0xaf, 0x93, 0x90, 0xf8, 0x35, 0x12, 0x29, 0xdf, 0x8e, 0xd5, 0xcb, 0xb7, 0x83,
+ 0x9e, 0x81, 0x91, 0x1b, 0x51, 0xe0, 0xaf, 0x04, 0xae, 0x2f, 0x44, 0x10, 0xdd, 0x71, 0x1c, 0xbb,
+ 0xb5, 0x33, 0x39, 0x42, 0x47, 0x54, 0xb6, 0xe3, 0x04, 0x16, 0x9a, 0x83, 0xe3, 0x37, 0x5e, 0x59,
+ 0x71, 0x62, 0xc3, 0x9b, 0x20, 0xf7, 0xfd, 0xec, 0x3c, 0xea, 0xd2, 0x0b, 0x29, 0x20, 0xee, 0xc6,
+ 0xb7, 0xff, 0x76, 0x01, 0x4e, 0xa7, 0x5e, 0x24, 0xf0, 0xbc, 0xa0, 0x1d, 0xd3, 0x3d, 0x11, 0xfa,
+ 0xb2, 0x05, 0xc7, 0x9a, 0x49, 0x87, 0x45, 0x24, 0xdc, 0xdd, 0xef, 0xcc, 0x4d, 0x47, 0xa4, 0x3c,
+ 0x22, 0xb3, 0x13, 0x62, 0x84, 0x8e, 0xa5, 0x00, 0x11, 0xee, 0xe2, 0x05, 0xbd, 0x04, 0x95, 0xa6,
+ 0xb3, 0x7d, 0xb5, 0x55, 0x77, 0x62, 0xb9, 0x1d, 0xed, 0xed, 0x45, 0x68, 0xc7, 0xae, 0x37, 0xc5,
+ 0xa3, 0x5a, 0xa6, 0x16, 0xfc, 0x78, 0x39, 0xac, 0xc6, 0xa1, 0xeb, 0x37, 0xb8, 0x93, 0x73, 0x49,
+ 0x76, 0x83, 0x75, 0x8f, 0xf6, 0x97, 0xac, 0xb4, 0x92, 0x52, 0xa3, 0x13, 0x3a, 0x31, 0x69, 0x74,
+ 0xd0, 0xfb, 0xa1, 0x44, 0xf7, 0x8d, 0x72, 0x54, 0xae, 0xe7, 0xa9, 0x39, 0x8d, 0x2f, 0xa1, 0x95,
+ 0x28, 0xfd, 0x17, 0x61, 0x4e, 0xd4, 0xfe, 0x72, 0x25, 0x6d, 0x2c, 0xb0, 0xb3, 0xf9, 0xa7, 0x00,
+ 0x1a, 0xc1, 0x2a, 0x69, 0xb6, 0x3c, 0x3a, 0x2c, 0x16, 0x3b, 0xe0, 0x51, 0xae, 0x92, 0x0b, 0x0a,
+ 0x82, 0x0d, 0x2c, 0xf4, 0x4b, 0x16, 0x40, 0x43, 0xce, 0x79, 0x69, 0x08, 0x5c, 0xcd, 0xf3, 0x75,
+ 0xf4, 0x8a, 0xd2, 0xbc, 0x28, 0x82, 0xd8, 0x20, 0x8e, 0x7e, 0xde, 0x82, 0x72, 0x2c, 0xd9, 0xe7,
+ 0xaa, 0x71, 0x35, 0x4f, 0x4e, 0xe4, 0x4b, 0x6b, 0x9b, 0x48, 0x0d, 0x89, 0xa2, 0x8b, 0x7e, 0xc1,
+ 0x02, 0x88, 0x3a, 0x7e, 0x6d, 0x25, 0xf0, 0xdc, 0x5a, 0x47, 0x68, 0xcc, 0x6b, 0xb9, 0xba, 0x73,
+ 0x54, 0xef, 0xb3, 0x63, 0x74, 0x34, 0xf4, 0x7f, 0x6c, 0x50, 0x46, 0x1f, 0x84, 0x72, 0x24, 0xa6,
+ 0x9b, 0xd0, 0x91, 0xab, 0xf9, 0x3a, 0x95, 0x78, 0xdf, 0x42, 0xbc, 0x8a, 0x7f, 0x58, 0xd1, 0x44,
+ 0x5f, 0xb0, 0x60, 0xbc, 0x95, 0x74, 0x13, 0x0a, 0x75, 0x98, 0x9f, 0x0c, 0x48, 0xb9, 0x21, 0xb9,
+ 0xb7, 0x25, 0xd5, 0x88, 0xd3, 0x5c, 0x50, 0x09, 0xa8, 0x67, 0xf0, 0x72, 0x8b, 0xbb, 0x2c, 0x87,
+ 0xb4, 0x04, 0xbc, 0x90, 0x06, 0xe2, 0x6e, 0x7c, 0xb4, 0x02, 0x27, 0x29, 0x77, 0x1d, 0x6e, 0x7e,
+ 0x4a, 0xf5, 0x12, 0x31, 0x65, 0x58, 0x9e, 0x7d, 0x50, 0xcc, 0x10, 0x76, 0xd6, 0x91, 0xc6, 0xc1,
+ 0x99, 0x4f, 0xa2, 0x3f, 0xb2, 0xe0, 0x41, 0x97, 0xa9, 0x01, 0xd3, 0x61, 0xaf, 0x35, 0x82, 0x38,
+ 0x68, 0x27, 0xb9, 0xca, 0x8a, 0x5e, 0xea, 0x67, 0xf6, 0x8d, 0xe2, 0x0d, 0x1e, 0x5c, 0xd8, 0x85,
+ 0x25, 0xbc, 0x2b, 0xc3, 0xe8, 0xa7, 0x60, 0x54, 0xae, 0x8b, 0x15, 0x2a, 0x82, 0x99, 0xa2, 0xad,
+ 0xcc, 0x1e, 0xbf, 0xb5, 0x33, 0x39, 0xba, 0x6a, 0x02, 0x70, 0x12, 0xcf, 0xfe, 0x57, 0xc5, 0xc4,
+ 0x29, 0x91, 0xf2, 0x61, 0x32, 0x71, 0x53, 0x93, 0xfe, 0x1f, 0x29, 0x3d, 0x73, 0x15, 0x37, 0xca,
+ 0xbb, 0xa4, 0xc5, 0x8d, 0x6a, 0x8a, 0xb0, 0x41, 0x9c, 0x1a, 0xa5, 0xc7, 0x9d, 0xb4, 0xa7, 0x54,
+ 0x48, 0xc0, 0x97, 0xf2, 0x64, 0xa9, 0xfb, 0x4c, 0xef, 0xb4, 0x60, 0xed, 0x78, 0x17, 0x08, 0x77,
+ 0xb3, 0x84, 0x3e, 0x00, 0x95, 0x50, 0x45, 0xb6, 0x14, 0xf3, 0xd8, 0xaa, 0xc9, 0x69, 0x23, 0xd8,
+ 0x51, 0x07, 0x40, 0x3a, 0x86, 0x45, 0x53, 0xb4, 0xff, 0x30, 0x79, 0x30, 0x66, 0xc8, 0x8e, 0x3e,
+ 0x0e, 0xfd, 0x3e, 0x6d, 0xc1, 0x70, 0x18, 0x78, 0x9e, 0xeb, 0x37, 0xa8, 0x9c, 0x13, 0xca, 0xfa,
+ 0xdd, 0x87, 0xa2, 0x2f, 0x85, 0x40, 0x63, 0x96, 0x35, 0xd6, 0x34, 0xb1, 0xc9, 0x80, 0xfd, 0x5d,
+ 0x0b, 0x26, 0x7a, 0xc9, 0x63, 0x44, 0xe0, 0x01, 0x29, 0x6c, 0xd4, 0x50, 0x2c, 0xfb, 0xf3, 0xc4,
+ 0x23, 0xca, 0x6d, 0x5e, 0x9e, 0x7d, 0x44, 0xbc, 0xe6, 0x03, 0x2b, 0xbd, 0x51, 0xf1, 0x6e, 0xfd,
+ 0xa0, 0x17, 0xe1, 0x98, 0xf1, 0x5e, 0x91, 0x1a, 0x98, 0xca, 0xec, 0x14, 0x35, 0x80, 0x66, 0x52,
+ 0xb0, 0xdb, 0x3b, 0x93, 0xf7, 0xa5, 0xdb, 0x84, 0xc2, 0xe8, 0xea, 0xc7, 0xfe, 0xf5, 0x42, 0xfa,
+ 0x6b, 0x29, 0x5d, 0xff, 0x9a, 0xd5, 0xe5, 0x4d, 0x78, 0xe7, 0x61, 0xe8, 0x57, 0xe6, 0x77, 0x50,
+ 0x61, 0x18, 0xbd, 0x71, 0xee, 0xe2, 0xb1, 0xbd, 0xfd, 0xaf, 0x07, 0x60, 0x17, 0xce, 0xfa, 0x30,
+ 0xde, 0xf7, 0x7d, 0x8e, 0xfa, 0x49, 0x4b, 0x1d, 0x98, 0xf1, 0x35, 0x5c, 0x3f, 0xac, 0xb1, 0xe7,
+ 0xfb, 0xa7, 0x88, 0x87, 0x8e, 0x28, 0x2f, 0x7a, 0xf2, 0x68, 0x0e, 0x7d, 0xc5, 0x4a, 0x1e, 0xf9,
+ 0xf1, 0xa0, 0x46, 0xf7, 0xd0, 0x78, 0x32, 0xce, 0x11, 0x39, 0x63, 0xfa, 0xf4, 0xa9, 0xd7, 0x09,
+ 0xe3, 0x14, 0xc0, 0xba, 0xeb, 0x3b, 0x9e, 0xfb, 0x2a, 0xdd, 0x1d, 0x95, 0x98, 0x82, 0x67, 0x16,
+ 0xd3, 0x79, 0xd5, 0x8a, 0x0d, 0x8c, 0x33, 0xff, 0x3f, 0x0c, 0x1b, 0x6f, 0x9e, 0x11, 0xf1, 0x72,
+ 0xd2, 0x8c, 0x78, 0xa9, 0x18, 0x81, 0x2a, 0x67, 0xde, 0x0e, 0xc7, 0xd2, 0x0c, 0xee, 0xe7, 0x79,
+ 0xfb, 0x7f, 0x0d, 0xa5, 0xcf, 0xe0, 0x56, 0x49, 0xd8, 0xa4, 0xac, 0xbd, 0xee, 0xd8, 0x7a, 0xdd,
+ 0xb1, 0xf5, 0xba, 0x63, 0xcb, 0x3c, 0x9b, 0x10, 0x4e, 0x9b, 0xa1, 0x23, 0x72, 0xda, 0x24, 0xdc,
+ 0x50, 0xe5, 0xdc, 0xdd, 0x50, 0xf6, 0xc7, 0xba, 0x3c, 0xf7, 0xab, 0x21, 0x21, 0x28, 0x80, 0x92,
+ 0x1f, 0xd4, 0x89, 0xb4, 0x71, 0x2f, 0xe5, 0x63, 0xb0, 0x5d, 0x09, 0xea, 0x46, 0xb8, 0x38, 0xfd,
+ 0x17, 0x61, 0x4e, 0xc7, 0xfe, 0xe8, 0x20, 0x24, 0xcc, 0x49, 0xfe, 0xdd, 0x7f, 0x02, 0x86, 0x42,
+ 0xd2, 0x0a, 0xae, 0xe2, 0x45, 0xa1, 0xcb, 0x74, 0xb6, 0x0d, 0x6f, 0xc6, 0x12, 0x4e, 0x75, 0x5e,
+ 0xcb, 0x89, 0x37, 0x84, 0x32, 0x53, 0x3a, 0x6f, 0xc5, 0x89, 0x37, 0x30, 0x83, 0xa0, 0xb7, 0xc3,
+ 0x58, 0x9c, 0x38, 0x0a, 0x17, 0x47, 0xbe, 0xf7, 0x09, 0xdc, 0xb1, 0xe4, 0x41, 0x39, 0x4e, 0x61,
+ 0xa3, 0x57, 0x60, 0x60, 0x83, 0x78, 0x4d, 0xf1, 0xe9, 0xab, 0xf9, 0xe9, 0x1a, 0xf6, 0xae, 0x17,
+ 0x89, 0xd7, 0xe4, 0x92, 0x90, 0xfe, 0xc2, 0x8c, 0x14, 0x9d, 0xf7, 0x95, 0xcd, 0x76, 0x14, 0x07,
+ 0x4d, 0xf7, 0x55, 0xe9, 0xe9, 0x7c, 0x67, 0xce, 0x84, 0x2f, 0xcb, 0xfe, 0xb9, 0x4b, 0x49, 0xfd,
+ 0xc5, 0x9a, 0x32, 0xe3, 0xa3, 0xee, 0x86, 0x6c, 0xca, 0x74, 0x84, 0xc3, 0x32, 0x6f, 0x3e, 0xe6,
+ 0x65, 0xff, 0x9c, 0x0f, 0xf5, 0x17, 0x6b, 0xca, 0xa8, 0xa3, 0xd6, 0xdf, 0x30, 0xe3, 0xe1, 0x6a,
+ 0xce, 0x3c, 0xf0, 0xb5, 0x97, 0xb9, 0x0e, 0x1f, 0x81, 0x52, 0x6d, 0xc3, 0x09, 0xe3, 0x89, 0x11,
+ 0x36, 0x69, 0xd4, 0x2c, 0x9e, 0xa3, 0x8d, 0x98, 0xc3, 0xd0, 0x43, 0x50, 0x0c, 0xc9, 0x3a, 0x8b,
+ 0x4e, 0x36, 0xe2, 0xa2, 0x30, 0x59, 0xc7, 0xb4, 0x5d, 0xd9, 0x65, 0x63, 0x3d, 0x03, 0xe6, 0x7e,
+ 0xb5, 0x90, 0x34, 0xec, 0x92, 0x23, 0xc3, 0xd7, 0x43, 0xad, 0x1d, 0x46, 0xd2, 0x41, 0x66, 0xac,
+ 0x07, 0xd6, 0x8c, 0x25, 0x1c, 0x7d, 0xd8, 0x82, 0xa1, 0x1b, 0x51, 0xe0, 0xfb, 0x24, 0x16, 0x4a,
+ 0xf4, 0x5a, 0xce, 0x83, 0x75, 0x89, 0xf7, 0xae, 0x79, 0x10, 0x0d, 0x58, 0xd2, 0xa5, 0xec, 0x92,
+ 0xed, 0x9a, 0xd7, 0xae, 0x77, 0x05, 0xc3, 0x9c, 0xe3, 0xcd, 0x58, 0xc2, 0x29, 0xaa, 0xeb, 0x73,
+ 0xd4, 0x81, 0x24, 0xea, 0x82, 0x2f, 0x50, 0x05, 0xdc, 0xfe, 0xcd, 0x32, 0x9c, 0xca, 0x5c, 0x3e,
+ 0xd4, 0xe4, 0x62, 0x46, 0xcd, 0x79, 0xd7, 0x23, 0x32, 0x0c, 0x8c, 0x99, 0x5c, 0xd7, 0x54, 0x2b,
+ 0x36, 0x30, 0xd0, 0xcf, 0x01, 0xb4, 0x9c, 0xd0, 0x69, 0x12, 0xe5, 0xc0, 0x3e, 0xb0, 0x65, 0x43,
+ 0xf9, 0x58, 0x91, 0x7d, 0xea, 0x4d, 0xbc, 0x6a, 0x8a, 0xb0, 0x41, 0x12, 0x3d, 0x0b, 0xc3, 0x21,
+ 0xf1, 0x88, 0x13, 0xb1, 0xf0, 0xf7, 0x74, 0x2e, 0x0f, 0xd6, 0x20, 0x6c, 0xe2, 0xa1, 0x47, 0x55,
+ 0xc4, 0x5c, 0x2a, 0x72, 0x28, 0x19, 0x35, 0x87, 0x3e, 0x63, 0xc1, 0xd8, 0xba, 0xeb, 0x11, 0x4d,
+ 0x5d, 0x64, 0xde, 0x2c, 0x1f, 0xfc, 0x25, 0xcf, 0x9b, 0xfd, 0x6a, 0x19, 0x9a, 0x68, 0x8e, 0x70,
+ 0x8a, 0x3c, 0xfd, 0xcc, 0x5b, 0x24, 0x64, 0xc2, 0x77, 0x30, 0xf9, 0x99, 0xaf, 0xf1, 0x66, 0x2c,
+ 0xe1, 0x68, 0x06, 0xc6, 0x5b, 0x4e, 0x14, 0xcd, 0x85, 0xa4, 0x4e, 0xfc, 0xd8, 0x75, 0x3c, 0x9e,
+ 0x17, 0x53, 0xd6, 0xe1, 0xe4, 0x2b, 0x49, 0x30, 0x4e, 0xe3, 0xa3, 0x77, 0xc1, 0xfd, 0xdc, 0x43,
+ 0xb4, 0xe4, 0x46, 0x91, 0xeb, 0x37, 0xf4, 0x34, 0x10, 0x8e, 0xb2, 0x49, 0xd1, 0xd5, 0xfd, 0x0b,
+ 0xd9, 0x68, 0xb8, 0xd7, 0xf3, 0xe8, 0x71, 0x28, 0x47, 0x9b, 0x6e, 0x6b, 0x2e, 0xac, 0x47, 0xec,
+ 0x74, 0xa8, 0xac, 0xdd, 0xb2, 0x55, 0xd1, 0x8e, 0x15, 0x06, 0xaa, 0xc1, 0x08, 0xff, 0x24, 0x3c,
+ 0xe4, 0x4f, 0x48, 0xd0, 0x27, 0x7a, 0x2a, 0x72, 0x91, 0x02, 0x3b, 0x85, 0x9d, 0x9b, 0xe7, 0xe4,
+ 0x59, 0x15, 0x3f, 0x5a, 0xb9, 0x66, 0x74, 0x83, 0x13, 0x9d, 0x26, 0xf7, 0x74, 0xc3, 0x7d, 0xec,
+ 0xe9, 0x9e, 0x85, 0xe1, 0xcd, 0xf6, 0x1a, 0x11, 0x23, 0x2f, 0x04, 0x9b, 0x9a, 0x7d, 0x97, 0x35,
+ 0x08, 0x9b, 0x78, 0x2c, 0xda, 0xb2, 0xe5, 0x8a, 0x7f, 0xd1, 0xc4, 0xa8, 0x11, 0x6d, 0xb9, 0xb2,
+ 0x20, 0x9b, 0xb1, 0x89, 0x43, 0x59, 0xa3, 0x63, 0xb1, 0x4a, 0x22, 0x96, 0x4c, 0x41, 0x87, 0x4b,
+ 0xb1, 0x56, 0x95, 0x00, 0xac, 0x71, 0xd0, 0x0a, 0x9c, 0xa4, 0x7f, 0xaa, 0x2c, 0x05, 0xf8, 0x9a,
+ 0xe3, 0xb9, 0x75, 0x1e, 0xfa, 0x37, 0x9e, 0xf4, 0x6f, 0x56, 0x33, 0x70, 0x70, 0xe6, 0x93, 0xf6,
+ 0x17, 0x0b, 0x49, 0xcf, 0x89, 0x29, 0xc2, 0x50, 0x44, 0x05, 0x55, 0x7c, 0xcd, 0x09, 0xa5, 0xc1,
+ 0x73, 0xc0, 0xe4, 0x26, 0xd1, 0xef, 0x35, 0x27, 0x34, 0x45, 0x1e, 0x23, 0x80, 0x25, 0x25, 0x74,
+ 0x03, 0x06, 0x62, 0xcf, 0xc9, 0x29, 0x1b, 0xd2, 0xa0, 0xa8, 0x1d, 0x59, 0x8b, 0x33, 0x11, 0x66,
+ 0x34, 0xd0, 0x83, 0x74, 0xf7, 0xb6, 0x26, 0x4f, 0xda, 0xc4, 0x86, 0x6b, 0x2d, 0xc2, 0xac, 0xd5,
+ 0xfe, 0x95, 0xd1, 0x0c, 0xad, 0xa3, 0x0c, 0x01, 0xf4, 0x14, 0x00, 0x9d, 0x34, 0x2b, 0x21, 0x59,
+ 0x77, 0xb7, 0x85, 0x21, 0xa6, 0x24, 0xdb, 0x15, 0x05, 0xc1, 0x06, 0x96, 0x7c, 0xa6, 0xda, 0x5e,
+ 0xa7, 0xcf, 0x14, 0xba, 0x9f, 0xe1, 0x10, 0x6c, 0x60, 0xa1, 0x67, 0x60, 0xd0, 0x6d, 0x3a, 0x0d,
+ 0x15, 0x08, 0xfc, 0x20, 0x15, 0x69, 0x0b, 0xac, 0xe5, 0xf6, 0xce, 0xe4, 0x98, 0x62, 0x88, 0x35,
+ 0x61, 0x81, 0x8b, 0x7e, 0xdd, 0x82, 0x91, 0x5a, 0xd0, 0x6c, 0x06, 0x3e, 0xdf, 0x3e, 0x0b, 0x5f,
+ 0xc0, 0x8d, 0xc3, 0x32, 0x93, 0xa6, 0xe6, 0x0c, 0x62, 0xdc, 0x19, 0xa0, 0xd2, 0x36, 0x4d, 0x10,
+ 0x4e, 0x70, 0x65, 0x4a, 0xbe, 0xd2, 0x1e, 0x92, 0xef, 0xb7, 0x2c, 0x38, 0xce, 0x9f, 0x35, 0x76,
+ 0xf5, 0x22, 0x43, 0x31, 0x38, 0xe4, 0xd7, 0xea, 0x72, 0x74, 0x28, 0x67, 0x6f, 0x17, 0x1c, 0x77,
+ 0x33, 0x89, 0x2e, 0xc0, 0xf1, 0xf5, 0x20, 0xac, 0x11, 0x73, 0x20, 0x84, 0xd8, 0x56, 0x1d, 0x9d,
+ 0x4f, 0x23, 0xe0, 0xee, 0x67, 0xd0, 0x35, 0xb8, 0xcf, 0x68, 0x34, 0xc7, 0x81, 0x4b, 0xee, 0x87,
+ 0x45, 0x6f, 0xf7, 0x9d, 0xcf, 0xc4, 0xc2, 0x3d, 0x9e, 0x4e, 0x0a, 0xc9, 0x4a, 0x1f, 0x42, 0xf2,
+ 0x65, 0x38, 0x5d, 0xeb, 0x1e, 0x99, 0xad, 0xa8, 0xbd, 0x16, 0x71, 0x39, 0x5e, 0x9e, 0xfd, 0x31,
+ 0xd1, 0xc1, 0xe9, 0xb9, 0x5e, 0x88, 0xb8, 0x77, 0x1f, 0xe8, 0xfd, 0x50, 0x0e, 0x09, 0xfb, 0x2a,
+ 0x91, 0x48, 0xd7, 0x3b, 0xa0, 0xb7, 0x43, 0x5b, 0xf0, 0xbc, 0x5b, 0xad, 0x99, 0x44, 0x43, 0x84,
+ 0x15, 0x45, 0x74, 0x13, 0x86, 0x5a, 0x4e, 0x5c, 0xdb, 0x10, 0x49, 0x7a, 0x07, 0xf6, 0xcd, 0x2b,
+ 0xe2, 0xec, 0x28, 0xc5, 0x28, 0x79, 0xc0, 0x89, 0x60, 0x49, 0x8d, 0xda, 0x6a, 0xb5, 0xa0, 0xd9,
+ 0x0a, 0x7c, 0xe2, 0xc7, 0x52, 0x89, 0x8c, 0xf1, 0xf3, 0x0e, 0xd9, 0x8a, 0x0d, 0x8c, 0x2e, 0x5d,
+ 0xae, 0xd1, 0x26, 0x8e, 0xef, 0xa2, 0xcb, 0x8d, 0xde, 0x7a, 0x3d, 0x4f, 0x95, 0x0d, 0x73, 0x2b,
+ 0x5e, 0x77, 0xe3, 0x8d, 0xa0, 0x1d, 0xcb, 0x5d, 0xb2, 0x50, 0x54, 0x4a, 0xd9, 0x2c, 0x66, 0xe0,
+ 0xe0, 0xcc, 0x27, 0xd3, 0x9a, 0x75, 0xfc, 0xce, 0x34, 0xeb, 0xb1, 0x3e, 0x34, 0x6b, 0x15, 0x4e,
+ 0x31, 0x0e, 0x84, 0x95, 0x2c, 0x9d, 0x96, 0xd1, 0x04, 0x62, 0xcc, 0xab, 0xfc, 0x96, 0xc5, 0x2c,
+ 0x24, 0x9c, 0xfd, 0xec, 0x99, 0x77, 0xc0, 0xf1, 0x2e, 0x21, 0xb7, 0x2f, 0x87, 0xe4, 0x3c, 0xdc,
+ 0x97, 0x2d, 0x4e, 0xf6, 0xe5, 0x96, 0xfc, 0xcd, 0x54, 0x5c, 0xba, 0xb1, 0x45, 0xeb, 0xc3, 0xc5,
+ 0xed, 0x40, 0x91, 0xf8, 0x5b, 0x42, 0xbb, 0x9e, 0x3f, 0xd8, 0xac, 0x3e, 0xe7, 0x6f, 0x71, 0x69,
+ 0xc8, 0xfc, 0x78, 0xe7, 0xfc, 0x2d, 0x4c, 0xfb, 0x46, 0x9f, 0xb3, 0x12, 0x1b, 0x08, 0xee, 0x18,
+ 0x7f, 0xef, 0xa1, 0xec, 0x49, 0xfb, 0xde, 0x53, 0xd8, 0xff, 0xa6, 0x00, 0x67, 0xf7, 0xea, 0xa4,
+ 0x8f, 0xe1, 0x7b, 0x04, 0x06, 0x23, 0x16, 0x69, 0x22, 0xd4, 0xd5, 0x30, 0x5d, 0xc5, 0x3c, 0xf6,
+ 0xe4, 0x65, 0x2c, 0x40, 0xc8, 0x83, 0x62, 0xd3, 0x69, 0x09, 0x7f, 0xe9, 0xc2, 0x41, 0xf3, 0xf7,
+ 0xe8, 0x7f, 0xc7, 0x5b, 0x72, 0x5a, 0x7c, 0xce, 0x1b, 0x0d, 0x98, 0x92, 0x41, 0x31, 0x94, 0x9c,
+ 0x30, 0x74, 0x64, 0x58, 0xc3, 0xe5, 0x7c, 0xe8, 0xcd, 0xd0, 0x2e, 0xf9, 0xa9, 0x70, 0xa2, 0x09,
+ 0x73, 0x62, 0xf6, 0x17, 0xca, 0x89, 0x64, 0x2f, 0x16, 0xab, 0x12, 0xc1, 0xa0, 0x70, 0x93, 0x5a,
+ 0x79, 0xa7, 0x4d, 0xf2, 0x6c, 0x6a, 0xe6, 0x81, 0x10, 0x35, 0x29, 0x04, 0x29, 0xf4, 0x09, 0x8b,
+ 0x55, 0x7e, 0x90, 0x19, 0x74, 0x62, 0x57, 0x7f, 0x38, 0x85, 0x28, 0xcc, 0x7a, 0x12, 0xb2, 0x11,
+ 0x9b, 0xd4, 0x45, 0x75, 0x1b, 0xb6, 0x9b, 0xe9, 0xae, 0x6e, 0xc3, 0x76, 0x27, 0x12, 0x8e, 0xb6,
+ 0x33, 0x62, 0x52, 0x72, 0xa8, 0x1e, 0xd0, 0x47, 0x14, 0xca, 0x57, 0x2c, 0x38, 0xee, 0xa6, 0x83,
+ 0x0b, 0xc4, 0x1e, 0xf8, 0x7a, 0x3e, 0x3e, 0xcd, 0xee, 0xd8, 0x05, 0x65, 0xe8, 0x74, 0x81, 0x70,
+ 0x37, 0x33, 0xa8, 0x0e, 0x03, 0xae, 0xbf, 0x1e, 0x08, 0xf3, 0x6e, 0xf6, 0x60, 0x4c, 0x2d, 0xf8,
+ 0xeb, 0x81, 0x5e, 0xcd, 0xf4, 0x1f, 0x66, 0xbd, 0xa3, 0x45, 0x38, 0x29, 0xf3, 0x7d, 0x2e, 0xba,
+ 0x51, 0x1c, 0x84, 0x9d, 0x45, 0xb7, 0xe9, 0xc6, 0xcc, 0x34, 0x2b, 0xce, 0x4e, 0x50, 0xf5, 0x86,
+ 0x33, 0xe0, 0x38, 0xf3, 0x29, 0xf4, 0x2a, 0x0c, 0xc9, 0x03, 0xfd, 0x72, 0x1e, 0xfe, 0x84, 0xee,
+ 0xf9, 0xaf, 0x26, 0x53, 0x55, 0x9c, 0xe8, 0x4b, 0x82, 0xe8, 0xe3, 0x16, 0x8c, 0xf1, 0xdf, 0x17,
+ 0x3b, 0x75, 0x9e, 0x62, 0x58, 0xc9, 0x23, 0x6a, 0xbf, 0x9a, 0xe8, 0x73, 0x16, 0xdd, 0xda, 0x99,
+ 0x1c, 0x4b, 0xb6, 0xe1, 0x14, 0x5d, 0xfb, 0x1f, 0x8e, 0x40, 0x77, 0x08, 0x44, 0x32, 0xde, 0xc1,
+ 0x3a, 0xea, 0x78, 0x07, 0xba, 0xab, 0x8c, 0x74, 0xa8, 0x42, 0x0e, 0xcb, 0x4c, 0x50, 0xd5, 0xc7,
+ 0xd0, 0x1d, 0xbf, 0x86, 0x19, 0x0d, 0xd4, 0x86, 0x41, 0x5e, 0x5c, 0x4a, 0x68, 0x80, 0x83, 0x9f,
+ 0x7c, 0x9b, 0x45, 0xaa, 0xb4, 0x5b, 0x8b, 0xb7, 0x62, 0x41, 0x0c, 0x6d, 0xc3, 0xd0, 0x06, 0x9f,
+ 0x8e, 0x62, 0xaf, 0xb7, 0x74, 0xd0, 0xf1, 0x4d, 0xcc, 0x71, 0x3d, 0xf9, 0x44, 0x03, 0x96, 0xe4,
+ 0x58, 0x78, 0x9d, 0x11, 0x00, 0xc4, 0x05, 0x49, 0x7e, 0xd9, 0x92, 0xfd, 0x47, 0xff, 0xbc, 0x0f,
+ 0x46, 0x42, 0x52, 0x0b, 0xfc, 0x9a, 0xeb, 0x91, 0xfa, 0x8c, 0x3c, 0x10, 0xdb, 0x4f, 0x92, 0x1c,
+ 0xf3, 0x26, 0x61, 0xa3, 0x0f, 0x9c, 0xe8, 0x91, 0xad, 0x33, 0x95, 0x38, 0x4f, 0x3f, 0x08, 0x11,
+ 0x07, 0x1f, 0x8b, 0x39, 0xa5, 0xe9, 0xb3, 0x3e, 0xf9, 0x3a, 0x4b, 0xb6, 0xe1, 0x14, 0x5d, 0xf4,
+ 0x22, 0x40, 0xb0, 0xc6, 0x63, 0xe8, 0x66, 0x62, 0x71, 0x0a, 0xb2, 0x9f, 0x57, 0x1d, 0xe3, 0xc9,
+ 0xb6, 0xb2, 0x07, 0x6c, 0xf4, 0x86, 0x2e, 0x03, 0xf0, 0x95, 0xb3, 0xda, 0x69, 0xc9, 0x0d, 0xa1,
+ 0xcc, 0x72, 0x84, 0xaa, 0x82, 0xdc, 0xde, 0x99, 0xec, 0xf6, 0x39, 0xb3, 0x40, 0x21, 0xe3, 0x71,
+ 0xf4, 0xb3, 0x30, 0x14, 0xb5, 0x9b, 0x4d, 0x47, 0x9d, 0x91, 0xe4, 0x98, 0xbe, 0xcb, 0xfb, 0x35,
+ 0x04, 0x23, 0x6f, 0xc0, 0x92, 0x22, 0xba, 0x41, 0x45, 0xbc, 0x90, 0x50, 0x7c, 0x15, 0x71, 0x0b,
+ 0x85, 0x7b, 0x02, 0xdf, 0x22, 0x77, 0x31, 0x38, 0x03, 0xe7, 0xf6, 0xce, 0xe4, 0x7d, 0xc9, 0xf6,
+ 0xc5, 0x40, 0x24, 0xd4, 0x66, 0xf6, 0x89, 0x2e, 0xc9, 0x3a, 0x5a, 0xf4, 0xb5, 0x65, 0x79, 0x97,
+ 0xc7, 0x74, 0x1d, 0x2d, 0xd6, 0xdc, 0x7b, 0xcc, 0xcc, 0x87, 0xd1, 0x12, 0x9c, 0xa8, 0x05, 0x7e,
+ 0x1c, 0x06, 0x9e, 0xc7, 0x6b, 0xec, 0xf1, 0xbd, 0x39, 0x3f, 0x43, 0x79, 0x40, 0xb0, 0x7d, 0x62,
+ 0xae, 0x1b, 0x05, 0x67, 0x3d, 0x47, 0x6d, 0xf2, 0xb4, 0x7e, 0x18, 0xcb, 0xe5, 0x78, 0x3d, 0xd1,
+ 0xa7, 0x90, 0x50, 0xca, 0xed, 0xbd, 0x87, 0xa6, 0xf0, 0x93, 0x87, 0xac, 0xe2, 0x8b, 0x3d, 0x03,
+ 0x23, 0x64, 0x3b, 0x26, 0xa1, 0xef, 0x78, 0x57, 0xf1, 0xa2, 0x3c, 0xb0, 0x60, 0x0b, 0xf3, 0x9c,
+ 0xd1, 0x8e, 0x13, 0x58, 0xc8, 0x56, 0x5e, 0x32, 0x23, 0x73, 0x9d, 0x7b, 0xc9, 0xa4, 0x4f, 0xcc,
+ 0xfe, 0x5a, 0x31, 0x61, 0xb3, 0xde, 0x95, 0x23, 0x5d, 0x56, 0x22, 0x49, 0xd6, 0x92, 0x62, 0x00,
+ 0xb1, 0x17, 0xcb, 0x93, 0xb2, 0x2a, 0x91, 0xb4, 0x6c, 0x12, 0xc2, 0x49, 0xba, 0x68, 0x13, 0x4a,
+ 0x1b, 0x41, 0x14, 0xcb, 0x1d, 0xda, 0x01, 0x37, 0x83, 0x17, 0x83, 0x28, 0x66, 0x86, 0x96, 0x7a,
+ 0x6d, 0xda, 0x12, 0x61, 0x4e, 0x83, 0xee, 0xfd, 0xa3, 0x0d, 0x27, 0xac, 0x47, 0x73, 0xac, 0xce,
+ 0xc4, 0x00, 0xb3, 0xb0, 0x94, 0x3d, 0x5d, 0xd5, 0x20, 0x6c, 0xe2, 0xd9, 0x3f, 0xb0, 0x12, 0xa7,
+ 0x5a, 0xd7, 0x59, 0xd2, 0xc0, 0x16, 0xf1, 0xa9, 0x88, 0x32, 0xc3, 0x14, 0x7f, 0x2a, 0x95, 0x82,
+ 0xfd, 0xa6, 0x5e, 0xe5, 0x30, 0x6f, 0xd2, 0x1e, 0xa6, 0x58, 0x17, 0x46, 0x44, 0xe3, 0x87, 0xac,
+ 0x64, 0x2e, 0x7d, 0x21, 0x8f, 0xad, 0x9b, 0x59, 0x4f, 0x62, 0xcf, 0xb4, 0x7c, 0xfb, 0x73, 0x16,
+ 0x0c, 0xcd, 0x3a, 0xb5, 0xcd, 0x60, 0x7d, 0x1d, 0x3d, 0x0e, 0xe5, 0x7a, 0x3b, 0x34, 0xd3, 0xfa,
+ 0x95, 0xb3, 0x6a, 0x5e, 0xb4, 0x63, 0x85, 0x41, 0xa7, 0xfe, 0xba, 0x53, 0x93, 0x55, 0x25, 0x8a,
+ 0x7c, 0xea, 0x9f, 0x67, 0x2d, 0x58, 0x40, 0xe8, 0xf0, 0x37, 0x9d, 0x6d, 0xf9, 0x70, 0xfa, 0x48,
+ 0x6d, 0x49, 0x83, 0xb0, 0x89, 0x67, 0xff, 0x0b, 0x0b, 0x26, 0x66, 0x9d, 0xc8, 0xad, 0xcd, 0xb4,
+ 0xe3, 0x8d, 0x59, 0x37, 0x5e, 0x6b, 0xd7, 0x36, 0x49, 0xcc, 0xab, 0x8f, 0x50, 0x2e, 0xdb, 0x11,
+ 0x5d, 0x81, 0x6a, 0xc7, 0xac, 0xb8, 0xbc, 0x2a, 0xda, 0xb1, 0xc2, 0x40, 0xaf, 0xc2, 0x70, 0xcb,
+ 0x89, 0xa2, 0x9b, 0x41, 0x58, 0xc7, 0x64, 0x3d, 0x9f, 0xfa, 0x44, 0x55, 0x52, 0x0b, 0x49, 0x8c,
+ 0xc9, 0xba, 0x08, 0x50, 0xd1, 0xfd, 0x63, 0x93, 0x98, 0xfd, 0x4b, 0x16, 0x9c, 0x9c, 0x25, 0x4e,
+ 0x48, 0x42, 0x56, 0xce, 0x48, 0xbd, 0x08, 0x7a, 0x05, 0xca, 0x31, 0x6d, 0xa1, 0x1c, 0x59, 0xf9,
+ 0x72, 0xc4, 0x42, 0x4b, 0x56, 0x45, 0xe7, 0x58, 0x91, 0xb1, 0x3f, 0x6d, 0xc1, 0xe9, 0x2c, 0x5e,
+ 0xe6, 0xbc, 0xa0, 0x5d, 0xbf, 0x1b, 0x0c, 0xfd, 0x2d, 0x0b, 0x46, 0xd8, 0x71, 0xfd, 0x3c, 0x89,
+ 0x1d, 0xd7, 0xeb, 0x2a, 0xa5, 0x68, 0xf5, 0x59, 0x4a, 0xf1, 0x2c, 0x0c, 0x6c, 0x04, 0x4d, 0x92,
+ 0x0e, 0x35, 0xb9, 0x18, 0x34, 0x09, 0x66, 0x10, 0xf4, 0x24, 0x9d, 0x84, 0xae, 0x1f, 0x3b, 0x74,
+ 0x39, 0xca, 0xe3, 0x8c, 0x71, 0x3e, 0x01, 0x55, 0x33, 0x36, 0x71, 0xec, 0xdf, 0xab, 0xc0, 0x90,
+ 0x88, 0x8b, 0xea, 0xbb, 0x1a, 0x8e, 0xf4, 0xe2, 0x14, 0x7a, 0x7a, 0x71, 0x22, 0x18, 0xac, 0xb1,
+ 0x7a, 0xb7, 0xc2, 0x42, 0xbf, 0x9c, 0x4b, 0x20, 0x1d, 0x2f, 0xa1, 0xab, 0xd9, 0xe2, 0xff, 0xb1,
+ 0x20, 0x85, 0x3e, 0x6b, 0xc1, 0x78, 0x2d, 0xf0, 0x7d, 0x52, 0xd3, 0xb6, 0xe3, 0x40, 0x1e, 0x1b,
+ 0x84, 0xb9, 0x64, 0xa7, 0xfa, 0x24, 0x38, 0x05, 0xc0, 0x69, 0xf2, 0xe8, 0x79, 0x18, 0xe5, 0x63,
+ 0x76, 0x2d, 0x71, 0x06, 0xa3, 0x2b, 0xec, 0x99, 0x40, 0x9c, 0xc4, 0x45, 0x53, 0xfc, 0x2c, 0x4b,
+ 0xd4, 0xb2, 0x1b, 0xd4, 0xae, 0x6a, 0xa3, 0x8a, 0x9d, 0x81, 0x81, 0x42, 0x40, 0x21, 0x59, 0x0f,
+ 0x49, 0xb4, 0x21, 0xe2, 0xc6, 0x98, 0xdd, 0x3a, 0x74, 0x67, 0x75, 0x2c, 0x70, 0x57, 0x4f, 0x38,
+ 0xa3, 0x77, 0xb4, 0x29, 0xdc, 0x08, 0xe5, 0x3c, 0xe4, 0xb9, 0xf8, 0xcc, 0x3d, 0xbd, 0x09, 0x93,
+ 0x50, 0x62, 0xaa, 0x8b, 0xd9, 0xcb, 0x45, 0x9e, 0x3b, 0xc9, 0x14, 0x1b, 0xe6, 0xed, 0x68, 0x1e,
+ 0x8e, 0xa5, 0xea, 0x03, 0x46, 0xe2, 0xac, 0x44, 0xe5, 0xc9, 0xa5, 0x2a, 0x0b, 0x46, 0xb8, 0xeb,
+ 0x09, 0xd3, 0xc5, 0x34, 0xbc, 0x87, 0x8b, 0xa9, 0xa3, 0xa2, 0x93, 0xf9, 0x29, 0xc6, 0x0b, 0xb9,
+ 0x0c, 0x40, 0x5f, 0xa1, 0xc8, 0x9f, 0x4a, 0x85, 0x22, 0x8f, 0x32, 0x06, 0xae, 0xe5, 0xc3, 0xc0,
+ 0xfe, 0xe3, 0x8e, 0xef, 0x66, 0x1c, 0xf1, 0xff, 0xb4, 0x40, 0x7e, 0xd7, 0x39, 0xa7, 0xb6, 0x41,
+ 0xe8, 0x94, 0x41, 0x6f, 0x87, 0x31, 0xe5, 0x9d, 0xe0, 0x26, 0x91, 0xc5, 0x66, 0x8d, 0xb2, 0x9d,
+ 0x71, 0x02, 0x8a, 0x53, 0xd8, 0x68, 0x1a, 0x2a, 0x74, 0x9c, 0xf8, 0xa3, 0x5c, 0xef, 0x2b, 0x0f,
+ 0xc8, 0xcc, 0xca, 0x82, 0x78, 0x4a, 0xe3, 0xa0, 0x00, 0x8e, 0x7b, 0x4e, 0x14, 0x33, 0x0e, 0xaa,
+ 0x1d, 0xbf, 0x76, 0x87, 0x55, 0x64, 0x58, 0x32, 0xd6, 0x62, 0xba, 0x23, 0xdc, 0xdd, 0xb7, 0xfd,
+ 0x6f, 0x4b, 0x30, 0x9a, 0x90, 0x8c, 0xfb, 0x34, 0x18, 0x1e, 0x87, 0xb2, 0xd4, 0xe1, 0xe9, 0x72,
+ 0x59, 0x4a, 0xd1, 0x2b, 0x0c, 0xaa, 0xb4, 0xd6, 0xb4, 0x56, 0x4d, 0x1b, 0x38, 0x86, 0xc2, 0xc5,
+ 0x26, 0x1e, 0x13, 0xca, 0xb1, 0x17, 0xcd, 0x79, 0x2e, 0xf1, 0x63, 0xce, 0x66, 0x3e, 0x42, 0x79,
+ 0x75, 0xb1, 0x6a, 0x76, 0xaa, 0x85, 0x72, 0x0a, 0x80, 0xd3, 0xe4, 0xd1, 0x47, 0x2d, 0x18, 0x75,
+ 0x6e, 0x46, 0xba, 0x28, 0xbb, 0x08, 0x3a, 0x3e, 0xa0, 0x92, 0x4a, 0xd4, 0x79, 0xe7, 0x8e, 0xfd,
+ 0x44, 0x13, 0x4e, 0x12, 0x45, 0xaf, 0x59, 0x80, 0xc8, 0x36, 0xa9, 0xc9, 0xb0, 0x68, 0xc1, 0xcb,
+ 0x60, 0x1e, 0x3b, 0xf8, 0x73, 0x5d, 0xfd, 0x72, 0xa9, 0xde, 0xdd, 0x8e, 0x33, 0x78, 0x40, 0x97,
+ 0x00, 0xd5, 0xdd, 0xc8, 0x59, 0xf3, 0xc8, 0x5c, 0xd0, 0x94, 0x09, 0xc4, 0xe2, 0x3c, 0xfd, 0x8c,
+ 0x18, 0x67, 0x34, 0xdf, 0x85, 0x81, 0x33, 0x9e, 0x62, 0xb3, 0x2c, 0x0c, 0xb6, 0x3b, 0x57, 0x43,
+ 0x8f, 0x69, 0x09, 0x73, 0x96, 0x89, 0x76, 0xac, 0x30, 0xec, 0xbf, 0x28, 0xaa, 0xa5, 0xac, 0x73,
+ 0x00, 0x1c, 0x23, 0x16, 0xd9, 0xba, 0xf3, 0x58, 0x64, 0x1d, 0x29, 0xd5, 0x9d, 0x16, 0x9f, 0xc8,
+ 0xa2, 0x2d, 0xdc, 0xa5, 0x2c, 0xda, 0x9f, 0xb7, 0x12, 0x25, 0xe9, 0x86, 0x9f, 0x7a, 0x31, 0xdf,
+ 0xfc, 0x83, 0x29, 0x1e, 0xc5, 0x95, 0xd2, 0x2b, 0xa9, 0xe0, 0xbd, 0xc7, 0xa1, 0xbc, 0xee, 0x39,
+ 0xac, 0x90, 0x0a, 0x5b, 0xa8, 0x46, 0x84, 0xd9, 0x79, 0xd1, 0x8e, 0x15, 0x06, 0x95, 0xfa, 0x46,
+ 0xa7, 0xfb, 0x92, 0xda, 0xff, 0xa1, 0x08, 0xc3, 0x86, 0xc6, 0xcf, 0x34, 0xdf, 0xac, 0x7b, 0xcc,
+ 0x7c, 0x2b, 0xec, 0xc3, 0x7c, 0xfb, 0x39, 0xa8, 0xd4, 0xa4, 0x36, 0xca, 0xa7, 0xc4, 0x7e, 0x5a,
+ 0xc7, 0x69, 0x85, 0xa4, 0x9a, 0xb0, 0xa6, 0x89, 0x2e, 0x24, 0x32, 0x35, 0x13, 0x7e, 0x81, 0xac,
+ 0x54, 0x4a, 0xa1, 0xd1, 0xba, 0x9f, 0x49, 0xc7, 0x07, 0x94, 0xf6, 0x8e, 0x0f, 0xb0, 0xbf, 0x63,
+ 0xa9, 0x8f, 0x7b, 0x04, 0x25, 0x79, 0x6e, 0x24, 0x4b, 0xf2, 0x9c, 0xcb, 0x65, 0x98, 0x7b, 0xd4,
+ 0xe2, 0xb9, 0x02, 0x43, 0x73, 0x41, 0xb3, 0xe9, 0xf8, 0x75, 0xf4, 0xe3, 0x30, 0x54, 0xe3, 0x3f,
+ 0x85, 0x0f, 0x8d, 0x1d, 0x56, 0x0b, 0x28, 0x96, 0x30, 0xf4, 0x20, 0x0c, 0x38, 0x61, 0x43, 0xfa,
+ 0xcd, 0x58, 0x10, 0xdc, 0x4c, 0xd8, 0x88, 0x30, 0x6b, 0xb5, 0xff, 0xd9, 0x00, 0xb0, 0xd8, 0x13,
+ 0x27, 0x24, 0xf5, 0xd5, 0x80, 0x55, 0xc6, 0x3d, 0xd4, 0x23, 0x5e, 0xbd, 0xa9, 0xbb, 0x97, 0x8f,
+ 0x79, 0x8d, 0xa3, 0xbe, 0xe2, 0x51, 0x1f, 0xf5, 0x65, 0x9f, 0xde, 0x0e, 0xdc, 0x43, 0xa7, 0xb7,
+ 0xf6, 0x27, 0x2d, 0x40, 0x2a, 0x92, 0x48, 0x87, 0x57, 0x4c, 0x43, 0x45, 0x85, 0x2e, 0x09, 0x03,
+ 0x50, 0x8b, 0x08, 0x09, 0xc0, 0x1a, 0xa7, 0x8f, 0x9d, 0xfc, 0x23, 0x52, 0x7e, 0x17, 0x93, 0xf9,
+ 0x07, 0x4c, 0xea, 0x0b, 0x71, 0x6e, 0xff, 0x7e, 0x01, 0xee, 0xe3, 0xa6, 0xc3, 0x92, 0xe3, 0x3b,
+ 0x0d, 0xd2, 0xa4, 0x5c, 0xf5, 0x1b, 0x30, 0x53, 0xa3, 0x5b, 0x48, 0x57, 0x66, 0x0b, 0x1c, 0x74,
+ 0xed, 0xf2, 0x35, 0xc7, 0x57, 0xd9, 0x82, 0xef, 0xc6, 0x98, 0x75, 0x8e, 0x22, 0x28, 0xcb, 0xbb,
+ 0x79, 0x84, 0x2c, 0xce, 0x89, 0x90, 0x12, 0x4b, 0x42, 0xcb, 0x12, 0xac, 0x08, 0x51, 0x55, 0xea,
+ 0x05, 0xb5, 0x4d, 0x4c, 0x5a, 0x41, 0x5a, 0x95, 0x2e, 0x8a, 0x76, 0xac, 0x30, 0xec, 0x26, 0x8c,
+ 0xcb, 0x31, 0x6c, 0x5d, 0x26, 0x1d, 0x4c, 0xd6, 0xa9, 0xfe, 0xa9, 0xc9, 0x26, 0xe3, 0xba, 0x20,
+ 0xa5, 0x7f, 0xe6, 0x4c, 0x20, 0x4e, 0xe2, 0xca, 0x62, 0xb9, 0x85, 0xec, 0x62, 0xb9, 0xf6, 0xef,
+ 0x5b, 0x90, 0x56, 0x80, 0x46, 0x69, 0x50, 0x6b, 0xd7, 0xd2, 0xa0, 0xfb, 0x28, 0xae, 0xf9, 0x1e,
+ 0x18, 0x76, 0x62, 0x6a, 0xe1, 0x70, 0x6f, 0x44, 0xf1, 0xce, 0x4e, 0xd1, 0x96, 0x82, 0xba, 0xbb,
+ 0xee, 0x32, 0x2f, 0x84, 0xd9, 0x9d, 0xfd, 0x9a, 0x05, 0x95, 0xf9, 0xb0, 0xb3, 0xff, 0xb4, 0xad,
+ 0xee, 0xa4, 0xac, 0xc2, 0xbe, 0x92, 0xb2, 0x64, 0xda, 0x57, 0xb1, 0x57, 0xda, 0x97, 0xfd, 0x57,
+ 0x03, 0x70, 0xbc, 0x2b, 0x0f, 0x11, 0x3d, 0x07, 0x23, 0xea, 0x2b, 0x49, 0x17, 0x64, 0xc5, 0x0c,
+ 0xe4, 0xd5, 0x30, 0x9c, 0xc0, 0xec, 0x63, 0xa9, 0x2e, 0xc0, 0x89, 0x90, 0xbc, 0xd2, 0x26, 0x6d,
+ 0x32, 0xb3, 0x1e, 0x93, 0xb0, 0x4a, 0x6a, 0x81, 0x5f, 0xe7, 0xb5, 0x75, 0x8b, 0xb3, 0xf7, 0xdf,
+ 0xda, 0x99, 0x3c, 0x81, 0xbb, 0xc1, 0x38, 0xeb, 0x19, 0xd4, 0x82, 0x51, 0xcf, 0xb4, 0x9d, 0xc5,
+ 0x96, 0xed, 0x8e, 0xcc, 0x6e, 0x35, 0x5b, 0x13, 0xcd, 0x38, 0x49, 0x20, 0x69, 0x80, 0x97, 0xee,
+ 0x92, 0x01, 0xfe, 0x11, 0x6d, 0x80, 0xf3, 0xb8, 0x98, 0x77, 0xe7, 0x9c, 0x87, 0xda, 0x8f, 0x05,
+ 0x7e, 0x10, 0x9b, 0xfa, 0x05, 0x28, 0xcb, 0x98, 0xc1, 0xbe, 0x62, 0xed, 0xcc, 0x7e, 0x7a, 0xc8,
+ 0xf6, 0x47, 0xe1, 0x8d, 0xe7, 0xc2, 0xd0, 0x18, 0xcc, 0x2b, 0x41, 0x3c, 0xe3, 0x79, 0xc1, 0x4d,
+ 0x6a, 0xae, 0x5c, 0x8d, 0x88, 0xf0, 0x89, 0xd9, 0xb7, 0x0b, 0x90, 0xb1, 0xbd, 0xa4, 0x6b, 0x52,
+ 0xdb, 0x48, 0x89, 0x35, 0xb9, 0x3f, 0x3b, 0x09, 0x6d, 0xf3, 0xb8, 0x4a, 0x6e, 0x0d, 0xbc, 0x2b,
+ 0xef, 0xed, 0xb1, 0x0e, 0xb5, 0x54, 0x92, 0x52, 0x85, 0x5b, 0x3e, 0x05, 0xa0, 0x4d, 0x5b, 0x91,
+ 0xfa, 0xa4, 0x02, 0x25, 0xb4, 0x05, 0x8c, 0x0d, 0x2c, 0xf4, 0x2c, 0x0c, 0xbb, 0x7e, 0x14, 0x3b,
+ 0x9e, 0x77, 0xd1, 0xf5, 0x63, 0xe1, 0xf6, 0x55, 0x66, 0xcf, 0x82, 0x06, 0x61, 0x13, 0xef, 0xcc,
+ 0x5b, 0x8c, 0xef, 0xb7, 0x9f, 0xef, 0xbe, 0x01, 0xa7, 0x2f, 0xb8, 0xb1, 0x4a, 0xd8, 0x53, 0xf3,
+ 0x8d, 0x5a, 0xae, 0x4a, 0x56, 0x59, 0x3d, 0x53, 0x54, 0x8d, 0x84, 0xb9, 0x42, 0x32, 0xbf, 0x2f,
+ 0x9d, 0x30, 0x67, 0xd7, 0xe0, 0xe4, 0x05, 0x37, 0x3e, 0xef, 0x7a, 0xe4, 0x10, 0x89, 0x7c, 0x7d,
+ 0x10, 0x46, 0xcc, 0x3c, 0xf6, 0xfd, 0x48, 0xf6, 0x4f, 0x53, 0x3b, 0x56, 0x0c, 0x84, 0xab, 0x0e,
+ 0x7f, 0xaf, 0x1f, 0x38, 0xa9, 0x3e, 0x7b, 0x70, 0x0d, 0x53, 0x56, 0xd3, 0xc4, 0x26, 0x03, 0xe8,
+ 0x26, 0x94, 0xd6, 0x59, 0xee, 0x57, 0x31, 0x8f, 0xb0, 0x9d, 0xac, 0xc1, 0xd7, 0x2b, 0x97, 0x67,
+ 0x8f, 0x71, 0x7a, 0xd4, 0xfc, 0x08, 0x93, 0x29, 0xc7, 0x46, 0x44, 0xbe, 0xd0, 0x6b, 0x0a, 0xa3,
+ 0x97, 0xf6, 0x28, 0xdd, 0x81, 0xf6, 0x48, 0xc8, 0xf2, 0xc1, 0xbb, 0x24, 0xcb, 0x59, 0x1e, 0x5f,
+ 0xbc, 0xc1, 0x8c, 0x63, 0x91, 0x42, 0x34, 0xc4, 0x06, 0xc1, 0xc8, 0xe3, 0x4b, 0x80, 0x71, 0x1a,
+ 0x1f, 0x7d, 0x50, 0x69, 0x83, 0x72, 0x1e, 0xce, 0x75, 0x73, 0x46, 0x1f, 0xb6, 0x22, 0xf8, 0x64,
+ 0x01, 0xc6, 0x2e, 0xf8, 0xed, 0x95, 0x0b, 0x2b, 0xed, 0x35, 0xcf, 0xad, 0x5d, 0x26, 0x1d, 0x2a,
+ 0xed, 0x37, 0x49, 0x67, 0x61, 0x5e, 0xac, 0x20, 0x35, 0x67, 0x2e, 0xd3, 0x46, 0xcc, 0x61, 0x54,
+ 0x6e, 0xad, 0xbb, 0x7e, 0x83, 0x84, 0xad, 0xd0, 0x15, 0x7e, 0x6f, 0x43, 0x6e, 0x9d, 0xd7, 0x20,
+ 0x6c, 0xe2, 0xd1, 0xbe, 0x83, 0x9b, 0x3e, 0x09, 0xd3, 0xbb, 0x84, 0x65, 0xda, 0x88, 0x39, 0x8c,
+ 0x22, 0xc5, 0x61, 0x5b, 0xb8, 0x95, 0x0c, 0xa4, 0x55, 0xda, 0x88, 0x39, 0x8c, 0xae, 0xf4, 0xa8,
+ 0xbd, 0xc6, 0xa2, 0xa2, 0x52, 0xf9, 0x4a, 0x55, 0xde, 0x8c, 0x25, 0x9c, 0xa2, 0x6e, 0x92, 0xce,
+ 0xbc, 0x13, 0x3b, 0xe9, 0xa4, 0xce, 0xcb, 0xbc, 0x19, 0x4b, 0x38, 0x2b, 0x14, 0x9c, 0x1c, 0x8e,
+ 0x1f, 0xba, 0x42, 0xc1, 0x49, 0xf6, 0x7b, 0x38, 0x27, 0xfe, 0x66, 0x01, 0x46, 0x5e, 0xbf, 0xcd,
+ 0x33, 0xe3, 0x9e, 0x9a, 0xeb, 0x70, 0xbc, 0x2b, 0x7b, 0xb8, 0x0f, 0x0b, 0x69, 0xcf, 0xea, 0x0e,
+ 0x36, 0x86, 0x61, 0xda, 0xb1, 0x2c, 0x90, 0x37, 0x07, 0xc7, 0xf9, 0xe2, 0xa5, 0x94, 0x58, 0x32,
+ 0xa8, 0xca, 0x08, 0x67, 0x07, 0x3b, 0xd7, 0xd2, 0x40, 0xdc, 0x8d, 0x6f, 0x7f, 0xca, 0x82, 0xd1,
+ 0x44, 0x42, 0x77, 0x4e, 0xb6, 0x1c, 0x5b, 0xdd, 0x01, 0x8b, 0xe8, 0x65, 0x19, 0x16, 0x45, 0xa6,
+ 0x86, 0xf5, 0xea, 0xd6, 0x20, 0x6c, 0xe2, 0xd9, 0x9f, 0x2b, 0x40, 0x59, 0x46, 0x1f, 0xf5, 0xc1,
+ 0xca, 0x27, 0x2c, 0x18, 0x55, 0x87, 0x69, 0xcc, 0xfb, 0x59, 0xc8, 0x23, 0xbf, 0x8c, 0x72, 0xa0,
+ 0xfc, 0x27, 0xfe, 0x7a, 0xa0, 0x37, 0x16, 0xd8, 0x24, 0x86, 0x93, 0xb4, 0xd1, 0x35, 0x80, 0xa8,
+ 0x13, 0xc5, 0xa4, 0x69, 0xf8, 0x61, 0x6d, 0x63, 0x96, 0x4d, 0xd5, 0x82, 0x90, 0xd0, 0x39, 0x75,
+ 0x25, 0xa8, 0x93, 0xaa, 0xc2, 0xd4, 0x16, 0x9e, 0x6e, 0xc3, 0x46, 0x4f, 0xf6, 0x6f, 0x14, 0xe0,
+ 0x58, 0x9a, 0x25, 0xf4, 0x6e, 0x18, 0x91, 0xd4, 0x8d, 0xfd, 0xba, 0x8c, 0x9d, 0x1a, 0xc1, 0x06,
+ 0xec, 0xf6, 0xce, 0xe4, 0x64, 0xf7, 0xfd, 0xca, 0x53, 0x26, 0x0a, 0x4e, 0x74, 0xc6, 0x4f, 0x34,
+ 0xc5, 0xd1, 0xfb, 0x6c, 0x67, 0xa6, 0xd5, 0x12, 0xc7, 0x92, 0xc6, 0x89, 0xa6, 0x09, 0xc5, 0x29,
+ 0x6c, 0xb4, 0x02, 0x27, 0x8d, 0x96, 0x2b, 0xc4, 0x6d, 0x6c, 0xac, 0x05, 0xa1, 0xdc, 0x20, 0x3e,
+ 0xa8, 0x23, 0x35, 0xbb, 0x71, 0x70, 0xe6, 0x93, 0xd4, 0xc2, 0xa8, 0x39, 0x2d, 0xa7, 0xe6, 0xc6,
+ 0x1d, 0xe1, 0x58, 0x56, 0xf2, 0x70, 0x4e, 0xb4, 0x63, 0x85, 0x61, 0xff, 0xbd, 0x01, 0x38, 0xc6,
+ 0x43, 0x13, 0x89, 0x8a, 0xbc, 0x45, 0xef, 0x86, 0x4a, 0x14, 0x3b, 0x21, 0xf7, 0x0e, 0x58, 0xfb,
+ 0x96, 0x01, 0x3a, 0x9d, 0x5b, 0x76, 0x82, 0x75, 0x7f, 0xe8, 0x45, 0x56, 0x0b, 0xcb, 0x8d, 0x36,
+ 0x58, 0xef, 0x85, 0x3b, 0xf3, 0x3d, 0x9c, 0x57, 0x3d, 0x60, 0xa3, 0x37, 0xf4, 0x56, 0x28, 0xb5,
+ 0x36, 0x9c, 0x48, 0x3a, 0xc6, 0x1e, 0x95, 0x0b, 0x6e, 0x85, 0x36, 0xde, 0xde, 0x99, 0x3c, 0x95,
+ 0x7e, 0x55, 0x06, 0xc0, 0xfc, 0x21, 0x53, 0x5c, 0x0e, 0xec, 0x7d, 0x5f, 0x4b, 0x3d, 0xec, 0x54,
+ 0x2f, 0xce, 0xa4, 0x6f, 0xf8, 0x98, 0x67, 0xad, 0x58, 0x40, 0xe9, 0xe2, 0xde, 0xe0, 0x24, 0xeb,
+ 0x14, 0x79, 0x30, 0xa9, 0xba, 0x2f, 0x6a, 0x10, 0x36, 0xf1, 0xd0, 0x27, 0xbb, 0x03, 0x57, 0x87,
+ 0x0e, 0x21, 0xb1, 0xa1, 0xdf, 0x90, 0xd5, 0x73, 0x50, 0x11, 0xac, 0xae, 0x06, 0xe8, 0x39, 0x18,
+ 0xe1, 0x7e, 0x97, 0xd9, 0xd0, 0xf1, 0x6b, 0x1b, 0x69, 0x6f, 0xc9, 0xaa, 0x01, 0xc3, 0x09, 0x4c,
+ 0x7b, 0x09, 0x06, 0xfa, 0x94, 0x56, 0x7d, 0x6d, 0x82, 0x5f, 0x80, 0x32, 0xed, 0x4e, 0xee, 0x74,
+ 0xf2, 0xe8, 0x32, 0x80, 0xb2, 0xbc, 0xfd, 0x0f, 0xd9, 0x50, 0x74, 0x1d, 0x19, 0xa0, 0xa0, 0x96,
+ 0xd0, 0x42, 0x14, 0xb5, 0xd9, 0xb4, 0xa3, 0x40, 0xf4, 0x08, 0x14, 0xc9, 0x76, 0x2b, 0x1d, 0x89,
+ 0x70, 0x6e, 0xbb, 0xe5, 0x86, 0x24, 0xa2, 0x48, 0x64, 0xbb, 0x85, 0xce, 0x40, 0xc1, 0xad, 0x8b,
+ 0x19, 0x09, 0x02, 0xa7, 0xb0, 0x30, 0x8f, 0x0b, 0x6e, 0xdd, 0xde, 0x86, 0x8a, 0xba, 0x6e, 0x10,
+ 0x6d, 0x4a, 0xdb, 0xc4, 0xca, 0x23, 0x34, 0x55, 0xf6, 0xdb, 0xc3, 0x2a, 0x69, 0x03, 0xe8, 0x3a,
+ 0x01, 0x79, 0xe9, 0xb2, 0xb3, 0x30, 0x50, 0x0b, 0x44, 0x85, 0x97, 0xb2, 0xee, 0x86, 0x19, 0x25,
+ 0x0c, 0x62, 0x5f, 0x87, 0xb1, 0xcb, 0x7e, 0x70, 0x93, 0xdd, 0x0a, 0xc4, 0x8a, 0xe0, 0xd2, 0x8e,
+ 0xd7, 0xe9, 0x8f, 0xb4, 0x09, 0xcc, 0xa0, 0x98, 0xc3, 0x54, 0x79, 0xce, 0x42, 0xaf, 0xf2, 0x9c,
+ 0xf6, 0x87, 0x2c, 0x18, 0x51, 0x09, 0xc7, 0x17, 0xb6, 0x36, 0x69, 0xbf, 0x8d, 0x30, 0x68, 0xb7,
+ 0xd2, 0xfd, 0xb2, 0x9b, 0x4d, 0x31, 0x87, 0x99, 0x99, 0xf8, 0x85, 0x3d, 0x32, 0xf1, 0xcf, 0xc2,
+ 0xc0, 0xa6, 0xeb, 0xd7, 0xd3, 0xde, 0xc5, 0xcb, 0xae, 0x5f, 0xc7, 0x0c, 0x42, 0x59, 0x38, 0xa6,
+ 0x58, 0x90, 0xc6, 0xc7, 0x73, 0x30, 0xb2, 0xd6, 0x76, 0xbd, 0xba, 0xac, 0xee, 0x9b, 0x5a, 0x2e,
+ 0xb3, 0x06, 0x0c, 0x27, 0x30, 0xd1, 0x53, 0x00, 0x6b, 0xae, 0xef, 0x84, 0x9d, 0x15, 0x6d, 0xed,
+ 0x28, 0x05, 0x38, 0xab, 0x20, 0xd8, 0xc0, 0xb2, 0x3f, 0x53, 0x84, 0xb1, 0x64, 0xda, 0x75, 0x1f,
+ 0x4e, 0x80, 0x47, 0xa0, 0xc4, 0x32, 0xb1, 0xd3, 0x9f, 0x96, 0x17, 0xc4, 0xe5, 0x30, 0x14, 0xc1,
+ 0x20, 0x5f, 0xcc, 0xf9, 0xdc, 0x0e, 0xa9, 0x98, 0x54, 0x2e, 0x49, 0x16, 0xc0, 0x2b, 0x3c, 0xbc,
+ 0x82, 0x14, 0xfa, 0xa8, 0x05, 0x43, 0x41, 0xcb, 0x2c, 0xeb, 0xf8, 0xae, 0x3c, 0x53, 0xd2, 0x45,
+ 0xde, 0xa7, 0xd8, 0xf1, 0xa9, 0x4f, 0x2f, 0x3f, 0x87, 0x24, 0x7d, 0xe6, 0xa7, 0x61, 0xc4, 0xc4,
+ 0xdc, 0x6b, 0xd3, 0x57, 0x36, 0x37, 0x7d, 0x9f, 0x30, 0x27, 0x85, 0x48, 0xba, 0xef, 0x63, 0xb9,
+ 0x5d, 0x85, 0x52, 0x4d, 0x45, 0x39, 0xdd, 0x51, 0x4d, 0x78, 0x55, 0x94, 0x8a, 0x9d, 0x20, 0xf3,
+ 0xde, 0xec, 0xef, 0x58, 0xc6, 0xfc, 0xc0, 0x24, 0x5a, 0xa8, 0xa3, 0x10, 0x8a, 0x8d, 0xad, 0x4d,
+ 0xa1, 0xe6, 0x2f, 0xe5, 0x34, 0xbc, 0x17, 0xb6, 0x36, 0xf5, 0x1c, 0x37, 0x5b, 0x31, 0x25, 0xd6,
+ 0x87, 0xdf, 0x3c, 0x51, 0x9b, 0xa1, 0xb8, 0x77, 0x6d, 0x06, 0xfb, 0xb5, 0x02, 0x1c, 0xef, 0x9a,
+ 0x54, 0xe8, 0x55, 0x28, 0x85, 0xf4, 0x2d, 0xc5, 0xeb, 0x2d, 0xe6, 0x56, 0x4d, 0x21, 0x5a, 0xa8,
+ 0x6b, 0xf5, 0x99, 0x6c, 0xc7, 0x9c, 0x24, 0xba, 0x04, 0x48, 0xc7, 0xe2, 0x29, 0xa7, 0x3d, 0x7f,
+ 0x65, 0x15, 0xb0, 0x33, 0xd3, 0x85, 0x81, 0x33, 0x9e, 0x42, 0xcf, 0xa7, 0x7d, 0xff, 0xc5, 0xe4,
+ 0xa1, 0xd3, 0x6e, 0x6e, 0x7c, 0xfb, 0x77, 0x0a, 0x30, 0x9a, 0xa8, 0xb2, 0x89, 0x3c, 0x28, 0x13,
+ 0x8f, 0x9d, 0x08, 0x4a, 0x65, 0x73, 0xd0, 0x3b, 0x33, 0x94, 0x82, 0x3c, 0x27, 0xfa, 0xc5, 0x8a,
+ 0xc2, 0xbd, 0x11, 0xc7, 0xf3, 0x1c, 0x8c, 0x48, 0x86, 0xde, 0xe5, 0x34, 0x3d, 0x31, 0x80, 0x6a,
+ 0x8e, 0x9e, 0x33, 0x60, 0x38, 0x81, 0x69, 0xff, 0x41, 0x11, 0x26, 0xf8, 0x11, 0x6a, 0x5d, 0xcd,
+ 0xbc, 0x25, 0xe9, 0x4f, 0xf8, 0x65, 0x5d, 0x0b, 0xd7, 0xca, 0xe3, 0x62, 0xe8, 0x5e, 0x84, 0xfa,
+ 0x0a, 0x3f, 0xfd, 0x72, 0x2a, 0xfc, 0x94, 0x6f, 0xf1, 0x1a, 0x87, 0xc4, 0xd1, 0x0f, 0x57, 0x3c,
+ 0xea, 0x3f, 0x2a, 0xc0, 0x78, 0xea, 0xfe, 0x2f, 0xf4, 0x99, 0xe4, 0x95, 0x11, 0x56, 0x1e, 0xc7,
+ 0x4b, 0xbb, 0x5e, 0x09, 0xb5, 0xbf, 0x8b, 0x23, 0xee, 0xd2, 0x52, 0xb1, 0xbf, 0x5d, 0x80, 0xb1,
+ 0xe4, 0xc5, 0x65, 0xf7, 0xe0, 0x48, 0xbd, 0x19, 0x2a, 0xec, 0x6e, 0x1e, 0x76, 0xdf, 0x3e, 0x3f,
+ 0x9d, 0xe2, 0xd7, 0xa0, 0xc8, 0x46, 0xac, 0xe1, 0xf7, 0xc4, 0x7d, 0x1c, 0xf6, 0x3f, 0xb1, 0xe0,
+ 0x14, 0x7f, 0xcb, 0xf4, 0x3c, 0xfc, 0x1b, 0x59, 0xa3, 0xfb, 0x52, 0xbe, 0x0c, 0xa6, 0x6a, 0x38,
+ 0xef, 0x35, 0xbe, 0xec, 0x7a, 0x6c, 0xc1, 0x6d, 0x72, 0x2a, 0xdc, 0x83, 0xcc, 0xee, 0x6b, 0x32,
+ 0xd8, 0xff, 0xae, 0x00, 0xc3, 0xcb, 0x73, 0x0b, 0x4a, 0x84, 0x4f, 0x43, 0xa5, 0x16, 0x12, 0x47,
+ 0x7b, 0x3b, 0xcc, 0x00, 0x1d, 0x09, 0xc0, 0x1a, 0x87, 0x6e, 0x1a, 0x9c, 0x76, 0xbc, 0x11, 0x88,
+ 0x92, 0xd4, 0xc6, 0xa6, 0x61, 0x86, 0x37, 0x63, 0x09, 0x47, 0x8f, 0x43, 0x99, 0xa5, 0x61, 0x5e,
+ 0x0d, 0xa5, 0xc6, 0xd1, 0x3b, 0x49, 0xd6, 0x8e, 0x17, 0xb1, 0xc2, 0xa0, 0x1d, 0xd7, 0x83, 0x5a,
+ 0x44, 0x91, 0x53, 0x0e, 0x88, 0x79, 0xda, 0x8c, 0x17, 0xb1, 0x84, 0xb3, 0x2a, 0x7a, 0x6c, 0x93,
+ 0x4e, 0x91, 0x4b, 0x49, 0xa6, 0xf9, 0x6e, 0x9e, 0xa2, 0x6b, 0x9c, 0xfd, 0x54, 0x5b, 0x4c, 0xa5,
+ 0x42, 0x0d, 0xf5, 0x97, 0x0a, 0x65, 0x7f, 0xbb, 0x08, 0xfa, 0xa6, 0x75, 0xe4, 0x8a, 0xda, 0x03,
+ 0xb9, 0xd4, 0x08, 0xaf, 0x76, 0xfc, 0x9a, 0xbe, 0xd3, 0xbd, 0x9c, 0x2a, 0x3d, 0xf0, 0x8b, 0x16,
+ 0x0c, 0xbb, 0xbe, 0x1b, 0xbb, 0x0e, 0x73, 0x85, 0xe5, 0x73, 0x5d, 0xb2, 0x22, 0xb7, 0xc0, 0x7b,
+ 0x0e, 0x42, 0xf3, 0xa8, 0x58, 0x11, 0xc3, 0x26, 0x65, 0xf4, 0x3e, 0x91, 0x79, 0x53, 0xcc, 0xad,
+ 0x80, 0x47, 0x39, 0x95, 0x6e, 0xd3, 0xa2, 0x06, 0x6d, 0x1c, 0xe6, 0x54, 0xf7, 0x06, 0xd3, 0xae,
+ 0xd4, 0x75, 0x13, 0x6a, 0xcb, 0xc0, 0x9a, 0x31, 0x27, 0x64, 0x47, 0x80, 0xba, 0xc7, 0x62, 0x9f,
+ 0x59, 0x0d, 0xd3, 0x50, 0x71, 0xda, 0x71, 0xd0, 0xa4, 0xc3, 0x24, 0x0e, 0x9a, 0x75, 0xde, 0x86,
+ 0x04, 0x60, 0x8d, 0x63, 0x7f, 0xa6, 0x04, 0xa9, 0x4a, 0x00, 0x68, 0x1b, 0xf4, 0xe5, 0xfd, 0xf9,
+ 0x64, 0x09, 0xea, 0x19, 0xa5, 0x98, 0x51, 0x4d, 0x58, 0x13, 0x43, 0x0d, 0xe9, 0x55, 0xe4, 0xab,
+ 0xfd, 0x85, 0xb4, 0x57, 0xf1, 0x67, 0xfa, 0x3b, 0xad, 0xa1, 0x73, 0x75, 0x9a, 0xd7, 0x7e, 0x9b,
+ 0xda, 0xd3, 0x01, 0xb9, 0xd7, 0x85, 0xd1, 0x1f, 0x16, 0x97, 0x3b, 0x61, 0x12, 0xb5, 0xbd, 0x58,
+ 0xcc, 0x86, 0x17, 0x72, 0x5c, 0x65, 0xbc, 0x63, 0x5d, 0x51, 0x87, 0xff, 0xc7, 0x06, 0xd1, 0xa4,
+ 0x9b, 0x78, 0xf0, 0x50, 0xdd, 0xc4, 0x43, 0xb9, 0xba, 0x89, 0x9f, 0x02, 0x60, 0x73, 0x9b, 0x47,
+ 0x5f, 0x97, 0x99, 0xf7, 0x4e, 0xa9, 0x18, 0xac, 0x20, 0xd8, 0xc0, 0xb2, 0x7f, 0x12, 0x92, 0x25,
+ 0xa1, 0xd0, 0xa4, 0xac, 0x40, 0xc5, 0x4f, 0x92, 0x58, 0xe2, 0x5b, 0xa2, 0x58, 0xd4, 0x6f, 0x59,
+ 0x60, 0xd6, 0xad, 0x42, 0xaf, 0xf0, 0x02, 0x59, 0x56, 0x1e, 0x11, 0x07, 0x46, 0xbf, 0x53, 0x4b,
+ 0x4e, 0x2b, 0x15, 0x25, 0x23, 0xab, 0x64, 0x9d, 0x79, 0x0b, 0x94, 0x25, 0x74, 0x5f, 0xc6, 0xf2,
+ 0x07, 0xe1, 0x84, 0x4c, 0xa2, 0x97, 0x67, 0x1f, 0xe2, 0xb4, 0x7a, 0x6f, 0x97, 0x9a, 0xf4, 0x93,
+ 0x15, 0x7a, 0xf9, 0xc9, 0xd4, 0xee, 0xbf, 0xd8, 0xb3, 0xf4, 0xf5, 0x6f, 0x5b, 0x70, 0x36, 0xcd,
+ 0x40, 0xb4, 0x14, 0xf8, 0x6e, 0x1c, 0x84, 0x55, 0x12, 0xc7, 0xae, 0xdf, 0x60, 0x75, 0x4c, 0x6f,
+ 0x3a, 0xa1, 0xbc, 0xcb, 0x86, 0x09, 0xca, 0xeb, 0x4e, 0xe8, 0x63, 0xd6, 0x8a, 0x3a, 0x30, 0xc8,
+ 0x43, 0x74, 0xc5, 0x2e, 0xe8, 0x80, 0x6b, 0x23, 0x63, 0x38, 0xf4, 0x36, 0x8c, 0x87, 0x07, 0x63,
+ 0x41, 0xd0, 0xfe, 0x9e, 0x05, 0x68, 0x79, 0x8b, 0x84, 0xa1, 0x5b, 0x37, 0x82, 0x8a, 0xd9, 0x25,
+ 0x89, 0xc6, 0x65, 0x88, 0x66, 0x89, 0x87, 0xd4, 0x25, 0x89, 0xc6, 0xbf, 0xec, 0x4b, 0x12, 0x0b,
+ 0xfb, 0xbb, 0x24, 0x11, 0x2d, 0xc3, 0xa9, 0x26, 0xdf, 0xc6, 0xf1, 0x8b, 0xc7, 0xf8, 0x9e, 0x4e,
+ 0x65, 0x23, 0x9f, 0xbe, 0xb5, 0x33, 0x79, 0x6a, 0x29, 0x0b, 0x01, 0x67, 0x3f, 0x67, 0xbf, 0x05,
+ 0x10, 0x8f, 0x25, 0x9e, 0xcb, 0x0a, 0x87, 0xec, 0xe9, 0xd6, 0xb2, 0xbf, 0x54, 0x82, 0xf1, 0xd4,
+ 0x4d, 0x07, 0x74, 0x0b, 0xdd, 0x1d, 0x7f, 0x79, 0x60, 0xfd, 0xdd, 0xcd, 0x5e, 0x5f, 0x11, 0x9d,
+ 0x3e, 0x94, 0x5c, 0xbf, 0xd5, 0x8e, 0xf3, 0x29, 0x86, 0xc0, 0x99, 0x58, 0xa0, 0x1d, 0x1a, 0x6e,
+ 0x78, 0xfa, 0x17, 0x73, 0x32, 0x79, 0xc6, 0x87, 0x26, 0x36, 0x39, 0x03, 0x77, 0xc9, 0xcd, 0xf2,
+ 0x61, 0x1d, 0xad, 0x59, 0xca, 0xc3, 0x61, 0x9b, 0x9a, 0x2c, 0x87, 0x1d, 0xa2, 0xf3, 0xb5, 0x02,
+ 0x0c, 0x1b, 0x1f, 0x0d, 0xfd, 0x6a, 0xb2, 0xaa, 0xa3, 0x95, 0xdf, 0x2b, 0xb1, 0xfe, 0xa7, 0x74,
+ 0xdd, 0x46, 0xfe, 0x4a, 0x8f, 0x76, 0x17, 0x74, 0xbc, 0xbd, 0x33, 0x79, 0x2c, 0x55, 0xb2, 0x31,
+ 0x51, 0xe4, 0xf1, 0xcc, 0x07, 0x60, 0x3c, 0xd5, 0x4d, 0xc6, 0x2b, 0xaf, 0x9a, 0xaf, 0x7c, 0x60,
+ 0x77, 0x9f, 0x39, 0x64, 0x5f, 0xa5, 0x43, 0x26, 0x72, 0xb0, 0x03, 0x8f, 0xf4, 0xe1, 0xdb, 0x4e,
+ 0xed, 0x2f, 0x0a, 0x7d, 0x96, 0x5a, 0x78, 0x0c, 0xca, 0xad, 0xc0, 0x73, 0x6b, 0xae, 0x2a, 0x0a,
+ 0xcd, 0x8a, 0x3b, 0xac, 0x88, 0x36, 0xac, 0xa0, 0xe8, 0x26, 0x54, 0x6e, 0xdc, 0x8c, 0xf9, 0xa9,
+ 0x9a, 0x38, 0x37, 0xc8, 0xeb, 0x30, 0x4d, 0x19, 0x2d, 0xea, 0xd8, 0x0e, 0x6b, 0x5a, 0xc8, 0x86,
+ 0x41, 0xa6, 0x04, 0x65, 0x3e, 0x16, 0x3b, 0xd3, 0x60, 0xda, 0x31, 0xc2, 0x02, 0x62, 0xff, 0x00,
+ 0xe0, 0x64, 0xd6, 0x75, 0x33, 0xe8, 0xfd, 0x30, 0xc8, 0x79, 0xcc, 0xe7, 0x46, 0xb3, 0x2c, 0x1a,
+ 0x17, 0x58, 0x87, 0x82, 0x2d, 0xf6, 0x1b, 0x0b, 0x9a, 0x82, 0xba, 0xe7, 0xac, 0x89, 0x19, 0x72,
+ 0x38, 0xd4, 0x17, 0x1d, 0x4d, 0x7d, 0xd1, 0xe1, 0xd4, 0x3d, 0x67, 0x0d, 0x6d, 0x43, 0xa9, 0xe1,
+ 0xc6, 0xc4, 0x11, 0xce, 0x99, 0xeb, 0x87, 0x42, 0x9c, 0x38, 0xdc, 0x4a, 0x63, 0x3f, 0x31, 0x27,
+ 0x88, 0xbe, 0x62, 0xc1, 0xf8, 0x5a, 0xb2, 0xc6, 0x8b, 0x10, 0x9e, 0xce, 0x21, 0x5c, 0x29, 0x94,
+ 0x24, 0xc4, 0x6f, 0x09, 0x4d, 0x35, 0xe2, 0x34, 0x3b, 0xe8, 0x23, 0x16, 0x0c, 0xad, 0xbb, 0x9e,
+ 0x71, 0x67, 0xc3, 0x21, 0x7c, 0x9c, 0xf3, 0x8c, 0x80, 0xde, 0x71, 0xf0, 0xff, 0x11, 0x96, 0x94,
+ 0x7b, 0x69, 0xaa, 0xc1, 0x83, 0x6a, 0xaa, 0xa1, 0xbb, 0xa4, 0xa9, 0x3e, 0x6e, 0x41, 0x45, 0x8d,
+ 0xb4, 0xa8, 0x95, 0xf1, 0xee, 0x43, 0xfc, 0xe4, 0xdc, 0x23, 0xa5, 0xfe, 0x62, 0x4d, 0x1c, 0x7d,
+ 0xd6, 0x82, 0x61, 0xe7, 0xd5, 0x76, 0x48, 0xea, 0x64, 0x2b, 0x68, 0x45, 0xa2, 0x88, 0xe5, 0x4b,
+ 0xf9, 0x33, 0x33, 0x43, 0x89, 0xcc, 0x93, 0xad, 0xe5, 0x56, 0x24, 0x72, 0x45, 0x75, 0x03, 0x36,
+ 0x59, 0x40, 0xbf, 0xa0, 0xf5, 0x38, 0xe4, 0x51, 0xca, 0x38, 0x8b, 0x9b, 0xc3, 0x56, 0xe6, 0x3b,
+ 0x05, 0x98, 0xdc, 0x63, 0x14, 0xd0, 0x73, 0x30, 0x12, 0x84, 0x0d, 0xc7, 0x77, 0x5f, 0x35, 0x0b,
+ 0x4f, 0x29, 0x4b, 0x71, 0xd9, 0x80, 0xe1, 0x04, 0xa6, 0x59, 0x91, 0xa4, 0xb0, 0x47, 0x45, 0x92,
+ 0xb3, 0x30, 0x10, 0x92, 0x56, 0x90, 0xde, 0xf0, 0xb0, 0x5c, 0x33, 0x06, 0x41, 0x0f, 0x41, 0xd1,
+ 0x69, 0xb9, 0xc2, 0xeb, 0xa7, 0xf6, 0x71, 0x33, 0x2b, 0x0b, 0x98, 0xb6, 0x27, 0x0a, 0x24, 0x95,
+ 0x8e, 0xa4, 0x40, 0x12, 0x55, 0x65, 0xe2, 0x5c, 0x6b, 0x50, 0xab, 0xb2, 0xe4, 0x79, 0x93, 0xfd,
+ 0x5a, 0x11, 0x1e, 0xda, 0x75, 0xce, 0xeb, 0x18, 0x64, 0x6b, 0x97, 0x18, 0x64, 0x39, 0x3c, 0x85,
+ 0xbd, 0x86, 0xa7, 0xd8, 0x63, 0x78, 0x3e, 0x42, 0x97, 0xb2, 0x2c, 0xd8, 0x95, 0xcf, 0x45, 0xd7,
+ 0xbd, 0xea, 0x7f, 0x89, 0x55, 0x2c, 0xa1, 0x58, 0xd3, 0xa5, 0xfb, 0x98, 0x44, 0x35, 0x8e, 0x52,
+ 0x1e, 0xaa, 0xac, 0x67, 0xd1, 0x2c, 0xbe, 0x7e, 0x7b, 0x95, 0xf8, 0xb0, 0x7f, 0x77, 0x00, 0x1e,
+ 0xe9, 0x43, 0x03, 0x99, 0xb3, 0xd8, 0xea, 0x73, 0x16, 0xff, 0x90, 0x7f, 0xa6, 0x8f, 0x65, 0x7e,
+ 0x26, 0x9c, 0xff, 0x67, 0xda, 0xfd, 0x0b, 0xb1, 0xa3, 0x01, 0x3f, 0x22, 0xb5, 0x76, 0xc8, 0xf3,
+ 0x31, 0x8c, 0x44, 0xd4, 0x05, 0xd1, 0x8e, 0x15, 0x06, 0xdd, 0x97, 0xd6, 0x1c, 0xba, 0xfc, 0x87,
+ 0x72, 0xaa, 0xbe, 0x60, 0xe6, 0xb4, 0x72, 0xb3, 0x68, 0x6e, 0x86, 0x4a, 0x00, 0x4e, 0xc6, 0xfe,
+ 0x15, 0x0b, 0xce, 0xf4, 0x36, 0x13, 0xd0, 0x93, 0x30, 0xbc, 0xc6, 0x82, 0xfa, 0x96, 0x58, 0xe0,
+ 0x90, 0x98, 0x3a, 0xec, 0x7d, 0x75, 0x33, 0x36, 0x71, 0xd0, 0x1c, 0x1c, 0x37, 0xa3, 0x01, 0x97,
+ 0x8c, 0x88, 0x23, 0xe6, 0xc8, 0x58, 0x4d, 0x03, 0x71, 0x37, 0xbe, 0xfd, 0xfd, 0x62, 0x36, 0x5b,
+ 0xdc, 0x9c, 0xdc, 0xcf, 0x6c, 0x16, 0x73, 0xb5, 0xd0, 0x87, 0xc4, 0x2d, 0x1e, 0xb5, 0xc4, 0x1d,
+ 0xe8, 0x25, 0x71, 0xd1, 0x3c, 0x1c, 0x33, 0xee, 0xa0, 0xe4, 0xf5, 0x38, 0xf8, 0xe9, 0x8f, 0x2a,
+ 0xa6, 0xb5, 0x92, 0x82, 0xe3, 0xae, 0x27, 0xee, 0xf1, 0xa9, 0xf7, 0x8d, 0x02, 0x9c, 0xee, 0x69,
+ 0xc1, 0x1f, 0x91, 0x46, 0x31, 0x3f, 0xff, 0xc0, 0xd1, 0x7c, 0x7e, 0xf3, 0xa3, 0x94, 0xf6, 0xfc,
+ 0x28, 0xfd, 0xa8, 0xe7, 0x3f, 0x29, 0xf4, 0x5c, 0x2c, 0x74, 0xc7, 0xf7, 0x23, 0x3b, 0x92, 0xcf,
+ 0xc3, 0xa8, 0xd3, 0x6a, 0x71, 0x3c, 0x16, 0xf1, 0x9f, 0x2a, 0xf0, 0x37, 0x63, 0x02, 0x71, 0x12,
+ 0xb7, 0xaf, 0x81, 0xfd, 0x73, 0x0b, 0x2a, 0x98, 0xac, 0x73, 0x89, 0x85, 0x6e, 0x88, 0x21, 0xb2,
+ 0xf2, 0xa8, 0xb2, 0x4e, 0x07, 0x36, 0x72, 0x59, 0xe9, 0xf1, 0xac, 0xc1, 0x3e, 0x68, 0x8a, 0xbc,
+ 0xba, 0xb9, 0xb2, 0xd8, 0xfb, 0xe6, 0x4a, 0xfb, 0xeb, 0x15, 0xfa, 0x7a, 0xad, 0x60, 0x2e, 0x24,
+ 0xf5, 0x88, 0x7e, 0xdf, 0x76, 0xe8, 0x89, 0x49, 0xa2, 0xbe, 0xef, 0x55, 0xbc, 0x88, 0x69, 0x7b,
+ 0xe2, 0x20, 0xb0, 0xb0, 0xaf, 0xf2, 0x66, 0xc5, 0x3d, 0xcb, 0x9b, 0x3d, 0x0f, 0xa3, 0x51, 0xb4,
+ 0xb1, 0x12, 0xba, 0x5b, 0x4e, 0x4c, 0x2e, 0x93, 0x8e, 0xb0, 0x8f, 0x75, 0xa9, 0x9f, 0xea, 0x45,
+ 0x0d, 0xc4, 0x49, 0x5c, 0x74, 0x01, 0x8e, 0xeb, 0x22, 0x63, 0x24, 0x8c, 0x59, 0x4e, 0x1a, 0x9f,
+ 0x09, 0xaa, 0xae, 0x87, 0x2e, 0x4b, 0x26, 0x10, 0x70, 0xf7, 0x33, 0x54, 0xe6, 0x26, 0x1a, 0x29,
+ 0x23, 0x83, 0x49, 0x99, 0x9b, 0xe8, 0x87, 0xf2, 0xd2, 0xf5, 0x04, 0x5a, 0x82, 0x13, 0x7c, 0x62,
+ 0xcc, 0xb4, 0x5a, 0xc6, 0x1b, 0x0d, 0x25, 0x4b, 0x5b, 0x5f, 0xe8, 0x46, 0xc1, 0x59, 0xcf, 0xa1,
+ 0x67, 0x61, 0x58, 0x35, 0x2f, 0xcc, 0x8b, 0x33, 0x2c, 0xe5, 0x43, 0x53, 0xdd, 0x2c, 0xd4, 0xb1,
+ 0x89, 0x87, 0xde, 0x05, 0xf7, 0xeb, 0xbf, 0x3c, 0xc7, 0x99, 0x1f, 0xec, 0xce, 0x8b, 0xfa, 0x8d,
+ 0xea, 0xe6, 0xa4, 0x0b, 0x99, 0x68, 0x75, 0xdc, 0xeb, 0x79, 0xb4, 0x06, 0x67, 0x14, 0xe8, 0x9c,
+ 0x1f, 0xb3, 0x2c, 0xc4, 0x88, 0xcc, 0x3a, 0x11, 0x0b, 0x51, 0x00, 0xf6, 0x9e, 0xea, 0x2a, 0xfd,
+ 0x0b, 0x6e, 0x7c, 0x31, 0x0b, 0x13, 0x2f, 0xe2, 0x5d, 0x7a, 0x41, 0xd3, 0x50, 0x21, 0xbe, 0xb3,
+ 0xe6, 0x91, 0xe5, 0xb9, 0x05, 0x56, 0x07, 0xd2, 0x38, 0x47, 0x3e, 0x27, 0x01, 0x58, 0xe3, 0xa8,
+ 0xb8, 0xf1, 0x91, 0x5e, 0x71, 0xe3, 0x68, 0x05, 0x4e, 0x36, 0x6a, 0x2d, 0x6a, 0x35, 0xba, 0x35,
+ 0x32, 0x53, 0x63, 0x61, 0xb2, 0xf4, 0xc3, 0xf0, 0x9a, 0xe3, 0x2a, 0x01, 0xe7, 0xc2, 0xdc, 0x4a,
+ 0x17, 0x0e, 0xce, 0x7c, 0x92, 0x85, 0x53, 0x87, 0xc1, 0x76, 0x67, 0xe2, 0x44, 0x2a, 0x9c, 0x9a,
+ 0x36, 0x62, 0x0e, 0x43, 0x97, 0x00, 0xb1, 0x6c, 0xae, 0x8b, 0x71, 0xdc, 0x52, 0x66, 0xea, 0xc4,
+ 0xc9, 0x64, 0x35, 0xb7, 0xf3, 0x5d, 0x18, 0x38, 0xe3, 0x29, 0x6a, 0xf5, 0xf8, 0x01, 0xeb, 0x7d,
+ 0xe2, 0xfe, 0xa4, 0xd5, 0x73, 0x85, 0x37, 0x63, 0x09, 0x47, 0xef, 0x81, 0x89, 0x76, 0x44, 0xd8,
+ 0x06, 0xf8, 0x7a, 0x10, 0x6e, 0x7a, 0x81, 0x53, 0x5f, 0x60, 0x57, 0x64, 0xc6, 0x9d, 0x89, 0x09,
+ 0x46, 0xfc, 0xac, 0x78, 0x76, 0xe2, 0x6a, 0x0f, 0x3c, 0xdc, 0xb3, 0x87, 0x74, 0x39, 0xc2, 0xd3,
+ 0x7d, 0x96, 0x23, 0x5c, 0x81, 0x93, 0x52, 0xaf, 0x2d, 0xcf, 0x2d, 0xa8, 0x97, 0x9e, 0x38, 0x93,
+ 0xbc, 0x73, 0x6b, 0x21, 0x03, 0x07, 0x67, 0x3e, 0x69, 0xff, 0x99, 0x05, 0xa3, 0x4a, 0x82, 0x1d,
+ 0x41, 0x56, 0xa9, 0x97, 0xcc, 0x2a, 0xbd, 0x70, 0x70, 0x1d, 0xc0, 0x38, 0xef, 0x91, 0xba, 0xf1,
+ 0x85, 0x51, 0x00, 0xad, 0x27, 0x94, 0x8a, 0xb6, 0x7a, 0xaa, 0xe8, 0x7b, 0x56, 0x46, 0x67, 0x95,
+ 0x97, 0x2b, 0xdd, 0xdd, 0xf2, 0x72, 0x55, 0x38, 0x25, 0xa7, 0x14, 0x3f, 0xbb, 0xbd, 0x18, 0x44,
+ 0x4a, 0xe4, 0x1b, 0x97, 0xa8, 0x2d, 0x64, 0x21, 0xe1, 0xec, 0x67, 0x13, 0xb6, 0xdd, 0xd0, 0x9e,
+ 0xb6, 0x9d, 0x92, 0x72, 0x8b, 0xeb, 0xf2, 0x8a, 0xc3, 0x94, 0x94, 0x5b, 0x3c, 0x5f, 0xc5, 0x1a,
+ 0x27, 0x5b, 0xd5, 0x55, 0x72, 0x52, 0x75, 0xb0, 0x6f, 0x55, 0x27, 0x85, 0xee, 0x70, 0x4f, 0xa1,
+ 0x2b, 0xcf, 0x88, 0x46, 0x7a, 0x9e, 0x11, 0xbd, 0x1d, 0xc6, 0x5c, 0x7f, 0x83, 0x84, 0x6e, 0x4c,
+ 0xea, 0x6c, 0x2d, 0x30, 0x81, 0x5c, 0xd6, 0x86, 0xce, 0x42, 0x02, 0x8a, 0x53, 0xd8, 0x49, 0x4d,
+ 0x31, 0xd6, 0x87, 0xa6, 0xe8, 0xa1, 0x9f, 0xc7, 0xf3, 0xd1, 0xcf, 0xc7, 0x0e, 0xae, 0x9f, 0x8f,
+ 0x1f, 0xaa, 0x7e, 0x46, 0xb9, 0xe8, 0xe7, 0xbe, 0x54, 0x9f, 0xb1, 0x49, 0x3f, 0xb9, 0xc7, 0x26,
+ 0xbd, 0x97, 0x72, 0x3e, 0x75, 0xc7, 0xca, 0x39, 0x5b, 0xef, 0xde, 0xf7, 0xba, 0xde, 0xcd, 0x45,
+ 0xef, 0x7e, 0xbc, 0x00, 0xa7, 0xb4, 0x66, 0xa2, 0xf2, 0xc0, 0x5d, 0xa7, 0xb2, 0x99, 0xdd, 0x1b,
+ 0xcc, 0x4f, 0x96, 0x8d, 0x14, 0x6c, 0x9d, 0xcd, 0xad, 0x20, 0xd8, 0xc0, 0x62, 0x99, 0xcc, 0x24,
+ 0x64, 0x37, 0x56, 0xa4, 0xd5, 0xd6, 0x9c, 0x68, 0xc7, 0x0a, 0x83, 0x0e, 0x02, 0xfd, 0x2d, 0x2a,
+ 0x52, 0xa4, 0x6b, 0x21, 0xcf, 0x69, 0x10, 0x36, 0xf1, 0xd0, 0x63, 0x9c, 0x08, 0x13, 0x99, 0x54,
+ 0x75, 0x8d, 0xf0, 0x6d, 0xa5, 0x92, 0x92, 0x0a, 0x2a, 0xd9, 0x61, 0x29, 0xeb, 0xa5, 0x6e, 0x76,
+ 0x58, 0x90, 0xa6, 0xc2, 0xb0, 0xff, 0x87, 0x05, 0xa7, 0x33, 0x87, 0xe2, 0x08, 0xcc, 0x91, 0xed,
+ 0xa4, 0x39, 0x52, 0xcd, 0x6b, 0x4b, 0x6a, 0xbc, 0x45, 0x0f, 0xd3, 0xe4, 0xdf, 0x5b, 0x30, 0xa6,
+ 0xf1, 0x8f, 0xe0, 0x55, 0xdd, 0xe4, 0xab, 0xe6, 0xb7, 0xfb, 0xae, 0x74, 0xbd, 0xdb, 0x1f, 0x14,
+ 0x40, 0xd5, 0x27, 0x9f, 0xa9, 0xc9, 0xdb, 0x1f, 0xf6, 0x88, 0x75, 0xe8, 0xc0, 0x20, 0x0b, 0xd5,
+ 0x88, 0xf2, 0x09, 0x43, 0x4b, 0xd2, 0x67, 0x61, 0x1f, 0xfa, 0xe4, 0x8c, 0xfd, 0x8d, 0xb0, 0x20,
+ 0xc8, 0xee, 0x53, 0xe1, 0xa5, 0x9f, 0xeb, 0x22, 0x21, 0x57, 0xdf, 0xa7, 0x22, 0xda, 0xb1, 0xc2,
+ 0xa0, 0x0a, 0xd3, 0xad, 0x05, 0xfe, 0x9c, 0xe7, 0x44, 0x91, 0xb0, 0xe1, 0x94, 0xc2, 0x5c, 0x90,
+ 0x00, 0xac, 0x71, 0x58, 0x14, 0x87, 0x1b, 0xb5, 0x3c, 0xa7, 0x63, 0xf8, 0x58, 0x8c, 0xca, 0x4b,
+ 0x0a, 0x84, 0x4d, 0x3c, 0xbb, 0x09, 0x13, 0xc9, 0x97, 0x98, 0x27, 0xeb, 0x2c, 0x84, 0xba, 0xaf,
+ 0xe1, 0x9c, 0x86, 0x8a, 0xc3, 0x9e, 0x5a, 0x6c, 0x3b, 0x42, 0x26, 0xe8, 0x40, 0x62, 0x09, 0xc0,
+ 0x1a, 0xc7, 0xfe, 0xc7, 0x16, 0x9c, 0xc8, 0x18, 0xb4, 0x1c, 0x13, 0x9e, 0x63, 0x2d, 0x6d, 0xb2,
+ 0x4c, 0x9d, 0x9f, 0x80, 0xa1, 0x3a, 0x59, 0x77, 0x64, 0x90, 0xae, 0x19, 0xd3, 0xcf, 0x9b, 0xb1,
+ 0x84, 0xdb, 0xbf, 0x53, 0x80, 0xf1, 0x24, 0xaf, 0x11, 0x4b, 0x22, 0xe4, 0xc3, 0xe4, 0x46, 0xb5,
+ 0x60, 0x8b, 0x84, 0x1d, 0xfa, 0xe6, 0x56, 0x2a, 0x89, 0xb0, 0x0b, 0x03, 0x67, 0x3c, 0xc5, 0x6e,
+ 0x27, 0xa8, 0xab, 0xd1, 0x96, 0x33, 0xf2, 0x5a, 0x9e, 0x33, 0x52, 0x7f, 0x4c, 0x33, 0xa0, 0x47,
+ 0x91, 0xc4, 0x26, 0x7d, 0x6a, 0x72, 0xb1, 0xac, 0x8c, 0xd9, 0xb6, 0xeb, 0xc5, 0xae, 0x2f, 0x5e,
+ 0x59, 0xcc, 0x55, 0x65, 0x72, 0x2d, 0x75, 0xa3, 0xe0, 0xac, 0xe7, 0xec, 0xef, 0x0d, 0x80, 0x2a,
+ 0xe6, 0xc1, 0x02, 0x2e, 0x73, 0x0a, 0x57, 0xdd, 0x6f, 0x2a, 0xaa, 0x9a, 0x5b, 0x03, 0xbb, 0x45,
+ 0x40, 0x71, 0xc7, 0x9c, 0xe9, 0xc1, 0x57, 0x03, 0xb6, 0xaa, 0x41, 0xd8, 0xc4, 0xa3, 0x9c, 0x78,
+ 0xee, 0x16, 0xe1, 0x0f, 0x0d, 0x26, 0x39, 0x59, 0x94, 0x00, 0xac, 0x71, 0x28, 0x27, 0x75, 0x77,
+ 0x7d, 0x5d, 0x78, 0x99, 0x14, 0x27, 0x74, 0x74, 0x30, 0x83, 0xf0, 0xfb, 0x6b, 0x82, 0x4d, 0xb1,
+ 0xcd, 0x30, 0xee, 0xaf, 0x09, 0x36, 0x31, 0x83, 0xd0, 0xaf, 0xe4, 0x07, 0x61, 0xd3, 0xf1, 0xdc,
+ 0x57, 0x49, 0x5d, 0x51, 0x11, 0xdb, 0x0b, 0xf5, 0x95, 0xae, 0x74, 0xa3, 0xe0, 0xac, 0xe7, 0xe8,
+ 0x84, 0x6e, 0x85, 0xa4, 0xee, 0xd6, 0x62, 0xb3, 0x37, 0x48, 0x4e, 0xe8, 0x95, 0x2e, 0x0c, 0x9c,
+ 0xf1, 0x14, 0x9a, 0x81, 0x71, 0x59, 0x8c, 0x45, 0x56, 0x02, 0x1c, 0x4e, 0x96, 0x13, 0xc3, 0x49,
+ 0x30, 0x4e, 0xe3, 0x53, 0x21, 0xd9, 0x14, 0x75, 0x4c, 0xd9, 0x6e, 0xc4, 0x10, 0x92, 0xb2, 0xbe,
+ 0x29, 0x56, 0x18, 0xf6, 0x87, 0x8b, 0x54, 0xa9, 0xf7, 0x28, 0x17, 0x7c, 0x64, 0xe1, 0xd1, 0xc9,
+ 0x19, 0x39, 0xd0, 0xc7, 0x8c, 0x7c, 0x06, 0x46, 0x6e, 0x44, 0x81, 0xaf, 0x42, 0x8f, 0x4b, 0x3d,
+ 0x43, 0x8f, 0x0d, 0xac, 0xec, 0xd0, 0xe3, 0xc1, 0xbc, 0x42, 0x8f, 0x87, 0xee, 0x30, 0xf4, 0xf8,
+ 0x0f, 0x4b, 0xa0, 0x2e, 0x28, 0xbc, 0x42, 0xe2, 0x9b, 0x41, 0xb8, 0xe9, 0xfa, 0x0d, 0x56, 0x58,
+ 0xe4, 0x2b, 0x96, 0xac, 0x4d, 0xb2, 0x68, 0xa6, 0xe4, 0xae, 0xe7, 0x74, 0xc9, 0x5c, 0x82, 0xd8,
+ 0xd4, 0xaa, 0x41, 0x88, 0x87, 0xb0, 0xa4, 0x6a, 0xa0, 0x88, 0x43, 0x83, 0x04, 0x47, 0xe8, 0x03,
+ 0x00, 0xd2, 0x25, 0xbf, 0x2e, 0x25, 0xf0, 0x42, 0x3e, 0xfc, 0x61, 0xb2, 0xae, 0x4d, 0xea, 0x55,
+ 0x45, 0x04, 0x1b, 0x04, 0xd1, 0xc7, 0x75, 0xba, 0x32, 0xcf, 0x51, 0x7a, 0xdf, 0xa1, 0x8c, 0x4d,
+ 0x3f, 0xc9, 0xca, 0x18, 0x86, 0x5c, 0xbf, 0x41, 0xe7, 0x89, 0x08, 0xd1, 0x7c, 0x53, 0x56, 0x01,
+ 0xa8, 0xc5, 0xc0, 0xa9, 0xcf, 0x3a, 0x9e, 0xe3, 0xd7, 0x48, 0xb8, 0xc0, 0xd1, 0xb5, 0x06, 0x15,
+ 0x0d, 0x58, 0x76, 0xd4, 0x75, 0x8b, 0x62, 0xa9, 0x9f, 0x5b, 0x14, 0xcf, 0xbc, 0x03, 0x8e, 0x77,
+ 0x7d, 0xcc, 0x7d, 0xe5, 0x26, 0xdf, 0x79, 0x5a, 0xb3, 0xfd, 0xbb, 0x83, 0x5a, 0x69, 0x5d, 0x09,
+ 0xea, 0xfc, 0x52, 0xbe, 0x50, 0x7f, 0x51, 0x61, 0x32, 0xe7, 0x38, 0x45, 0x94, 0x9a, 0x31, 0x1a,
+ 0xb1, 0x49, 0x92, 0xce, 0xd1, 0x96, 0x13, 0x12, 0xff, 0xb0, 0xe7, 0xe8, 0x8a, 0x22, 0x82, 0x0d,
+ 0x82, 0x68, 0x23, 0x91, 0x44, 0x77, 0xfe, 0xe0, 0x49, 0x74, 0xac, 0x1c, 0x67, 0xd6, 0xdd, 0x55,
+ 0x9f, 0xb5, 0x60, 0xcc, 0x4f, 0xcc, 0xdc, 0x7c, 0xe2, 0xe6, 0xb3, 0x57, 0x05, 0xbf, 0xdf, 0x36,
+ 0xd9, 0x86, 0x53, 0xf4, 0xb3, 0x54, 0x5a, 0x69, 0x9f, 0x2a, 0x4d, 0x5f, 0x0a, 0x3a, 0xd8, 0xeb,
+ 0x52, 0x50, 0xe4, 0xab, 0xdb, 0x9a, 0x87, 0xf2, 0xa8, 0xfb, 0x91, 0xb8, 0xaa, 0x19, 0x32, 0xae,
+ 0x69, 0xbe, 0x6e, 0xe6, 0xd8, 0xee, 0xff, 0xd6, 0xde, 0xd1, 0x5e, 0xb9, 0xb8, 0xf6, 0xff, 0x1e,
+ 0x80, 0x63, 0x72, 0x44, 0x64, 0xce, 0x0d, 0xd5, 0x8f, 0x9c, 0xae, 0xb6, 0x95, 0x95, 0x7e, 0xbc,
+ 0x28, 0x01, 0x58, 0xe3, 0x50, 0x7b, 0xac, 0x1d, 0x91, 0xe5, 0x16, 0xf1, 0x17, 0xdd, 0xb5, 0x48,
+ 0x1c, 0xbf, 0xab, 0x85, 0x72, 0x55, 0x83, 0xb0, 0x89, 0xc7, 0x12, 0x81, 0x0d, 0xa3, 0xd5, 0x4c,
+ 0x04, 0x16, 0x86, 0xaa, 0x84, 0xa3, 0x2f, 0x66, 0xde, 0x5f, 0x90, 0x4f, 0xa6, 0x6a, 0x57, 0xaa,
+ 0xd1, 0x3e, 0xaf, 0x9d, 0xff, 0xfb, 0x16, 0x9c, 0xe2, 0xad, 0x72, 0x24, 0xaf, 0xb6, 0xea, 0x4e,
+ 0x4c, 0xa2, 0x7c, 0xee, 0x3d, 0xca, 0xe0, 0x4f, 0x7b, 0xd1, 0xb3, 0xc8, 0xe2, 0x6c, 0x6e, 0xd0,
+ 0x67, 0x2c, 0x18, 0xdf, 0x4c, 0x14, 0x8f, 0x92, 0xaa, 0xe3, 0xa0, 0x75, 0x5d, 0x12, 0x9d, 0xea,
+ 0xa5, 0x96, 0x6c, 0x8f, 0x70, 0x9a, 0xba, 0xfd, 0xdf, 0x2d, 0x30, 0xc5, 0xe8, 0xd1, 0xd7, 0x9c,
+ 0xda, 0xbf, 0x29, 0x28, 0xad, 0xcb, 0x52, 0x4f, 0xeb, 0xf2, 0x21, 0x28, 0xb6, 0xdd, 0xba, 0xd8,
+ 0x5f, 0xe8, 0x03, 0xff, 0x85, 0x79, 0x4c, 0xdb, 0xed, 0xef, 0x96, 0xb4, 0x1b, 0x44, 0x24, 0x82,
+ 0xfe, 0x48, 0xbc, 0xf6, 0xba, 0xaa, 0xca, 0xca, 0xdf, 0xfc, 0x4a, 0x57, 0x55, 0xd6, 0xb7, 0xee,
+ 0x3f, 0xcf, 0x97, 0x0f, 0x50, 0xaf, 0xa2, 0xac, 0x43, 0x7b, 0x24, 0xf9, 0xde, 0x80, 0x32, 0xdd,
+ 0x82, 0x31, 0x7f, 0x66, 0x39, 0xc1, 0x54, 0xf9, 0xa2, 0x68, 0xbf, 0xbd, 0x33, 0xf9, 0xd3, 0xfb,
+ 0x67, 0x4b, 0x3e, 0x8d, 0x55, 0xff, 0x28, 0x82, 0x0a, 0xfd, 0xcd, 0xf2, 0x91, 0xc5, 0xe6, 0xee,
+ 0xaa, 0x92, 0x99, 0x12, 0x90, 0x4b, 0xb2, 0xb3, 0xa6, 0x83, 0x7c, 0xa8, 0x50, 0x44, 0x4e, 0x94,
+ 0xef, 0x01, 0x57, 0x54, 0x56, 0xb0, 0x04, 0xdc, 0xde, 0x99, 0x7c, 0x7e, 0xff, 0x44, 0xd5, 0xe3,
+ 0x58, 0x93, 0x30, 0x54, 0xe3, 0x70, 0xcf, 0xfb, 0xb2, 0xff, 0xcf, 0x80, 0x9e, 0xdf, 0xa2, 0x60,
+ 0xef, 0x8f, 0xc4, 0xfc, 0x7e, 0x2e, 0x35, 0xbf, 0xcf, 0x76, 0xcd, 0xef, 0x31, 0x3a, 0x66, 0x19,
+ 0x65, 0x84, 0x8f, 0xda, 0x58, 0xd8, 0xdb, 0x27, 0xc1, 0xac, 0xa4, 0x57, 0xda, 0x6e, 0x48, 0xa2,
+ 0x95, 0xb0, 0xed, 0xbb, 0x7e, 0x83, 0x4d, 0xd9, 0xb2, 0x69, 0x25, 0x25, 0xc0, 0x38, 0x8d, 0x4f,
+ 0x37, 0xfe, 0x74, 0x5e, 0x5c, 0x77, 0xb6, 0xf8, 0xcc, 0x33, 0x6a, 0x3c, 0x56, 0x45, 0x3b, 0x56,
+ 0x18, 0x68, 0x03, 0x1e, 0x94, 0x1d, 0xcc, 0x13, 0x8f, 0xd0, 0x17, 0x62, 0x81, 0x8c, 0x61, 0x93,
+ 0xa7, 0x0d, 0xf0, 0x58, 0x94, 0x37, 0x8a, 0x1e, 0x1e, 0xc4, 0xbb, 0xe0, 0xe2, 0x5d, 0x7b, 0xb2,
+ 0xbf, 0xca, 0x42, 0x17, 0x8c, 0xb2, 0x0c, 0x74, 0xf6, 0x79, 0x6e, 0xd3, 0x95, 0xa5, 0x28, 0xd5,
+ 0xec, 0x5b, 0xa4, 0x8d, 0x98, 0xc3, 0xd0, 0x4d, 0x18, 0x5a, 0xe3, 0xf7, 0x68, 0xe7, 0x73, 0x67,
+ 0x8f, 0xb8, 0x94, 0x9b, 0xd5, 0x73, 0x96, 0x37, 0x74, 0xdf, 0xd6, 0x3f, 0xb1, 0xa4, 0x66, 0x7f,
+ 0xab, 0x04, 0xe3, 0x32, 0xbc, 0xec, 0xa2, 0x1b, 0xb1, 0x88, 0x04, 0xb3, 0xc8, 0x7d, 0x61, 0xcf,
+ 0x22, 0xf7, 0xef, 0x05, 0xa8, 0x93, 0x96, 0x17, 0x74, 0x98, 0x71, 0x38, 0xb0, 0x6f, 0xe3, 0x50,
+ 0xed, 0x27, 0xe6, 0x55, 0x2f, 0xd8, 0xe8, 0x51, 0xd4, 0xdf, 0xe4, 0x35, 0xf3, 0x53, 0xf5, 0x37,
+ 0x8d, 0x9b, 0xbd, 0x06, 0x8f, 0xf6, 0x66, 0x2f, 0x17, 0xc6, 0x39, 0x8b, 0xaa, 0xf8, 0xc1, 0x1d,
+ 0xd4, 0x38, 0x60, 0xe9, 0x63, 0xf3, 0xc9, 0x6e, 0x70, 0xba, 0x5f, 0xf3, 0xda, 0xae, 0xf2, 0x51,
+ 0x5f, 0xdb, 0xf5, 0x66, 0xa8, 0xc8, 0xef, 0x1c, 0x4d, 0x54, 0x74, 0x61, 0x1e, 0x39, 0x0d, 0x22,
+ 0xac, 0xe1, 0x5d, 0x75, 0x5c, 0xe0, 0x6e, 0xd5, 0x71, 0xb1, 0x3f, 0x5d, 0xa0, 0xbb, 0x0a, 0xce,
+ 0x97, 0xaa, 0x13, 0xf4, 0x28, 0x0c, 0xf2, 0xb2, 0x3e, 0xe9, 0x8b, 0x98, 0x78, 0xd5, 0x1f, 0x2c,
+ 0xa0, 0x68, 0x11, 0x06, 0xea, 0xba, 0x7c, 0xd7, 0x7e, 0xbe, 0xa7, 0x76, 0xd0, 0x3a, 0x31, 0xc1,
+ 0xac, 0x17, 0xf4, 0x20, 0x0c, 0xc4, 0x4e, 0x43, 0x66, 0xbc, 0xb2, 0x2a, 0x07, 0xab, 0x4e, 0x23,
+ 0xc2, 0xac, 0x75, 0x3f, 0x25, 0x8b, 0x9f, 0x87, 0xd1, 0xc8, 0x6d, 0xf8, 0x4e, 0xdc, 0x0e, 0x89,
+ 0x71, 0x86, 0xa9, 0x03, 0x75, 0x4c, 0x20, 0x4e, 0xe2, 0xda, 0x5f, 0x1f, 0x81, 0x93, 0xd5, 0xb9,
+ 0x25, 0x79, 0x3f, 0xcb, 0xa1, 0x25, 0xad, 0x66, 0xd1, 0x38, 0xba, 0xa4, 0xd5, 0x1e, 0xd4, 0x3d,
+ 0x23, 0x69, 0xd5, 0x33, 0x92, 0x56, 0x93, 0x19, 0x84, 0xc5, 0x3c, 0x32, 0x08, 0xb3, 0x38, 0xe8,
+ 0x27, 0x83, 0xf0, 0xd0, 0xb2, 0x58, 0x77, 0x65, 0x68, 0x5f, 0x59, 0xac, 0x2a, 0xc5, 0x37, 0x97,
+ 0xbc, 0xa8, 0x1e, 0x9f, 0x2a, 0x33, 0xc5, 0x57, 0xa5, 0x57, 0xf2, 0x9c, 0x3f, 0x21, 0xea, 0x5f,
+ 0xca, 0x9f, 0x81, 0x3e, 0xd2, 0x2b, 0x45, 0xda, 0xa1, 0x99, 0xd2, 0x3b, 0x94, 0x47, 0x4a, 0x6f,
+ 0x16, 0x3b, 0x7b, 0xa6, 0xf4, 0x3e, 0x0f, 0xa3, 0x35, 0x2f, 0xf0, 0xc9, 0x4a, 0x18, 0xc4, 0x41,
+ 0x2d, 0x90, 0x77, 0x01, 0xeb, 0xab, 0xec, 0x4c, 0x20, 0x4e, 0xe2, 0xf6, 0xca, 0x07, 0xae, 0x1c,
+ 0x34, 0x1f, 0x18, 0xee, 0x52, 0x3e, 0xb0, 0x91, 0xf1, 0x3a, 0x9c, 0x47, 0xc6, 0x6b, 0xd6, 0x17,
+ 0xe9, 0xeb, 0xb2, 0xdf, 0xd7, 0xf8, 0x55, 0xd8, 0xd4, 0x04, 0x9f, 0x0b, 0x9a, 0xd4, 0xf0, 0x1b,
+ 0x61, 0x43, 0xf2, 0xf2, 0x21, 0x4c, 0xd8, 0xeb, 0x55, 0x4d, 0x46, 0x5d, 0x8f, 0xad, 0x9b, 0x70,
+ 0x92, 0x91, 0x83, 0x24, 0xe3, 0x7e, 0xa9, 0x00, 0x3f, 0xb6, 0x27, 0x0b, 0xe8, 0x26, 0x40, 0xec,
+ 0x34, 0xc4, 0x44, 0x15, 0xc7, 0x37, 0x07, 0x8c, 0xa6, 0x5d, 0x95, 0xfd, 0xf1, 0x92, 0x50, 0xea,
+ 0x2f, 0x3b, 0x18, 0x91, 0xbf, 0x59, 0x10, 0x6d, 0xe0, 0x75, 0x55, 0x24, 0xc6, 0x81, 0x47, 0x30,
+ 0x83, 0x50, 0xf5, 0x1f, 0x92, 0x06, 0x35, 0x69, 0x8b, 0x49, 0xf5, 0x8f, 0x59, 0x2b, 0x16, 0x50,
+ 0xf4, 0x2c, 0x0c, 0x3b, 0x9e, 0xc7, 0x93, 0xd6, 0x48, 0x24, 0xee, 0x98, 0xd4, 0xa5, 0x51, 0x35,
+ 0x08, 0x9b, 0x78, 0xf6, 0x5f, 0x16, 0x60, 0x72, 0x0f, 0x99, 0xd2, 0x95, 0xac, 0x5c, 0xea, 0x3b,
+ 0x59, 0x59, 0x24, 0xe9, 0x0c, 0xf6, 0x48, 0xd2, 0x79, 0x16, 0x86, 0x63, 0xe2, 0x34, 0x45, 0xfc,
+ 0x5d, 0xba, 0xe2, 0xdf, 0xaa, 0x06, 0x61, 0x13, 0x8f, 0x4a, 0xb1, 0x31, 0xa7, 0x56, 0x23, 0x51,
+ 0x24, 0xb3, 0x70, 0x84, 0x6f, 0x37, 0xb7, 0x14, 0x1f, 0xe6, 0x32, 0x9f, 0x49, 0x90, 0xc0, 0x29,
+ 0x92, 0xe9, 0x01, 0xaf, 0xf4, 0x39, 0xe0, 0xbf, 0x56, 0x80, 0x87, 0x76, 0xd5, 0x6e, 0x7d, 0x27,
+ 0x48, 0xb5, 0x23, 0x12, 0xa6, 0x27, 0xce, 0xd5, 0x88, 0x84, 0x98, 0x41, 0xf8, 0x28, 0xb5, 0x5a,
+ 0x2a, 0x76, 0x3a, 0xff, 0x8c, 0x42, 0x3e, 0x4a, 0x09, 0x12, 0x38, 0x45, 0xf2, 0x4e, 0xa7, 0xe5,
+ 0xb7, 0x06, 0xe0, 0x91, 0x3e, 0x6c, 0x80, 0x1c, 0x33, 0x2f, 0x93, 0x59, 0xc2, 0xc5, 0xbb, 0x94,
+ 0x25, 0x7c, 0x67, 0xc3, 0xf5, 0x7a, 0x72, 0x71, 0x5f, 0x19, 0x9e, 0x5f, 0x2d, 0xc0, 0x99, 0xde,
+ 0x06, 0x0b, 0x7a, 0x1b, 0x8c, 0x87, 0x2a, 0x10, 0xcf, 0x4c, 0x30, 0x3e, 0xc1, 0x3d, 0x3b, 0x09,
+ 0x10, 0x4e, 0xe3, 0xa2, 0x29, 0x80, 0x96, 0x13, 0x6f, 0x44, 0xe7, 0xb6, 0xdd, 0x28, 0x16, 0xa5,
+ 0xd2, 0xc6, 0xf8, 0x79, 0xa3, 0x6c, 0xc5, 0x06, 0x06, 0x25, 0xc7, 0xfe, 0xcd, 0x07, 0x57, 0x82,
+ 0x98, 0x3f, 0xc4, 0x37, 0x5b, 0x27, 0xe4, 0x85, 0x74, 0x06, 0x08, 0xa7, 0x71, 0x29, 0x39, 0x76,
+ 0xa2, 0xcd, 0x19, 0xe5, 0xbb, 0x30, 0x46, 0x6e, 0x51, 0xb5, 0x62, 0x03, 0x23, 0x9d, 0x3a, 0x5d,
+ 0xda, 0x3b, 0x75, 0xda, 0xfe, 0xe7, 0x05, 0x38, 0xdd, 0xd3, 0xe0, 0xed, 0x4f, 0x4c, 0xdd, 0x7b,
+ 0xe9, 0xce, 0x77, 0xb8, 0xc2, 0xf6, 0x95, 0x26, 0x6b, 0xff, 0x79, 0x8f, 0x99, 0x26, 0x52, 0x60,
+ 0xef, 0xbc, 0xfa, 0xc7, 0xbd, 0x37, 0x9e, 0x5d, 0x59, 0xaf, 0x03, 0xfb, 0xc8, 0x7a, 0x4d, 0x7d,
+ 0x8c, 0x52, 0x9f, 0xda, 0xe1, 0x3f, 0x0f, 0xf4, 0x1c, 0x5e, 0xba, 0x41, 0xee, 0xcb, 0x6f, 0x3e,
+ 0x0f, 0xc7, 0x5c, 0x9f, 0x5d, 0x31, 0x5a, 0x6d, 0xaf, 0x89, 0xea, 0x59, 0xbc, 0x44, 0xac, 0xca,
+ 0x39, 0x59, 0x48, 0xc1, 0x71, 0xd7, 0x13, 0xf7, 0x60, 0x16, 0xf2, 0x9d, 0x0d, 0xe9, 0x3e, 0x25,
+ 0xf7, 0x32, 0x9c, 0x92, 0x43, 0xb1, 0xe1, 0x84, 0xa4, 0x2e, 0x94, 0x6d, 0x24, 0xb2, 0x8c, 0x4e,
+ 0xf3, 0x4c, 0xa5, 0x0c, 0x04, 0x9c, 0xfd, 0x1c, 0xbb, 0x0f, 0x32, 0x68, 0xb9, 0x35, 0xb1, 0x15,
+ 0xd4, 0xf7, 0x41, 0xd2, 0x46, 0xcc, 0x61, 0x5a, 0x5f, 0x54, 0x8e, 0x46, 0x5f, 0xbc, 0x17, 0x2a,
+ 0x6a, 0xbc, 0x79, 0x26, 0x81, 0x9a, 0xe4, 0x5d, 0x99, 0x04, 0x6a, 0x86, 0x1b, 0x58, 0x7b, 0x5d,
+ 0xbb, 0xfe, 0x34, 0x8c, 0x28, 0xef, 0x57, 0xbf, 0xb7, 0x72, 0xda, 0xff, 0xb7, 0x00, 0xa9, 0x7b,
+ 0xb3, 0xd0, 0x36, 0x54, 0xea, 0xf2, 0xe2, 0xf3, 0x7c, 0x4a, 0x14, 0xab, 0x7b, 0xd4, 0xf5, 0xf1,
+ 0x8f, 0x6a, 0xc2, 0x9a, 0x18, 0x7a, 0x3f, 0xaf, 0x06, 0x2c, 0x48, 0x17, 0xf2, 0xc8, 0x44, 0xaf,
+ 0xaa, 0xfe, 0xcc, 0x6b, 0xf7, 0x64, 0x1b, 0x36, 0xe8, 0xa1, 0x18, 0x2a, 0x1b, 0xf2, 0x7e, 0xb0,
+ 0x7c, 0xc4, 0x9d, 0xba, 0x6e, 0x8c, 0x9b, 0x68, 0xea, 0x2f, 0xd6, 0x84, 0xec, 0x3f, 0x2b, 0xc0,
+ 0xc9, 0xe4, 0x07, 0x10, 0xc7, 0x75, 0xbf, 0x61, 0xc1, 0xfd, 0x9e, 0x13, 0xc5, 0xd5, 0x36, 0xdb,
+ 0x28, 0xac, 0xb7, 0xbd, 0xe5, 0x54, 0xe1, 0xe8, 0x83, 0x3a, 0x5b, 0x54, 0xc7, 0xe9, 0xfb, 0xe4,
+ 0x66, 0x1f, 0xb8, 0xb5, 0x33, 0x79, 0xff, 0x62, 0x36, 0x71, 0xdc, 0x8b, 0x2b, 0xf4, 0x59, 0x0b,
+ 0x8e, 0xd5, 0xda, 0x61, 0x48, 0xfc, 0x58, 0xb3, 0xca, 0xbf, 0xe2, 0x95, 0x5c, 0x06, 0x52, 0x33,
+ 0x78, 0x92, 0x0a, 0xd4, 0xb9, 0x14, 0x2d, 0xdc, 0x45, 0xdd, 0xfe, 0x65, 0xaa, 0x39, 0x7b, 0xbe,
+ 0xe7, 0x5f, 0xb3, 0x0b, 0xf0, 0x7e, 0x30, 0x08, 0xa3, 0x89, 0xea, 0xd8, 0x89, 0x23, 0x2e, 0x6b,
+ 0xcf, 0x23, 0x2e, 0x96, 0x17, 0xd7, 0xf6, 0xe5, 0x25, 0xdb, 0x46, 0x5e, 0x5c, 0xdb, 0x27, 0x98,
+ 0xc3, 0xc4, 0x90, 0xe2, 0xb6, 0x2f, 0x22, 0xe0, 0xcd, 0x21, 0xc5, 0x6d, 0x1f, 0x0b, 0x28, 0xfa,
+ 0x90, 0x05, 0x23, 0x6c, 0xf1, 0x89, 0x03, 0x42, 0xa1, 0xd0, 0x2e, 0xe5, 0xb0, 0xdc, 0x65, 0x25,
+ 0x78, 0x16, 0x31, 0x69, 0xb6, 0xe0, 0x04, 0x45, 0xf4, 0x51, 0x0b, 0x2a, 0xea, 0x46, 0x4f, 0x71,
+ 0x2d, 0x7f, 0x35, 0xdf, 0xe2, 0xe3, 0x29, 0xa9, 0xa7, 0xaa, 0x40, 0x63, 0x4d, 0x18, 0x45, 0xea,
+ 0xf4, 0x6e, 0xe8, 0x70, 0x4e, 0xef, 0x20, 0xe3, 0xe4, 0xee, 0xcd, 0x50, 0x69, 0x3a, 0xbe, 0xbb,
+ 0x4e, 0xa2, 0x98, 0x1f, 0xa8, 0xc9, 0xbb, 0x26, 0x64, 0x23, 0xd6, 0x70, 0x6a, 0xec, 0x47, 0xec,
+ 0xc5, 0x62, 0xe3, 0x04, 0x8c, 0x19, 0xfb, 0x55, 0xdd, 0x8c, 0x4d, 0x1c, 0xf3, 0xb8, 0x0e, 0xee,
+ 0xea, 0x71, 0xdd, 0xf0, 0x1e, 0xc7, 0x75, 0x55, 0x38, 0xe5, 0xb4, 0xe3, 0xe0, 0x22, 0x71, 0xbc,
+ 0x99, 0x38, 0x26, 0xcd, 0x56, 0x1c, 0xf1, 0x82, 0xea, 0x23, 0xcc, 0x05, 0xac, 0x62, 0xbc, 0xaa,
+ 0xc4, 0x5b, 0xef, 0x42, 0xc2, 0xd9, 0xcf, 0xda, 0xff, 0xd4, 0x82, 0x53, 0x99, 0x53, 0xe1, 0xde,
+ 0x8d, 0xae, 0xb7, 0x3f, 0x5f, 0x82, 0x13, 0x19, 0xb5, 0xf3, 0x51, 0xc7, 0x5c, 0x24, 0x56, 0x1e,
+ 0x81, 0x6a, 0xc9, 0xb8, 0x2b, 0xf9, 0x6d, 0x32, 0x56, 0xc6, 0xfe, 0x4e, 0xe0, 0xf5, 0x29, 0x78,
+ 0xf1, 0x68, 0x4f, 0xc1, 0x8d, 0xb9, 0x3e, 0x70, 0x57, 0xe7, 0x7a, 0x69, 0x8f, 0xb9, 0xfe, 0x35,
+ 0x0b, 0x26, 0x9a, 0x3d, 0x2e, 0xc2, 0x12, 0xe7, 0x49, 0xd7, 0x0e, 0xe7, 0x9a, 0xad, 0xd9, 0x07,
+ 0x6f, 0xed, 0x4c, 0xf6, 0xbc, 0x7f, 0x0c, 0xf7, 0xe4, 0xca, 0xfe, 0x5e, 0x11, 0x98, 0xbd, 0xc6,
+ 0xea, 0x23, 0x77, 0xd0, 0x07, 0xcd, 0x2b, 0x38, 0xac, 0xbc, 0xae, 0x8b, 0xe0, 0x9d, 0xab, 0x2b,
+ 0x3c, 0xf8, 0x08, 0x66, 0xdd, 0xe8, 0x91, 0x96, 0x84, 0x85, 0x3e, 0x24, 0xa1, 0x27, 0xef, 0x3a,
+ 0x29, 0xe6, 0x7f, 0xd7, 0x49, 0x25, 0x7d, 0xcf, 0xc9, 0xee, 0x9f, 0x78, 0xe0, 0x9e, 0xfc, 0xc4,
+ 0xbf, 0x67, 0x71, 0xc1, 0x93, 0xfa, 0x0a, 0xda, 0xdc, 0xb0, 0x76, 0x31, 0x37, 0x1e, 0x87, 0x72,
+ 0x24, 0x24, 0xb3, 0x30, 0x4b, 0x74, 0x00, 0x94, 0x68, 0xc7, 0x0a, 0x83, 0xee, 0xba, 0x1c, 0xcf,
+ 0x0b, 0x6e, 0x9e, 0x6b, 0xb6, 0xe2, 0x8e, 0x30, 0x50, 0xd4, 0xb6, 0x60, 0x46, 0x41, 0xb0, 0x81,
+ 0x85, 0x1e, 0x81, 0x41, 0x5e, 0x5f, 0x41, 0x38, 0x77, 0x86, 0xe9, 0x3a, 0xe4, 0xc5, 0x17, 0xea,
+ 0x58, 0x80, 0xec, 0x0d, 0x30, 0x76, 0x15, 0x77, 0x7e, 0xb9, 0x70, 0x1f, 0xb7, 0xc2, 0xff, 0xdd,
+ 0x82, 0x20, 0xc5, 0x77, 0x09, 0xcf, 0xa5, 0x6e, 0xe1, 0xef, 0x3f, 0x1e, 0xee, 0xfd, 0x00, 0xb5,
+ 0xa0, 0xd9, 0xa2, 0xfb, 0xe6, 0xd5, 0x20, 0x9f, 0xcd, 0xd6, 0x9c, 0xea, 0x4f, 0x8f, 0xaa, 0x6e,
+ 0xc3, 0x06, 0xbd, 0x84, 0x68, 0x2f, 0xee, 0x29, 0xda, 0x13, 0x52, 0x6e, 0x60, 0x77, 0x29, 0x67,
+ 0xff, 0xa5, 0x05, 0x09, 0xab, 0x0f, 0xb5, 0xa0, 0x44, 0xd9, 0xed, 0x08, 0x81, 0xb1, 0x9c, 0x9f,
+ 0x89, 0x49, 0x25, 0xb5, 0x58, 0x85, 0xec, 0x27, 0xe6, 0x84, 0x90, 0x27, 0x62, 0xff, 0x72, 0xd9,
+ 0xfc, 0x98, 0x04, 0x2f, 0x06, 0xc1, 0x26, 0x0f, 0x9f, 0xd1, 0x71, 0x84, 0xf6, 0x73, 0x70, 0xbc,
+ 0x8b, 0x29, 0x76, 0x21, 0x71, 0x20, 0x77, 0xf0, 0xc6, 0xea, 0x61, 0x65, 0x0e, 0x30, 0x87, 0xd9,
+ 0x5f, 0xb5, 0xe0, 0x58, 0xba, 0x7b, 0xf4, 0x9a, 0x05, 0xc7, 0xa3, 0x74, 0x7f, 0x87, 0x35, 0x76,
+ 0x2a, 0xc6, 0xbf, 0x0b, 0x84, 0xbb, 0x99, 0xb0, 0xff, 0x9b, 0xd0, 0x06, 0xd7, 0x5d, 0xbf, 0x1e,
+ 0xdc, 0x54, 0x76, 0x92, 0xd5, 0xd3, 0x4e, 0xa2, 0xe2, 0xa1, 0xb6, 0x41, 0xea, 0x6d, 0xaf, 0xab,
+ 0xf8, 0x42, 0x55, 0xb4, 0x63, 0x85, 0xc1, 0x72, 0xcd, 0xdb, 0x62, 0xdf, 0x9a, 0x9a, 0x94, 0xf3,
+ 0xa2, 0x1d, 0x2b, 0x0c, 0xf4, 0x0c, 0x8c, 0x18, 0x2f, 0x29, 0xe7, 0x25, 0xdb, 0x74, 0x18, 0x1a,
+ 0x3c, 0xc2, 0x09, 0x2c, 0x34, 0x05, 0xa0, 0x6c, 0x2e, 0xa9, 0xb1, 0x99, 0xa3, 0x5d, 0x09, 0xc6,
+ 0x08, 0x1b, 0x18, 0xac, 0xb2, 0x83, 0xd7, 0x8e, 0xd8, 0x49, 0xf2, 0xa0, 0xbe, 0x2f, 0x60, 0x4e,
+ 0xb4, 0x61, 0x05, 0xa5, 0xc2, 0xad, 0xe9, 0xf8, 0x6d, 0xc7, 0xa3, 0x23, 0x24, 0x5c, 0x67, 0x6a,
+ 0x19, 0x2e, 0x29, 0x08, 0x36, 0xb0, 0xe8, 0x1b, 0xc7, 0x6e, 0x93, 0xbc, 0x18, 0xf8, 0x32, 0x36,
+ 0x5b, 0x07, 0x17, 0x88, 0x76, 0xac, 0x30, 0xd0, 0x73, 0x30, 0xec, 0xf8, 0x75, 0x6e, 0x20, 0x06,
+ 0xa1, 0x38, 0xa3, 0x54, 0xbb, 0xcf, 0xab, 0x11, 0x99, 0xd1, 0x50, 0x6c, 0xa2, 0xa6, 0x2f, 0x4b,
+ 0x80, 0x3e, 0x2f, 0x63, 0xfb, 0x0b, 0x0b, 0xc6, 0x75, 0xa9, 0x1e, 0xe6, 0x61, 0x4b, 0xb8, 0x16,
+ 0xad, 0x3d, 0x5d, 0x8b, 0xc9, 0x8a, 0x1d, 0x85, 0xbe, 0x2a, 0x76, 0x98, 0xc5, 0x34, 0x8a, 0xbb,
+ 0x16, 0xd3, 0xf8, 0x71, 0x18, 0xda, 0x24, 0x1d, 0xa3, 0xea, 0x06, 0x53, 0x0e, 0x97, 0x79, 0x13,
+ 0x96, 0x30, 0x64, 0xc3, 0x60, 0xcd, 0x51, 0x95, 0xfb, 0x46, 0xf8, 0x86, 0x6c, 0x6e, 0x86, 0x21,
+ 0x09, 0x88, 0xbd, 0x0c, 0x15, 0x75, 0xa8, 0x2f, 0x3d, 0x7d, 0x56, 0xb6, 0xa7, 0xaf, 0xaf, 0xa4,
+ 0xfe, 0xd9, 0xb5, 0x6f, 0x7e, 0xff, 0xe1, 0x37, 0xfc, 0xf1, 0xf7, 0x1f, 0x7e, 0xc3, 0x9f, 0x7e,
+ 0xff, 0xe1, 0x37, 0x7c, 0xe8, 0xd6, 0xc3, 0xd6, 0x37, 0x6f, 0x3d, 0x6c, 0xfd, 0xf1, 0xad, 0x87,
+ 0xad, 0x3f, 0xbd, 0xf5, 0xb0, 0xf5, 0xbd, 0x5b, 0x0f, 0x5b, 0x9f, 0xfd, 0x4f, 0x0f, 0xbf, 0xe1,
+ 0xc5, 0xcc, 0x6c, 0x00, 0xfa, 0xe3, 0x89, 0x5a, 0x7d, 0x7a, 0xeb, 0x69, 0x16, 0x90, 0x4e, 0xd7,
+ 0xf3, 0xb4, 0x31, 0x89, 0xa7, 0xe5, 0x7a, 0xfe, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xce, 0xc4,
+ 0xe2, 0x64, 0x82, 0xfc, 0x00, 0x00,
}
func (m *AWSAuthConfig) Marshal() (dAtA []byte, err error) {
@@ -11226,6 +11263,64 @@ func (m *NestedMergeGenerator) MarshalToSizedBuffer(dAtA []byte) (int, error) {
return len(dAtA) - i, nil
}
+func (m *OCIMetadata) 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 *OCIMetadata) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *OCIMetadata) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ i -= len(m.Description)
+ copy(dAtA[i:], m.Description)
+ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Description)))
+ i--
+ dAtA[i] = 0x3a
+ i -= len(m.Version)
+ copy(dAtA[i:], m.Version)
+ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Version)))
+ i--
+ dAtA[i] = 0x32
+ i -= len(m.SourceURL)
+ copy(dAtA[i:], m.SourceURL)
+ i = encodeVarintGenerated(dAtA, i, uint64(len(m.SourceURL)))
+ i--
+ dAtA[i] = 0x2a
+ i -= len(m.DocsURL)
+ copy(dAtA[i:], m.DocsURL)
+ i = encodeVarintGenerated(dAtA, i, uint64(len(m.DocsURL)))
+ i--
+ dAtA[i] = 0x22
+ i -= len(m.ImageURL)
+ copy(dAtA[i:], m.ImageURL)
+ i = encodeVarintGenerated(dAtA, i, uint64(len(m.ImageURL)))
+ i--
+ dAtA[i] = 0x1a
+ i -= len(m.Authors)
+ copy(dAtA[i:], m.Authors)
+ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Authors)))
+ i--
+ dAtA[i] = 0x12
+ i -= len(m.CreatedAt)
+ copy(dAtA[i:], m.CreatedAt)
+ i = encodeVarintGenerated(dAtA, i, uint64(len(m.CreatedAt)))
+ i--
+ dAtA[i] = 0xa
+ return len(dAtA) - i, nil
+}
+
func (m *Operation) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@@ -12518,6 +12613,16 @@ func (m *RepoCreds) MarshalToSizedBuffer(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
+ i--
+ if m.InsecureOCIForceHttp {
+ dAtA[i] = 1
+ } else {
+ dAtA[i] = 0
+ }
+ i--
+ dAtA[i] = 0x1
+ i--
+ dAtA[i] = 0xd0
i -= len(m.BearerToken)
copy(dAtA[i:], m.BearerToken)
i = encodeVarintGenerated(dAtA, i, uint64(len(m.BearerToken)))
@@ -12693,6 +12798,16 @@ func (m *Repository) MarshalToSizedBuffer(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
+ i--
+ if m.InsecureOCIForceHttp {
+ dAtA[i] = 1
+ } else {
+ dAtA[i] = 0
+ }
+ i--
+ dAtA[i] = 0x1
+ i--
+ dAtA[i] = 0xd0
i -= len(m.BearerToken)
copy(dAtA[i:], m.BearerToken)
i = encodeVarintGenerated(dAtA, i, uint64(len(m.BearerToken)))
@@ -17840,6 +17955,29 @@ func (m *NestedMergeGenerator) Size() (n int) {
return n
}
+func (m *OCIMetadata) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.CreatedAt)
+ n += 1 + l + sovGenerated(uint64(l))
+ l = len(m.Authors)
+ n += 1 + l + sovGenerated(uint64(l))
+ l = len(m.ImageURL)
+ n += 1 + l + sovGenerated(uint64(l))
+ l = len(m.DocsURL)
+ n += 1 + l + sovGenerated(uint64(l))
+ l = len(m.SourceURL)
+ n += 1 + l + sovGenerated(uint64(l))
+ l = len(m.Version)
+ n += 1 + l + sovGenerated(uint64(l))
+ l = len(m.Description)
+ n += 1 + l + sovGenerated(uint64(l))
+ return n
+}
+
func (m *Operation) Size() (n int) {
if m == nil {
return 0
@@ -18361,6 +18499,7 @@ func (m *RepoCreds) Size() (n int) {
n += 3
l = len(m.BearerToken)
n += 2 + l + sovGenerated(uint64(l))
+ n += 3
return n
}
@@ -18428,6 +18567,7 @@ func (m *Repository) Size() (n int) {
n += 3
l = len(m.BearerToken)
n += 2 + l + sovGenerated(uint64(l))
+ n += 3
return n
}
@@ -21125,6 +21265,22 @@ func (this *NestedMergeGenerator) String() string {
}, "")
return s
}
+func (this *OCIMetadata) String() string {
+ if this == nil {
+ return "nil"
+ }
+ s := strings.Join([]string{`&OCIMetadata{`,
+ `CreatedAt:` + fmt.Sprintf("%v", this.CreatedAt) + `,`,
+ `Authors:` + fmt.Sprintf("%v", this.Authors) + `,`,
+ `ImageURL:` + fmt.Sprintf("%v", this.ImageURL) + `,`,
+ `DocsURL:` + fmt.Sprintf("%v", this.DocsURL) + `,`,
+ `SourceURL:` + fmt.Sprintf("%v", this.SourceURL) + `,`,
+ `Version:` + fmt.Sprintf("%v", this.Version) + `,`,
+ `Description:` + fmt.Sprintf("%v", this.Description) + `,`,
+ `}`,
+ }, "")
+ return s
+}
func (this *Operation) String() string {
if this == nil {
return "nil"
@@ -21484,6 +21640,7 @@ func (this *RepoCreds) String() string {
`NoProxy:` + fmt.Sprintf("%v", this.NoProxy) + `,`,
`UseAzureWorkloadIdentity:` + fmt.Sprintf("%v", this.UseAzureWorkloadIdentity) + `,`,
`BearerToken:` + fmt.Sprintf("%v", this.BearerToken) + `,`,
+ `InsecureOCIForceHttp:` + fmt.Sprintf("%v", this.InsecureOCIForceHttp) + `,`,
`}`,
}, "")
return s
@@ -21534,6 +21691,7 @@ func (this *Repository) String() string {
`NoProxy:` + fmt.Sprintf("%v", this.NoProxy) + `,`,
`UseAzureWorkloadIdentity:` + fmt.Sprintf("%v", this.UseAzureWorkloadIdentity) + `,`,
`BearerToken:` + fmt.Sprintf("%v", this.BearerToken) + `,`,
+ `InsecureOCIForceHttp:` + fmt.Sprintf("%v", this.InsecureOCIForceHttp) + `,`,
`}`,
}, "")
return s
@@ -40299,6 +40457,280 @@ func (m *NestedMergeGenerator) Unmarshal(dAtA []byte) error {
}
return nil
}
+func (m *OCIMetadata) 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: OCIMetadata: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: OCIMetadata: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field CreatedAt", 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.CreatedAt = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Authors", 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.Authors = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ImageURL", 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.ImageURL = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field DocsURL", 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.DocsURL = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 5:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field SourceURL", 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.SourceURL = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 6:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Version", 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.Version = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 7:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Description", 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.Description = string(dAtA[iNdEx:postIndex])
+ 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 *Operation) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
@@ -45057,6 +45489,26 @@ func (m *RepoCreds) Unmarshal(dAtA []byte) error {
}
m.BearerToken = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
+ case 26:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field InsecureOCIForceHttp", 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
+ }
+ }
+ m.InsecureOCIForceHttp = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := skipGenerated(dAtA[iNdEx:])
@@ -45915,6 +46367,26 @@ func (m *Repository) Unmarshal(dAtA []byte) error {
}
m.BearerToken = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
+ case 26:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field InsecureOCIForceHttp", 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
+ }
+ }
+ m.InsecureOCIForceHttp = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := skipGenerated(dAtA[iNdEx:])
diff --git a/pkg/apis/application/v1alpha1/generated.proto b/pkg/apis/application/v1alpha1/generated.proto
index 0a31219aa6..5147dd6218 100644
--- a/pkg/apis/application/v1alpha1/generated.proto
+++ b/pkg/apis/application/v1alpha1/generated.proto
@@ -1097,7 +1097,7 @@ message GnuPGPublicKey {
// Trust holds the level of trust assigned to this key
optional string trust = 4;
- // SubType holds the key's sub type (e.g. rsa4096)
+ // SubType holds the key's subtype (e.g. rsa4096)
optional string subType = 5;
// KeyData holds the raw key data, in base64 encoded format
@@ -1377,6 +1377,23 @@ message NestedMergeGenerator {
repeated string mergeKeys = 2;
}
+// OCIMetadata contains metadata for a specific revision in an OCI repository
+message OCIMetadata {
+ optional string createdAt = 1;
+
+ optional string authors = 2;
+
+ optional string imageUrl = 3;
+
+ optional string docsUrl = 4;
+
+ optional string sourceUrl = 5;
+
+ optional string version = 6;
+
+ optional string description = 7;
+}
+
// Operation contains information about a requested or running operation
message Operation {
// Sync contains parameters for the operation
@@ -1744,6 +1761,9 @@ message RepoCreds {
// BearerToken contains the bearer token used for Git BitBucket Data Center auth at the repo server
optional string bearerToken = 25;
+
+ // InsecureOCIForceHttp specifies whether the connection to the repository uses TLS at _all_. If true, no TLS. This flag is applicable for OCI repos only.
+ optional bool insecureOCIForceHttp = 26;
}
// RepositoryList is a collection of Repositories.
@@ -1830,6 +1850,9 @@ message Repository {
// BearerToken contains the bearer token used for Git BitBucket Data Center auth at the repo server
optional string bearerToken = 25;
+
+ // InsecureOCIForceHttp specifies whether the connection to the repository uses TLS at _all_. If true, no TLS. This flag is applicable for OCI repos only.
+ optional bool insecureOCIForceHttp = 26;
}
// A RepositoryCertificate is either SSH known hosts entry or TLS certificate
diff --git a/pkg/apis/application/v1alpha1/repository_types.go b/pkg/apis/application/v1alpha1/repository_types.go
index 63402c4ba3..40b04a5222 100644
--- a/pkg/apis/application/v1alpha1/repository_types.go
+++ b/pkg/apis/application/v1alpha1/repository_types.go
@@ -5,6 +5,8 @@ import (
"net/url"
"strings"
+ "github.com/argoproj/argo-cd/v3/util/oci"
+
"github.com/argoproj/argo-cd/v3/common"
"github.com/argoproj/argo-cd/v3/util/cert"
"github.com/argoproj/argo-cd/v3/util/git"
@@ -53,6 +55,8 @@ type RepoCreds struct {
UseAzureWorkloadIdentity bool `json:"useAzureWorkloadIdentity,omitempty" protobuf:"bytes,24,opt,name=useAzureWorkloadIdentity"`
// BearerToken contains the bearer token used for Git BitBucket Data Center auth at the repo server
BearerToken string `json:"bearerToken,omitempty" protobuf:"bytes,25,opt,name=bearerToken"`
+ // InsecureOCIForceHttp specifies whether the connection to the repository uses TLS at _all_. If true, no TLS. This flag is applicable for OCI repos only.
+ InsecureOCIForceHttp bool `json:"insecureOCIForceHttp,omitempty" protobuf:"bytes,26,opt,name=insecureOCIForceHttp"` //nolint:revive //FIXME(var-naming)
}
// Repository is a repository holding application configurations
@@ -108,11 +112,13 @@ type Repository struct {
UseAzureWorkloadIdentity bool `json:"useAzureWorkloadIdentity,omitempty" protobuf:"bytes,24,opt,name=useAzureWorkloadIdentity"`
// BearerToken contains the bearer token used for Git BitBucket Data Center auth at the repo server
BearerToken string `json:"bearerToken,omitempty" protobuf:"bytes,25,opt,name=bearerToken"`
+ // InsecureOCIForceHttp specifies whether the connection to the repository uses TLS at _all_. If true, no TLS. This flag is applicable for OCI repos only.
+ InsecureOCIForceHttp bool `json:"insecureOCIForceHttp,omitempty" protobuf:"bytes,26,opt,name=insecureOCIForceHttp"` //nolint:revive //FIXME(var-naming)
}
-// IsInsecure returns true if the repository has been configured to skip server verification
+// IsInsecure returns true if the repository has been configured to skip server verification or set to HTTP only
func (repo *Repository) IsInsecure() bool {
- return repo.InsecureIgnoreHostKey || repo.Insecure
+ return repo.InsecureIgnoreHostKey || repo.Insecure || repo.InsecureOCIForceHttp
}
// IsLFSEnabled returns true if LFS support is enabled on repository
@@ -161,6 +167,7 @@ func (repo *Repository) CopyCredentialsFromRepo(source *Repository) {
if repo.GCPServiceAccountKey == "" {
repo.GCPServiceAccountKey = source.GCPServiceAccountKey
}
+ repo.InsecureOCIForceHttp = source.InsecureOCIForceHttp
repo.ForceHttpBasicAuth = source.ForceHttpBasicAuth
repo.UseAzureWorkloadIdentity = source.UseAzureWorkloadIdentity
}
@@ -208,6 +215,12 @@ func (repo *Repository) CopyCredentialsFrom(source *RepoCreds) {
if repo.NoProxy == "" {
repo.NoProxy = source.NoProxy
}
+ if repo.Type == "" {
+ repo.Type = source.Type
+ }
+
+ repo.EnableOCI = source.EnableOCI
+ repo.InsecureOCIForceHttp = source.InsecureOCIForceHttp
repo.ForceHttpBasicAuth = source.ForceHttpBasicAuth
repo.UseAzureWorkloadIdentity = source.UseAzureWorkloadIdentity
}
@@ -236,7 +249,7 @@ func (repo *Repository) GetGitCreds(store git.CredsStore) git.Creds {
return git.NopCreds{}
}
-// GetHelmCreds returns the credentials from a repository configuration used to authenticate at a Helm repository
+// GetHelmCreds returns the credentials from a repository configuration used to authenticate a Helm repository
func (repo *Repository) GetHelmCreds() helm.Creds {
if repo.UseAzureWorkloadIdentity {
return helm.NewAzureWorkloadIdentityCreds(
@@ -259,6 +272,19 @@ func (repo *Repository) GetHelmCreds() helm.Creds {
}
}
+// GetOCICreds returns the credentials from a repository configuration used to authenticate an OCI repository
+func (repo *Repository) GetOCICreds() oci.Creds {
+ return oci.Creds{
+ Username: repo.Username,
+ Password: repo.Password,
+ CAPath: getCAPath(repo.Repo),
+ CertData: []byte(repo.TLSClientCertData),
+ KeyData: []byte(repo.TLSClientCertKey),
+ InsecureSkipVerify: repo.Insecure,
+ InsecureHTTPOnly: repo.InsecureOCIForceHttp,
+ }
+}
+
func getCAPath(repoURL string) string {
// For git ssh protocol url without ssh://, url.Parse() will fail to parse.
// However, no warn log is output since ssh scheme url is a possible format.
@@ -402,7 +428,7 @@ type GnuPGPublicKey struct {
Owner string `json:"owner,omitempty" protobuf:"bytes,3,opt,name=owner"`
// Trust holds the level of trust assigned to this key
Trust string `json:"trust,omitempty" protobuf:"bytes,4,opt,name=trust"`
- // SubType holds the key's sub type (e.g. rsa4096)
+ // SubType holds the key's subtype (e.g. rsa4096)
SubType string `json:"subType,omitempty" protobuf:"bytes,5,opt,name=subType"`
// KeyData holds the raw key data, in base64 encoded format
KeyData string `json:"keyData,omitempty" protobuf:"bytes,6,opt,name=keyData"`
diff --git a/pkg/apis/application/v1alpha1/types.go b/pkg/apis/application/v1alpha1/types.go
index 369d44e705..1bcfe35119 100644
--- a/pkg/apis/application/v1alpha1/types.go
+++ b/pkg/apis/application/v1alpha1/types.go
@@ -302,6 +302,10 @@ func (source *ApplicationSource) AllowsConcurrentProcessing() bool {
return true
}
+func (source *ApplicationSource) IsOCI() bool {
+ return strings.HasPrefix(source.RepoURL, "oci://")
+}
+
// IsRef returns true when the application source is of type Ref
func (source *ApplicationSource) IsRef() bool {
return source.Ref != ""
@@ -1582,6 +1586,17 @@ type RevisionMetadata struct {
SignatureInfo string `json:"signatureInfo,omitempty" protobuf:"bytes,5,opt,name=signatureInfo"`
}
+// OCIMetadata contains metadata for a specific revision in an OCI repository
+type OCIMetadata struct {
+ CreatedAt string `json:"createdAt,omitempty" protobuf:"bytes,1,opt,name=createdAt"`
+ Authors string `json:"authors,omitempty" protobuf:"bytes,2,opt,name=authors"`
+ ImageURL string `json:"imageUrl,omitempty" protobuf:"bytes,3,opt,name=imageUrl"`
+ DocsURL string `json:"docsUrl,omitempty" protobuf:"bytes,4,opt,name=docsUrl"`
+ SourceURL string `json:"sourceUrl,omitempty" protobuf:"bytes,5,opt,name=sourceUrl"`
+ Version string `json:"version,omitempty" protobuf:"bytes,6,opt,name=version"`
+ Description string `json:"description,omitempty" protobuf:"bytes,7,opt,name=description"`
+}
+
// ChartDetails contains helm chart metadata for a specific version
type ChartDetails struct {
Description string `json:"description,omitempty" protobuf:"bytes,1,opt,name=description"`
diff --git a/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go
index 0971cbc2fa..74df9817e5 100644
--- a/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go
+++ b/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go
@@ -2776,6 +2776,22 @@ func (in *NestedMergeGenerator) DeepCopy() *NestedMergeGenerator {
return out
}
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *OCIMetadata) DeepCopyInto(out *OCIMetadata) {
+ *out = *in
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OCIMetadata.
+func (in *OCIMetadata) DeepCopy() *OCIMetadata {
+ if in == nil {
+ return nil
+ }
+ out := new(OCIMetadata)
+ in.DeepCopyInto(out)
+ return out
+}
+
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Operation) DeepCopyInto(out *Operation) {
*out = *in
diff --git a/reposerver/apiclient/mocks/RepoServerServiceClient.go b/reposerver/apiclient/mocks/RepoServerServiceClient.go
index f12c683b3f..1e09ff6c37 100644
--- a/reposerver/apiclient/mocks/RepoServerServiceClient.go
+++ b/reposerver/apiclient/mocks/RepoServerServiceClient.go
@@ -478,6 +478,79 @@ func (_c *RepoServerServiceClient_GetHelmCharts_Call) RunAndReturn(run func(ctx
return _c
}
+// GetOCIMetadata provides a mock function for the type RepoServerServiceClient
+func (_mock *RepoServerServiceClient) GetOCIMetadata(ctx context.Context, in *apiclient.RepoServerRevisionChartDetailsRequest, opts ...grpc.CallOption) (*v1alpha1.OCIMetadata, error) {
+ // grpc.CallOption
+ _va := make([]interface{}, len(opts))
+ for _i := range opts {
+ _va[_i] = opts[_i]
+ }
+ var _ca []interface{}
+ _ca = append(_ca, ctx, in)
+ _ca = append(_ca, _va...)
+ ret := _mock.Called(_ca...)
+
+ if len(ret) == 0 {
+ panic("no return value specified for GetOCIMetadata")
+ }
+
+ var r0 *v1alpha1.OCIMetadata
+ var r1 error
+ if returnFunc, ok := ret.Get(0).(func(context.Context, *apiclient.RepoServerRevisionChartDetailsRequest, ...grpc.CallOption) (*v1alpha1.OCIMetadata, error)); ok {
+ return returnFunc(ctx, in, opts...)
+ }
+ if returnFunc, ok := ret.Get(0).(func(context.Context, *apiclient.RepoServerRevisionChartDetailsRequest, ...grpc.CallOption) *v1alpha1.OCIMetadata); ok {
+ r0 = returnFunc(ctx, in, opts...)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*v1alpha1.OCIMetadata)
+ }
+ }
+ if returnFunc, ok := ret.Get(1).(func(context.Context, *apiclient.RepoServerRevisionChartDetailsRequest, ...grpc.CallOption) error); ok {
+ r1 = returnFunc(ctx, in, opts...)
+ } else {
+ r1 = ret.Error(1)
+ }
+ return r0, r1
+}
+
+// RepoServerServiceClient_GetOCIMetadata_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetOCIMetadata'
+type RepoServerServiceClient_GetOCIMetadata_Call struct {
+ *mock.Call
+}
+
+// GetOCIMetadata is a helper method to define mock.On call
+// - ctx
+// - in
+// - opts
+func (_e *RepoServerServiceClient_Expecter) GetOCIMetadata(ctx interface{}, in interface{}, opts ...interface{}) *RepoServerServiceClient_GetOCIMetadata_Call {
+ return &RepoServerServiceClient_GetOCIMetadata_Call{Call: _e.mock.On("GetOCIMetadata",
+ append([]interface{}{ctx, in}, opts...)...)}
+}
+
+func (_c *RepoServerServiceClient_GetOCIMetadata_Call) Run(run func(ctx context.Context, in *apiclient.RepoServerRevisionChartDetailsRequest, opts ...grpc.CallOption)) *RepoServerServiceClient_GetOCIMetadata_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ variadicArgs := make([]grpc.CallOption, len(args)-2)
+ for i, a := range args[2:] {
+ if a != nil {
+ variadicArgs[i] = a.(grpc.CallOption)
+ }
+ }
+ run(args[0].(context.Context), args[1].(*apiclient.RepoServerRevisionChartDetailsRequest), variadicArgs...)
+ })
+ return _c
+}
+
+func (_c *RepoServerServiceClient_GetOCIMetadata_Call) Return(oCIMetadata *v1alpha1.OCIMetadata, err error) *RepoServerServiceClient_GetOCIMetadata_Call {
+ _c.Call.Return(oCIMetadata, err)
+ return _c
+}
+
+func (_c *RepoServerServiceClient_GetOCIMetadata_Call) RunAndReturn(run func(ctx context.Context, in *apiclient.RepoServerRevisionChartDetailsRequest, opts ...grpc.CallOption) (*v1alpha1.OCIMetadata, error)) *RepoServerServiceClient_GetOCIMetadata_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
// GetRevisionChartDetails provides a mock function for the type RepoServerServiceClient
func (_mock *RepoServerServiceClient) GetRevisionChartDetails(ctx context.Context, in *apiclient.RepoServerRevisionChartDetailsRequest, opts ...grpc.CallOption) (*v1alpha1.ChartDetails, error) {
// grpc.CallOption
@@ -697,6 +770,79 @@ func (_c *RepoServerServiceClient_ListApps_Call) RunAndReturn(run func(ctx conte
return _c
}
+// ListOCITags provides a mock function for the type RepoServerServiceClient
+func (_mock *RepoServerServiceClient) ListOCITags(ctx context.Context, in *apiclient.ListRefsRequest, opts ...grpc.CallOption) (*apiclient.Refs, error) {
+ // grpc.CallOption
+ _va := make([]interface{}, len(opts))
+ for _i := range opts {
+ _va[_i] = opts[_i]
+ }
+ var _ca []interface{}
+ _ca = append(_ca, ctx, in)
+ _ca = append(_ca, _va...)
+ ret := _mock.Called(_ca...)
+
+ if len(ret) == 0 {
+ panic("no return value specified for ListOCITags")
+ }
+
+ var r0 *apiclient.Refs
+ var r1 error
+ if returnFunc, ok := ret.Get(0).(func(context.Context, *apiclient.ListRefsRequest, ...grpc.CallOption) (*apiclient.Refs, error)); ok {
+ return returnFunc(ctx, in, opts...)
+ }
+ if returnFunc, ok := ret.Get(0).(func(context.Context, *apiclient.ListRefsRequest, ...grpc.CallOption) *apiclient.Refs); ok {
+ r0 = returnFunc(ctx, in, opts...)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*apiclient.Refs)
+ }
+ }
+ if returnFunc, ok := ret.Get(1).(func(context.Context, *apiclient.ListRefsRequest, ...grpc.CallOption) error); ok {
+ r1 = returnFunc(ctx, in, opts...)
+ } else {
+ r1 = ret.Error(1)
+ }
+ return r0, r1
+}
+
+// RepoServerServiceClient_ListOCITags_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListOCITags'
+type RepoServerServiceClient_ListOCITags_Call struct {
+ *mock.Call
+}
+
+// ListOCITags is a helper method to define mock.On call
+// - ctx
+// - in
+// - opts
+func (_e *RepoServerServiceClient_Expecter) ListOCITags(ctx interface{}, in interface{}, opts ...interface{}) *RepoServerServiceClient_ListOCITags_Call {
+ return &RepoServerServiceClient_ListOCITags_Call{Call: _e.mock.On("ListOCITags",
+ append([]interface{}{ctx, in}, opts...)...)}
+}
+
+func (_c *RepoServerServiceClient_ListOCITags_Call) Run(run func(ctx context.Context, in *apiclient.ListRefsRequest, opts ...grpc.CallOption)) *RepoServerServiceClient_ListOCITags_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ variadicArgs := make([]grpc.CallOption, len(args)-2)
+ for i, a := range args[2:] {
+ if a != nil {
+ variadicArgs[i] = a.(grpc.CallOption)
+ }
+ }
+ run(args[0].(context.Context), args[1].(*apiclient.ListRefsRequest), variadicArgs...)
+ })
+ return _c
+}
+
+func (_c *RepoServerServiceClient_ListOCITags_Call) Return(refs *apiclient.Refs, err error) *RepoServerServiceClient_ListOCITags_Call {
+ _c.Call.Return(refs, err)
+ return _c
+}
+
+func (_c *RepoServerServiceClient_ListOCITags_Call) RunAndReturn(run func(ctx context.Context, in *apiclient.ListRefsRequest, opts ...grpc.CallOption) (*apiclient.Refs, error)) *RepoServerServiceClient_ListOCITags_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
// ListPlugins provides a mock function for the type RepoServerServiceClient
func (_mock *RepoServerServiceClient) ListPlugins(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*apiclient.PluginList, error) {
// grpc.CallOption
diff --git a/reposerver/apiclient/repository.pb.go b/reposerver/apiclient/repository.pb.go
index 548318db01..a71e9fe6ef 100644
--- a/reposerver/apiclient/repository.pb.go
+++ b/reposerver/apiclient/repository.pb.go
@@ -2478,156 +2478,158 @@ func init() {
}
var fileDescriptor_dd8723cfcc820480 = []byte{
- // 2377 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x1a, 0x4d, 0x73, 0x1c, 0x47,
- 0x55, 0xfb, 0x25, 0xed, 0x3e, 0x59, 0x5f, 0x6d, 0x5b, 0x1e, 0xaf, 0x6d, 0xa1, 0x0c, 0xd8, 0xe5,
- 0xd8, 0xc9, 0xaa, 0x6c, 0x57, 0x62, 0x70, 0x42, 0x28, 0x45, 0xb6, 0x25, 0xc7, 0x96, 0x2d, 0xc6,
- 0x4e, 0x28, 0x83, 0x81, 0xea, 0x9d, 0x6d, 0xed, 0x76, 0x34, 0x1f, 0xed, 0x99, 0x1e, 0x05, 0xb9,
- 0x8a, 0x0b, 0x50, 0x5c, 0xb8, 0x73, 0xe0, 0xca, 0x6f, 0xa0, 0x38, 0x72, 0xa0, 0x28, 0x38, 0x52,
- 0x5c, 0xb8, 0x50, 0x05, 0xe5, 0x5f, 0x42, 0xf5, 0xc7, 0x7c, 0xee, 0xec, 0x4a, 0x61, 0x65, 0x05,
- 0xb8, 0x48, 0xd3, 0xaf, 0x5f, 0xbf, 0xf7, 0xfa, 0x7d, 0xf5, 0x7b, 0xdd, 0x0b, 0x57, 0x02, 0xc2,
- 0xfc, 0x90, 0x04, 0xfb, 0x24, 0x58, 0x93, 0x9f, 0x94, 0xfb, 0xc1, 0x41, 0xe6, 0xb3, 0xc3, 0x02,
- 0x9f, 0xfb, 0x08, 0x52, 0x48, 0xfb, 0x51, 0x9f, 0xf2, 0x41, 0xd4, 0xed, 0xd8, 0xbe, 0xbb, 0x86,
- 0x83, 0xbe, 0xcf, 0x02, 0xff, 0x73, 0xf9, 0xf1, 0xae, 0xdd, 0x5b, 0xdb, 0xbf, 0xb5, 0xc6, 0xf6,
- 0xfa, 0x6b, 0x98, 0xd1, 0x70, 0x0d, 0x33, 0xe6, 0x50, 0x1b, 0x73, 0xea, 0x7b, 0x6b, 0xfb, 0x37,
- 0xb0, 0xc3, 0x06, 0xf8, 0xc6, 0x5a, 0x9f, 0x78, 0x24, 0xc0, 0x9c, 0xf4, 0x14, 0xe5, 0xf6, 0x85,
- 0xbe, 0xef, 0xf7, 0x1d, 0xb2, 0x26, 0x47, 0xdd, 0x68, 0x77, 0x8d, 0xb8, 0x8c, 0x6b, 0xb6, 0xe6,
- 0x3f, 0xe6, 0x60, 0x61, 0x1b, 0x7b, 0x74, 0x97, 0x84, 0xdc, 0x22, 0x2f, 0x23, 0x12, 0x72, 0xf4,
- 0x02, 0xea, 0x42, 0x18, 0xa3, 0xb2, 0x5a, 0xb9, 0x3a, 0x7b, 0x73, 0xab, 0x93, 0x4a, 0xd3, 0x89,
- 0xa5, 0x91, 0x1f, 0x3f, 0xb6, 0x7b, 0x9d, 0xfd, 0x5b, 0x1d, 0xb6, 0xd7, 0xef, 0x08, 0x69, 0x3a,
- 0x19, 0x69, 0x3a, 0xb1, 0x34, 0x1d, 0x2b, 0xd9, 0x96, 0x25, 0xa9, 0xa2, 0x36, 0x34, 0x03, 0xb2,
- 0x4f, 0x43, 0xea, 0x7b, 0x46, 0x75, 0xb5, 0x72, 0xb5, 0x65, 0x25, 0x63, 0x64, 0xc0, 0x8c, 0xe7,
- 0x6f, 0x60, 0x7b, 0x40, 0x8c, 0xda, 0x6a, 0xe5, 0x6a, 0xd3, 0x8a, 0x87, 0x68, 0x15, 0x66, 0x31,
- 0x63, 0x8f, 0x70, 0x97, 0x38, 0x0f, 0xc9, 0x81, 0x51, 0x97, 0x0b, 0xb3, 0x20, 0xb1, 0x16, 0x33,
- 0xf6, 0x18, 0xbb, 0xc4, 0x68, 0xc8, 0xd9, 0x78, 0x88, 0x2e, 0x42, 0xcb, 0xc3, 0x2e, 0x09, 0x19,
- 0xb6, 0x89, 0xd1, 0x94, 0x73, 0x29, 0x00, 0xfd, 0x14, 0x96, 0x32, 0x82, 0x3f, 0xf5, 0xa3, 0xc0,
- 0x26, 0x06, 0xc8, 0xad, 0x3f, 0x99, 0x6c, 0xeb, 0xeb, 0x45, 0xb2, 0xd6, 0x30, 0x27, 0xf4, 0x23,
- 0x68, 0x48, 0xcb, 0x1b, 0xb3, 0xab, 0xb5, 0x63, 0xd5, 0xb6, 0x22, 0x8b, 0x3c, 0x98, 0x61, 0x4e,
- 0xd4, 0xa7, 0x5e, 0x68, 0x9c, 0x92, 0x1c, 0x9e, 0x4d, 0xc6, 0x61, 0xc3, 0xf7, 0x76, 0x69, 0x7f,
- 0x1b, 0x7b, 0xb8, 0x4f, 0x5c, 0xe2, 0xf1, 0x1d, 0x49, 0xdc, 0x8a, 0x99, 0xa0, 0x57, 0xb0, 0xb8,
- 0x17, 0x85, 0xdc, 0x77, 0xe9, 0x2b, 0xf2, 0x84, 0x89, 0xb5, 0xa1, 0x31, 0x27, 0xb5, 0xf9, 0x78,
- 0x32, 0xc6, 0x0f, 0x0b, 0x54, 0xad, 0x21, 0x3e, 0xc2, 0x49, 0xf6, 0xa2, 0x2e, 0xf9, 0x8c, 0x04,
- 0xd2, 0xbb, 0xe6, 0x95, 0x93, 0x64, 0x40, 0xca, 0x8d, 0xa8, 0x1e, 0x85, 0xc6, 0xc2, 0x6a, 0x4d,
- 0xb9, 0x51, 0x02, 0x42, 0x57, 0x61, 0x61, 0x9f, 0x04, 0x74, 0xf7, 0xe0, 0x29, 0xed, 0x7b, 0x98,
- 0x47, 0x01, 0x31, 0x16, 0xa5, 0x2b, 0x16, 0xc1, 0xc8, 0x85, 0xb9, 0x01, 0x71, 0x5c, 0xa1, 0xf2,
- 0x8d, 0x80, 0xf4, 0x42, 0x63, 0x49, 0xea, 0x77, 0x73, 0x72, 0x0b, 0x4a, 0x72, 0x56, 0x9e, 0xba,
- 0x10, 0xcc, 0xf3, 0x2d, 0x1d, 0x29, 0x2a, 0x46, 0x90, 0x12, 0xac, 0x00, 0x46, 0x57, 0x60, 0x9e,
- 0x07, 0xd8, 0xde, 0xa3, 0x5e, 0x7f, 0x9b, 0xf0, 0x81, 0xdf, 0x33, 0x4e, 0x4b, 0x4d, 0x14, 0xa0,
- 0xc8, 0x06, 0x44, 0x3c, 0xdc, 0x75, 0x48, 0x4f, 0xf9, 0xe2, 0xb3, 0x03, 0x46, 0x42, 0xe3, 0x8c,
- 0xdc, 0xc5, 0xad, 0x4e, 0x26, 0x43, 0x15, 0x12, 0x44, 0xe7, 0xde, 0xd0, 0xaa, 0x7b, 0x1e, 0x0f,
- 0x0e, 0xac, 0x12, 0x72, 0x68, 0x0f, 0x66, 0xc5, 0x3e, 0x62, 0x57, 0x38, 0x2b, 0x5d, 0xe1, 0xc1,
- 0x64, 0x3a, 0xda, 0x4a, 0x09, 0x5a, 0x59, 0xea, 0xa8, 0x03, 0x68, 0x80, 0xc3, 0xed, 0xc8, 0xe1,
- 0x94, 0x39, 0x44, 0x89, 0x11, 0x1a, 0xcb, 0x52, 0x4d, 0x25, 0x33, 0xe8, 0x21, 0x40, 0x40, 0x76,
- 0x63, 0xbc, 0x73, 0x72, 0xe7, 0xd7, 0xc7, 0xed, 0xdc, 0x4a, 0xb0, 0xd5, 0x8e, 0x33, 0xcb, 0x05,
- 0x73, 0xb1, 0x0d, 0x62, 0x73, 0x1d, 0xed, 0x32, 0xac, 0x0d, 0xe9, 0x62, 0x25, 0x33, 0xc2, 0x17,
- 0x35, 0x54, 0x26, 0xad, 0xf3, 0xca, 0x5b, 0x33, 0x20, 0xb4, 0x05, 0x5f, 0xc3, 0x9e, 0xe7, 0x73,
- 0xb9, 0xfd, 0x58, 0x94, 0x4d, 0x9d, 0xde, 0x77, 0x30, 0x1f, 0x84, 0x46, 0x5b, 0xae, 0x3a, 0x0c,
- 0x4d, 0xb8, 0x04, 0xf5, 0x42, 0x8e, 0x1d, 0x47, 0x22, 0x3d, 0xb8, 0x6b, 0x5c, 0x50, 0x2e, 0x91,
- 0x87, 0xb6, 0xef, 0xc1, 0xb9, 0x11, 0xc6, 0x45, 0x8b, 0x50, 0xdb, 0x23, 0x07, 0xf2, 0x50, 0x68,
- 0x59, 0xe2, 0x13, 0x9d, 0x81, 0xc6, 0x3e, 0x76, 0x22, 0x22, 0xd3, 0x78, 0xd3, 0x52, 0x83, 0x3b,
- 0xd5, 0x6f, 0x56, 0xda, 0xbf, 0xac, 0xc0, 0x42, 0x41, 0x55, 0x25, 0xeb, 0x7f, 0x98, 0x5d, 0x7f,
- 0x0c, 0x81, 0xb3, 0xfb, 0x0c, 0x07, 0x7d, 0xc2, 0x33, 0x82, 0x98, 0x7f, 0xab, 0x80, 0x51, 0xb0,
- 0xe1, 0xf7, 0x28, 0x1f, 0xdc, 0xa7, 0x0e, 0x09, 0xd1, 0x6d, 0x98, 0x09, 0x14, 0x4c, 0x1f, 0x75,
- 0x17, 0xc6, 0x98, 0x7e, 0x6b, 0xca, 0x8a, 0xb1, 0xd1, 0x47, 0xd0, 0x74, 0x09, 0xc7, 0x3d, 0xcc,
- 0xb1, 0x96, 0x7d, 0xb5, 0x6c, 0xa5, 0xe0, 0xb2, 0xad, 0xf1, 0xb6, 0xa6, 0xac, 0x64, 0x0d, 0x7a,
- 0x0f, 0x1a, 0xf6, 0x20, 0xf2, 0xf6, 0xe4, 0x21, 0x37, 0x7b, 0xf3, 0xd2, 0xa8, 0xc5, 0x1b, 0x02,
- 0x69, 0x6b, 0xca, 0x52, 0xd8, 0x1f, 0x4f, 0x43, 0x9d, 0xe1, 0x80, 0x9b, 0xf7, 0xe1, 0x4c, 0x19,
- 0x0b, 0x71, 0xb2, 0xda, 0x03, 0x62, 0xef, 0x85, 0x91, 0xab, 0xd5, 0x9c, 0x8c, 0x11, 0x82, 0x7a,
- 0x48, 0x5f, 0x29, 0x55, 0xd7, 0x2c, 0xf9, 0x6d, 0xbe, 0x0d, 0x4b, 0x43, 0xdc, 0x84, 0x51, 0x95,
- 0x6c, 0x82, 0xc2, 0x29, 0xcd, 0xda, 0x8c, 0xe0, 0xec, 0x33, 0xa9, 0x8b, 0xe4, 0x78, 0x39, 0x89,
- 0x5a, 0xc1, 0xdc, 0x82, 0xe5, 0x22, 0xdb, 0x90, 0xf9, 0x5e, 0x48, 0x44, 0xb0, 0xc9, 0x7c, 0x4c,
- 0x49, 0x2f, 0x9d, 0x95, 0x52, 0x34, 0xad, 0x92, 0x19, 0xf3, 0xb7, 0x55, 0x58, 0xb6, 0x48, 0xe8,
- 0x3b, 0xfb, 0x24, 0x4e, 0x96, 0x27, 0x53, 0xee, 0xfc, 0x00, 0x6a, 0x98, 0x31, 0xed, 0x26, 0x0f,
- 0x8e, 0xad, 0xa0, 0xb0, 0x04, 0x55, 0xf4, 0x0e, 0x2c, 0x61, 0xb7, 0x4b, 0xfb, 0x91, 0x1f, 0x85,
- 0xf1, 0xb6, 0xa4, 0x53, 0xb5, 0xac, 0xe1, 0x09, 0x91, 0x70, 0x42, 0x19, 0x91, 0x0f, 0xbc, 0x1e,
- 0xf9, 0x89, 0xac, 0xa1, 0x6a, 0x56, 0x16, 0x64, 0xda, 0x70, 0x6e, 0x48, 0x49, 0x5a, 0xe1, 0xd9,
- 0xb2, 0xad, 0x52, 0x28, 0xdb, 0x4a, 0xc5, 0xa8, 0x8e, 0x10, 0xc3, 0x7c, 0x5d, 0x81, 0xc5, 0x34,
- 0xb8, 0x34, 0xf9, 0x8b, 0xd0, 0x72, 0x35, 0x2c, 0x34, 0x2a, 0x32, 0x67, 0xa6, 0x80, 0x7c, 0x05,
- 0x57, 0x2d, 0x56, 0x70, 0xcb, 0x30, 0xad, 0x0a, 0x6c, 0xbd, 0x75, 0x3d, 0xca, 0x89, 0x5c, 0x2f,
- 0x88, 0xbc, 0x02, 0x10, 0x26, 0x19, 0xce, 0x98, 0x96, 0xb3, 0x19, 0x08, 0x32, 0xe1, 0x94, 0x3a,
- 0xef, 0x2d, 0x12, 0x46, 0x0e, 0x37, 0x66, 0x24, 0x46, 0x0e, 0x26, 0xe3, 0xcd, 0x77, 0x5d, 0xec,
- 0xf5, 0x42, 0xa3, 0x29, 0x45, 0x4e, 0xc6, 0xa6, 0x0f, 0x0b, 0x8f, 0xa8, 0xd8, 0xdf, 0x6e, 0x78,
- 0x32, 0xa1, 0xf2, 0x3e, 0xd4, 0x05, 0x33, 0x21, 0x54, 0x37, 0xc0, 0x9e, 0x3d, 0x20, 0xb1, 0x1e,
- 0x93, 0xb1, 0x48, 0x02, 0x1c, 0xf7, 0x43, 0xa3, 0x2a, 0xe1, 0xf2, 0xdb, 0xfc, 0x7d, 0x55, 0x49,
- 0xba, 0xce, 0x58, 0xf8, 0xd5, 0x37, 0x00, 0xe5, 0x25, 0x49, 0x6d, 0xb8, 0x24, 0x29, 0x88, 0xfc,
- 0x65, 0x4a, 0x92, 0x63, 0x3a, 0xe4, 0xcc, 0x08, 0x66, 0xd6, 0x19, 0x13, 0x82, 0xa0, 0x1b, 0x50,
- 0xc7, 0x8c, 0x29, 0x85, 0x17, 0xf2, 0xb9, 0x46, 0x11, 0xff, 0xb5, 0x48, 0x12, 0xb5, 0x7d, 0x1b,
- 0x5a, 0x09, 0xe8, 0x30, 0xb6, 0xad, 0x2c, 0xdb, 0x55, 0x00, 0x55, 0x73, 0x3f, 0xf0, 0x76, 0x7d,
- 0x61, 0x52, 0x11, 0x08, 0x7a, 0xa9, 0xfc, 0x36, 0xef, 0xc4, 0x18, 0x52, 0xb6, 0x77, 0xa0, 0x41,
- 0x39, 0x71, 0x63, 0xe1, 0x96, 0xb3, 0xc2, 0xa5, 0x84, 0x2c, 0x85, 0x64, 0xfe, 0xb9, 0x09, 0xe7,
- 0x85, 0xc5, 0x9e, 0xca, 0x10, 0x5a, 0x67, 0xec, 0x2e, 0xe1, 0x98, 0x3a, 0xe1, 0x77, 0x23, 0x12,
- 0x1c, 0xbc, 0x61, 0xc7, 0xe8, 0xc3, 0xb4, 0x8a, 0x40, 0x9d, 0x2d, 0x8f, 0xbd, 0xfd, 0xd2, 0xe4,
- 0xd3, 0x9e, 0xab, 0xf6, 0x66, 0x7a, 0xae, 0xb2, 0x1e, 0xa8, 0x7e, 0x42, 0x3d, 0xd0, 0xe8, 0x36,
- 0x38, 0xd3, 0x5c, 0x4f, 0xe7, 0x9b, 0xeb, 0x92, 0xd6, 0x62, 0xe6, 0xa8, 0xad, 0x45, 0xb3, 0xb4,
- 0xb5, 0x70, 0x4b, 0xe3, 0xb8, 0x25, 0xd5, 0xfd, 0xed, 0xac, 0x07, 0x8e, 0xf4, 0xb5, 0x49, 0x9a,
- 0x0c, 0x78, 0xa3, 0x4d, 0xc6, 0xa7, 0xb9, 0xa6, 0x41, 0xb5, 0xed, 0xef, 0x1d, 0x6d, 0x4f, 0x63,
- 0xda, 0x87, 0xff, 0xbb, 0xd2, 0xfb, 0x17, 0xb2, 0xe2, 0x62, 0x7e, 0xaa, 0x83, 0xe4, 0xb0, 0x17,
- 0xe7, 0x90, 0x38, 0x76, 0x75, 0xd2, 0x12, 0xdf, 0xe8, 0x3a, 0xd4, 0x85, 0x92, 0x75, 0x49, 0x7c,
- 0x2e, 0xab, 0x4f, 0x61, 0x89, 0x75, 0xc6, 0x9e, 0x32, 0x62, 0x5b, 0x12, 0x09, 0xdd, 0x81, 0x56,
- 0xe2, 0xf8, 0x3a, 0xb2, 0x2e, 0x66, 0x57, 0x24, 0x71, 0x12, 0x2f, 0x4b, 0xd1, 0xc5, 0xda, 0x1e,
- 0x0d, 0x88, 0x2d, 0x0b, 0xc6, 0xc6, 0xf0, 0xda, 0xbb, 0xf1, 0x64, 0xb2, 0x36, 0x41, 0x47, 0x37,
- 0x60, 0x5a, 0xdd, 0x73, 0xc8, 0x08, 0x9a, 0xbd, 0x79, 0x7e, 0x38, 0x99, 0xc6, 0xab, 0x34, 0xa2,
- 0xf9, 0xa7, 0x0a, 0xbc, 0x95, 0x3a, 0x44, 0x1c, 0x4d, 0x71, 0xcd, 0xfe, 0xd5, 0x9f, 0xb8, 0x57,
- 0x60, 0x5e, 0x36, 0x09, 0xe9, 0x75, 0x87, 0xba, 0x79, 0x2b, 0x40, 0xcd, 0xdf, 0x55, 0xe0, 0xf2,
- 0xf0, 0x3e, 0x36, 0x06, 0x38, 0xe0, 0x89, 0x79, 0x4f, 0x62, 0x2f, 0xf1, 0x81, 0x57, 0x4d, 0x0f,
- 0xbc, 0xdc, 0xfe, 0x6a, 0xf9, 0xfd, 0x99, 0x7f, 0xa8, 0xc2, 0x6c, 0xc6, 0x81, 0xca, 0x0e, 0x4c,
- 0x51, 0x0c, 0x4a, 0xbf, 0x95, 0x6d, 0xa1, 0x3c, 0x14, 0x5a, 0x56, 0x06, 0x82, 0xf6, 0x00, 0x18,
- 0x0e, 0xb0, 0x4b, 0x38, 0x09, 0x44, 0x26, 0x17, 0x11, 0xff, 0x70, 0xf2, 0xec, 0xb2, 0x13, 0xd3,
- 0xb4, 0x32, 0xe4, 0x45, 0x35, 0x2b, 0x59, 0x87, 0x3a, 0x7f, 0xeb, 0x11, 0xfa, 0x02, 0xe6, 0x77,
- 0xa9, 0x43, 0x76, 0x52, 0x41, 0xa6, 0xa5, 0x20, 0x4f, 0x26, 0x17, 0xe4, 0x7e, 0x96, 0xae, 0x55,
- 0x60, 0x63, 0x5e, 0x83, 0xc5, 0x62, 0x3c, 0x09, 0x21, 0xa9, 0x8b, 0xfb, 0x89, 0xb6, 0xf4, 0xc8,
- 0x44, 0xb0, 0x58, 0x8c, 0x1f, 0xf3, 0x9f, 0x55, 0x38, 0x9b, 0x90, 0x5b, 0xf7, 0x3c, 0x3f, 0xf2,
- 0x6c, 0x79, 0x75, 0x58, 0x6a, 0x8b, 0x33, 0xd0, 0xe0, 0x94, 0x3b, 0x49, 0xe1, 0x23, 0x07, 0xe2,
- 0xec, 0xe2, 0xbe, 0xef, 0x70, 0xca, 0xb4, 0x81, 0xe3, 0xa1, 0xb2, 0xfd, 0xcb, 0x88, 0x06, 0xa4,
- 0x27, 0x33, 0x41, 0xd3, 0x4a, 0xc6, 0x62, 0x4e, 0x54, 0x35, 0xb2, 0xc4, 0x57, 0xca, 0x4c, 0xc6,
- 0xd2, 0xef, 0x7d, 0xc7, 0x21, 0xb6, 0x50, 0x47, 0xa6, 0x09, 0x28, 0x40, 0x65, 0x73, 0xc1, 0x03,
- 0xea, 0xf5, 0x75, 0x0b, 0xa0, 0x47, 0x42, 0x4e, 0x1c, 0x04, 0xf8, 0x40, 0x57, 0xfe, 0x6a, 0x80,
- 0x3e, 0x84, 0x9a, 0x8b, 0x99, 0x3e, 0xe8, 0xae, 0xe5, 0xb2, 0x43, 0x99, 0x06, 0x3a, 0xdb, 0x98,
- 0xa9, 0x93, 0x40, 0x2c, 0x6b, 0xbf, 0x0f, 0xcd, 0x18, 0xf0, 0xa5, 0x4a, 0xc2, 0xcf, 0x61, 0x2e,
- 0x97, 0x7c, 0xd0, 0x73, 0x58, 0x4e, 0x3d, 0x2a, 0xcb, 0x50, 0x17, 0x81, 0x6f, 0x1d, 0x2a, 0x99,
- 0x35, 0x82, 0x80, 0xf9, 0x12, 0x96, 0x84, 0xcb, 0xc8, 0xc0, 0x3f, 0xa1, 0xd6, 0xe6, 0x03, 0x68,
- 0x25, 0x2c, 0x4b, 0x7d, 0xa6, 0x0d, 0xcd, 0xfd, 0xf8, 0x4a, 0x57, 0xf5, 0x36, 0xc9, 0xd8, 0x5c,
- 0x07, 0x94, 0x95, 0x57, 0x9f, 0x40, 0xd7, 0xf3, 0x45, 0xf1, 0xd9, 0xe2, 0x71, 0x23, 0xd1, 0xe3,
- 0x9a, 0xf8, 0xef, 0x55, 0x58, 0xd8, 0xa4, 0xf2, 0x8e, 0xe4, 0x84, 0x92, 0xdc, 0x35, 0x58, 0x0c,
- 0xa3, 0xae, 0xeb, 0xf7, 0x22, 0x87, 0xe8, 0xa2, 0x40, 0x9f, 0xf4, 0x43, 0xf0, 0x71, 0xc9, 0x4f,
- 0x28, 0x8b, 0x61, 0x3e, 0xd0, 0xdd, 0xaf, 0xfc, 0x46, 0x1f, 0xc2, 0xf9, 0xc7, 0xe4, 0x0b, 0xbd,
- 0x9f, 0x4d, 0xc7, 0xef, 0x76, 0xa9, 0xd7, 0x8f, 0x99, 0x34, 0x24, 0x93, 0xd1, 0x08, 0x65, 0xa5,
- 0xe2, 0x74, 0x79, 0xa9, 0x98, 0x74, 0xd0, 0x1b, 0xbe, 0xeb, 0x52, 0xae, 0x2b, 0xca, 0x1c, 0xcc,
- 0xfc, 0x79, 0x05, 0x16, 0x53, 0xcd, 0x6a, 0xdb, 0xdc, 0x56, 0x31, 0xa4, 0x2c, 0x73, 0x39, 0x6b,
- 0x99, 0x22, 0xea, 0x7f, 0x1e, 0x3e, 0xa7, 0xb2, 0xe1, 0xf3, 0xab, 0x2a, 0x9c, 0xdd, 0xa4, 0x3c,
- 0x4e, 0x5c, 0xf4, 0x7f, 0xcd, 0xca, 0x25, 0x36, 0xa9, 0x1f, 0xcd, 0x26, 0x8d, 0x12, 0x9b, 0x74,
- 0x60, 0xb9, 0xa8, 0x0c, 0x6d, 0x98, 0x33, 0xd0, 0x60, 0xf2, 0xd2, 0x59, 0xdd, 0x2b, 0xa8, 0x81,
- 0xf9, 0xb3, 0x19, 0xb8, 0xf4, 0x29, 0xeb, 0x61, 0x9e, 0xdc, 0x19, 0xdd, 0xf7, 0x03, 0x79, 0xeb,
- 0x7c, 0x32, 0x5a, 0x2c, 0xbc, 0x0c, 0x56, 0xc7, 0xbe, 0x0c, 0xd6, 0xc6, 0xbc, 0x0c, 0xd6, 0x8f,
- 0xf4, 0x32, 0xd8, 0x38, 0xb1, 0x97, 0xc1, 0xe1, 0x5e, 0x6b, 0xba, 0xb4, 0xd7, 0x7a, 0x9e, 0xeb,
- 0x47, 0x66, 0x64, 0xd8, 0x7c, 0x2b, 0x1b, 0x36, 0x63, 0xad, 0x33, 0xf6, 0x49, 0xa3, 0xf0, 0xa0,
- 0xd6, 0x3c, 0xf4, 0x41, 0xad, 0x35, 0xfc, 0xa0, 0x56, 0xfe, 0x26, 0x03, 0x23, 0xdf, 0x64, 0xae,
- 0xc0, 0x7c, 0x78, 0xe0, 0xd9, 0xa4, 0x97, 0xdc, 0x24, 0xce, 0xaa, 0x6d, 0xe7, 0xa1, 0xb9, 0x88,
- 0x38, 0x55, 0x88, 0x88, 0xc4, 0x53, 0xe7, 0x32, 0x9e, 0x5a, 0x16, 0x27, 0xf3, 0x23, 0xdb, 0xdc,
- 0xc2, 0x73, 0xc9, 0x42, 0xe9, 0x73, 0xc9, 0x7f, 0x4d, 0xb3, 0xf5, 0x19, 0xac, 0x8c, 0xb2, 0xb2,
- 0x0e, 0x5e, 0x03, 0x66, 0xec, 0x01, 0xf6, 0xfa, 0xf2, 0x5a, 0x50, 0x76, 0xff, 0x7a, 0x38, 0xae,
- 0x3b, 0xb8, 0xf9, 0x47, 0x80, 0xa5, 0xb4, 0xea, 0x17, 0x7f, 0xa9, 0x4d, 0xd0, 0x13, 0x58, 0x8c,
- 0x9f, 0x97, 0xe2, 0x8b, 0x5c, 0x34, 0xee, 0xed, 0xa4, 0x7d, 0xb1, 0x7c, 0x52, 0x89, 0x66, 0x4e,
- 0x21, 0x1b, 0xce, 0x17, 0x09, 0xa6, 0xcf, 0x34, 0xdf, 0x18, 0x43, 0x39, 0xc1, 0x3a, 0x8c, 0xc5,
- 0xd5, 0x0a, 0x7a, 0x0e, 0xf3, 0xf9, 0xc7, 0x04, 0x94, 0x2b, 0x83, 0x4a, 0xdf, 0x37, 0xda, 0xe6,
- 0x38, 0x94, 0x44, 0xfe, 0x17, 0xc2, 0x0d, 0x72, 0xf7, 0xe6, 0xc8, 0xcc, 0xdf, 0x08, 0x94, 0xbd,
- 0x3c, 0xb4, 0xbf, 0x3e, 0x16, 0x27, 0xa1, 0xfe, 0x01, 0x34, 0xe3, 0xbb, 0xe4, 0xbc, 0x9a, 0x0b,
- 0x37, 0xcc, 0xed, 0xc5, 0x3c, 0xbd, 0xdd, 0xd0, 0x9c, 0x42, 0x1f, 0xa9, 0xc5, 0xeb, 0x8c, 0x95,
- 0x2c, 0xce, 0xdc, 0xa0, 0xb6, 0x4f, 0x97, 0xdc, 0x5a, 0x9a, 0x53, 0xe8, 0x3b, 0x30, 0x2b, 0xbe,
- 0x76, 0xf4, 0xf3, 0xfe, 0x72, 0x47, 0xfd, 0x9a, 0xa4, 0x13, 0xff, 0x9a, 0xa4, 0x73, 0xcf, 0x65,
- 0xfc, 0xa0, 0x5d, 0x72, 0xad, 0xa8, 0x09, 0xbc, 0x80, 0xb9, 0x4d, 0xc2, 0xd3, 0x5b, 0x00, 0x74,
- 0xf9, 0x48, 0x77, 0x25, 0x6d, 0xb3, 0x88, 0x36, 0x7c, 0x91, 0x60, 0x4e, 0xa1, 0x5f, 0x57, 0xe0,
- 0xf4, 0x26, 0xe1, 0xc5, 0xbe, 0x1a, 0xbd, 0x5b, 0xce, 0x64, 0x44, 0xff, 0xdd, 0x7e, 0x3c, 0x69,
- 0x4c, 0xe6, 0xc9, 0x9a, 0x53, 0xe8, 0x37, 0x15, 0x38, 0x97, 0x11, 0x2c, 0xdb, 0x28, 0xa3, 0x1b,
- 0xe3, 0x85, 0x2b, 0x69, 0xaa, 0xdb, 0x9f, 0x4c, 0xf8, 0xab, 0x8d, 0x0c, 0x49, 0x73, 0x0a, 0xed,
- 0x48, 0x9b, 0xa4, 0x75, 0x31, 0xba, 0x54, 0x5a, 0x00, 0x27, 0xdc, 0x57, 0x46, 0x4d, 0x27, 0x76,
- 0xf8, 0x04, 0x66, 0x37, 0x09, 0x8f, 0x0b, 0xb4, 0xbc, 0xa7, 0x15, 0x6a, 0xe7, 0x7c, 0xa8, 0x16,
- 0x6b, 0x3a, 0xe9, 0x31, 0x4b, 0x8a, 0x56, 0xa6, 0x08, 0xc9, 0xc7, 0x6a, 0x69, 0xb5, 0x96, 0xf7,
- 0x98, 0xf2, 0x1a, 0xc6, 0x9c, 0x42, 0x2f, 0x61, 0xb9, 0x3c, 0x55, 0xa2, 0xb7, 0x8f, 0x7c, 0x68,
- 0xb6, 0xaf, 0x1d, 0x05, 0x35, 0x66, 0xf9, 0xf1, 0xfa, 0x5f, 0x5e, 0xaf, 0x54, 0xfe, 0xfa, 0x7a,
- 0xa5, 0xf2, 0xaf, 0xd7, 0x2b, 0x95, 0xef, 0xdf, 0x3a, 0xe4, 0xd7, 0x5d, 0x99, 0x1f, 0x8c, 0x61,
- 0x46, 0x6d, 0x87, 0x12, 0x8f, 0x77, 0xa7, 0x65, 0xbc, 0xdd, 0xfa, 0x77, 0x00, 0x00, 0x00, 0xff,
- 0xff, 0x17, 0x3e, 0x16, 0x5a, 0x4f, 0x26, 0x00, 0x00,
+ // 2407 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x1a, 0xcb, 0x72, 0x1c, 0x49,
+ 0x71, 0x9e, 0xd2, 0x4c, 0xea, 0x5d, 0xb6, 0xe5, 0xf6, 0xd8, 0x16, 0xda, 0x06, 0x3b, 0xbc, 0xf6,
+ 0xee, 0x28, 0x6c, 0xc7, 0xae, 0xc1, 0xbb, 0x2c, 0xa1, 0x95, 0x6d, 0x49, 0x6b, 0xcb, 0x16, 0x6d,
+ 0xef, 0x12, 0x06, 0x03, 0x51, 0xd3, 0x53, 0xea, 0xe9, 0x55, 0x3f, 0xca, 0xdd, 0xd5, 0x5a, 0xe4,
+ 0x08, 0x2e, 0x40, 0x70, 0xe1, 0xc2, 0x69, 0x0f, 0x5c, 0xf9, 0x06, 0x82, 0x23, 0x27, 0x02, 0x8e,
+ 0x04, 0x17, 0x2e, 0x44, 0x40, 0xf8, 0x4b, 0x88, 0x7a, 0xf4, 0x73, 0x7a, 0x46, 0x5a, 0x8f, 0xad,
+ 0x05, 0x2e, 0x52, 0x57, 0x56, 0x56, 0x66, 0x56, 0x56, 0x66, 0x56, 0x66, 0xd6, 0xc0, 0xe5, 0x80,
+ 0x50, 0x3f, 0x24, 0xc1, 0x01, 0x09, 0xd6, 0xc4, 0xa7, 0xcd, 0xfc, 0xe0, 0x30, 0xf3, 0xd9, 0xa5,
+ 0x81, 0xcf, 0x7c, 0x04, 0x29, 0xa4, 0xf3, 0xc0, 0xb2, 0xd9, 0x20, 0xea, 0x75, 0x4d, 0xdf, 0x5d,
+ 0xc3, 0x81, 0xe5, 0xd3, 0xc0, 0xff, 0x5c, 0x7c, 0xbc, 0x6b, 0xf6, 0xd7, 0x0e, 0x6e, 0xae, 0xd1,
+ 0x7d, 0x6b, 0x0d, 0x53, 0x3b, 0x5c, 0xc3, 0x94, 0x3a, 0xb6, 0x89, 0x99, 0xed, 0x7b, 0x6b, 0x07,
+ 0xd7, 0xb1, 0x43, 0x07, 0xf8, 0xfa, 0x9a, 0x45, 0x3c, 0x12, 0x60, 0x46, 0xfa, 0x92, 0x72, 0xe7,
+ 0xbc, 0xe5, 0xfb, 0x96, 0x43, 0xd6, 0xc4, 0xa8, 0x17, 0xed, 0xad, 0x11, 0x97, 0x32, 0xc5, 0x56,
+ 0xff, 0xe7, 0x1c, 0x2c, 0xec, 0x60, 0xcf, 0xde, 0x23, 0x21, 0x33, 0xc8, 0xf3, 0x88, 0x84, 0x0c,
+ 0x3d, 0x83, 0x06, 0x17, 0x46, 0xab, 0xae, 0x56, 0xaf, 0xcc, 0xdc, 0xd8, 0xea, 0xa6, 0xd2, 0x74,
+ 0x63, 0x69, 0xc4, 0xc7, 0x4f, 0xcd, 0x7e, 0xf7, 0xe0, 0x66, 0x97, 0xee, 0x5b, 0x5d, 0x2e, 0x4d,
+ 0x37, 0x23, 0x4d, 0x37, 0x96, 0xa6, 0x6b, 0x24, 0xdb, 0x32, 0x04, 0x55, 0xd4, 0x81, 0x56, 0x40,
+ 0x0e, 0xec, 0xd0, 0xf6, 0x3d, 0xad, 0xb6, 0x5a, 0xbd, 0xd2, 0x36, 0x92, 0x31, 0xd2, 0x60, 0xda,
+ 0xf3, 0x37, 0xb0, 0x39, 0x20, 0x5a, 0x7d, 0xb5, 0x7a, 0xa5, 0x65, 0xc4, 0x43, 0xb4, 0x0a, 0x33,
+ 0x98, 0xd2, 0x07, 0xb8, 0x47, 0x9c, 0xfb, 0xe4, 0x50, 0x6b, 0x88, 0x85, 0x59, 0x10, 0x5f, 0x8b,
+ 0x29, 0x7d, 0x88, 0x5d, 0xa2, 0x35, 0xc5, 0x6c, 0x3c, 0x44, 0x17, 0xa0, 0xed, 0x61, 0x97, 0x84,
+ 0x14, 0x9b, 0x44, 0x6b, 0x89, 0xb9, 0x14, 0x80, 0x7e, 0x0e, 0x4b, 0x19, 0xc1, 0x1f, 0xfb, 0x51,
+ 0x60, 0x12, 0x0d, 0xc4, 0xd6, 0x1f, 0x4d, 0xb6, 0xf5, 0xf5, 0x22, 0x59, 0x63, 0x98, 0x13, 0xfa,
+ 0x09, 0x34, 0xc5, 0xc9, 0x6b, 0x33, 0xab, 0xf5, 0xd7, 0xaa, 0x6d, 0x49, 0x16, 0x79, 0x30, 0x4d,
+ 0x9d, 0xc8, 0xb2, 0xbd, 0x50, 0x9b, 0x15, 0x1c, 0x9e, 0x4c, 0xc6, 0x61, 0xc3, 0xf7, 0xf6, 0x6c,
+ 0x6b, 0x07, 0x7b, 0xd8, 0x22, 0x2e, 0xf1, 0xd8, 0xae, 0x20, 0x6e, 0xc4, 0x4c, 0xd0, 0x0b, 0x58,
+ 0xdc, 0x8f, 0x42, 0xe6, 0xbb, 0xf6, 0x0b, 0xf2, 0x88, 0xf2, 0xb5, 0xa1, 0x36, 0x27, 0xb4, 0xf9,
+ 0x70, 0x32, 0xc6, 0xf7, 0x0b, 0x54, 0x8d, 0x21, 0x3e, 0xdc, 0x48, 0xf6, 0xa3, 0x1e, 0xf9, 0x8c,
+ 0x04, 0xc2, 0xba, 0xe6, 0xa5, 0x91, 0x64, 0x40, 0xd2, 0x8c, 0x6c, 0x35, 0x0a, 0xb5, 0x85, 0xd5,
+ 0xba, 0x34, 0xa3, 0x04, 0x84, 0xae, 0xc0, 0xc2, 0x01, 0x09, 0xec, 0xbd, 0xc3, 0xc7, 0xb6, 0xe5,
+ 0x61, 0x16, 0x05, 0x44, 0x5b, 0x14, 0xa6, 0x58, 0x04, 0x23, 0x17, 0xe6, 0x06, 0xc4, 0x71, 0xb9,
+ 0xca, 0x37, 0x02, 0xd2, 0x0f, 0xb5, 0x25, 0xa1, 0xdf, 0xcd, 0xc9, 0x4f, 0x50, 0x90, 0x33, 0xf2,
+ 0xd4, 0xb9, 0x60, 0x9e, 0x6f, 0x28, 0x4f, 0x91, 0x3e, 0x82, 0xa4, 0x60, 0x05, 0x30, 0xba, 0x0c,
+ 0xf3, 0x2c, 0xc0, 0xe6, 0xbe, 0xed, 0x59, 0x3b, 0x84, 0x0d, 0xfc, 0xbe, 0x76, 0x4a, 0x68, 0xa2,
+ 0x00, 0x45, 0x26, 0x20, 0xe2, 0xe1, 0x9e, 0x43, 0xfa, 0xd2, 0x16, 0x9f, 0x1c, 0x52, 0x12, 0x6a,
+ 0xa7, 0xc5, 0x2e, 0x6e, 0x76, 0x33, 0x11, 0xaa, 0x10, 0x20, 0xba, 0x77, 0x87, 0x56, 0xdd, 0xf5,
+ 0x58, 0x70, 0x68, 0x94, 0x90, 0x43, 0xfb, 0x30, 0xc3, 0xf7, 0x11, 0x9b, 0xc2, 0x19, 0x61, 0x0a,
+ 0xdb, 0x93, 0xe9, 0x68, 0x2b, 0x25, 0x68, 0x64, 0xa9, 0xa3, 0x2e, 0xa0, 0x01, 0x0e, 0x77, 0x22,
+ 0x87, 0xd9, 0xd4, 0x21, 0x52, 0x8c, 0x50, 0x5b, 0x16, 0x6a, 0x2a, 0x99, 0x41, 0xf7, 0x01, 0x02,
+ 0xb2, 0x17, 0xe3, 0x9d, 0x15, 0x3b, 0xbf, 0x36, 0x6e, 0xe7, 0x46, 0x82, 0x2d, 0x77, 0x9c, 0x59,
+ 0xce, 0x99, 0xf3, 0x6d, 0x10, 0x93, 0x29, 0x6f, 0x17, 0x6e, 0xad, 0x09, 0x13, 0x2b, 0x99, 0xe1,
+ 0xb6, 0xa8, 0xa0, 0x22, 0x68, 0x9d, 0x93, 0xd6, 0x9a, 0x01, 0xa1, 0x2d, 0xf8, 0x06, 0xf6, 0x3c,
+ 0x9f, 0x89, 0xed, 0xc7, 0xa2, 0x6c, 0xaa, 0xf0, 0xbe, 0x8b, 0xd9, 0x20, 0xd4, 0x3a, 0x62, 0xd5,
+ 0x51, 0x68, 0xdc, 0x24, 0x6c, 0x2f, 0x64, 0xd8, 0x71, 0x04, 0xd2, 0xf6, 0x1d, 0xed, 0xbc, 0x34,
+ 0x89, 0x3c, 0xb4, 0x73, 0x17, 0xce, 0x8e, 0x38, 0x5c, 0xb4, 0x08, 0xf5, 0x7d, 0x72, 0x28, 0x2e,
+ 0x85, 0xb6, 0xc1, 0x3f, 0xd1, 0x69, 0x68, 0x1e, 0x60, 0x27, 0x22, 0x22, 0x8c, 0xb7, 0x0c, 0x39,
+ 0xb8, 0x5d, 0xfb, 0x76, 0xb5, 0xf3, 0xeb, 0x2a, 0x2c, 0x14, 0x54, 0x55, 0xb2, 0xfe, 0xc7, 0xd9,
+ 0xf5, 0xaf, 0xc1, 0x71, 0xf6, 0x9e, 0xe0, 0xc0, 0x22, 0x2c, 0x23, 0x88, 0xfe, 0xf7, 0x2a, 0x68,
+ 0x85, 0x33, 0xfc, 0x81, 0xcd, 0x06, 0xf7, 0x6c, 0x87, 0x84, 0xe8, 0x16, 0x4c, 0x07, 0x12, 0xa6,
+ 0xae, 0xba, 0xf3, 0x63, 0x8e, 0x7e, 0xab, 0x62, 0xc4, 0xd8, 0xe8, 0x23, 0x68, 0xb9, 0x84, 0xe1,
+ 0x3e, 0x66, 0x58, 0xc9, 0xbe, 0x5a, 0xb6, 0x92, 0x73, 0xd9, 0x51, 0x78, 0x5b, 0x15, 0x23, 0x59,
+ 0x83, 0xde, 0x83, 0xa6, 0x39, 0x88, 0xbc, 0x7d, 0x71, 0xc9, 0xcd, 0xdc, 0xb8, 0x38, 0x6a, 0xf1,
+ 0x06, 0x47, 0xda, 0xaa, 0x18, 0x12, 0xfb, 0xe3, 0x29, 0x68, 0x50, 0x1c, 0x30, 0xfd, 0x1e, 0x9c,
+ 0x2e, 0x63, 0xc1, 0x6f, 0x56, 0x73, 0x40, 0xcc, 0xfd, 0x30, 0x72, 0x95, 0x9a, 0x93, 0x31, 0x42,
+ 0xd0, 0x08, 0xed, 0x17, 0x52, 0xd5, 0x75, 0x43, 0x7c, 0xeb, 0x6f, 0xc3, 0xd2, 0x10, 0x37, 0x7e,
+ 0xa8, 0x52, 0x36, 0x4e, 0x61, 0x56, 0xb1, 0xd6, 0x23, 0x38, 0xf3, 0x44, 0xe8, 0x22, 0xb9, 0x5e,
+ 0x4e, 0x22, 0x57, 0xd0, 0xb7, 0x60, 0xb9, 0xc8, 0x36, 0xa4, 0xbe, 0x17, 0x12, 0xee, 0x6c, 0x22,
+ 0x1e, 0xdb, 0xa4, 0x9f, 0xce, 0x0a, 0x29, 0x5a, 0x46, 0xc9, 0x8c, 0xfe, 0xfb, 0x1a, 0x2c, 0x1b,
+ 0x24, 0xf4, 0x9d, 0x03, 0x12, 0x07, 0xcb, 0x93, 0x49, 0x77, 0x7e, 0x04, 0x75, 0x4c, 0xa9, 0x32,
+ 0x93, 0xed, 0xd7, 0x96, 0x50, 0x18, 0x9c, 0x2a, 0x7a, 0x07, 0x96, 0xb0, 0xdb, 0xb3, 0xad, 0xc8,
+ 0x8f, 0xc2, 0x78, 0x5b, 0xc2, 0xa8, 0xda, 0xc6, 0xf0, 0x04, 0x0f, 0x38, 0xa1, 0xf0, 0xc8, 0x6d,
+ 0xaf, 0x4f, 0x7e, 0x26, 0x72, 0xa8, 0xba, 0x91, 0x05, 0xe9, 0x26, 0x9c, 0x1d, 0x52, 0x92, 0x52,
+ 0x78, 0x36, 0x6d, 0xab, 0x16, 0xd2, 0xb6, 0x52, 0x31, 0x6a, 0x23, 0xc4, 0xd0, 0x5f, 0x56, 0x61,
+ 0x31, 0x75, 0x2e, 0x45, 0xfe, 0x02, 0xb4, 0x5d, 0x05, 0x0b, 0xb5, 0xaa, 0x88, 0x99, 0x29, 0x20,
+ 0x9f, 0xc1, 0xd5, 0x8a, 0x19, 0xdc, 0x32, 0x4c, 0xc9, 0x04, 0x5b, 0x6d, 0x5d, 0x8d, 0x72, 0x22,
+ 0x37, 0x0a, 0x22, 0xaf, 0x00, 0x84, 0x49, 0x84, 0xd3, 0xa6, 0xc4, 0x6c, 0x06, 0x82, 0x74, 0x98,
+ 0x95, 0xf7, 0xbd, 0x41, 0xc2, 0xc8, 0x61, 0xda, 0xb4, 0xc0, 0xc8, 0xc1, 0x84, 0xbf, 0xf9, 0xae,
+ 0x8b, 0xbd, 0x7e, 0xa8, 0xb5, 0x84, 0xc8, 0xc9, 0x58, 0xf7, 0x61, 0xe1, 0x81, 0xcd, 0xf7, 0xb7,
+ 0x17, 0x9e, 0x8c, 0xab, 0xbc, 0x0f, 0x0d, 0xce, 0x8c, 0x0b, 0xd5, 0x0b, 0xb0, 0x67, 0x0e, 0x48,
+ 0xac, 0xc7, 0x64, 0xcc, 0x83, 0x00, 0xc3, 0x56, 0xa8, 0xd5, 0x04, 0x5c, 0x7c, 0xeb, 0x7f, 0xac,
+ 0x49, 0x49, 0xd7, 0x29, 0x0d, 0xbf, 0xfe, 0x02, 0xa0, 0x3c, 0x25, 0xa9, 0x0f, 0xa7, 0x24, 0x05,
+ 0x91, 0xbf, 0x4a, 0x4a, 0xf2, 0x9a, 0x2e, 0x39, 0x3d, 0x82, 0xe9, 0x75, 0x4a, 0xb9, 0x20, 0xe8,
+ 0x3a, 0x34, 0x30, 0xa5, 0x52, 0xe1, 0x85, 0x78, 0xae, 0x50, 0xf8, 0x7f, 0x25, 0x92, 0x40, 0xed,
+ 0xdc, 0x82, 0x76, 0x02, 0x3a, 0x8a, 0x6d, 0x3b, 0xcb, 0x76, 0x15, 0x40, 0xe6, 0xdc, 0xdb, 0xde,
+ 0x9e, 0xcf, 0x8f, 0x94, 0x3b, 0x82, 0x5a, 0x2a, 0xbe, 0xf5, 0xdb, 0x31, 0x86, 0x90, 0xed, 0x1d,
+ 0x68, 0xda, 0x8c, 0xb8, 0xb1, 0x70, 0xcb, 0x59, 0xe1, 0x52, 0x42, 0x86, 0x44, 0xd2, 0xff, 0xd2,
+ 0x82, 0x73, 0xfc, 0xc4, 0x1e, 0x0b, 0x17, 0x5a, 0xa7, 0xf4, 0x0e, 0x61, 0xd8, 0x76, 0xc2, 0xef,
+ 0x47, 0x24, 0x38, 0x7c, 0xc3, 0x86, 0x61, 0xc1, 0x94, 0xf4, 0x40, 0x15, 0x2d, 0x5f, 0x7b, 0xf9,
+ 0xa5, 0xc8, 0xa7, 0x35, 0x57, 0xfd, 0xcd, 0xd4, 0x5c, 0x65, 0x35, 0x50, 0xe3, 0x84, 0x6a, 0xa0,
+ 0xd1, 0x65, 0x70, 0xa6, 0xb8, 0x9e, 0xca, 0x17, 0xd7, 0x25, 0xa5, 0xc5, 0xf4, 0x71, 0x4b, 0x8b,
+ 0x56, 0x69, 0x69, 0xe1, 0x96, 0xfa, 0x71, 0x5b, 0xa8, 0xfb, 0xbb, 0x59, 0x0b, 0x1c, 0x69, 0x6b,
+ 0x93, 0x14, 0x19, 0xf0, 0x46, 0x8b, 0x8c, 0x4f, 0x73, 0x45, 0x83, 0x2c, 0xdb, 0xdf, 0x3b, 0xde,
+ 0x9e, 0xc6, 0x94, 0x0f, 0xff, 0x77, 0xa9, 0xf7, 0xaf, 0x44, 0xc6, 0x45, 0xfd, 0x54, 0x07, 0xc9,
+ 0x65, 0xcf, 0xef, 0x21, 0x7e, 0xed, 0xaa, 0xa0, 0xc5, 0xbf, 0xd1, 0x35, 0x68, 0x70, 0x25, 0xab,
+ 0x94, 0xf8, 0x6c, 0x56, 0x9f, 0xfc, 0x24, 0xd6, 0x29, 0x7d, 0x4c, 0x89, 0x69, 0x08, 0x24, 0x74,
+ 0x1b, 0xda, 0x89, 0xe1, 0x2b, 0xcf, 0xba, 0x90, 0x5d, 0x91, 0xf8, 0x49, 0xbc, 0x2c, 0x45, 0xe7,
+ 0x6b, 0xfb, 0x76, 0x40, 0x4c, 0x91, 0x30, 0x36, 0x87, 0xd7, 0xde, 0x89, 0x27, 0x93, 0xb5, 0x09,
+ 0x3a, 0xba, 0x0e, 0x53, 0xb2, 0xcf, 0x21, 0x3c, 0x68, 0xe6, 0xc6, 0xb9, 0xe1, 0x60, 0x1a, 0xaf,
+ 0x52, 0x88, 0xfa, 0x9f, 0xab, 0xf0, 0x56, 0x6a, 0x10, 0xb1, 0x37, 0xc5, 0x39, 0xfb, 0xd7, 0x7f,
+ 0xe3, 0x5e, 0x86, 0x79, 0x51, 0x24, 0xa4, 0xed, 0x0e, 0xd9, 0x79, 0x2b, 0x40, 0xf5, 0x3f, 0x54,
+ 0xe1, 0xd2, 0xf0, 0x3e, 0x36, 0x06, 0x38, 0x60, 0xc9, 0xf1, 0x9e, 0xc4, 0x5e, 0xe2, 0x0b, 0xaf,
+ 0x96, 0x5e, 0x78, 0xb9, 0xfd, 0xd5, 0xf3, 0xfb, 0xd3, 0xff, 0x54, 0x83, 0x99, 0x8c, 0x01, 0x95,
+ 0x5d, 0x98, 0x3c, 0x19, 0x14, 0x76, 0x2b, 0xca, 0x42, 0x71, 0x29, 0xb4, 0x8d, 0x0c, 0x04, 0xed,
+ 0x03, 0x50, 0x1c, 0x60, 0x97, 0x30, 0x12, 0xf0, 0x48, 0xce, 0x3d, 0xfe, 0xfe, 0xe4, 0xd1, 0x65,
+ 0x37, 0xa6, 0x69, 0x64, 0xc8, 0xf3, 0x6c, 0x56, 0xb0, 0x0e, 0x55, 0xfc, 0x56, 0x23, 0xf4, 0x05,
+ 0xcc, 0xef, 0xd9, 0x0e, 0xd9, 0x4d, 0x05, 0x99, 0x12, 0x82, 0x3c, 0x9a, 0x5c, 0x90, 0x7b, 0x59,
+ 0xba, 0x46, 0x81, 0x8d, 0x7e, 0x15, 0x16, 0x8b, 0xfe, 0xc4, 0x85, 0xb4, 0x5d, 0x6c, 0x25, 0xda,
+ 0x52, 0x23, 0x1d, 0xc1, 0x62, 0xd1, 0x7f, 0xf4, 0x7f, 0xd5, 0xe0, 0x4c, 0x42, 0x6e, 0xdd, 0xf3,
+ 0xfc, 0xc8, 0x33, 0x45, 0xeb, 0xb0, 0xf4, 0x2c, 0x4e, 0x43, 0x93, 0xd9, 0xcc, 0x49, 0x12, 0x1f,
+ 0x31, 0xe0, 0x77, 0x17, 0xf3, 0x7d, 0x87, 0xd9, 0x54, 0x1d, 0x70, 0x3c, 0x94, 0x67, 0xff, 0x3c,
+ 0xb2, 0x03, 0xd2, 0x17, 0x91, 0xa0, 0x65, 0x24, 0x63, 0x3e, 0xc7, 0xb3, 0x1a, 0x91, 0xe2, 0x4b,
+ 0x65, 0x26, 0x63, 0x61, 0xf7, 0xbe, 0xe3, 0x10, 0x93, 0xab, 0x23, 0x53, 0x04, 0x14, 0xa0, 0xa2,
+ 0xb8, 0x60, 0x81, 0xed, 0x59, 0xaa, 0x04, 0x50, 0x23, 0x2e, 0x27, 0x0e, 0x02, 0x7c, 0xa8, 0x32,
+ 0x7f, 0x39, 0x40, 0x1f, 0x42, 0xdd, 0xc5, 0x54, 0x5d, 0x74, 0x57, 0x73, 0xd1, 0xa1, 0x4c, 0x03,
+ 0xdd, 0x1d, 0x4c, 0xe5, 0x4d, 0xc0, 0x97, 0x75, 0xde, 0x87, 0x56, 0x0c, 0xf8, 0x4a, 0x29, 0xe1,
+ 0xe7, 0x30, 0x97, 0x0b, 0x3e, 0xe8, 0x29, 0x2c, 0xa7, 0x16, 0x95, 0x65, 0xa8, 0x92, 0xc0, 0xb7,
+ 0x8e, 0x94, 0xcc, 0x18, 0x41, 0x40, 0x7f, 0x0e, 0x4b, 0xdc, 0x64, 0x84, 0xe3, 0x9f, 0x50, 0x69,
+ 0xf3, 0x01, 0xb4, 0x13, 0x96, 0xa5, 0x36, 0xd3, 0x81, 0xd6, 0x41, 0xdc, 0xd2, 0x95, 0xb5, 0x4d,
+ 0x32, 0xd6, 0xd7, 0x01, 0x65, 0xe5, 0x55, 0x37, 0xd0, 0xb5, 0x7c, 0x52, 0x7c, 0xa6, 0x78, 0xdd,
+ 0x08, 0xf4, 0x38, 0x27, 0xfe, 0x47, 0x0d, 0x16, 0x36, 0x6d, 0xd1, 0x23, 0x39, 0xa1, 0x20, 0x77,
+ 0x15, 0x16, 0xc3, 0xa8, 0xe7, 0xfa, 0xfd, 0xc8, 0x21, 0x2a, 0x29, 0x50, 0x37, 0xfd, 0x10, 0x7c,
+ 0x5c, 0xf0, 0xe3, 0xca, 0xa2, 0x98, 0x0d, 0x54, 0xf5, 0x2b, 0xbe, 0xd1, 0x87, 0x70, 0xee, 0x21,
+ 0xf9, 0x42, 0xed, 0x67, 0xd3, 0xf1, 0x7b, 0x3d, 0xdb, 0xb3, 0x62, 0x26, 0x4d, 0xc1, 0x64, 0x34,
+ 0x42, 0x59, 0xaa, 0x38, 0x55, 0x9e, 0x2a, 0x26, 0x15, 0xf4, 0x86, 0xef, 0xba, 0x36, 0x53, 0x19,
+ 0x65, 0x0e, 0xa6, 0xff, 0xb2, 0x0a, 0x8b, 0xa9, 0x66, 0xd5, 0xd9, 0xdc, 0x92, 0x3e, 0x24, 0x4f,
+ 0xe6, 0x52, 0xf6, 0x64, 0x8a, 0xa8, 0xaf, 0xee, 0x3e, 0xb3, 0x59, 0xf7, 0xf9, 0x4d, 0x0d, 0xce,
+ 0x6c, 0xda, 0x2c, 0x0e, 0x5c, 0xf6, 0xff, 0xda, 0x29, 0x97, 0x9c, 0x49, 0xe3, 0x78, 0x67, 0xd2,
+ 0x2c, 0x39, 0x93, 0x2e, 0x2c, 0x17, 0x95, 0xa1, 0x0e, 0xe6, 0x34, 0x34, 0xa9, 0x68, 0x3a, 0xcb,
+ 0xbe, 0x82, 0x1c, 0xe8, 0xbf, 0x98, 0x86, 0x8b, 0x9f, 0xd2, 0x3e, 0x66, 0x49, 0xcf, 0xe8, 0x9e,
+ 0x1f, 0x88, 0xae, 0xf3, 0xc9, 0x68, 0xb1, 0xf0, 0x32, 0x58, 0x1b, 0xfb, 0x32, 0x58, 0x1f, 0xf3,
+ 0x32, 0xd8, 0x38, 0xd6, 0xcb, 0x60, 0xf3, 0xc4, 0x5e, 0x06, 0x87, 0x6b, 0xad, 0xa9, 0xd2, 0x5a,
+ 0xeb, 0x69, 0xae, 0x1e, 0x99, 0x16, 0x6e, 0xf3, 0x9d, 0xac, 0xdb, 0x8c, 0x3d, 0x9d, 0xb1, 0x4f,
+ 0x1a, 0x85, 0x07, 0xb5, 0xd6, 0x91, 0x0f, 0x6a, 0xed, 0xe1, 0x07, 0xb5, 0xf2, 0x37, 0x19, 0x18,
+ 0xf9, 0x26, 0x73, 0x19, 0xe6, 0xc3, 0x43, 0xcf, 0x24, 0xfd, 0xa4, 0x93, 0x38, 0x23, 0xb7, 0x9d,
+ 0x87, 0xe6, 0x3c, 0x62, 0xb6, 0xe0, 0x11, 0x89, 0xa5, 0xce, 0x65, 0x2c, 0xb5, 0xcc, 0x4f, 0xe6,
+ 0x47, 0x96, 0xb9, 0x85, 0xe7, 0x92, 0x85, 0xd2, 0xe7, 0x92, 0xff, 0x9a, 0x62, 0xeb, 0x33, 0x58,
+ 0x19, 0x75, 0xca, 0xca, 0x79, 0x35, 0x98, 0x36, 0x07, 0xd8, 0xb3, 0x44, 0x5b, 0x50, 0x54, 0xff,
+ 0x6a, 0x38, 0xae, 0x3a, 0xb8, 0xf1, 0xe5, 0x2c, 0x2c, 0xa5, 0x59, 0x3f, 0xff, 0x6b, 0x9b, 0x04,
+ 0x3d, 0x82, 0xc5, 0xf8, 0x79, 0x29, 0x6e, 0xe4, 0xa2, 0x71, 0x6f, 0x27, 0x9d, 0x0b, 0xe5, 0x93,
+ 0x52, 0x34, 0xbd, 0x82, 0x4c, 0x38, 0x57, 0x24, 0x98, 0x3e, 0xd3, 0x7c, 0x6b, 0x0c, 0xe5, 0x04,
+ 0xeb, 0x28, 0x16, 0x57, 0xaa, 0xe8, 0x29, 0xcc, 0xe7, 0x1f, 0x13, 0x50, 0x2e, 0x0d, 0x2a, 0x7d,
+ 0xdf, 0xe8, 0xe8, 0xe3, 0x50, 0x12, 0xf9, 0x9f, 0x71, 0x33, 0xc8, 0xf5, 0xcd, 0x91, 0x9e, 0xef,
+ 0x08, 0x94, 0xbd, 0x3c, 0x74, 0xbe, 0x39, 0x16, 0x27, 0xa1, 0xfe, 0x01, 0xb4, 0xe2, 0x5e, 0x72,
+ 0x5e, 0xcd, 0x85, 0x0e, 0x73, 0x67, 0x31, 0x4f, 0x6f, 0x2f, 0xd4, 0x2b, 0xe8, 0x23, 0x98, 0xe1,
+ 0x68, 0x8f, 0x36, 0xb6, 0x9f, 0x60, 0xeb, 0x95, 0xd6, 0xb7, 0xe2, 0x5e, 0xeb, 0xf0, 0xe2, 0x4c,
+ 0x07, 0xb6, 0x73, 0xaa, 0xa4, 0xeb, 0xa9, 0x57, 0xd0, 0xf7, 0x24, 0xff, 0x5d, 0xf5, 0xf3, 0x80,
+ 0xe5, 0xae, 0xfc, 0x35, 0x4a, 0x37, 0xfe, 0x35, 0x4a, 0xf7, 0xae, 0x4b, 0xd9, 0x61, 0xa7, 0xa4,
+ 0x2d, 0xa9, 0x08, 0x3c, 0x83, 0xb9, 0x4d, 0xc2, 0xd2, 0x2e, 0x02, 0xba, 0x74, 0xac, 0x5e, 0x4b,
+ 0x47, 0x2f, 0xa2, 0x0d, 0x37, 0x22, 0xf4, 0x0a, 0xfa, 0xb2, 0x0a, 0xa7, 0x36, 0x09, 0x2b, 0xd6,
+ 0xe5, 0xe8, 0xdd, 0x72, 0x26, 0x23, 0xea, 0xf7, 0xce, 0xc3, 0x49, 0x7d, 0x3a, 0x4f, 0x56, 0xaf,
+ 0xa0, 0xdf, 0x56, 0x61, 0x7e, 0x93, 0xf0, 0x73, 0x4b, 0x64, 0xba, 0x3e, 0x5e, 0xa6, 0x92, 0x5a,
+ 0xbc, 0x33, 0x61, 0x0f, 0x2c, 0xc3, 0x5d, 0xaf, 0xa0, 0xdf, 0x55, 0xe1, 0x6c, 0x46, 0x57, 0x59,
+ 0x7e, 0xaf, 0x22, 0xdb, 0x27, 0x13, 0xfe, 0x10, 0x25, 0x43, 0x52, 0xaf, 0xa0, 0x5d, 0x61, 0x26,
+ 0x69, 0xaa, 0x8f, 0x2e, 0x96, 0xe6, 0xf4, 0x09, 0xf7, 0x95, 0x51, 0xd3, 0x89, 0x69, 0x7c, 0x02,
+ 0x33, 0x9b, 0x84, 0xc5, 0x39, 0x67, 0xde, 0xf8, 0x0b, 0xe5, 0x40, 0x3e, 0xfa, 0x14, 0xd3, 0x54,
+ 0x61, 0xc4, 0x4b, 0x92, 0x56, 0x26, 0xaf, 0xca, 0x87, 0x9f, 0xd2, 0x04, 0x34, 0x6f, 0xc4, 0xe5,
+ 0x69, 0x99, 0x5e, 0x41, 0xcf, 0x61, 0xb9, 0x3c, 0xfa, 0xa3, 0xb7, 0x8f, 0x9d, 0x07, 0x74, 0xae,
+ 0x1e, 0x07, 0x35, 0x66, 0xf9, 0xf1, 0xfa, 0x5f, 0x5f, 0xae, 0x54, 0xff, 0xf6, 0x72, 0xa5, 0xfa,
+ 0xef, 0x97, 0x2b, 0xd5, 0x1f, 0xde, 0x3c, 0xe2, 0x07, 0x6b, 0x99, 0xdf, 0xc0, 0x61, 0x6a, 0x9b,
+ 0x8e, 0x4d, 0x3c, 0xd6, 0x9b, 0x12, 0x21, 0xe0, 0xe6, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0xc9,
+ 0x9b, 0xb9, 0x62, 0x22, 0x27, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@@ -2652,6 +2654,8 @@ type RepoServerServiceClient interface {
ResolveRevision(ctx context.Context, in *ResolveRevisionRequest, opts ...grpc.CallOption) (*ResolveRevisionResponse, error)
// Returns a list of refs (e.g. branches and tags) in the repo
ListRefs(ctx context.Context, in *ListRefsRequest, opts ...grpc.CallOption) (*Refs, error)
+ // Returns a list of oci tags in the repo
+ ListOCITags(ctx context.Context, in *ListRefsRequest, opts ...grpc.CallOption) (*Refs, error)
// ListApps returns a list of apps in the repo
ListApps(ctx context.Context, in *ListAppsRequest, opts ...grpc.CallOption) (*AppList, error)
// ListPlugins returns a list of cmp v2 plugins running as sidecar to reposerver
@@ -2660,6 +2664,8 @@ type RepoServerServiceClient interface {
GetAppDetails(ctx context.Context, in *RepoServerAppDetailsQuery, opts ...grpc.CallOption) (*RepoAppDetailsResponse, error)
// Get the meta-data (author, date, tags, message) for a specific revision of the repo
GetRevisionMetadata(ctx context.Context, in *RepoServerRevisionMetadataRequest, opts ...grpc.CallOption) (*v1alpha1.RevisionMetadata, error)
+ // Get the meta-data (author, date, tags, message) for a specific revision of the OCI image
+ GetOCIMetadata(ctx context.Context, in *RepoServerRevisionChartDetailsRequest, opts ...grpc.CallOption) (*v1alpha1.OCIMetadata, error)
// Get the chart details (author, date, tags, message) for a specific revision of the repo
GetRevisionChartDetails(ctx context.Context, in *RepoServerRevisionChartDetailsRequest, opts ...grpc.CallOption) (*v1alpha1.ChartDetails, error)
// GetHelmCharts returns list of helm charts in the specified repository
@@ -2750,6 +2756,15 @@ func (c *repoServerServiceClient) ListRefs(ctx context.Context, in *ListRefsRequ
return out, nil
}
+func (c *repoServerServiceClient) ListOCITags(ctx context.Context, in *ListRefsRequest, opts ...grpc.CallOption) (*Refs, error) {
+ out := new(Refs)
+ err := c.cc.Invoke(ctx, "/repository.RepoServerService/ListOCITags", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
func (c *repoServerServiceClient) ListApps(ctx context.Context, in *ListAppsRequest, opts ...grpc.CallOption) (*AppList, error) {
out := new(AppList)
err := c.cc.Invoke(ctx, "/repository.RepoServerService/ListApps", in, out, opts...)
@@ -2786,6 +2801,15 @@ func (c *repoServerServiceClient) GetRevisionMetadata(ctx context.Context, in *R
return out, nil
}
+func (c *repoServerServiceClient) GetOCIMetadata(ctx context.Context, in *RepoServerRevisionChartDetailsRequest, opts ...grpc.CallOption) (*v1alpha1.OCIMetadata, error) {
+ out := new(v1alpha1.OCIMetadata)
+ err := c.cc.Invoke(ctx, "/repository.RepoServerService/GetOCIMetadata", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
func (c *repoServerServiceClient) GetRevisionChartDetails(ctx context.Context, in *RepoServerRevisionChartDetailsRequest, opts ...grpc.CallOption) (*v1alpha1.ChartDetails, error) {
out := new(v1alpha1.ChartDetails)
err := c.cc.Invoke(ctx, "/repository.RepoServerService/GetRevisionChartDetails", in, out, opts...)
@@ -2843,6 +2867,8 @@ type RepoServerServiceServer interface {
ResolveRevision(context.Context, *ResolveRevisionRequest) (*ResolveRevisionResponse, error)
// Returns a list of refs (e.g. branches and tags) in the repo
ListRefs(context.Context, *ListRefsRequest) (*Refs, error)
+ // Returns a list of oci tags in the repo
+ ListOCITags(context.Context, *ListRefsRequest) (*Refs, error)
// ListApps returns a list of apps in the repo
ListApps(context.Context, *ListAppsRequest) (*AppList, error)
// ListPlugins returns a list of cmp v2 plugins running as sidecar to reposerver
@@ -2851,6 +2877,8 @@ type RepoServerServiceServer interface {
GetAppDetails(context.Context, *RepoServerAppDetailsQuery) (*RepoAppDetailsResponse, error)
// Get the meta-data (author, date, tags, message) for a specific revision of the repo
GetRevisionMetadata(context.Context, *RepoServerRevisionMetadataRequest) (*v1alpha1.RevisionMetadata, error)
+ // Get the meta-data (author, date, tags, message) for a specific revision of the OCI image
+ GetOCIMetadata(context.Context, *RepoServerRevisionChartDetailsRequest) (*v1alpha1.OCIMetadata, error)
// Get the chart details (author, date, tags, message) for a specific revision of the repo
GetRevisionChartDetails(context.Context, *RepoServerRevisionChartDetailsRequest) (*v1alpha1.ChartDetails, error)
// GetHelmCharts returns list of helm charts in the specified repository
@@ -2882,6 +2910,9 @@ func (*UnimplementedRepoServerServiceServer) ResolveRevision(ctx context.Context
func (*UnimplementedRepoServerServiceServer) ListRefs(ctx context.Context, req *ListRefsRequest) (*Refs, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListRefs not implemented")
}
+func (*UnimplementedRepoServerServiceServer) ListOCITags(ctx context.Context, req *ListRefsRequest) (*Refs, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method ListOCITags not implemented")
+}
func (*UnimplementedRepoServerServiceServer) ListApps(ctx context.Context, req *ListAppsRequest) (*AppList, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListApps not implemented")
}
@@ -2894,6 +2925,9 @@ func (*UnimplementedRepoServerServiceServer) GetAppDetails(ctx context.Context,
func (*UnimplementedRepoServerServiceServer) GetRevisionMetadata(ctx context.Context, req *RepoServerRevisionMetadataRequest) (*v1alpha1.RevisionMetadata, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetRevisionMetadata not implemented")
}
+func (*UnimplementedRepoServerServiceServer) GetOCIMetadata(ctx context.Context, req *RepoServerRevisionChartDetailsRequest) (*v1alpha1.OCIMetadata, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method GetOCIMetadata not implemented")
+}
func (*UnimplementedRepoServerServiceServer) GetRevisionChartDetails(ctx context.Context, req *RepoServerRevisionChartDetailsRequest) (*v1alpha1.ChartDetails, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetRevisionChartDetails not implemented")
}
@@ -3012,6 +3046,24 @@ func _RepoServerService_ListRefs_Handler(srv interface{}, ctx context.Context, d
return interceptor(ctx, in, info, handler)
}
+func _RepoServerService_ListOCITags_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(ListRefsRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(RepoServerServiceServer).ListOCITags(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/repository.RepoServerService/ListOCITags",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(RepoServerServiceServer).ListOCITags(ctx, req.(*ListRefsRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
func _RepoServerService_ListApps_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ListAppsRequest)
if err := dec(in); err != nil {
@@ -3084,6 +3136,24 @@ func _RepoServerService_GetRevisionMetadata_Handler(srv interface{}, ctx context
return interceptor(ctx, in, info, handler)
}
+func _RepoServerService_GetOCIMetadata_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(RepoServerRevisionChartDetailsRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(RepoServerServiceServer).GetOCIMetadata(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/repository.RepoServerService/GetOCIMetadata",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(RepoServerServiceServer).GetOCIMetadata(ctx, req.(*RepoServerRevisionChartDetailsRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
func _RepoServerService_GetRevisionChartDetails_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(RepoServerRevisionChartDetailsRequest)
if err := dec(in); err != nil {
@@ -3194,6 +3264,10 @@ var _RepoServerService_serviceDesc = grpc.ServiceDesc{
MethodName: "ListRefs",
Handler: _RepoServerService_ListRefs_Handler,
},
+ {
+ MethodName: "ListOCITags",
+ Handler: _RepoServerService_ListOCITags_Handler,
+ },
{
MethodName: "ListApps",
Handler: _RepoServerService_ListApps_Handler,
@@ -3210,6 +3284,10 @@ var _RepoServerService_serviceDesc = grpc.ServiceDesc{
MethodName: "GetRevisionMetadata",
Handler: _RepoServerService_GetRevisionMetadata_Handler,
},
+ {
+ MethodName: "GetOCIMetadata",
+ Handler: _RepoServerService_GetOCIMetadata_Handler,
+ },
{
MethodName: "GetRevisionChartDetails",
Handler: _RepoServerService_GetRevisionChartDetails_Handler,
diff --git a/reposerver/cache/cache.go b/reposerver/cache/cache.go
index 212d040d81..71a374210b 100644
--- a/reposerver/cache/cache.go
+++ b/reposerver/cache/cache.go
@@ -164,6 +164,10 @@ func helmIndexRefsKey(repo string) string {
return "helm-index|" + repo
}
+func ociTagsKey(repo string) string {
+ return "oci-tags|" + repo
+}
+
// SetHelmIndex stores helm repository index.yaml content to cache
func (c *Cache) SetHelmIndex(repo string, indexData []byte) error {
if indexData == nil {
@@ -181,6 +185,23 @@ func (c *Cache) GetHelmIndex(repo string, indexData *[]byte) error {
return c.cache.GetItem(helmIndexRefsKey(repo), indexData)
}
+// SetOCITags stores oci image tags to cache
+func (c *Cache) SetOCITags(repo string, indexData []byte) error {
+ if indexData == nil {
+ // Logged as warning upstream
+ return errors.New("oci index data is nil, skipping cache")
+ }
+ return c.cache.SetItem(
+ ociTagsKey(repo),
+ indexData,
+ &cacheutil.CacheActionOpts{Expiration: c.revisionCacheExpiration})
+}
+
+// GetOCITags retrieves oci image tags from cache
+func (c *Cache) GetOCITags(repo string, indexData *[]byte) error {
+ return c.cache.GetItem(ociTagsKey(repo), indexData)
+}
+
func gitRefsKey(repo string) string {
return "git-refs|" + repo
}
diff --git a/reposerver/repository/repository.go b/reposerver/repository/repository.go
index 54db3d47b7..df4e1d6ac9 100644
--- a/reposerver/repository/repository.go
+++ b/reposerver/repository/repository.go
@@ -17,6 +17,11 @@ import (
"time"
"github.com/TomOnTime/utfutil"
+ imagev1 "github.com/opencontainers/image-spec/specs-go/v1"
+ "sigs.k8s.io/yaml"
+
+ "github.com/argoproj/argo-cd/v3/util/oci"
+
"github.com/argoproj/gitops-engine/pkg/utils/kube"
textutils "github.com/argoproj/gitops-engine/pkg/utils/text"
"github.com/argoproj/pkg/v2/sync"
@@ -36,7 +41,6 @@ import (
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime"
kubeyaml "k8s.io/apimachinery/pkg/util/yaml"
- "sigs.k8s.io/yaml"
pluginclient "github.com/argoproj/argo-cd/v3/cmpserver/apiclient"
"github.com/argoproj/argo-cd/v3/common"
@@ -77,11 +81,13 @@ type Service struct {
rootDir string
gitRepoPaths utilio.TempPaths
chartPaths utilio.TempPaths
+ ociPaths utilio.TempPaths
gitRepoInitializer func(rootPath string) goio.Closer
repoLock *repositoryLock
cache *cache.Cache
parallelismLimitSemaphore *semaphore.Weighted
metricsServer *metrics.MetricsServer
+ newOCIClient func(repoURL string, creds oci.Creds, proxy string, noProxy string, mediaTypes []string, opts ...oci.ClientOpts) (oci.Client, error)
newGitClient func(rawRepoURL string, root string, creds git.Creds, insecure bool, enableLfs bool, proxy string, noProxy string, opts ...git.ClientOpts) (git.Client, error)
newHelmClient func(repoURL string, creds helm.Creds, enableOci bool, proxy string, noProxy string, opts ...helm.ClientOpts) helm.Client
initConstants RepoServerInitConstants
@@ -90,6 +96,7 @@ type Service struct {
}
type RepoServerInitConstants struct {
+ OCIMediaTypes []string
ParallelismLimit int64
PauseGenerationAfterFailedGenerationAttempts int
PauseGenerationOnFailureForMinutes int
@@ -102,6 +109,8 @@ type RepoServerInitConstants struct {
StreamedManifestMaxTarSize int64
HelmManifestMaxExtractedSize int64
HelmRegistryMaxIndexSize int64
+ OCIManifestMaxExtractedSize int64
+ DisableOCIManifestMaxExtractedSize bool
DisableHelmManifestMaxExtractedSize bool
IncludeHiddenDirectories bool
CMPUseManifestGeneratePaths bool
@@ -118,12 +127,14 @@ func NewService(metricsServer *metrics.MetricsServer, cache *cache.Cache, initCo
repoLock := NewRepositoryLock()
gitRandomizedPaths := utilio.NewRandomizedTempPaths(rootDir)
helmRandomizedPaths := utilio.NewRandomizedTempPaths(rootDir)
+ ociRandomizedPaths := utilio.NewRandomizedTempPaths(rootDir)
return &Service{
parallelismLimitSemaphore: parallelismLimitSemaphore,
repoLock: repoLock,
cache: cache,
metricsServer: metricsServer,
newGitClient: git.NewClientExt,
+ newOCIClient: oci.NewClient,
newHelmClient: func(repoURL string, creds helm.Creds, enableOci bool, proxy string, noProxy string, opts ...helm.ClientOpts) helm.Client {
return helm.NewClientWithLock(repoURL, creds, sync.NewKeyLock(), enableOci, proxy, noProxy, opts...)
},
@@ -132,6 +143,7 @@ func NewService(metricsServer *metrics.MetricsServer, cache *cache.Cache, initCo
gitCredsStore: gitCredsStore,
gitRepoPaths: gitRandomizedPaths,
chartPaths: helmRandomizedPaths,
+ ociPaths: ociRandomizedPaths,
gitRepoInitializer: directoryPermissionInitializer,
rootDir: rootDir,
}
@@ -172,6 +184,28 @@ func (s *Service) Init() error {
return os.Chmod(s.rootDir, 0o300)
}
+// ListOCITags List a subset of the refs (currently, branches and tags) of a git repo
+func (s *Service) ListOCITags(ctx context.Context, q *apiclient.ListRefsRequest) (*apiclient.Refs, error) {
+ ociClient, err := s.newOCIClient(q.Repo.Repo, q.Repo.GetOCICreds(), q.Repo.Proxy, q.Repo.NoProxy, s.initConstants.OCIMediaTypes, oci.WithIndexCache(s.cache), oci.WithImagePaths(s.ociPaths), oci.WithManifestMaxExtractedSize(s.initConstants.OCIManifestMaxExtractedSize), oci.WithDisableManifestMaxExtractedSize(s.initConstants.DisableOCIManifestMaxExtractedSize))
+ if err != nil {
+ return nil, fmt.Errorf("error creating oci client: %w", err)
+ }
+
+ s.metricsServer.IncPendingRepoRequest(q.Repo.Repo)
+ defer s.metricsServer.DecPendingRepoRequest(q.Repo.Repo)
+
+ tags, err := ociClient.GetTags(ctx, false)
+ if err != nil {
+ return nil, err
+ }
+
+ res := apiclient.Refs{
+ Tags: tags,
+ }
+
+ return &res, nil
+}
+
// ListRefs List a subset of the refs (currently, branches and tags) of a git repo
func (s *Service) ListRefs(_ context.Context, q *apiclient.ListRefsRequest) (*apiclient.Refs, error) {
gitClient, err := s.newClient(q.Repo)
@@ -293,22 +327,25 @@ func (s *Service) runRepoOperation(
sanitizer.AddRegexReplacement(getRepoSanitizerRegex(s.rootDir), "")
}
+ var ociClient oci.Client
var gitClient git.Client
var helmClient helm.Client
var err error
gitClientOpts := git.WithCache(s.cache, !settings.noRevisionCache && !settings.noCache)
revision = textutils.FirstNonEmpty(revision, source.TargetRevision)
unresolvedRevision := revision
- if source.IsHelm() {
+
+ switch {
+ case source.IsOCI():
+ ociClient, revision, err = s.newOCIClientResolveRevision(ctx, repo, revision, settings.noCache || settings.noRevisionCache)
+ case source.IsHelm():
helmClient, revision, err = s.newHelmClientResolveRevision(repo, revision, source.Chart, settings.noCache || settings.noRevisionCache)
- if err != nil {
- return err
- }
- } else {
+ default:
gitClient, revision, err = s.newClientResolveRevision(repo, revision, gitClientOpts)
- if err != nil {
- return err
- }
+ }
+
+ if err != nil {
+ return err
}
repoRefs, err := resolveReferencedSources(hasMultipleSources, source.Helm, refSources, s.newClientResolveRevision, gitClientOpts)
@@ -333,7 +370,46 @@ func (s *Service) runRepoOperation(
defer settings.sem.Release(1)
}
- if source.IsHelm() {
+ if source.IsOCI() {
+ if settings.noCache {
+ err = ociClient.CleanCache(revision)
+ if err != nil {
+ return err
+ }
+ }
+
+ ociPath, closer, err := ociClient.Extract(ctx, revision)
+ if err != nil {
+ return err
+ }
+ defer utilio.Close(closer)
+
+ if !s.initConstants.AllowOutOfBoundsSymlinks {
+ err := apppathutil.CheckOutOfBoundsSymlinks(ociPath)
+ if err != nil {
+ oobError := &apppathutil.OutOfBoundsSymlinkError{}
+ if errors.As(err, &oobError) {
+ log.WithFields(log.Fields{
+ common.SecurityField: common.SecurityHigh,
+ "repo": repo.Repo,
+ "digest": revision,
+ "file": oobError.File,
+ }).Warn("oci image contains out-of-bounds symlink")
+ return fmt.Errorf("oci image contains out-of-bounds symlinks. file: %s", oobError.File)
+ }
+ return err
+ }
+ }
+
+ appPath, err := apppathutil.Path(ociPath, source.Path)
+ if err != nil {
+ return err
+ }
+
+ return operation(ociPath, revision, revision, func() (*operationContext, error) {
+ return &operationContext{appPath, ""}, nil
+ })
+ } else if source.IsHelm() {
if settings.noCache {
err = helmClient.CleanChartCache(source.Chart, revision)
if err != nil {
@@ -962,7 +1038,7 @@ func getHelmRepos(appPath string, repositories []*v1alpha1.Repository, helmRepoC
reposByName := make(map[string]*v1alpha1.Repository)
reposByURL := make(map[string]*v1alpha1.Repository)
for _, repo := range repositories {
- reposByURL[repo.Repo] = repo
+ reposByURL[strings.TrimPrefix(repo.Repo, "oci://")] = repo
if repo.Name != "" {
reposByName[repo.Name] = repo
}
@@ -992,10 +1068,11 @@ func getHelmRepos(appPath string, repositories []*v1alpha1.Repository, helmRepoC
for _, cred := range repositories {
// if the repo is OCI, don't match the repository URL exactly, but only as a dependent repository prefix just like in the getRepoCredential function
// see https://github.com/argoproj/argo-cd/issues/12436
- if _, err := url.Parse("oci://" + dep.Repo); err == nil && cred.EnableOCI && strings.HasPrefix(dep.Repo, cred.Repo) {
+ if _, err := url.Parse("oci://" + dep.Repo); err == nil && (cred.EnableOCI && (strings.HasPrefix(dep.Repo, cred.Repo) || strings.HasPrefix(cred.Repo, dep.Repo)) || (cred.Type == "oci" && (strings.HasPrefix("oci://"+dep.Repo, cred.Repo) || strings.HasPrefix(cred.Repo, "oci://"+dep.Repo)))) {
repo.Username = cred.Username
repo.Password = cred.Password
repo.UseAzureWorkloadIdentity = cred.UseAzureWorkloadIdentity
+ repo.EnableOCI = true
break
}
}
@@ -1335,8 +1412,12 @@ func getReferencedSource(rawValueFile string, refSources map[string]*v1alpha1.Re
func getRepoCredential(repoCredentials []*v1alpha1.RepoCreds, repoURL string) *v1alpha1.RepoCreds {
for _, cred := range repoCredentials {
- url := strings.TrimPrefix(repoURL, ociPrefix)
- if strings.HasPrefix(url, cred.URL) {
+ if cred.Type != "oci" {
+ if strings.HasPrefix(strings.TrimPrefix(repoURL, ociPrefix), cred.URL) {
+ return cred
+ }
+ } else if strings.HasPrefix(ociPrefix+repoURL, cred.URL) {
+ cred.EnableOCI = true
return cred
}
}
@@ -1685,18 +1766,32 @@ func getObjsFromYAMLOrJSON(logCtx *log.Entry, manifestPath string, filename stri
if err != nil {
return status.Errorf(codes.FailedPrecondition, "Failed to open %q", manifestPath)
}
- defer func() {
+
+ closeReader := func(reader goio.ReadCloser) {
err := reader.Close()
if err != nil {
logCtx.Errorf("failed to close %q - potential memory leak", manifestPath)
}
- }()
+ }
+ defer closeReader(reader)
if strings.HasSuffix(filename, ".json") {
var obj unstructured.Unstructured
decoder := json.NewDecoder(reader)
- err = decoder.Decode(&obj)
- if err != nil {
- return status.Errorf(codes.FailedPrecondition, "Failed to unmarshal %q: %v", filename, err)
+ decoderErr := decoder.Decode(&obj)
+ if decoderErr != nil {
+ // Check to see if the file is potentially an OCI manifest
+ reader, err := utfutil.OpenFile(manifestPath, utfutil.UTF8)
+ if err != nil {
+ return status.Errorf(codes.FailedPrecondition, "Failed to open %q", manifestPath)
+ }
+ defer closeReader(reader)
+ manifest := imagev1.Manifest{}
+ decoder := json.NewDecoder(reader)
+ err = decoder.Decode(&manifest)
+ if err != nil {
+ // Not an OCI manifest, return original error
+ return status.Errorf(codes.FailedPrecondition, "Failed to unmarshal %q: %v", filename, decoderErr)
+ }
}
if decoder.More() {
return status.Errorf(codes.FailedPrecondition, "Found multiple objects in %q. Only single objects are allowed in JSON files.", filename)
@@ -2262,7 +2357,7 @@ func (s *Service) GetRevisionMetadata(_ context.Context, q *apiclient.RepoServer
if err == nil {
// The logic here is that if a signature check on metadata is requested,
// but there is none in the cache, we handle as if we have a cache miss
- // and re-generate the meta data. Otherwise, if there is signature info
+ // and re-generate the metadata. Otherwise, if there is signature info
// in the metadata, but none was requested, we remove it from the data
// that we return.
if !q.CheckSignature || metadata.SignatureInfo != "" {
@@ -2329,6 +2424,31 @@ func (s *Service) GetRevisionMetadata(_ context.Context, q *apiclient.RepoServer
return metadata, nil
}
+func (s *Service) GetOCIMetadata(ctx context.Context, q *apiclient.RepoServerRevisionChartDetailsRequest) (*v1alpha1.OCIMetadata, error) {
+ client, err := s.newOCIClient(q.Repo.Repo, q.Repo.GetOCICreds(), q.Repo.Proxy, q.Repo.NoProxy, s.initConstants.OCIMediaTypes, oci.WithIndexCache(s.cache), oci.WithImagePaths(s.ociPaths), oci.WithManifestMaxExtractedSize(s.initConstants.OCIManifestMaxExtractedSize), oci.WithDisableManifestMaxExtractedSize(s.initConstants.DisableOCIManifestMaxExtractedSize))
+ if err != nil {
+ return nil, fmt.Errorf("failed to initialize oci client: %w", err)
+ }
+
+ metadata, err := client.DigestMetadata(ctx, q.Revision)
+ if err != nil {
+ return nil, fmt.Errorf("failed to extract digest metadata for revision %q: %w", q.Revision, err)
+ }
+
+ a := metadata.Annotations
+
+ return &v1alpha1.OCIMetadata{
+ CreatedAt: a["org.opencontainers.image.created"],
+ Authors: a["org.opencontainers.image.authors"],
+ // TODO: add this field at a later stage
+ // ImageURL: a["org.opencontainers.image.url"],
+ DocsURL: a["org.opencontainers.image.documentation"],
+ SourceURL: a["org.opencontainers.image.source"],
+ Version: a["org.opencontainers.image.version"],
+ Description: a["org.opencontainers.image.description"],
+ }, nil
+}
+
// GetRevisionChartDetails returns the helm chart details of a given version
func (s *Service) GetRevisionChartDetails(_ context.Context, q *apiclient.RepoServerRevisionChartDetailsRequest) (*v1alpha1.ChartDetails, error) {
details, err := s.cache.GetRevisionChartDetails(q.Repo.Repo, q.Name, q.Revision)
@@ -2398,6 +2518,20 @@ func (s *Service) newClientResolveRevision(repo *v1alpha1.Repository, revision s
return gitClient, commitSHA, nil
}
+func (s *Service) newOCIClientResolveRevision(ctx context.Context, repo *v1alpha1.Repository, revision string, noRevisionCache bool) (oci.Client, string, error) {
+ ociClient, err := s.newOCIClient(repo.Repo, repo.GetOCICreds(), repo.Proxy, repo.NoProxy, s.initConstants.OCIMediaTypes, oci.WithIndexCache(s.cache), oci.WithImagePaths(s.ociPaths), oci.WithManifestMaxExtractedSize(s.initConstants.OCIManifestMaxExtractedSize), oci.WithDisableManifestMaxExtractedSize(s.initConstants.DisableOCIManifestMaxExtractedSize))
+ if err != nil {
+ return nil, "", fmt.Errorf("failed to initialize oci client: %w", err)
+ }
+
+ digest, err := ociClient.ResolveRevision(ctx, revision, noRevisionCache)
+ if err != nil {
+ return nil, "", fmt.Errorf("failed to resolve revision %q: %w", revision, err)
+ }
+
+ return ociClient, digest, nil
+}
+
func (s *Service) newHelmClientResolveRevision(repo *v1alpha1.Repository, revision string, chart string, noRevisionCache bool) (helm.Client, string, error) {
enableOCI := repo.EnableOCI || helm.IsHelmOciRepo(repo.Repo)
helmClient := s.newHelmClient(repo.Repo, repo.GetHelmCreds(), enableOCI, repo.Proxy, repo.NoProxy, helm.WithIndexCache(s.cache), helm.WithChartPaths(s.chartPaths))
@@ -2567,7 +2701,7 @@ func (s *Service) GetHelmCharts(_ context.Context, q *apiclient.HelmChartsReques
return &res, nil
}
-func (s *Service) TestRepository(_ context.Context, q *apiclient.TestRepositoryRequest) (*apiclient.TestRepositoryResponse, error) {
+func (s *Service) TestRepository(ctx context.Context, q *apiclient.TestRepositoryRequest) (*apiclient.TestRepositoryResponse, error) {
repo := q.Repo
// per Type doc, "git" should be assumed if empty or absent
if repo.Type == "" {
@@ -2577,6 +2711,14 @@ func (s *Service) TestRepository(_ context.Context, q *apiclient.TestRepositoryR
"git": func() error {
return git.TestRepo(repo.Repo, repo.GetGitCreds(s.gitCredsStore), repo.IsInsecure(), repo.IsLFSEnabled(), repo.Proxy, repo.NoProxy)
},
+ "oci": func() error {
+ client, err := oci.NewClient(repo.Repo, repo.GetOCICreds(), repo.Proxy, repo.NoProxy, s.initConstants.OCIMediaTypes)
+ if err != nil {
+ return err
+ }
+ _, err = client.TestRepo(ctx)
+ return err
+ },
"helm": func() error {
if repo.EnableOCI {
if !helm.IsHelmOciRepo(repo.Repo) {
@@ -2599,12 +2741,23 @@ func (s *Service) TestRepository(_ context.Context, q *apiclient.TestRepositoryR
}
// ResolveRevision resolves the revision/ambiguousRevision specified in the ResolveRevisionRequest request into a concrete revision.
-func (s *Service) ResolveRevision(_ context.Context, q *apiclient.ResolveRevisionRequest) (*apiclient.ResolveRevisionResponse, error) {
+func (s *Service) ResolveRevision(ctx context.Context, q *apiclient.ResolveRevisionRequest) (*apiclient.ResolveRevisionResponse, error) {
repo := q.Repo
app := q.App
ambiguousRevision := q.AmbiguousRevision
- var revision string
source := app.Spec.GetSourcePtrByIndex(int(q.SourceIndex))
+
+ if source.IsOCI() {
+ _, revision, err := s.newOCIClientResolveRevision(ctx, repo, ambiguousRevision, true)
+ if err != nil {
+ return &apiclient.ResolveRevisionResponse{Revision: "", AmbiguousRevision: ""}, err
+ }
+ return &apiclient.ResolveRevisionResponse{
+ Revision: revision,
+ AmbiguousRevision: fmt.Sprintf("%v (%v)", ambiguousRevision, revision),
+ }, nil
+ }
+
if source.IsHelm() {
_, revision, err := s.newHelmClientResolveRevision(repo, ambiguousRevision, source.Chart, true)
if err != nil {
@@ -2619,7 +2772,7 @@ func (s *Service) ResolveRevision(_ context.Context, q *apiclient.ResolveRevisio
if err != nil {
return &apiclient.ResolveRevisionResponse{Revision: "", AmbiguousRevision: ""}, err
}
- revision, err = gitClient.LsRemote(ambiguousRevision)
+ revision, err := gitClient.LsRemote(ambiguousRevision)
if err != nil {
s.metricsServer.IncGitLsRemoteFail(gitClient.Root(), revision)
return &apiclient.ResolveRevisionResponse{Revision: "", AmbiguousRevision: ""}, err
diff --git a/reposerver/repository/repository.proto b/reposerver/repository/repository.proto
index 007088e088..b52ccf841b 100644
--- a/reposerver/repository/repository.proto
+++ b/reposerver/repository/repository.proto
@@ -319,6 +319,10 @@ service RepoServerService {
rpc ListRefs(ListRefsRequest) returns (Refs) {
}
+ // Returns a list of oci tags in the repo
+ rpc ListOCITags(ListRefsRequest) returns (Refs) {
+ }
+
// ListApps returns a list of apps in the repo
rpc ListApps(ListAppsRequest) returns (AppList) {
}
@@ -334,6 +338,10 @@ service RepoServerService {
// Get the meta-data (author, date, tags, message) for a specific revision of the repo
rpc GetRevisionMetadata(RepoServerRevisionMetadataRequest) returns (github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.RevisionMetadata) {
}
+
+ // Get the meta-data (author, date, tags, message) for a specific revision of the OCI image
+ rpc GetOCIMetadata(RepoServerRevisionChartDetailsRequest) returns (github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.OCIMetadata) {
+ }
// Get the chart details (author, date, tags, message) for a specific revision of the repo
rpc GetRevisionChartDetails(RepoServerRevisionChartDetailsRequest) returns (github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.ChartDetails) {
diff --git a/reposerver/repository/repository_test.go b/reposerver/repository/repository_test.go
index 1cf31b9c90..7d10ffdbab 100644
--- a/reposerver/repository/repository_test.go
+++ b/reposerver/repository/repository_test.go
@@ -2848,7 +2848,7 @@ func Test_findManifests(t *testing.T) {
})
}
-func TestTestRepoOCI(t *testing.T) {
+func TestTestRepoHelmOCI(t *testing.T) {
service := newService(t, ".")
_, err := service.TestRepository(t.Context(), &apiclient.TestRepositoryRequest{
Repo: &v1alpha1.Repository{
@@ -3205,7 +3205,7 @@ func Test_populateHelmAppDetails_values_symlinks(t *testing.T) {
})
}
-func TestGetHelmRepos_OCIDependenciesWithHelmRepo(t *testing.T) {
+func TestGetHelmRepos_OCIHelmDependenciesWithHelmRepo(t *testing.T) {
src := v1alpha1.ApplicationSource{Path: "."}
q := apiclient.ManifestRequest{Repos: []*v1alpha1.Repository{}, ApplicationSource: &src, HelmRepoCreds: []*v1alpha1.RepoCreds{
{URL: "example.com", Username: "test", Password: "test", EnableOCI: true},
@@ -3220,7 +3220,7 @@ func TestGetHelmRepos_OCIDependenciesWithHelmRepo(t *testing.T) {
assert.Equal(t, "example.com/myrepo", helmRepos[0].Repo)
}
-func TestGetHelmRepos_OCIDependenciesWithRepo(t *testing.T) {
+func TestGetHelmRepos_OCIHelmDependenciesWithRepo(t *testing.T) {
src := v1alpha1.ApplicationSource{Path: "."}
q := apiclient.ManifestRequest{Repos: []*v1alpha1.Repository{{Repo: "example.com", Username: "test", Password: "test", EnableOCI: true}}, ApplicationSource: &src, HelmRepoCreds: []*v1alpha1.RepoCreds{}}
@@ -3233,6 +3233,34 @@ func TestGetHelmRepos_OCIDependenciesWithRepo(t *testing.T) {
assert.Equal(t, "example.com/myrepo", helmRepos[0].Repo)
}
+func TestGetHelmRepos_OCIDependenciesWithHelmRepo(t *testing.T) {
+ src := v1alpha1.ApplicationSource{Path: "."}
+ q := apiclient.ManifestRequest{Repos: []*v1alpha1.Repository{}, ApplicationSource: &src, HelmRepoCreds: []*v1alpha1.RepoCreds{
+ {URL: "oci://example.com", Username: "test", Password: "test", Type: "oci"},
+ }}
+
+ helmRepos, err := getHelmRepos("./testdata/oci-dependencies", q.Repos, q.HelmRepoCreds)
+ require.NoError(t, err)
+
+ assert.Len(t, helmRepos, 1)
+ assert.Equal(t, "test", helmRepos[0].GetUsername())
+ assert.True(t, helmRepos[0].EnableOci)
+ assert.Equal(t, "example.com/myrepo", helmRepos[0].Repo)
+}
+
+func TestGetHelmRepos_OCIDependenciesWithRepo(t *testing.T) {
+ src := v1alpha1.ApplicationSource{Path: "."}
+ q := apiclient.ManifestRequest{Repos: []*v1alpha1.Repository{{Repo: "oci://example.com", Username: "test", Password: "test", Type: "oci"}}, ApplicationSource: &src, HelmRepoCreds: []*v1alpha1.RepoCreds{}}
+
+ helmRepos, err := getHelmRepos("./testdata/oci-dependencies", q.Repos, q.HelmRepoCreds)
+ require.NoError(t, err)
+
+ assert.Len(t, helmRepos, 1)
+ assert.Equal(t, "test", helmRepos[0].GetUsername())
+ assert.True(t, helmRepos[0].EnableOci)
+ assert.Equal(t, "example.com/myrepo", helmRepos[0].Repo)
+}
+
func TestGetHelmRepo_NamedRepos(t *testing.T) {
src := v1alpha1.ApplicationSource{Path: "."}
q := apiclient.ManifestRequest{Repo: &v1alpha1.Repository{}, ApplicationSource: &src, Repos: []*v1alpha1.Repository{{
diff --git a/server/application/application.go b/server/application/application.go
index c51cee453c..6697392305 100644
--- a/server/application/application.go
+++ b/server/application/application.go
@@ -7,6 +7,7 @@ import (
"fmt"
"math"
"reflect"
+ "slices"
"sort"
"strconv"
"strings"
@@ -409,6 +410,8 @@ func (s *Server) queryRepoServer(ctx context.Context, proj *v1alpha1.AppProject,
client apiclient.RepoServerServiceClient,
helmRepos []*v1alpha1.Repository,
helmCreds []*v1alpha1.RepoCreds,
+ ociRepos []*v1alpha1.Repository,
+ ociCreds []*v1alpha1.RepoCreds,
helmOptions *v1alpha1.HelmOptions,
enabledSourceTypes map[string]bool,
) error,
@@ -444,7 +447,24 @@ func (s *Server) queryRepoServer(ctx context.Context, proj *v1alpha1.AppProject,
if err != nil {
return fmt.Errorf("error getting settings enabled source types: %w", err)
}
- return action(client, permittedHelmRepos, permittedHelmCredentials, helmOptions, enabledSourceTypes)
+ ociRepos, err := s.db.ListOCIRepositories(context.Background())
+ if err != nil {
+ return fmt.Errorf("failed to list OCI repositories: %w", err)
+ }
+ permittedOCIRepos, err := argo.GetPermittedRepos(proj, ociRepos)
+ if err != nil {
+ return fmt.Errorf("failed to get permitted OCI repositories for project %q: %w", proj.Name, err)
+ }
+ ociRepositoryCredentials, err := s.db.GetAllOCIRepositoryCredentials(context.Background())
+ if err != nil {
+ return fmt.Errorf("failed to get OCI credentials: %w", err)
+ }
+ permittedOCICredentials, err := argo.GetPermittedReposCredentials(proj, ociRepositoryCredentials)
+ if err != nil {
+ return fmt.Errorf("failed to get permitted OCI credentials for project %q: %w", proj.Name, err)
+ }
+
+ return action(client, permittedHelmRepos, permittedHelmCredentials, permittedOCIRepos, permittedOCICredentials, helmOptions, enabledSourceTypes)
}
// GetManifests returns application manifests
@@ -463,7 +483,7 @@ func (s *Server) GetManifests(ctx context.Context, q *application.ApplicationMan
manifestInfos := make([]*apiclient.ManifestResponse, 0)
err = s.queryRepoServer(ctx, proj, func(
- client apiclient.RepoServerServiceClient, helmRepos []*v1alpha1.Repository, helmCreds []*v1alpha1.RepoCreds, helmOptions *v1alpha1.HelmOptions, enableGenerateManifests map[string]bool,
+ client apiclient.RepoServerServiceClient, helmRepos []*v1alpha1.Repository, helmCreds []*v1alpha1.RepoCreds, ociRepos []*v1alpha1.Repository, ociCreds []*v1alpha1.RepoCreds, helmOptions *v1alpha1.HelmOptions, enableGenerateManifests map[string]bool,
) error {
appInstanceLabelKey, err := s.settingsMgr.GetAppInstanceLabelKey()
if err != nil {
@@ -534,6 +554,18 @@ func (s *Server) GetManifests(ctx context.Context, q *application.ApplicationMan
return fmt.Errorf("error getting trackingMethod from settings: %w", err)
}
+ repos := helmRepos
+ helmRepoCreds := helmCreds
+ // If the source is OCI, there is a potential for an OCI image to be a Helm chart and that said chart in
+ // turn would have OCI dependencies. To ensure that those dependencies can be resolved, add them to the repos
+ // list.
+ if source.IsOCI() {
+ repos = slices.Clone(helmRepos)
+ helmRepoCreds = slices.Clone(helmCreds)
+ repos = append(repos, ociRepos...)
+ helmRepoCreds = append(helmRepoCreds, ociCreds...)
+ }
+
manifestInfo, err := client.GenerateManifest(ctx, &apiclient.ManifestRequest{
Repo: repo,
Revision: source.TargetRevision,
@@ -541,11 +573,11 @@ func (s *Server) GetManifests(ctx context.Context, q *application.ApplicationMan
AppName: a.InstanceName(s.ns),
Namespace: a.Spec.Destination.Namespace,
ApplicationSource: &source,
- Repos: helmRepos,
+ Repos: repos,
KustomizeOptions: kustomizeOptions,
KubeVersion: serverVersion,
ApiVersions: argo.APIResourcesToStrings(apiResources, true),
- HelmRepoCreds: helmCreds,
+ HelmRepoCreds: helmRepoCreds,
HelmOptions: helmOptions,
TrackingMethod: trackingMethod,
EnabledSourceTypes: enableGenerateManifests,
@@ -611,7 +643,7 @@ func (s *Server) GetManifestsWithFiles(stream application.ApplicationService_Get
var manifestInfo *apiclient.ManifestResponse
err = s.queryRepoServer(ctx, proj, func(
- client apiclient.RepoServerServiceClient, helmRepos []*v1alpha1.Repository, helmCreds []*v1alpha1.RepoCreds, helmOptions *v1alpha1.HelmOptions, enableGenerateManifests map[string]bool,
+ client apiclient.RepoServerServiceClient, helmRepos []*v1alpha1.Repository, helmCreds []*v1alpha1.RepoCreds, _ []*v1alpha1.Repository, _ []*v1alpha1.RepoCreds, helmOptions *v1alpha1.HelmOptions, enableGenerateManifests map[string]bool,
) error {
appInstanceLabelKey, err := s.settingsMgr.GetAppInstanceLabelKey()
if err != nil {
@@ -775,6 +807,8 @@ func (s *Server) Get(ctx context.Context, q *application.ApplicationQuery) (*v1a
client apiclient.RepoServerServiceClient,
helmRepos []*v1alpha1.Repository,
_ []*v1alpha1.RepoCreds,
+ _ []*v1alpha1.Repository,
+ _ []*v1alpha1.RepoCreds,
helmOptions *v1alpha1.HelmOptions,
enabledSourceTypes map[string]bool,
) error {
@@ -1607,6 +1641,34 @@ func (s *Server) RevisionChartDetails(ctx context.Context, q *application.Revisi
})
}
+func (s *Server) GetOCIMetadata(ctx context.Context, q *application.RevisionMetadataQuery) (*v1alpha1.OCIMetadata, error) {
+ a, proj, err := s.getApplicationEnforceRBACInformer(ctx, rbac.ActionGet, q.GetProject(), q.GetAppNamespace(), q.GetName())
+ if err != nil {
+ return nil, err
+ }
+
+ source, err := getAppSourceBySourceIndexAndVersionId(a, q.SourceIndex, q.VersionId)
+ if err != nil {
+ return nil, fmt.Errorf("error getting app source by source index and version ID: %w", err)
+ }
+
+ repo, err := s.db.GetRepository(ctx, source.RepoURL, proj.Name)
+ if err != nil {
+ return nil, fmt.Errorf("error getting repository by URL: %w", err)
+ }
+ conn, repoClient, err := s.repoClientset.NewRepoServerClient()
+ if err != nil {
+ return nil, fmt.Errorf("error creating repo server client: %w", err)
+ }
+ defer utilio.Close(conn)
+
+ return repoClient.GetOCIMetadata(ctx, &apiclient.RepoServerRevisionChartDetailsRequest{
+ Repo: repo,
+ Name: source.Chart,
+ Revision: q.GetRevision(),
+ })
+}
+
// getAppSourceBySourceIndexAndVersionId returns the source for a specific source index and version ID. Source index and
// version ID are optional. If the source index is not specified, it defaults to 0. If the version ID is not specified,
// we use the source(s) currently configured for the app. If the version ID is specified, we find the source for that
diff --git a/server/application/application.proto b/server/application/application.proto
index d1221f2b30..7cd69c3d40 100644
--- a/server/application/application.proto
+++ b/server/application/application.proto
@@ -367,6 +367,11 @@ service ApplicationService {
option (google.api.http).get = "/api/v1/applications/{name}/revisions/{revision}/chartdetails";
}
+ // Get the chart metadata (description, maintainers, home) for a specific revision of the application
+ rpc GetOCIMetadata (RevisionMetadataQuery) returns (github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.OCIMetadata) {
+ option (google.api.http).get = "/api/v1/applications/{name}/revisions/{revision}/ocimetadata";
+ }
+
// GetManifests returns application manifests
rpc GetManifests (ApplicationManifestQuery) returns (repository.ManifestResponse) {
option (google.api.http).get = "/api/v1/applications/{name}/manifests";
diff --git a/server/repository/repository.go b/server/repository/repository.go
index cb7f1eeb9a..7dbc698188 100644
--- a/server/repository/repository.go
+++ b/server/repository/repository.go
@@ -238,6 +238,27 @@ func (s *Server) prepareRepoList(ctx context.Context, resourceType string, repos
return items, nil
}
+func (s *Server) ListOCITags(ctx context.Context, q *repositorypkg.RepoQuery) (*apiclient.Refs, error) {
+ repo, err := s.getRepo(ctx, q.Repo, q.GetAppProject())
+ if err != nil {
+ return nil, err
+ }
+
+ if err := s.enf.EnforceErr(ctx.Value("claims"), rbac.ResourceRepositories, rbac.ActionGet, createRBACObject(repo.Project, repo.Repo)); err != nil {
+ return nil, err
+ }
+
+ conn, repoClient, err := s.repoClientset.NewRepoServerClient()
+ if err != nil {
+ return nil, err
+ }
+ defer utilio.Close(conn)
+
+ return repoClient.ListOCITags(ctx, &apiclient.ListRefsRequest{
+ Repo: repo,
+ })
+}
+
func (s *Server) ListRefs(ctx context.Context, q *repositorypkg.RepoQuery) (*apiclient.Refs, error) {
repo, err := s.getRepo(ctx, q.Repo, q.GetAppProject())
if err != nil {
@@ -683,6 +704,7 @@ func (s *Server) ValidateAccess(ctx context.Context, q *repositorypkg.RepoAccess
GitHubAppEnterpriseBaseURL: q.GithubAppEnterpriseBaseUrl,
Proxy: q.Proxy,
GCPServiceAccountKey: q.GcpServiceAccountKey,
+ InsecureOCIForceHttp: q.InsecureOciForceHttp,
}
// If repo does not have credentials, check if there are credentials stored
diff --git a/server/repository/repository.proto b/server/repository/repository.proto
index 9af9aea8b7..aaffaaa123 100644
--- a/server/repository/repository.proto
+++ b/server/repository/repository.proto
@@ -93,6 +93,8 @@ message RepoAccessQuery {
bool useAzureWorkloadIdentity = 20;
// BearerToken contains the bearer token used for Git auth at the repo server
string bearerToken = 21;
+ // Whether https should be disabled for an OCI repo
+ bool insecureOciForceHttp = 22;
}
message RepoResponse {}
@@ -144,6 +146,10 @@ service RepositoryService {
option (google.api.http).get = "/api/v1/repositories/{repo}/refs";
}
+ rpc ListOCITags(RepoQuery) returns (Refs) {
+ option (google.api.http).get = "/api/v1/repositories/{repo}/oci-tags";
+ }
+
// ListApps returns list of apps in the repo
rpc ListApps(RepoAppsQuery) returns (RepoAppsResponse) {
option (google.api.http).get = "/api/v1/repositories/{repo}/apps";
diff --git a/test/e2e/fixture/app/actions.go b/test/e2e/fixture/app/actions.go
index 4a7ee3a0ce..9be555afc8 100644
--- a/test/e2e/fixture/app/actions.go
+++ b/test/e2e/fixture/app/actions.go
@@ -243,7 +243,13 @@ func (a *Actions) prepareCreateAppArgs(args []string) []string {
if a.context.drySourceRevision != "" || a.context.drySourcePath != "" || a.context.syncSourcePath != "" || a.context.syncSourceBranch != "" || a.context.hydrateToBranch != "" {
args = append(args, "--dry-source-repo", fixture.RepoURL(a.context.repoURLType))
} else {
- args = append(args, "--repo", fixture.RepoURL(a.context.repoURLType))
+ var repo string
+ if a.context.ociRegistryPath != "" && a.context.repoURLType == fixture.RepoURLTypeOCI {
+ repo = fmt.Sprintf("%s/%s", a.context.ociRegistry, a.context.ociRegistryPath)
+ } else {
+ repo = fixture.RepoURL(a.context.repoURLType)
+ }
+ args = append(args, "--repo", repo)
}
if a.context.destName != "" && a.context.isDestServerInferred && !slices.Contains(args, "--dest-server") {
diff --git a/test/e2e/fixture/app/context.go b/test/e2e/fixture/app/context.go
index f3343e7d17..605bcdbda7 100644
--- a/test/e2e/fixture/app/context.go
+++ b/test/e2e/fixture/app/context.go
@@ -17,10 +17,12 @@ import (
// Context implements the "given" part of given/when/then
type Context struct {
- t *testing.T
- path string
- chart string
- repoURLType fixture.RepoURLType
+ t *testing.T
+ path string
+ chart string
+ ociRegistry string
+ ociRegistryPath string
+ repoURLType fixture.RepoURLType
// seconds
timeout int
name string
@@ -187,11 +189,26 @@ func (c *Context) HelmOCIRepoAdded(name string) *Context {
return c
}
+func (c *Context) PushImageToOCIRegistry(pathName, tag string) *Context {
+ repos.PushImageToOCIRegistry(c.t, pathName, tag)
+ return c
+}
+
+func (c *Context) PushImageToAuthenticatedOCIRegistry(pathName, tag string) *Context {
+ repos.PushImageToAuthenticatedOCIRegistry(c.t, pathName, tag)
+ return c
+}
+
func (c *Context) PushChartToOCIRegistry(chartPathName, chartName, chartVersion string) *Context {
repos.PushChartToOCIRegistry(c.t, chartPathName, chartName, chartVersion)
return c
}
+func (c *Context) PushChartToAuthenticatedOCIRegistry(chartPathName, chartName, chartVersion string) *Context {
+ repos.PushChartToAuthenticatedOCIRegistry(c.t, chartPathName, chartName, chartVersion)
+ return c
+}
+
func (c *Context) HTTPSCredentialsUserPassAdded() *Context {
repos.AddHTTPSCredentialsUserPass(c.t)
return c
@@ -217,6 +234,21 @@ func (c *Context) SSHCredentialsAdded() *Context {
return c
}
+func (c *Context) OCIRepoAdded(name, imagePath string) *Context {
+ repos.AddOCIRepo(c.t, name, imagePath)
+ return c
+}
+
+func (c *Context) AuthenticatedOCIRepoAdded(name, imagePath string) *Context {
+ repos.AddAuthenticatedOCIRepo(c.t, name, imagePath)
+ return c
+}
+
+func (c *Context) OCIRegistry(registry string) *Context {
+ c.ociRegistry = registry
+ return c
+}
+
func (c *Context) ProjectSpec(spec v1alpha1.AppProjectSpec) *Context {
c.t.Helper()
require.NoError(c.t, fixture.SetProjectSpec(c.project, spec))
@@ -282,6 +314,11 @@ func (c *Context) Chart(chart string) *Context {
return c
}
+func (c *Context) OCIRegistryPath(ociPath string) *Context {
+ c.ociRegistryPath = ociPath
+ return c
+}
+
func (c *Context) Revision(revision string) *Context {
c.revision = revision
return c
diff --git a/test/e2e/fixture/fixture.go b/test/e2e/fixture/fixture.go
index 76e9e769c9..296b45ca64 100644
--- a/test/e2e/fixture/fixture.go
+++ b/test/e2e/fixture/fixture.go
@@ -124,6 +124,7 @@ const (
RepoURLTypeHelm = "helm"
RepoURLTypeHelmParent = "helm-par"
RepoURLTypeHelmOCI = "helm-oci"
+ RepoURLTypeOCI = "oci"
GitUsername = "admin"
GitPassword = "password"
GitBearerToken = "test"
@@ -131,6 +132,10 @@ const (
GithubAppInstallationID = "7893789433789"
GpgGoodKeyID = "D56C4FCA57A46444"
HelmOCIRegistryURL = "localhost:5000/myrepo"
+ HelmAuthenticatedOCIRegistryURL = "localhost:5001/myrepo"
+ OCIRegistryURL = "oci://localhost:5000/my-oci-repo"
+ OCIHostURL = "oci://localhost:5000"
+ AuthenticatedOCIHostURL = "oci://localhost:5001"
)
// TestNamespace returns the namespace where Argo CD E2E test instance will be
@@ -345,6 +350,8 @@ func RepoURL(urlType RepoURLType) string {
// When Helm Repo has sub repos, this is the parent repo URL
case RepoURLTypeHelmParent:
return GetEnvWithDefault(EnvRepoURLTypeHelm, "https://localhost:9444/argo-e2e/testdata.git/helm-repo")
+ case RepoURLTypeOCI:
+ return OCIRegistryURL
case RepoURLTypeHelmOCI:
return HelmOCIRegistryURL
default:
diff --git a/test/e2e/fixture/repos/repos.go b/test/e2e/fixture/repos/repos.go
index 0cc7e1e856..b98cb09655 100644
--- a/test/e2e/fixture/repos/repos.go
+++ b/test/e2e/fixture/repos/repos.go
@@ -4,6 +4,7 @@ import (
"fmt"
"os"
"path/filepath"
+ "strings"
"testing"
"github.com/stretchr/testify/require"
@@ -95,6 +96,34 @@ func AddHelmRepo(t *testing.T, name string) {
errors.NewHandler(t).FailOnErr(fixture.RunCli(args...))
}
+func AddOCIRepo(t *testing.T, name, imagePath string) {
+ t.Helper()
+ args := []string{
+ "repo",
+ "add",
+ fmt.Sprintf("%s/%s", fixture.OCIHostURL, imagePath),
+ "--type", "oci",
+ "--name", name,
+ "--insecure-oci-force-http",
+ }
+ errors.NewHandler(t).FailOnErr(fixture.RunCli(args...))
+}
+
+func AddAuthenticatedOCIRepo(t *testing.T, name, imagePath string) {
+ t.Helper()
+ args := []string{
+ "repo",
+ "add",
+ fmt.Sprintf("%s/%s", fixture.AuthenticatedOCIHostURL, imagePath),
+ "--username", fixture.GitUsername,
+ "--password", fixture.GitPassword,
+ "--type", "oci",
+ "--name", name,
+ "--insecure-oci-force-http",
+ }
+ errors.NewHandler(t).FailOnErr(fixture.RunCli(args...))
+}
+
func AddHelmOCIRepo(t *testing.T, name string) {
t.Helper()
args := []string{
@@ -198,3 +227,74 @@ func PushChartToOCIRegistry(t *testing.T, chartPathName, chartName, chartVersion
"oci://"+fixture.HelmOCIRegistryURL,
))
}
+
+// PushChartToAuthenticatedOCIRegistry adds a helm chart to helm OCI registry
+func PushChartToAuthenticatedOCIRegistry(t *testing.T, chartPathName, chartName, chartVersion string) {
+ t.Helper()
+ // create empty temp directory to extract chart from the registry
+ tempDest, err1 := os.MkdirTemp("", "helm")
+ require.NoError(t, err1)
+ defer func() { _ = os.RemoveAll(tempDest) }()
+
+ chartAbsPath, err2 := filepath.Abs("./testdata/" + chartPathName)
+ require.NoError(t, err2)
+
+ t.Setenv("HELM_EXPERIMENTAL_OCI", "1")
+ errors.NewHandler(t).FailOnErr(fixture.Run("", "helm", "dependency", "build", chartAbsPath))
+ errors.NewHandler(t).FailOnErr(fixture.Run("", "helm", "package", chartAbsPath, "--destination", tempDest))
+ _ = os.RemoveAll(fmt.Sprintf("%s/%s", chartAbsPath, "charts"))
+
+ errors.NewHandler(t).FailOnErr(fixture.Run(
+ "",
+ "helm",
+ "registry",
+ "login",
+ "--username", fixture.GitUsername,
+ "--password", fixture.GitPassword,
+ "localhost:5001",
+ ))
+
+ errors.NewHandler(t).FailOnErr(fixture.Run(
+ "",
+ "helm",
+ "push",
+ fmt.Sprintf("%s/%s-%s.tgz", tempDest, chartName, chartVersion),
+ "oci://"+fixture.HelmAuthenticatedOCIRegistryURL,
+ ))
+
+ errors.NewHandler(t).FailOnErr(fixture.Run(
+ "",
+ "helm",
+ "registry",
+ "logout",
+ "localhost:5001",
+ ))
+}
+
+// PushImageToOCIRegistry adds a helm chart to helm OCI registry
+func PushImageToOCIRegistry(t *testing.T, pathName, tag string) {
+ t.Helper()
+ imagePath := "./testdata/" + pathName
+
+ errors.NewHandler(t).FailOnErr(fixture.Run(
+ imagePath,
+ "oras",
+ "push",
+ fmt.Sprintf("%s:%s", fmt.Sprintf("%s/%s", strings.TrimPrefix(fixture.OCIHostURL, "oci://"), pathName), tag),
+ ".",
+ ))
+}
+
+// PushImageToAuthenticatedOCIRegistry adds a helm chart to helm OCI registry
+func PushImageToAuthenticatedOCIRegistry(t *testing.T, pathName, tag string) {
+ t.Helper()
+ imagePath := "./testdata/" + pathName
+
+ errors.NewHandler(t).FailOnErr(fixture.Run(
+ imagePath,
+ "oras",
+ "push",
+ fmt.Sprintf("%s:%s", fmt.Sprintf("%s/%s", strings.TrimPrefix(fixture.AuthenticatedOCIHostURL, "oci://"), pathName), tag),
+ ".",
+ ))
+}
diff --git a/test/e2e/oci_test.go b/test/e2e/oci_test.go
new file mode 100644
index 0000000000..906b4e9a24
--- /dev/null
+++ b/test/e2e/oci_test.go
@@ -0,0 +1,78 @@
+package e2e
+
+import (
+ "testing"
+
+ "github.com/argoproj/gitops-engine/pkg/health"
+ . "github.com/argoproj/gitops-engine/pkg/sync/common"
+
+ . "github.com/argoproj/argo-cd/v3/pkg/apis/application/v1alpha1"
+ "github.com/argoproj/argo-cd/v3/test/e2e/fixture"
+ . "github.com/argoproj/argo-cd/v3/test/e2e/fixture/app"
+)
+
+func TestOCIImage(t *testing.T) {
+ Given(t).
+ RepoURLType(fixture.RepoURLTypeOCI).
+ PushImageToOCIRegistry("guestbook", "1.0.0").
+ OCIRepoAdded("guestbook", "guestbook").
+ Revision("1.0.0").
+ OCIRegistry(fixture.OCIHostURL).
+ OCIRegistryPath("guestbook").
+ Path(".").
+ When().
+ CreateApp().
+ Then().
+ Expect(SyncStatusIs(SyncStatusCodeOutOfSync)).
+ Expect(Success("")).
+ When().
+ Sync().
+ Then().
+ Expect(Success("")).
+ Expect(OperationPhaseIs(OperationSucceeded)).
+ Expect(SyncStatusIs(SyncStatusCodeSynced)).
+ Expect(HealthIs(health.HealthStatusHealthy))
+}
+
+func TestOCIWithOCIHelmRegistryDependencies(t *testing.T) {
+ Given(t).
+ RepoURLType(fixture.RepoURLTypeOCI).
+ PushChartToOCIRegistry("helm-values", "helm-values", "1.0.0").
+ PushImageToOCIRegistry("helm-oci-with-dependencies", "1.0.0").
+ OCIRegistry(fixture.OCIHostURL).
+ OCIRepoAdded("helm-oci-with-dependencies", "helm-oci-with-dependencies").
+ OCIRegistryPath("helm-oci-with-dependencies").
+ Revision("1.0.0").
+ Path(".").
+ When().
+ CreateApp().
+ Then().
+ When().
+ Sync().
+ Then().
+ Expect(OperationPhaseIs(OperationSucceeded)).
+ Expect(HealthIs(health.HealthStatusHealthy)).
+ Expect(SyncStatusIs(SyncStatusCodeSynced))
+}
+
+func TestOCIWithAuthedOCIHelmRegistryDeps(t *testing.T) {
+ Given(t).
+ RepoURLType(fixture.RepoURLTypeOCI).
+ PushChartToAuthenticatedOCIRegistry("helm-values", "helm-values", "1.0.0").
+ PushImageToOCIRegistry("helm-oci-authed-with-dependencies", "1.0.0").
+ OCIRepoAdded("helm-oci-authed-with-dependencies", "helm-oci-authed-with-dependencies").
+ AuthenticatedOCIRepoAdded("helm-values", "myrepo/helm-values").
+ OCIRegistry(fixture.OCIHostURL).
+ OCIRegistryPath("helm-oci-authed-with-dependencies").
+ Revision("1.0.0").
+ Path(".").
+ When().
+ CreateApp().
+ Then().
+ When().
+ Sync().
+ Then().
+ Expect(OperationPhaseIs(OperationSucceeded)).
+ Expect(HealthIs(health.HealthStatusHealthy)).
+ Expect(SyncStatusIs(SyncStatusCodeSynced))
+}
diff --git a/test/e2e/testdata/helm-oci-authed-with-dependencies/Chart.yaml b/test/e2e/testdata/helm-oci-authed-with-dependencies/Chart.yaml
new file mode 100644
index 0000000000..d029e9b233
--- /dev/null
+++ b/test/e2e/testdata/helm-oci-authed-with-dependencies/Chart.yaml
@@ -0,0 +1,7 @@
+apiVersion: v2
+name: helm-oci-with-dependencies
+version: 1.0.0
+dependencies:
+ - name: helm-values
+ repository: "oci://localhost:5001/myrepo"
+ version: 1.0.0
diff --git a/test/fixture/testrepos/.oci-htpasswd b/test/fixture/testrepos/.oci-htpasswd
new file mode 100644
index 0000000000..fd3b4ffb16
--- /dev/null
+++ b/test/fixture/testrepos/.oci-htpasswd
@@ -0,0 +1 @@
+admin:$2y$10$OGusddU7nDipgwoCaOLYee/1GRqniRGHllm0ZEkyFQ1E4D8j064MG
\ No newline at end of file
diff --git a/test/fixture/testrepos/start-authenticated-helm-registry.sh b/test/fixture/testrepos/start-authenticated-helm-registry.sh
new file mode 100755
index 0000000000..3ae34863ed
--- /dev/null
+++ b/test/fixture/testrepos/start-authenticated-helm-registry.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+export HELM_EXPERIMENTAL_OCI=1
+docker run -p 5001:5000 --rm --name authed-registry -v $(pwd)/test/fixture/testrepos/.oci-htpasswd:/etc/docker/registry/auth.htpasswd \
+-e REGISTRY_AUTH="{htpasswd: {realm: localhost, path: /etc/docker/registry/auth.htpasswd}}" \
+registry
\ No newline at end of file
diff --git a/ui/src/app/applications/components/application-create-panel/application-create-panel.tsx b/ui/src/app/applications/components/application-create-panel/application-create-panel.tsx
index 8e19284a5c..709ac01029 100644
--- a/ui/src/app/applications/components/application-create-panel/application-create-panel.tsx
+++ b/ui/src/app/applications/components/application-create-panel/application-create-panel.tsx
@@ -88,9 +88,9 @@ const AutoSyncFormField = ReactFormField((props: {fieldApi: FieldApi; className:
function normalizeAppSource(app: models.Application, type: string): boolean {
const source = getAppDefaultSource(app);
- const repoType = (source.hasOwnProperty('chart') && 'helm') || 'git';
+ const repoType = source.repoURL.startsWith('oci://') ? 'oci' : (source.hasOwnProperty('chart') && 'helm') || 'git';
if (repoType !== type) {
- if (type === 'git') {
+ if (type === 'git' || type === 'oci') {
source.path = source.chart;
delete source.chart;
source.targetRevision = 'HEAD';
@@ -306,7 +306,9 @@ export const ApplicationCreatePanel = (props: {
);
- const repoType = (api.getFormState().values.spec.source.hasOwnProperty('chart') && 'helm') || 'git';
+ const repoType = api.getFormState().values.spec.source.repoURL.startsWith('oci://')
+ ? 'oci'
+ : (api.getFormState().values.spec.source.hasOwnProperty('chart') && 'helm') || 'git';
const sourcePanel = () => (
SOURCE
@@ -338,7 +340,7 @@ export const ApplicationCreatePanel = (props: {
)}
qeId='application-create-dropdown-source-repository'
- items={['git', 'helm'].map((type: 'git' | 'helm') => ({
+ items={['git', 'helm', 'oci'].map((type: 'git' | 'helm' | 'oci') => ({
title: type.toUpperCase(),
action: () => {
if (repoType !== type) {
@@ -354,9 +356,9 @@ export const ApplicationCreatePanel = (props: {
- {(repoType === 'git' && (
+ {(repoType === 'oci' && (
-
+
- )) || (
-
- (src.repoURL && services.repos.charts(src.repoURL).catch(() => new Array())) ||
- new Array()
- }>
- {(charts: models.HelmChart[]) => {
- const selectedChart = charts.find(chart => chart.name === api.getFormState().values.spec.source.chart);
- return (
-
-
+ )) ||
+ (repoType === 'git' && (
+
+
+
+
+ (src.repoURL &&
+ services.repos
+ .apps(src.repoURL, src.revision, app.metadata.name, app.spec.project)
+ .then(apps => Array.from(new Set(apps.map(item => item.path))).sort())
+ .catch(() => new Array())) ||
+ new Array()
+ }>
+ {(apps: string[]) => (
chart.name),
+ items: apps,
filterSuggestions: true
}}
/>
+ )}
+
+
+
+ )) || (
+
+ (src.repoURL && services.repos.charts(src.repoURL).catch(() => new Array())) ||
+ new Array()
+ }>
+ {(charts: models.HelmChart[]) => {
+ const selectedChart = charts.find(chart => chart.name === api.getFormState().values.spec.source.chart);
+ return (
+
+
+ chart.name),
+ filterSuggestions: true
+ }}
+ />
+
+
+
+
+
-
-
-
-
-
- );
- }}
-
- )}
+ );
+ }}
+
+ )}
);
const destinationPanel = () => (
diff --git a/ui/src/app/applications/components/application-deployment-history/revision-metadata-rows.tsx b/ui/src/app/applications/components/application-deployment-history/revision-metadata-rows.tsx
index 984bba4002..7a76d51a46 100644
--- a/ui/src/app/applications/components/application-deployment-history/revision-metadata-rows.tsx
+++ b/ui/src/app/applications/components/application-deployment-history/revision-metadata-rows.tsx
@@ -1,10 +1,34 @@
import {DataLoader} from 'argo-ui';
import * as React from 'react';
-import {Timestamp} from '../../../shared/components/timestamp';
-import {ApplicationSource, RevisionMetadata, ChartDetails} from '../../../shared/models';
+import {Timestamp} from '../../../shared/components';
+import {ApplicationSource, RevisionMetadata, ChartDetails, OCIMetadata} from '../../../shared/models';
import {services} from '../../../shared/services';
export const RevisionMetadataRows = (props: {applicationName: string; applicationNamespace: string; source: ApplicationSource; index: number; versionId: number | null}) => {
+ if (props?.source?.repoURL?.startsWith('oci://')) {
+ return (
+ services.applications.ociMetadata(input.applicationName, input.applicationNamespace, input.source.targetRevision, input.index, input.versionId)}>
+ {(m: OCIMetadata) => (
+
+ {m.description && (
+
+
Description:
+
{m.description}
+
+ )}
+ {m.authors && m.authors.length > 0 && (
+
+
Maintainers:
+
{m.authors}
+
+ )}
+
+ )}
+
+ );
+ }
if (props?.source?.chart) {
return (
{
+ const showChartNonMetadataInfo = (aRevision: string, aRepoUrl: string) => {
+ return (
+ <>
+
+
Revision:
+
{aRevision}
+
+
+
OCI Image:
+
{aRepoUrl}
+
+ >
+ );
+ };
+ return (
+ services.applications.ociMetadata(input.metadata.name, input.metadata.namespace, aRevision, aSourceIndex, aVersionId)}>
+ {(m: OCIMetadata) => {
+ return m ? (
+
+ {sourceHeader && sourceHeader}
+
+ {showChartNonMetadataInfo(aRevision, aSource.repoURL)}
+ {m.description && (
+
+
Description:
+
{m.description}
+
+ )}
+ {m.authors && m.authors.length > 0 && (
+
+
Maintainers:
+
{m.authors}
+
+ )}
+
+
+ ) : (
+
+
Source {indx + 1}
+
+ {showChartNonMetadataInfo(aRevision, aSource.repoURL)}
+
+
+
+ );
+ }}
+
+ );
+ };
+
const getContentForChart = (
aRevision: string,
aSourceIndex: number | null,
@@ -398,7 +474,9 @@ export class ApplicationDetails extends React.Component 0 && revisions) {
revisions.forEach((rev, indx) => {
- if (sources[indx].chart) {
+ if (sources[indx].repoURL.startsWith('oci://')) {
+ cont.push(getContentForOci(rev, indx, getAppCurrentVersion(application), indx, sources[indx], Source {indx + 1}
));
+ } else if (sources[indx].chart) {
cont.push(getContentForChart(rev, indx, getAppCurrentVersion(application), indx, sources[indx], Source {indx + 1}
));
} else {
cont.push(getContentForNonChart(rev, indx, getAppCurrentVersion(application), indx, sources[indx], Source {indx + 1}
));
@@ -406,7 +484,9 @@ export class ApplicationDetails extends React.Component{cont}>;
} else if (application.spec.source) {
- if (source.chart) {
+ if (source.repoURL.startsWith('oci://')) {
+ cont.push(getContentForOci(revision, null, getAppCurrentVersion(application), 0, source));
+ } else if (source.chart) {
cont.push(getContentForChart(revision, null, null, 0, source));
} else {
cont.push(getContentForNonChart(revision, null, getAppCurrentVersion(application), 0, source));
diff --git a/ui/src/app/applications/components/application-parameters/source-panel.tsx b/ui/src/app/applications/components/application-parameters/source-panel.tsx
index 0e956670a6..537c5aba47 100644
--- a/ui/src/app/applications/components/application-parameters/source-panel.tsx
+++ b/ui/src/app/applications/components/application-parameters/source-panel.tsx
@@ -23,9 +23,10 @@ const appTypes = new Array<{field: string; type: models.AppSourceType}>(
function normalizeAppSource(app: models.Application, type: string): boolean {
const source = app.spec.source;
// eslint-disable-next-line no-prototype-builtins
- const repoType = (source.hasOwnProperty('chart') && 'helm') || 'git';
+ const repoType = source.repoURL.startsWith('oci://') ? 'oci' : (source.hasOwnProperty('chart') && 'helm') || 'git';
+
if (repoType !== type) {
- if (type === 'git') {
+ if (type === 'git' || type === 'oci') {
source.path = source.chart;
delete source.chart;
source.targetRevision = 'HEAD';
@@ -157,8 +158,9 @@ export const SourcePanel = (props: {
}}
getApi={props.getFormApi}>
{api => {
- // eslint-disable-next-line no-prototype-builtins
- const repoType = (api.getFormState().values.spec?.source?.hasOwnProperty('chart') && 'helm') || 'git';
+ const repoType = api.getFormState().values.spec?.source?.repoURL.startsWith('oci://')
+ ? 'oci'
+ : (api.getFormState().values.spec?.source?.chart && 'helm') || 'git';
const repoInfo = reposInfo.find(info => info.repo === api.getFormState().values.spec?.source?.repoURL);
if (repoInfo) {
normalizeAppSource(appInEdit, repoInfo.type || 'git');
@@ -189,7 +191,7 @@ export const SourcePanel = (props: {
{repoType.toUpperCase()}
)}
- items={['git', 'helm'].map((type: 'git' | 'helm') => ({
+ items={['git', 'helm', 'oci'].map((type: 'git' | 'helm' | 'oci') => ({
title: type.toUpperCase(),
action: () => {
if (repoType !== type) {
@@ -210,9 +212,14 @@ export const SourcePanel = (props: {
- {(repoType === 'git' && (
+ {(repoType === 'oci' && (
-
+
- )) || (
-
- (src.repoURL && services.repos.charts(src.repoURL).catch(() => new Array())) ||
- new Array()
- }>
- {(charts: models.HelmChart[]) => {
- const selectedChart = charts.find(chart => chart.name === api.getFormState().values.spec?.source?.chart);
- return (
-
-
+ )) ||
+ (repoType === 'git' && (
+
+
+
+
+ (src.repoURL &&
+ (await services.repos
+ .apps(src.repoURL, src.revision, appInEdit.metadata.name, props.appCurrent.spec.project)
+ .then(apps => Array.from(new Set(apps.map(item => item.path))).sort())
+ .catch(() => new Array()))) ||
+ new Array()
+ }>
+ {(apps: string[]) => (
chart.name),
+ items: apps,
filterSuggestions: true
}}
/>
+ )}
+
+
+
+
+
+
+ )) || (
+
+ (src.repoURL && services.repos.charts(src.repoURL).catch(() => new Array())) ||
+ new Array()
+ }>
+ {(charts: models.HelmChart[]) => {
+ const selectedChart = charts.find(chart => chart.name === api.getFormState().values.spec?.source?.chart);
+ return (
+
+
+ chart.name),
+ filterSuggestions: true
+ }}
+ />
+
+
+
+
+
-
-
-
-
-
- );
- }}
-
- )}
+ );
+ }}
+
+ )}
);
diff --git a/ui/src/app/applications/components/application-status-panel/application-status-panel.tsx b/ui/src/app/applications/components/application-status-panel/application-status-panel.tsx
index 89d54715f1..af65bb6caa 100644
--- a/ui/src/app/applications/components/application-status-panel/application-status-panel.tsx
+++ b/ui/src/app/applications/components/application-status-panel/application-status-panel.tsx
@@ -152,7 +152,7 @@ export const ApplicationStatusPanel = ({application, showDiff, showOperation, sh
const errors = cntByCategory.get('error');
const source = getAppDefaultSource(application);
const hasMultipleSources = application.spec.sources?.length > 0;
-
+ const revisionType = source?.repoURL?.startsWith('oci://') ? 'oci' : source?.chart ? 'helm' : 'git';
return (
@@ -233,7 +233,7 @@ export const ApplicationStatusPanel = ({application, showDiff, showOperation, sh
@@ -276,7 +276,7 @@ export const ApplicationStatusPanel = ({application, showDiff, showOperation, sh
diff --git a/ui/src/app/applications/components/application-status-panel/revision-metadata-panel.tsx b/ui/src/app/applications/components/application-status-panel/revision-metadata-panel.tsx
index 1816ae9e86..b38a89ef0c 100644
--- a/ui/src/app/applications/components/application-status-panel/revision-metadata-panel.tsx
+++ b/ui/src/app/applications/components/application-status-panel/revision-metadata-panel.tsx
@@ -4,9 +4,52 @@ import {Timestamp} from '../../../shared/components/timestamp';
import {services} from '../../../shared/services';
export const RevisionMetadataPanel = (props: {appName: string; appNamespace: string; type: string; revision: string; versionId: number}) => {
- if (props.type === 'helm') {
+ if (props.type === 'helm' || props.type === 'oci') {
return
;
}
+ if (props.type === 'oci') {
+ return (
+
services.applications.ociMetadata(props.appName, props.appNamespace, props.revision, 0, props.versionId)} errorRenderer={() => }>
+ {m => (
+
+ {m.authors && Authored by {m.authors}}
+
+ {m.createdAt && }
+
+
+ {m.description}
+
+ }
+ placement='bottom'
+ allowHTML={true}>
+
+ {m.authors && (
+
+
Author:
+
{m.authors}
+
+ )}
+
+
+ )}
+
+ );
+ }
return (
{
const hasMultipleSources = app.spec.sources && app.spec.sources.length > 0;
+ const repoType = source.repoURL.startsWith('oci://') ? 'oci' : (source.hasOwnProperty('chart') && 'helm') || 'git';
+
const attributes = [
{
title: 'PROJECT',
@@ -235,7 +237,7 @@ export const ApplicationSummary = (props: ApplicationSummaryProps) => {
hasMultipleSources ? (
helpTip('TARGET REVISION is not editable for applications with multiple sources. You can edit them in the "Manifest" tab.')
) : (
-
+
)
},
{
diff --git a/ui/src/app/applications/components/revision-form-field/revision-form-field.tsx b/ui/src/app/applications/components/revision-form-field/revision-form-field.tsx
index 8064e0a8f5..592d55b676 100644
--- a/ui/src/app/applications/components/revision-form-field/revision-form-field.tsx
+++ b/ui/src/app/applications/components/revision-form-field/revision-form-field.tsx
@@ -11,6 +11,7 @@ interface RevisionFormFieldProps {
hideLabel?: boolean;
repoURL: string;
fieldValue?: string;
+ repoType?: string;
}
export class RevisionFormField extends React.PureComponent {
@@ -34,7 +35,12 @@ export class RevisionFormField extends React.PureComponent => {
- if (src.repoURL) {
+ if (this.props.repoType === 'oci' && src.repoURL) {
+ return services.repos
+ .ociTags(src.repoURL)
+ .then(revisionsRes => ['HEAD'].concat(revisionsRes.tags || []))
+ .catch(() => []);
+ } else if (src.repoURL) {
return services.repos
.revisions(src.repoURL)
.then(revisionsRes =>
@@ -63,20 +69,22 @@ export class RevisionFormField extends React.PureComponent
-
(
-
- {this.state.filterType}
-
- )}
- qeId='application-create-dropdown-revision'
- items={['Branches', 'Tags'].map((type: 'Branches' | 'Tags') => ({
- title: type,
- action: () => {
- this.setFilter(type);
- }
- }))}
- />
+ {this.props.repoType !== 'oci' && (
+ (
+
+ {this.state.filterType}
+
+ )}
+ qeId='application-create-dropdown-revision'
+ items={['Branches', 'Tags'].map((type: 'Branches' | 'Tags') => ({
+ title: type,
+ action: () => {
+ this.setFilter(type);
+ }
+ }))}
+ />
+ )}
);
diff --git a/ui/src/app/applications/components/utils.tsx b/ui/src/app/applications/components/utils.tsx
index c069abd2c1..5fbbfdf716 100644
--- a/ui/src/app/applications/components/utils.tsx
+++ b/ui/src/app/applications/components/utils.tsx
@@ -841,7 +841,12 @@ export function syncStatusMessage(app: appModels.Application) {
if (source.chart) {
message += ' (' + revision + ')';
} else if (revision.length >= 7 && !revision.startsWith(source.targetRevision)) {
- message += ' (' + revision.substr(0, 7) + ')';
+ if (source.repoURL.startsWith('oci://')) {
+ // Show "sha256: " plus the first 7 actual characters of the digest.
+ message += ' (' + revision.substring(0, 14) + ')';
+ } else {
+ message += ' (' + revision.substring(0, 7) + ')';
+ }
}
}
diff --git a/ui/src/app/settings/components/repo-details/repo-details.tsx b/ui/src/app/settings/components/repo-details/repo-details.tsx
index 3e21e7009f..6070d55578 100644
--- a/ui/src/app/settings/components/repo-details/repo-details.tsx
+++ b/ui/src/app/settings/components/repo-details/repo-details.tsx
@@ -95,7 +95,8 @@ export const RepoDetails = (props: {repo: models.Repository; save?: (params: New
project: repo.project || '',
enableOCI: repo.enableOCI || false,
forceHttpBasicAuth: repo.forceHttpBasicAuth || false,
- useAzureWorkloadIdentity: repo.useAzureWorkloadIdentity || false
+ useAzureWorkloadIdentity: repo.useAzureWorkloadIdentity || false,
+ insecureOCIForceHttp: repo.insecureOCIForceHttp || false
};
return (
diff --git a/ui/src/app/settings/components/repos-list/repos-list.tsx b/ui/src/app/settings/components/repos-list/repos-list.tsx
index 90dda6a90d..731964f996 100644
--- a/ui/src/app/settings/components/repos-list/repos-list.tsx
+++ b/ui/src/app/settings/components/repos-list/repos-list.tsx
@@ -43,6 +43,7 @@ export interface NewHTTPSRepoParams {
project?: string;
forceHttpBasicAuth?: boolean;
enableOCI: boolean;
+ insecureOCIForceHttp: boolean;
// write should be true if saving as a write credential.
write: boolean;
useAzureWorkloadIdentity: boolean;
@@ -88,6 +89,7 @@ interface NewSSHRepoCredsParams {
interface NewHTTPSRepoCredsParams {
url: string;
+ type: string;
username: string;
password: string;
bearerToken: string;
@@ -97,6 +99,7 @@ interface NewHTTPSRepoCredsParams {
noProxy: string;
forceHttpBasicAuth: boolean;
enableOCI: boolean;
+ insecureOCIForceHttp: boolean;
// write should be true if saving as a write credential.
write: boolean;
useAzureWorkloadIdentity: boolean;
@@ -220,7 +223,8 @@ export class ReposList extends React.Component<
return {
url:
(!validURLValues.url && 'Repository URL is required') ||
- (this.credsTemplate && !this.isHTTPOrHTTPSUrl(validURLValues.url) && !validURLValues.enableOCI && 'Not a valid HTTP/HTTPS URL'),
+ (this.credsTemplate && !this.isHTTPOrHTTPSUrl(validURLValues.url) && !validURLValues.enableOCI && params.type != 'oci' && 'Not a valid HTTP/HTTPS URL') ||
+ (this.credsTemplate && !this.isOCIUrl(validURLValues.url) && params.type == 'oci' && 'Not a valid OCI URL'),
name: validURLValues.type === 'helm' && !validURLValues.name && 'Name is required',
username: !validURLValues.username && validURLValues.password && 'Username is required if password is given.',
password: !validURLValues.password && validURLValues.username && 'Password is required if username is given.',
@@ -291,7 +295,7 @@ export class ReposList extends React.Component<
return (params: FormValues) => this.connectSSHRepo(params as NewSSHRepoParams);
case ConnectionMethod.HTTPS:
return (params: FormValues) => {
- params.url = params.enableOCI ? this.stripProtocol(params.url) : params.url;
+ params.url = params.enableOCI && params.type != 'oci' ? this.stripProtocol(params.url) : params.url;
return this.connectHTTPSRepo(params as NewHTTPSRepoParams);
};
case ConnectionMethod.GITHUBAPP:
@@ -756,7 +760,13 @@ export class ReposList extends React.Component<
CONNECT REPO USING HTTP/HTTPS
-
+
{(formApi.getFormState().values.type === 'helm' || formApi.getFormState().values.type === 'git') && (
@@ -833,7 +843,11 @@ export class ReposList extends React.Component<
-
+ {formApi.getFormState().values.type !== 'oci' ? (
+
+ ) : (
+
+ )}
res.body as models.ApplicationSyncWindowState);
}
+ public ociMetadata(name: string, appNamespace: string, revision: string, sourceIndex: number, versionId: number): Promise {
+ let r = requests.get(`/applications/${name}/revisions/${revision || 'HEAD'}/ocimetadata`).query({appNamespace});
+ if (sourceIndex !== null) {
+ r = r.query({sourceIndex});
+ }
+ if (versionId !== null) {
+ r = r.query({versionId});
+ }
+ return r.then(res => res.body as models.OCIMetadata);
+ }
+
public revisionMetadata(name: string, appNamespace: string, revision: string, sourceIndex: number | null, versionId: number | null): Promise {
let r = requests.get(`/applications/${name}/revisions/${revision || 'HEAD'}/metadata`).query({appNamespace});
if (sourceIndex !== null) {
diff --git a/ui/src/app/shared/services/repo-service.ts b/ui/src/app/shared/services/repo-service.ts
index 6cdd6b4b51..f83d9eb65e 100644
--- a/ui/src/app/shared/services/repo-service.ts
+++ b/ui/src/app/shared/services/repo-service.ts
@@ -18,6 +18,7 @@ export interface HTTPSQuery {
forceHttpBasicAuth?: boolean;
enableOCI: boolean;
useAzureWorkloadIdentity: boolean;
+ insecureOCIForceHttp: boolean;
}
export interface SSHQuery {
@@ -107,7 +108,8 @@ export class RepositoriesService {
project: q.project,
forceHttpBasicAuth: q.forceHttpBasicAuth,
enableOCI: q.enableOCI,
- useAzureWorkloadIdentity: q.useAzureWorkloadIdentity
+ useAzureWorkloadIdentity: q.useAzureWorkloadIdentity,
+ insecureOCIForceHttp: q.insecureOCIForceHttp
})
.then(res => res.body as models.Repository);
}
@@ -131,7 +133,8 @@ export class RepositoriesService {
project: q.project,
forceHttpBasicAuth: q.forceHttpBasicAuth,
enableOCI: q.enableOCI,
- useAzureWorkloadIdentity: q.useAzureWorkloadIdentity
+ useAzureWorkloadIdentity: q.useAzureWorkloadIdentity,
+ insecureOCIForceHttp: q.insecureOCIForceHttp
})
.then(res => res.body as models.Repository);
}
@@ -155,7 +158,8 @@ export class RepositoriesService {
project: q.project,
forceHttpBasicAuth: q.forceHttpBasicAuth,
enableOCI: q.enableOCI,
- useAzureWorkloadIdentity: q.useAzureWorkloadIdentity
+ useAzureWorkloadIdentity: q.useAzureWorkloadIdentity,
+ insecureOCIForceHttp: q.insecureOCIForceHttp
})
.then(res => res.body as models.Repository);
}
@@ -179,7 +183,8 @@ export class RepositoriesService {
project: q.project,
forceHttpBasicAuth: q.forceHttpBasicAuth,
enableOCI: q.enableOCI,
- useAzureWorkloadIdentity: q.useAzureWorkloadIdentity
+ useAzureWorkloadIdentity: q.useAzureWorkloadIdentity,
+ insecureOCIForceHttp: q.insecureOCIForceHttp
})
.then(res => res.body as models.Repository);
}
@@ -310,6 +315,10 @@ export class RepositoriesService {
return requests.get(`/repositories/${encodeURIComponent(repo)}/refs`).then(res => res.body as models.RefsInfo);
}
+ public async ociTags(repo: string): Promise {
+ return requests.get(`/repositories/${encodeURIComponent(repo)}/oci-tags`).then(res => res.body as models.RefsInfo);
+ }
+
public apps(repo: string, revision: string, appName: string, appProject: string): Promise {
return requests
.get(`/repositories/${encodeURIComponent(repo)}/apps`)
diff --git a/ui/src/app/shared/services/repocreds-service.ts b/ui/src/app/shared/services/repocreds-service.ts
index 9d03113c76..01da3cf8ba 100644
--- a/ui/src/app/shared/services/repocreds-service.ts
+++ b/ui/src/app/shared/services/repocreds-service.ts
@@ -8,8 +8,11 @@ export interface HTTPSCreds {
bearerToken: string;
tlsClientCertData: string;
tlsClientCertKey: string;
+ type: string;
proxy: string;
noProxy: string;
+ enableOCI: boolean;
+ insecureOCIForceHttp: boolean;
}
export interface SSHCreds {
diff --git a/util/argo/argo.go b/util/argo/argo.go
index 15ab607970..90abb00ce7 100644
--- a/util/argo/argo.go
+++ b/util/argo/argo.go
@@ -6,6 +6,7 @@ import (
"errors"
"fmt"
"regexp"
+ "slices"
"sort"
"strings"
"time"
@@ -260,11 +261,14 @@ func RefreshApp(appIf v1alpha1.ApplicationInterface, name string, refreshType ar
return nil, err
}
-func TestRepoWithKnownType(ctx context.Context, repoClient apiclient.RepoServerServiceClient, repo *argoappv1.Repository, isHelm bool, isHelmOci bool) error {
+func TestRepoWithKnownType(ctx context.Context, repoClient apiclient.RepoServerServiceClient, repo *argoappv1.Repository, isHelm bool, isHelmOci bool, isOCI bool) error {
repo = repo.DeepCopy()
- if isHelm {
+ switch {
+ case isHelm:
repo.Type = "helm"
- } else {
+ case isOCI:
+ repo.Type = "oci"
+ case repo.Type != "oci":
repo.Type = "git"
}
repo.EnableOCI = repo.EnableOCI || isHelmOci
@@ -322,10 +326,26 @@ func ValidateRepo(
if err != nil {
return nil, fmt.Errorf("error getting helm repo creds: %w", err)
}
+ ociRepos, err := db.ListOCIRepositories(ctx)
+ if err != nil {
+ return nil, fmt.Errorf("failed to list oci repositories: %w", err)
+ }
+ permittedOCIRepos, err := GetPermittedRepos(proj, ociRepos)
+ if err != nil {
+ return nil, fmt.Errorf("failed to get permitted oci repositories for project %q: %w", proj.Name, err)
+ }
permittedHelmCredentials, err := GetPermittedReposCredentials(proj, helmRepositoryCredentials)
if err != nil {
return nil, fmt.Errorf("error getting permitted repo creds: %w", err)
}
+ ociRepositoryCredentials, err := db.GetAllOCIRepositoryCredentials(ctx)
+ if err != nil {
+ return nil, fmt.Errorf("failed to get OCI credentials: %w", err)
+ }
+ permittedOCICredentials, err := GetPermittedReposCredentials(proj, ociRepositoryCredentials)
+ if err != nil {
+ return nil, fmt.Errorf("failed to get permitted OCI credentials for project %q: %w", proj.Name, err)
+ }
destCluster, err := GetDestinationCluster(ctx, spec.Destination, db)
if err != nil {
@@ -360,11 +380,13 @@ func ValidateRepo(
app.Spec.GetSources(),
repoClient,
permittedHelmRepos,
+ permittedOCIRepos,
helmOptions,
destCluster,
apiGroups,
proj,
permittedHelmCredentials,
+ permittedOCICredentials,
enabledSourceTypes,
settingsMgr)
if err != nil {
@@ -381,11 +403,13 @@ func validateRepo(ctx context.Context,
sources []argoappv1.ApplicationSource,
repoClient apiclient.RepoServerServiceClient,
permittedHelmRepos []*argoappv1.Repository,
+ permittedOCIRepos []*argoappv1.Repository,
helmOptions *argoappv1.HelmOptions,
cluster *argoappv1.Cluster,
apiGroups []kube.APIResourceInfo,
proj *argoappv1.AppProject,
permittedHelmCredentials []*argoappv1.RepoCreds,
+ permittedOCICredentials []*argoappv1.RepoCreds,
enabledSourceTypes map[string]bool,
settingsMgr *settings.SettingsManager,
) ([]argoappv1.ApplicationCondition, error) {
@@ -397,7 +421,7 @@ func validateRepo(ctx context.Context,
if err != nil {
return nil, err
}
- if err := TestRepoWithKnownType(ctx, repoClient, repo, source.IsHelm(), source.IsHelmOci()); err != nil {
+ if err := TestRepoWithKnownType(ctx, repoClient, repo, source.IsHelm(), source.IsHelmOci(), source.IsOCI()); err != nil {
errMessage = fmt.Sprintf("repositories not accessible: %v: %v", repo.StringForLogging(), err)
}
repoAccessible := false
@@ -437,6 +461,7 @@ func validateRepo(ctx context.Context,
ctx,
db,
permittedHelmRepos,
+ permittedOCIRepos,
helmOptions,
app,
proj,
@@ -446,6 +471,7 @@ func validateRepo(ctx context.Context,
cluster.ServerVersion,
APIResourcesToStrings(apiGroups, true),
permittedHelmCredentials,
+ permittedOCICredentials,
enabledSourceTypes,
settingsMgr,
refSources)...)
@@ -715,6 +741,7 @@ func verifyGenerateManifests(
ctx context.Context,
db db.ArgoDB,
helmRepos argoappv1.Repositories,
+ ociRepos argoappv1.Repositories,
helmOptions *argoappv1.HelmOptions,
app *argoappv1.Application,
proj *argoappv1.AppProject,
@@ -723,6 +750,7 @@ func verifyGenerateManifests(
kubeVersion string,
apiVersions []string,
repositoryCredentials []*argoappv1.RepoCreds,
+ ociRepositoryCredentials []*argoappv1.RepoCreds,
enableGenerateManifests map[string]bool,
settingsMgr *settings.SettingsManager,
refSources argoappv1.RefTargetRevisionMapping,
@@ -787,6 +815,18 @@ func verifyGenerateManifests(
verifySignature = true
}
+ repos := helmRepos
+ helmRepoCreds := repositoryCredentials
+ // If the source is OCI, there is a potential for an OCI image to be a Helm chart and that said chart in
+ // turn would have OCI dependencies. To ensure that those dependencies can be resolved, add them to the repos
+ // list.
+ if source.IsOCI() {
+ repos = slices.Clone(helmRepos)
+ helmRepoCreds = slices.Clone(repositoryCredentials)
+ repos = append(repos, ociRepos...)
+ helmRepoCreds = append(helmRepoCreds, ociRepositoryCredentials...)
+ }
+
req := apiclient.ManifestRequest{
Repo: &argoappv1.Repository{
Repo: source.RepoURL,
@@ -796,7 +836,7 @@ func verifyGenerateManifests(
NoProxy: repoRes.NoProxy,
},
VerifySignature: verifySignature,
- Repos: helmRepos,
+ Repos: repos,
Revision: source.TargetRevision,
AppName: app.Name,
Namespace: app.Spec.Destination.Namespace,
@@ -806,7 +846,7 @@ func verifyGenerateManifests(
KubeVersion: kubeVersion,
ApiVersions: apiVersions,
HelmOptions: helmOptions,
- HelmRepoCreds: repositoryCredentials,
+ HelmRepoCreds: helmRepoCreds,
TrackingMethod: trackingMethod,
EnabledSourceTypes: enableGenerateManifests,
NoRevisionCache: true,
diff --git a/util/argo/argo_test.go b/util/argo/argo_test.go
index b272e17a36..5786e603f4 100644
--- a/util/argo/argo_test.go
+++ b/util/argo/argo_test.go
@@ -411,8 +411,10 @@ func TestValidateRepo(t *testing.T) {
db.On("GetRepository", t.Context(), app.Spec.Source.RepoURL, "").Return(repo, nil)
db.On("ListHelmRepositories", t.Context()).Return(helmRepos, nil)
+ db.On("ListOCIRepositories", t.Context()).Return([]*argoappv1.Repository{}, nil)
db.On("GetCluster", t.Context(), app.Spec.Destination.Server).Return(cluster, nil)
db.On("GetAllHelmRepositoryCredentials", t.Context()).Return(nil, nil)
+ db.On("GetAllOCIRepositoryCredentials", t.Context()).Return([]*argoappv1.RepoCreds{}, nil)
var receivedRequest *apiclient.ManifestRequest
diff --git a/util/db/db.go b/util/db/db.go
index f4e1bb3fc8..9a905c7b3b 100644
--- a/util/db/db.go
+++ b/util/db/db.go
@@ -106,10 +106,15 @@ type ArgoDB interface {
RemoveRepoCertificates(ctx context.Context, selector *CertificateListSelector) (*appv1.RepositoryCertificateList, error)
// GetAllHelmRepositoryCredentials gets all repo credentials
GetAllHelmRepositoryCredentials(ctx context.Context) ([]*appv1.RepoCreds, error)
+ // GetAllOCIRepositoryCredentials gets all repo credentials
+ GetAllOCIRepositoryCredentials(ctx context.Context) ([]*appv1.RepoCreds, error)
// ListHelmRepositories lists repositories
ListHelmRepositories(ctx context.Context) ([]*appv1.Repository, error)
+ // ListOCIRepositories lists repositories
+ ListOCIRepositories(ctx context.Context) ([]*appv1.Repository, error)
+
// ListConfiguredGPGPublicKeys returns all GPG public key IDs that are configured
ListConfiguredGPGPublicKeys(ctx context.Context) (map[string]*appv1.GnuPGPublicKey, error)
// AddGPGPublicKey adds one or more GPG public keys to the configuration
diff --git a/util/db/mocks/ArgoDB.go b/util/db/mocks/ArgoDB.go
index e9e7c3f932..45d294b5d2 100644
--- a/util/db/mocks/ArgoDB.go
+++ b/util/db/mocks/ArgoDB.go
@@ -781,6 +781,62 @@ func (_c *ArgoDB_GetAllHelmRepositoryCredentials_Call) RunAndReturn(run func(ctx
return _c
}
+// GetAllOCIRepositoryCredentials provides a mock function for the type ArgoDB
+func (_mock *ArgoDB) GetAllOCIRepositoryCredentials(ctx context.Context) ([]*v1alpha1.RepoCreds, error) {
+ ret := _mock.Called(ctx)
+
+ if len(ret) == 0 {
+ panic("no return value specified for GetAllOCIRepositoryCredentials")
+ }
+
+ var r0 []*v1alpha1.RepoCreds
+ var r1 error
+ if returnFunc, ok := ret.Get(0).(func(context.Context) ([]*v1alpha1.RepoCreds, error)); ok {
+ return returnFunc(ctx)
+ }
+ if returnFunc, ok := ret.Get(0).(func(context.Context) []*v1alpha1.RepoCreds); ok {
+ r0 = returnFunc(ctx)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).([]*v1alpha1.RepoCreds)
+ }
+ }
+ if returnFunc, ok := ret.Get(1).(func(context.Context) error); ok {
+ r1 = returnFunc(ctx)
+ } else {
+ r1 = ret.Error(1)
+ }
+ return r0, r1
+}
+
+// ArgoDB_GetAllOCIRepositoryCredentials_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetAllOCIRepositoryCredentials'
+type ArgoDB_GetAllOCIRepositoryCredentials_Call struct {
+ *mock.Call
+}
+
+// GetAllOCIRepositoryCredentials is a helper method to define mock.On call
+// - ctx
+func (_e *ArgoDB_Expecter) GetAllOCIRepositoryCredentials(ctx interface{}) *ArgoDB_GetAllOCIRepositoryCredentials_Call {
+ return &ArgoDB_GetAllOCIRepositoryCredentials_Call{Call: _e.mock.On("GetAllOCIRepositoryCredentials", ctx)}
+}
+
+func (_c *ArgoDB_GetAllOCIRepositoryCredentials_Call) Run(run func(ctx context.Context)) *ArgoDB_GetAllOCIRepositoryCredentials_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context))
+ })
+ return _c
+}
+
+func (_c *ArgoDB_GetAllOCIRepositoryCredentials_Call) Return(repoCredss []*v1alpha1.RepoCreds, err error) *ArgoDB_GetAllOCIRepositoryCredentials_Call {
+ _c.Call.Return(repoCredss, err)
+ return _c
+}
+
+func (_c *ArgoDB_GetAllOCIRepositoryCredentials_Call) RunAndReturn(run func(ctx context.Context) ([]*v1alpha1.RepoCreds, error)) *ArgoDB_GetAllOCIRepositoryCredentials_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
// GetApplicationControllerReplicas provides a mock function for the type ArgoDB
func (_mock *ArgoDB) GetApplicationControllerReplicas() int {
ret := _mock.Called()
@@ -1506,6 +1562,62 @@ func (_c *ArgoDB_ListHelmRepositories_Call) RunAndReturn(run func(ctx context.Co
return _c
}
+// ListOCIRepositories provides a mock function for the type ArgoDB
+func (_mock *ArgoDB) ListOCIRepositories(ctx context.Context) ([]*v1alpha1.Repository, error) {
+ ret := _mock.Called(ctx)
+
+ if len(ret) == 0 {
+ panic("no return value specified for ListOCIRepositories")
+ }
+
+ var r0 []*v1alpha1.Repository
+ var r1 error
+ if returnFunc, ok := ret.Get(0).(func(context.Context) ([]*v1alpha1.Repository, error)); ok {
+ return returnFunc(ctx)
+ }
+ if returnFunc, ok := ret.Get(0).(func(context.Context) []*v1alpha1.Repository); ok {
+ r0 = returnFunc(ctx)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).([]*v1alpha1.Repository)
+ }
+ }
+ if returnFunc, ok := ret.Get(1).(func(context.Context) error); ok {
+ r1 = returnFunc(ctx)
+ } else {
+ r1 = ret.Error(1)
+ }
+ return r0, r1
+}
+
+// ArgoDB_ListOCIRepositories_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListOCIRepositories'
+type ArgoDB_ListOCIRepositories_Call struct {
+ *mock.Call
+}
+
+// ListOCIRepositories is a helper method to define mock.On call
+// - ctx
+func (_e *ArgoDB_Expecter) ListOCIRepositories(ctx interface{}) *ArgoDB_ListOCIRepositories_Call {
+ return &ArgoDB_ListOCIRepositories_Call{Call: _e.mock.On("ListOCIRepositories", ctx)}
+}
+
+func (_c *ArgoDB_ListOCIRepositories_Call) Run(run func(ctx context.Context)) *ArgoDB_ListOCIRepositories_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context))
+ })
+ return _c
+}
+
+func (_c *ArgoDB_ListOCIRepositories_Call) Return(repositorys []*v1alpha1.Repository, err error) *ArgoDB_ListOCIRepositories_Call {
+ _c.Call.Return(repositorys, err)
+ return _c
+}
+
+func (_c *ArgoDB_ListOCIRepositories_Call) RunAndReturn(run func(ctx context.Context) ([]*v1alpha1.Repository, error)) *ArgoDB_ListOCIRepositories_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
// ListRepoCertificates provides a mock function for the type ArgoDB
func (_mock *ArgoDB) ListRepoCertificates(ctx context.Context, selector *db.CertificateListSelector) (*v1alpha1.RepositoryCertificateList, error) {
ret := _mock.Called(ctx, selector)
diff --git a/util/db/repository.go b/util/db/repository.go
index 9ff1d7eeef..930afefd73 100644
--- a/util/db/repository.go
+++ b/util/db/repository.go
@@ -6,6 +6,7 @@ import (
"hash/fnv"
corev1 "k8s.io/api/core/v1"
+ "k8s.io/utils/ptr"
log "github.com/sirupsen/logrus"
"google.golang.org/grpc/codes"
@@ -47,6 +48,7 @@ type repositoryBackend interface {
RepoCredsExists(ctx context.Context, repoURL string) (bool, error)
GetAllHelmRepoCreds(ctx context.Context) ([]*v1alpha1.RepoCreds, error)
+ GetAllOCIRepoCreds(ctx context.Context) ([]*v1alpha1.RepoCreds, error)
}
func (db *db) CreateRepository(ctx context.Context, r *v1alpha1.Repository) (*v1alpha1.Repository, error) {
@@ -185,6 +187,18 @@ func (db *db) listRepositories(ctx context.Context, repoType *string, writeCreds
return repositories, nil
}
+func (db *db) ListOCIRepositories(ctx context.Context) ([]*v1alpha1.Repository, error) {
+ var result []*v1alpha1.Repository
+ repos, err := db.listRepositories(ctx, ptr.To("oci"), false)
+ if err != nil {
+ return nil, fmt.Errorf("failed to list OCI repositories: %w", err)
+ }
+ result = append(result, v1alpha1.Repositories(repos).Filter(func(r *v1alpha1.Repository) bool {
+ return r.Type == "oci"
+ })...)
+ return result, nil
+}
+
// UpdateRepository updates a repository
func (db *db) UpdateRepository(ctx context.Context, r *v1alpha1.Repository) (*v1alpha1.Repository, error) {
secretsBackend := db.repoBackend()
@@ -309,6 +323,16 @@ func (db *db) GetAllHelmRepositoryCredentials(ctx context.Context) ([]*v1alpha1.
return secretRepoCreds, nil
}
+// GetAllOCIRepositoryCredentials retrieves all repository credentials
+func (db *db) GetAllOCIRepositoryCredentials(ctx context.Context) ([]*v1alpha1.RepoCreds, error) {
+ secretRepoCreds, err := db.repoBackend().GetAllOCIRepoCreds(ctx)
+ if err != nil {
+ return nil, fmt.Errorf("failed to get all Helm repo creds: %w", err)
+ }
+
+ return secretRepoCreds, nil
+}
+
// CreateRepositoryCredentials creates a repository credential set
func (db *db) CreateRepositoryCredentials(ctx context.Context, r *v1alpha1.RepoCreds) (*v1alpha1.RepoCreds, error) {
secretBackend := db.repoBackend()
diff --git a/util/db/repository_secrets.go b/util/db/repository_secrets.go
index bc32d27835..6ba329326c 100644
--- a/util/db/repository_secrets.go
+++ b/util/db/repository_secrets.go
@@ -300,6 +300,28 @@ func (s *secretsRepositoryBackend) GetAllHelmRepoCreds(_ context.Context) ([]*ap
return helmRepoCreds, nil
}
+func (s *secretsRepositoryBackend) GetAllOCIRepoCreds(_ context.Context) ([]*appsv1.RepoCreds, error) {
+ var ociRepoCreds []*appsv1.RepoCreds
+
+ secrets, err := s.db.listSecretsByType(common.LabelValueSecretTypeRepoCreds)
+ if err != nil {
+ return nil, err
+ }
+
+ for _, secret := range secrets {
+ if strings.EqualFold(string(secret.Data["type"]), "oci") {
+ repoCreds, err := s.secretToRepoCred(secret)
+ if err != nil {
+ return nil, err
+ }
+
+ ociRepoCreds = append(ociRepoCreds, repoCreds)
+ }
+ }
+
+ return ociRepoCreds, nil
+}
+
func secretToRepository(secret *corev1.Secret) (*appsv1.Repository, error) {
repository := &appsv1.Repository{
Name: string(secret.Data["name"]),
@@ -343,6 +365,12 @@ func secretToRepository(secret *corev1.Secret) (*appsv1.Repository, error) {
}
repository.EnableOCI = enableOCI
+ insecureOCIForceHTTP, err := boolOrFalse(secret, "insecureOCIForceHttp")
+ if err != nil {
+ return repository, err
+ }
+ repository.InsecureOCIForceHttp = insecureOCIForceHTTP
+
githubAppID, err := intOrZero(secret, "githubAppID")
if err != nil {
return repository, err
@@ -383,6 +411,7 @@ func (s *secretsRepositoryBackend) repositoryToSecret(repository *appsv1.Reposit
updateSecretString(secret, "bearerToken", repository.BearerToken)
updateSecretString(secret, "sshPrivateKey", repository.SSHPrivateKey)
updateSecretBool(secret, "enableOCI", repository.EnableOCI)
+ updateSecretBool(secret, "insecureOCIForceHttp", repository.InsecureOCIForceHttp)
updateSecretString(secret, "tlsClientCertData", repository.TLSClientCertData)
updateSecretString(secret, "tlsClientCertKey", repository.TLSClientCertKey)
updateSecretString(secret, "type", repository.Type)
@@ -424,6 +453,12 @@ func (s *secretsRepositoryBackend) secretToRepoCred(secret *corev1.Secret) (*app
}
repository.EnableOCI = enableOCI
+ insecureOCIForceHTTP, err := boolOrFalse(secret, "insecureOCIForceHttp")
+ if err != nil {
+ return repository, err
+ }
+ repository.InsecureOCIForceHttp = insecureOCIForceHTTP
+
githubAppID, err := intOrZero(secret, "githubAppID")
if err != nil {
return repository, err
@@ -462,6 +497,7 @@ func repoCredsToSecret(repoCreds *appsv1.RepoCreds, secret *corev1.Secret) {
updateSecretString(secret, "bearerToken", repoCreds.BearerToken)
updateSecretString(secret, "sshPrivateKey", repoCreds.SSHPrivateKey)
updateSecretBool(secret, "enableOCI", repoCreds.EnableOCI)
+ updateSecretBool(secret, "insecureOCIForceHttp", repoCreds.InsecureOCIForceHttp)
updateSecretString(secret, "tlsClientCertData", repoCreds.TLSClientCertData)
updateSecretString(secret, "tlsClientCertKey", repoCreds.TLSClientCertKey)
updateSecretString(secret, "type", repoCreds.Type)
diff --git a/util/io/files/tar.go b/util/io/files/tar.go
index 344c84b71b..9914fb76a0 100644
--- a/util/io/files/tar.go
+++ b/util/io/files/tar.go
@@ -30,12 +30,26 @@ func Tgz(srcPath string, inclusions []string, exclusions []string, writers ...io
return 0, fmt.Errorf("error inspecting srcPath %q: %w", srcPath, err)
}
- mw := io.MultiWriter(writers...)
-
- gzw := gzip.NewWriter(mw)
+ gzw := gzip.NewWriter(io.MultiWriter(writers...))
defer gzw.Close()
- tw := tar.NewWriter(gzw)
+ return writeFile(srcPath, inclusions, exclusions, gzw)
+}
+
+// Tar will iterate over all files found in srcPath archiving with Tar. Will invoke every given writer while generating the tar.
+// This is useful to generate checksums. Will exclude files matching the exclusions
+// list blob if exclusions is not nil. Will include only the files matching the
+// inclusions list if inclusions is not nil.
+func Tar(srcPath string, inclusions []string, exclusions []string, writers ...io.Writer) (int, error) {
+ if _, err := os.Stat(srcPath); err != nil {
+ return 0, fmt.Errorf("error inspecting srcPath %q: %w", srcPath, err)
+ }
+
+ return writeFile(srcPath, inclusions, exclusions, io.MultiWriter(writers...))
+}
+
+func writeFile(srcPath string, inclusions []string, exclusions []string, writer io.Writer) (int, error) {
+ tw := tar.NewWriter(writer)
defer tw.Close()
t := &tgz{
@@ -56,7 +70,7 @@ func Tgz(srcPath string, inclusions []string, exclusions []string, writers ...io
// Callers must make sure dstPath is:
// - a full path
// - points to an empty directory or
-// - points to a non existing directory
+// - points to a non-existing directory
func Untgz(dstPath string, r io.Reader, maxSize int64, preserveFileMode bool) error {
if !filepath.IsAbs(dstPath) {
return fmt.Errorf("dstPath points to a relative path: %s", dstPath)
@@ -67,9 +81,29 @@ func Untgz(dstPath string, r io.Reader, maxSize int64, preserveFileMode bool) er
return fmt.Errorf("error reading file: %w", err)
}
defer gzr.Close()
+ return untar(dstPath, io.LimitReader(gzr, maxSize), preserveFileMode)
+}
- lr := io.LimitReader(gzr, maxSize)
- tr := tar.NewReader(lr)
+// Untar will loop over the tar reader creating the file structure at dstPath.
+// Callers must make sure dstPath is:
+// - a full path
+// - points to an empty directory or
+// - points to a non-existing directory
+func Untar(dstPath string, r io.Reader, maxSize int64, preserveFileMode bool) error {
+ if !filepath.IsAbs(dstPath) {
+ return fmt.Errorf("dstPath points to a relative path: %s", dstPath)
+ }
+
+ return untar(dstPath, io.LimitReader(r, maxSize), preserveFileMode)
+}
+
+// untar will loop over the tar reader creating the file structure at dstPath.
+// Callers must make sure dstPath is:
+// - a full path
+// - points to an empty directory or
+// - points to a non existing directory
+func untar(dstPath string, r io.Reader, preserveFileMode bool) error {
+ tr := tar.NewReader(r)
for {
header, err := tr.Next()
@@ -79,7 +113,7 @@ func Untgz(dstPath string, r io.Reader, maxSize int64, preserveFileMode bool) er
}
return fmt.Errorf("error while iterating on tar reader: %w", err)
}
- if header == nil || header.Name == "." {
+ if header == nil || header.Name == "." || header.Name == "./" {
continue
}
diff --git a/util/oci/client.go b/util/oci/client.go
new file mode 100644
index 0000000000..641db5b0b8
--- /dev/null
+++ b/util/oci/client.go
@@ -0,0 +1,583 @@
+package oci
+
+import (
+ "context"
+ "crypto/tls"
+ "crypto/x509"
+ "encoding/json"
+ "errors"
+ "fmt"
+ "io"
+ "io/fs"
+ "math"
+ "net/http"
+ "net/url"
+ "os"
+ "path"
+ "path/filepath"
+ "slices"
+ "strings"
+ "time"
+
+ securejoin "github.com/cyphar/filepath-securejoin"
+ imagev1 "github.com/opencontainers/image-spec/specs-go/v1"
+ "oras.land/oras-go/v2/content/oci"
+
+ "github.com/argoproj/argo-cd/v3/util/versions"
+
+ "github.com/argoproj/pkg/sync"
+ log "github.com/sirupsen/logrus"
+
+ "github.com/argoproj/argo-cd/v3/util/cache"
+ utilio "github.com/argoproj/argo-cd/v3/util/io"
+ "github.com/argoproj/argo-cd/v3/util/io/files"
+ "github.com/argoproj/argo-cd/v3/util/proxy"
+
+ "oras.land/oras-go/v2"
+ "oras.land/oras-go/v2/content/file"
+ "oras.land/oras-go/v2/registry/remote"
+ "oras.land/oras-go/v2/registry/remote/auth"
+)
+
+var (
+ globalLock = sync.NewKeyLock()
+ indexLock = sync.NewKeyLock()
+)
+
+var _ Client = &nativeOCIClient{}
+
+type tagsCache interface {
+ SetOCITags(repo string, indexData []byte) error
+ GetOCITags(repo string, indexData *[]byte) error
+}
+
+// Client is a generic OCI client interface that provides methods for interacting with an OCI (Open Container Initiative) registry.
+type Client interface {
+ // ResolveRevision resolves a tag, digest, or semantic version constraint to a concrete digest.
+ // If noCache is true, the resolution bypasses the local tags cache and queries the remote registry.
+ // If the revision is already a digest, it is returned as-is.
+ ResolveRevision(ctx context.Context, revision string, noCache bool) (string, error)
+
+ // DigestMetadata retrieves an OCI manifest for a given digest.
+ DigestMetadata(ctx context.Context, digest string) (*imagev1.Manifest, error)
+
+ // CleanCache is invoked on a hard-refresh or when the manifest cache has expired. This removes the OCI image from
+ // the cached path, which is looked up by the specified revision.
+ CleanCache(revision string) error
+
+ // Extract retrieves and unpacks the contents of an OCI image identified by the specified revision.
+ // If successful, the extracted contents are extracted to a randomized tempdir.
+ Extract(ctx context.Context, revision string) (string, utilio.Closer, error)
+
+ // TestRepo verifies the connectivity and accessibility of the repository.
+ TestRepo(ctx context.Context) (bool, error)
+
+ // GetTags retrieves the list of tags for the repository.
+ GetTags(ctx context.Context, noCache bool) ([]string, error)
+}
+
+type Creds struct {
+ Username string
+ Password string
+ CAPath string
+ CertData []byte
+ KeyData []byte
+ InsecureSkipVerify bool
+ InsecureHTTPOnly bool
+}
+
+type ClientOpts func(c *nativeOCIClient)
+
+func WithIndexCache(indexCache tagsCache) ClientOpts {
+ return func(c *nativeOCIClient) {
+ c.tagsCache = indexCache
+ }
+}
+
+func WithImagePaths(repoCachePaths utilio.TempPaths) ClientOpts {
+ return func(c *nativeOCIClient) {
+ c.repoCachePaths = repoCachePaths
+ }
+}
+
+func WithManifestMaxExtractedSize(manifestMaxExtractedSize int64) ClientOpts {
+ return func(c *nativeOCIClient) {
+ c.manifestMaxExtractedSize = manifestMaxExtractedSize
+ }
+}
+
+func WithDisableManifestMaxExtractedSize(disableManifestMaxExtractedSize bool) ClientOpts {
+ return func(c *nativeOCIClient) {
+ c.disableManifestMaxExtractedSize = disableManifestMaxExtractedSize
+ }
+}
+
+func NewClient(repoURL string, creds Creds, proxy, noProxy string, layerMediaTypes []string, opts ...ClientOpts) (Client, error) {
+ return NewClientWithLock(repoURL, creds, globalLock, proxy, noProxy, layerMediaTypes, opts...)
+}
+
+func NewClientWithLock(repoURL string, creds Creds, repoLock sync.KeyLock, proxyURL, noProxy string, layerMediaTypes []string, opts ...ClientOpts) (Client, error) {
+ ociRepo := strings.TrimPrefix(repoURL, "oci://")
+ repo, err := remote.NewRepository(ociRepo)
+ if err != nil {
+ return nil, fmt.Errorf("failed to initialize repository: %w", err)
+ }
+
+ repo.PlainHTTP = creds.InsecureHTTPOnly
+
+ var tlsConf *tls.Config
+ if !repo.PlainHTTP {
+ tlsConf, err = newTLSConfig(creds)
+ if err != nil {
+ return nil, fmt.Errorf("failed setup tlsConfig: %w", err)
+ }
+ }
+
+ client := &http.Client{
+ Transport: &http.Transport{
+ Proxy: proxy.GetCallback(proxyURL, noProxy),
+ TLSClientConfig: tlsConf,
+ DisableKeepAlives: true,
+ },
+ /*
+ CheckRedirect: func(req *http.Request, via []*http.Request) error {
+ return errors.New("redirects are not allowed")
+ },
+ */
+ }
+ repo.Client = &auth.Client{
+ Client: client,
+ Cache: nil,
+ Credential: auth.StaticCredential(repo.Reference.Registry, auth.Credential{
+ Username: creds.Username,
+ Password: creds.Password,
+ }),
+ }
+
+ parsed, err := url.Parse(repoURL)
+ if err != nil {
+ return nil, fmt.Errorf("failed to parse oci repo url: %w", err)
+ }
+
+ reg, err := remote.NewRegistry(parsed.Host)
+ if err != nil {
+ return nil, fmt.Errorf("failed to setup registry config: %w", err)
+ }
+ reg.PlainHTTP = repo.PlainHTTP
+ reg.Client = repo.Client
+ return newClientWithLock(ociRepo, repoLock, repo, func(ctx context.Context, last string) ([]string, error) {
+ var t []string
+
+ err := repo.Tags(ctx, last, func(tags []string) error {
+ t = append(t, tags...)
+ return nil
+ })
+
+ return t, err
+ }, reg.Ping, layerMediaTypes, opts...), nil
+}
+
+func newClientWithLock(repoURL string, repoLock sync.KeyLock, repo oras.ReadOnlyTarget, tagsFunc func(context.Context, string) ([]string, error), pingFunc func(ctx context.Context) error, layerMediaTypes []string, opts ...ClientOpts) Client {
+ c := &nativeOCIClient{
+ repoURL: repoURL,
+ repoLock: repoLock,
+ repo: repo,
+ tagsFunc: tagsFunc,
+ pingFunc: pingFunc,
+ allowedMediaTypes: layerMediaTypes,
+ }
+ for i := range opts {
+ opts[i](c)
+ }
+ return c
+}
+
+// nativeOCIClient implements Client interface using oras-go
+type nativeOCIClient struct {
+ repoURL string
+ repo oras.ReadOnlyTarget
+ tagsFunc func(context.Context, string) ([]string, error)
+ repoLock sync.KeyLock
+ tagsCache tagsCache
+ repoCachePaths utilio.TempPaths
+ allowedMediaTypes []string
+ manifestMaxExtractedSize int64
+ disableManifestMaxExtractedSize bool
+ pingFunc func(ctx context.Context) error
+}
+
+// TestRepo verifies that the remote OCI repo can be connected to.
+func (c *nativeOCIClient) TestRepo(ctx context.Context) (bool, error) {
+ err := c.pingFunc(ctx)
+ return err == nil, err
+}
+
+func (c *nativeOCIClient) Extract(ctx context.Context, digest string) (string, utilio.Closer, error) {
+ cachedPath, err := c.getCachedPath(digest)
+ if err != nil {
+ return "", nil, fmt.Errorf("error getting oci path for digest %s: %w", digest, err)
+ }
+
+ c.repoLock.Lock(cachedPath)
+ defer c.repoLock.Unlock(cachedPath)
+
+ exists, err := fileExists(cachedPath)
+ if err != nil {
+ return "", nil, err
+ }
+
+ if !exists {
+ ociManifest, err := getOCIManifest(ctx, digest, c.repo)
+ if err != nil {
+ return "", nil, err
+ }
+
+ if len(ociManifest.Layers) != 1 {
+ return "", nil, fmt.Errorf("expected only a single oci layer, got %d", len(ociManifest.Layers))
+ }
+
+ if !slices.Contains(c.allowedMediaTypes, ociManifest.Layers[0].MediaType) {
+ return "", nil, fmt.Errorf("oci layer media type %s is not in the list of allowed media types", ociManifest.Layers[0].MediaType)
+ }
+
+ err = saveCompressedImageToPath(ctx, digest, c.repo, cachedPath)
+ if err != nil {
+ return "", nil, fmt.Errorf("could not save oci digest %s: %w", digest, err)
+ }
+ }
+
+ maxSize := c.manifestMaxExtractedSize
+ if c.disableManifestMaxExtractedSize {
+ maxSize = math.MaxInt64
+ }
+
+ manifestsDir, err := extractContentToManifestsDir(ctx, cachedPath, digest, maxSize)
+ if err != nil {
+ return manifestsDir, nil, fmt.Errorf("cannot extract contents of oci image with revision %s: %w", digest, err)
+ }
+
+ return manifestsDir, utilio.NewCloser(func() error {
+ return os.RemoveAll(manifestsDir)
+ }), nil
+}
+
+func (c *nativeOCIClient) getCachedPath(version string) (string, error) {
+ keyData, err := json.Marshal(map[string]string{"url": c.repoURL, "version": version})
+ if err != nil {
+ return "", err
+ }
+ return c.repoCachePaths.GetPath(string(keyData))
+}
+
+func (c *nativeOCIClient) CleanCache(revision string) error {
+ cachePath, err := c.getCachedPath(revision)
+ if err != nil {
+ return fmt.Errorf("error cleaning oci path for revision %s: %w", revision, err)
+ }
+ return os.RemoveAll(cachePath)
+}
+
+// DigestMetadata extracts the OCI manifest for a given revision and returns it to the caller.
+func (c *nativeOCIClient) DigestMetadata(ctx context.Context, digest string) (*imagev1.Manifest, error) {
+ path, err := c.getCachedPath(digest)
+ if err != nil {
+ return nil, fmt.Errorf("error fetching oci metadata path for digest %s: %w", digest, err)
+ }
+
+ repo, err := oci.NewFromTar(ctx, path)
+ if err != nil {
+ return nil, fmt.Errorf("error extracting oci image for digest %s: %w", digest, err)
+ }
+
+ return getOCIManifest(ctx, digest, repo)
+}
+
+func (c *nativeOCIClient) ResolveRevision(ctx context.Context, revision string, noCache bool) (string, error) {
+ digest, err := c.resolveDigest(ctx, revision) // Lookup explicit revision
+ if err != nil {
+ tags, err := c.GetTags(ctx, noCache)
+ if err != nil {
+ return "", fmt.Errorf("error fetching tags: %w", err)
+ }
+
+ // Look to see if revision is a semver constraint
+ version, err := versions.MaxVersion(revision, tags)
+ if err != nil {
+ return "", fmt.Errorf("no version for constraints: %w", err)
+ }
+ // Look up the digest for the resolved version
+ return c.resolveDigest(ctx, version)
+ }
+
+ return digest, nil
+}
+
+func (c *nativeOCIClient) GetTags(ctx context.Context, noCache bool) ([]string, error) {
+ indexLock.Lock(c.repoURL)
+ defer indexLock.Unlock(c.repoURL)
+
+ var data []byte
+ if !noCache && c.tagsCache != nil {
+ if err := c.tagsCache.GetOCITags(c.repoURL, &data); err != nil && !errors.Is(err, cache.ErrCacheMiss) {
+ log.Warnf("Failed to load index cache for repo: %s: %s", c.repoLock, err)
+ }
+ }
+
+ var tags []string
+ if len(data) == 0 {
+ start := time.Now()
+ result, err := c.tagsFunc(ctx, "")
+ if err != nil {
+ return nil, fmt.Errorf("failed to get tags: %w", err)
+ }
+
+ for _, tag := range result {
+ // By convention: Change underscore (_) back to plus (+) to get valid SemVer
+ convertedTag := strings.ReplaceAll(tag, "_", "+")
+ tags = append(tags, convertedTag)
+ }
+
+ log.WithFields(
+ log.Fields{"seconds": time.Since(start).Seconds(), "repo": c.repoURL},
+ ).Info("took to get tags")
+
+ if c.tagsCache != nil {
+ if err := c.tagsCache.SetOCITags(c.repoURL, data); err != nil {
+ log.Warnf("Failed to store tags list cache for repo: %s: %s", c.repoURL, err)
+ }
+ }
+ } else if err := json.Unmarshal(data, &tags); err != nil {
+ return nil, fmt.Errorf("failed to decode tags: %w", err)
+ }
+
+ return tags, nil
+}
+
+// resolveDigest resolves a digest from a tag.
+func (c *nativeOCIClient) resolveDigest(ctx context.Context, revision string) (string, error) {
+ descriptor, err := c.repo.Resolve(ctx, revision)
+ if err != nil {
+ return "", fmt.Errorf("cannot get digest for revision %s: %w", revision, err)
+ }
+
+ return descriptor.Digest.String(), nil
+}
+
+func newTLSConfig(creds Creds) (*tls.Config, error) {
+ tlsConfig := &tls.Config{InsecureSkipVerify: creds.InsecureSkipVerify}
+
+ if creds.CAPath != "" {
+ caData, err := os.ReadFile(creds.CAPath)
+ if err != nil {
+ return nil, err
+ }
+ caCertPool := x509.NewCertPool()
+ caCertPool.AppendCertsFromPEM(caData)
+ tlsConfig.RootCAs = caCertPool
+ }
+
+ // If a client cert & key is provided then configure TLS config accordingly.
+ if len(creds.CertData) > 0 && len(creds.KeyData) > 0 {
+ cert, err := tls.X509KeyPair(creds.CertData, creds.KeyData)
+ if err != nil {
+ return nil, err
+ }
+ tlsConfig.Certificates = []tls.Certificate{cert}
+ }
+ //nolint:staticcheck
+ tlsConfig.BuildNameToCertificate()
+
+ return tlsConfig, nil
+}
+
+func fileExists(filePath string) (bool, error) {
+ if _, err := os.Stat(filePath); err != nil {
+ if os.IsNotExist(err) {
+ return false, nil
+ }
+ return false, err
+ }
+ return true, nil
+}
+
+func isCompressedLayer(mediaType string) bool {
+ return strings.HasSuffix(mediaType, "tar+gzip") || strings.HasSuffix(mediaType, "tar")
+}
+
+func createTarFile(from, to string) error {
+ f, err := os.Create(to)
+ if err != nil {
+ return err
+ }
+ if _, err = files.Tar(from, nil, nil, f); err != nil {
+ _ = os.RemoveAll(to)
+ }
+ return f.Close()
+}
+
+// saveCompressedImageToPath downloads a remote OCI image on a given digest and stores it as a TAR file in cachedPath.
+func saveCompressedImageToPath(ctx context.Context, digest string, repo oras.ReadOnlyTarget, cachedPath string) error {
+ tempDir, err := files.CreateTempDir(os.TempDir())
+ if err != nil {
+ return err
+ }
+ defer os.RemoveAll(tempDir)
+
+ store, err := oci.New(tempDir)
+ if err != nil {
+ return err
+ }
+
+ // Copy remote repo at the given digest to the scratch dir.
+ if _, err = oras.Copy(ctx, repo, digest, store, digest, oras.DefaultCopyOptions); err != nil {
+ return err
+ }
+
+ // Remove redundant ingest folder; this is an artifact from the oras.Copy call above
+ if err = os.RemoveAll(path.Join(tempDir, "ingest")); err != nil {
+ return err
+ }
+
+ // Save contents to tar file
+ return createTarFile(tempDir, cachedPath)
+}
+
+// extractContentToManifestsDir looks up a locally stored OCI image, and extracts the embedded compressed layer which contains
+// K8s manifests to a temporary directory
+func extractContentToManifestsDir(ctx context.Context, cachedPath, digest string, maxSize int64) (string, error) {
+ manifestsDir, err := files.CreateTempDir(os.TempDir())
+ if err != nil {
+ return manifestsDir, err
+ }
+
+ ociReadOnlyStore, err := oci.NewFromTar(ctx, cachedPath)
+ if err != nil {
+ return manifestsDir, err
+ }
+
+ tempDir, err := files.CreateTempDir(os.TempDir())
+ if err != nil {
+ return manifestsDir, err
+ }
+ defer os.RemoveAll(tempDir)
+
+ fs, err := newCompressedLayerFileStore(manifestsDir, tempDir, maxSize)
+ if err != nil {
+ return manifestsDir, err
+ }
+ defer fs.Close()
+
+ // copies the whole artifact to the tempdir, here compressedLayerFileStore.Push will be called
+ _, err = oras.Copy(ctx, ociReadOnlyStore, digest, fs, digest, oras.DefaultCopyOptions)
+ return manifestsDir, err
+}
+
+type compressedLayerExtracterStore struct {
+ *file.Store
+ dest string
+ maxSize int64
+}
+
+func newCompressedLayerFileStore(dest, tempDir string, maxSize int64) (*compressedLayerExtracterStore, error) {
+ f, err := file.New(tempDir)
+ if err != nil {
+ return nil, err
+ }
+
+ return &compressedLayerExtracterStore{f, dest, maxSize}, nil
+}
+
+func isHelmOCI(mediaType string) bool {
+ return mediaType == "application/vnd.cncf.helm.chart.content.v1.tar+gzip"
+}
+
+// Push looks in all the layers of an OCI image. Once it finds a layer that is compressed, it extracts the layer to a tempDir
+// and then renames the temp dir to the directory where the repo-server expects to find k8s manifests.
+func (s *compressedLayerExtracterStore) Push(ctx context.Context, desc imagev1.Descriptor, content io.Reader) error {
+ if isCompressedLayer(desc.MediaType) {
+ srcDir, err := files.CreateTempDir(os.TempDir())
+ if err != nil {
+ return err
+ }
+ defer os.RemoveAll(srcDir)
+
+ if strings.HasSuffix(desc.MediaType, "tar+gzip") {
+ err = files.Untgz(srcDir, content, s.maxSize, false)
+ } else {
+ err = files.Untar(srcDir, content, s.maxSize, false)
+ }
+
+ if err != nil {
+ return fmt.Errorf("could not decompress layer: %w", err)
+ }
+
+ if isHelmOCI(desc.MediaType) {
+ infos, err := os.ReadDir(srcDir)
+ if err != nil {
+ return err
+ }
+
+ // For a Helm chart we expect a single directory
+ if len(infos) != 1 || !infos[0].IsDir() {
+ return fmt.Errorf("expected 1 directory, found %v", len(infos))
+ }
+
+ // For Helm charts, we will move the contents of the unpacked directory to the root of its final destination
+ srcDir, err = securejoin.SecureJoin(srcDir, infos[0].Name())
+ if err != nil {
+ return err
+ }
+ }
+
+ return filepath.WalkDir(srcDir, func(path string, d fs.DirEntry, _ error) error {
+ if path != srcDir {
+ // Calculate the relative path from srcDir
+ relPath, err := filepath.Rel(srcDir, path)
+ if err != nil {
+ return err
+ }
+
+ dstPath, err := securejoin.SecureJoin(s.dest, relPath)
+ if err != nil {
+ return err
+ }
+
+ // Move the file by renaming it
+ if d.IsDir() {
+ info, err := d.Info()
+ if err != nil {
+ return err
+ }
+
+ return os.MkdirAll(dstPath, info.Mode())
+ }
+
+ return os.Rename(path, dstPath)
+ }
+
+ return nil
+ })
+ }
+
+ return s.Store.Push(ctx, desc, content)
+}
+
+func getOCIManifest(ctx context.Context, digest string, repo oras.ReadOnlyTarget) (*imagev1.Manifest, error) {
+ desc, err := repo.Resolve(ctx, digest)
+ if err != nil {
+ return nil, fmt.Errorf("error resolving oci repo from digest, %w", err)
+ }
+
+ rc, err := repo.Fetch(ctx, desc)
+ if err != nil {
+ return nil, fmt.Errorf("error fetching oci manifest for digest %s: %w", digest, err)
+ }
+
+ manifest := imagev1.Manifest{}
+ decoder := json.NewDecoder(rc)
+ if err = decoder.Decode(&manifest); err != nil {
+ return nil, fmt.Errorf("error decoding oci manifest for digest %s: %w", digest, err)
+ }
+
+ return &manifest, nil
+}
diff --git a/util/oci/client_test.go b/util/oci/client_test.go
new file mode 100644
index 0000000000..de73607ea0
--- /dev/null
+++ b/util/oci/client_test.go
@@ -0,0 +1,438 @@
+package oci
+
+import (
+ "archive/tar"
+ "bytes"
+ "compress/gzip"
+ "context"
+ "encoding/json"
+ "errors"
+ "io"
+ "os"
+ "path/filepath"
+ "testing"
+
+ "github.com/opencontainers/go-digest"
+ "github.com/opencontainers/image-spec/specs-go"
+ imagev1 "github.com/opencontainers/image-spec/specs-go/v1"
+ "github.com/stretchr/testify/require"
+ "oras.land/oras-go/v2"
+ "oras.land/oras-go/v2/content"
+ "oras.land/oras-go/v2/content/memory"
+
+ utilio "github.com/argoproj/argo-cd/v3/util/io"
+ "github.com/argoproj/argo-cd/v3/util/io/files"
+)
+
+type layerConf struct {
+ desc imagev1.Descriptor
+ bytes []byte
+}
+
+func generateManifest(t *testing.T, store *memory.Store, layerDescs ...layerConf) string {
+ t.Helper()
+ configBlob := []byte("Hello config")
+ configDesc := content.NewDescriptorFromBytes(imagev1.MediaTypeImageConfig, configBlob)
+
+ var layers []imagev1.Descriptor
+
+ for _, layer := range layerDescs {
+ layers = append(layers, layer.desc)
+ }
+
+ manifestBlob, err := json.Marshal(imagev1.Manifest{
+ Config: configDesc,
+ Layers: layers,
+ Versioned: specs.Versioned{SchemaVersion: 2},
+ })
+ require.NoError(t, err)
+ manifestDesc := content.NewDescriptorFromBytes(imagev1.MediaTypeImageManifest, manifestBlob)
+
+ for _, layer := range layerDescs {
+ require.NoError(t, store.Push(t.Context(), layer.desc, bytes.NewReader(layer.bytes)))
+ }
+
+ require.NoError(t, store.Push(t.Context(), configDesc, bytes.NewReader(configBlob)))
+ require.NoError(t, store.Push(t.Context(), manifestDesc, bytes.NewReader(manifestBlob)))
+ require.NoError(t, store.Tag(t.Context(), manifestDesc, manifestDesc.Digest.String()))
+
+ return manifestDesc.Digest.String()
+}
+
+func createGzippedTarWithContent(t *testing.T, filename, content string) []byte {
+ t.Helper()
+ var buf bytes.Buffer
+ gzw := gzip.NewWriter(&buf)
+ tw := tar.NewWriter(gzw)
+
+ require.NoError(t, tw.WriteHeader(&tar.Header{
+ Name: filename,
+ Mode: 0o644,
+ Size: int64(len(content)),
+ }))
+ _, err := tw.Write([]byte(content))
+ require.NoError(t, err)
+ require.NoError(t, tw.Close())
+ require.NoError(t, gzw.Close())
+
+ return buf.Bytes()
+}
+
+func addFileToDirectory(t *testing.T, dir, filename, content string) {
+ t.Helper()
+
+ filePath := filepath.Join(dir, filename)
+ err := os.WriteFile(filePath, []byte(content), 0o644)
+ require.NoError(t, err)
+}
+
+func Test_nativeOCIClient_Extract(t *testing.T) {
+ cacheDir := utilio.NewRandomizedTempPaths(t.TempDir())
+
+ type fields struct {
+ repoURL string
+ tagsFunc func(context.Context, string) (tags []string, err error)
+ allowedMediaTypes []string
+ }
+ type args struct {
+ manifestMaxExtractedSize int64
+ disableManifestMaxExtractedSize bool
+ digestFunc func(*memory.Store) string
+ postValidationFunc func(string, string, Client, fields, args)
+ }
+ tests := []struct {
+ name string
+ fields fields
+ args args
+ expectedError error
+ }{
+ {
+ name: "extraction fails due to size limit",
+ fields: fields{
+ allowedMediaTypes: []string{imagev1.MediaTypeImageLayerGzip},
+ },
+ args: args{
+ digestFunc: func(store *memory.Store) string {
+ layerBlob := createGzippedTarWithContent(t, "some-path", "some content")
+ return generateManifest(t, store, layerConf{content.NewDescriptorFromBytes(imagev1.MediaTypeImageLayerGzip, layerBlob), layerBlob})
+ },
+ manifestMaxExtractedSize: 10,
+ disableManifestMaxExtractedSize: false,
+ },
+ expectedError: errors.New("cannot extract contents of oci image with revision sha256:1b6dfd71e2b35c2f35dffc39007c2276f3c0e235cbae4c39cba74bd406174e22: failed to perform \"Push\" on destination: could not decompress layer: error while iterating on tar reader: unexpected EOF"),
+ },
+ {
+ name: "extraction fails due to multiple layers",
+ fields: fields{
+ allowedMediaTypes: []string{imagev1.MediaTypeImageLayerGzip},
+ },
+ args: args{
+ digestFunc: func(store *memory.Store) string {
+ layerBlob := createGzippedTarWithContent(t, "some-path", "some content")
+ otherLayerBlob := createGzippedTarWithContent(t, "some-other-path", "some other content")
+ return generateManifest(t, store, layerConf{content.NewDescriptorFromBytes(imagev1.MediaTypeImageLayerGzip, layerBlob), layerBlob}, layerConf{content.NewDescriptorFromBytes(imagev1.MediaTypeImageLayerGzip, otherLayerBlob), otherLayerBlob})
+ },
+ manifestMaxExtractedSize: 1000,
+ disableManifestMaxExtractedSize: false,
+ },
+ expectedError: errors.New("expected only a single oci layer, got 2"),
+ },
+ {
+ name: "extraction fails due to invalid media type",
+ fields: fields{
+ allowedMediaTypes: []string{"application/vnd.different.media.type"},
+ },
+ args: args{
+ digestFunc: func(store *memory.Store) string {
+ layerBlob := "Hello layer"
+ return generateManifest(t, store, layerConf{content.NewDescriptorFromBytes(imagev1.MediaTypeImageLayerGzip, []byte(layerBlob)), []byte(layerBlob)})
+ },
+ manifestMaxExtractedSize: 1000,
+ disableManifestMaxExtractedSize: false,
+ },
+ expectedError: errors.New("oci layer media type application/vnd.oci.image.layer.v1.tar+gzip is not in the list of allowed media types"),
+ },
+ {
+ name: "extraction fails due to non-existent digest",
+ fields: fields{
+ allowedMediaTypes: []string{"application/vnd.cncf.helm.chart.content.v1.tar+gzip"},
+ },
+ args: args{
+ digestFunc: func(_ *memory.Store) string {
+ return "sha256:nonexistentdigest"
+ },
+ manifestMaxExtractedSize: 1000,
+ disableManifestMaxExtractedSize: false,
+ },
+ expectedError: errors.New("error resolving oci repo from digest, sha256:nonexistentdigest: not found"),
+ },
+ {
+ name: "extraction with helm chart",
+ fields: fields{
+ allowedMediaTypes: []string{"application/vnd.cncf.helm.chart.content.v1.tar+gzip"},
+ },
+ args: args{
+ digestFunc: func(store *memory.Store) string {
+ chartDir := t.TempDir()
+ chartName := "mychart"
+
+ parent := filepath.Join(chartDir, "parent")
+ require.NoError(t, os.Mkdir(parent, 0o755))
+
+ chartPath := filepath.Join(parent, chartName)
+ require.NoError(t, os.Mkdir(chartPath, 0o755))
+
+ addFileToDirectory(t, chartPath, "Chart.yaml", "some content")
+
+ temp, err := os.CreateTemp(t.TempDir(), "")
+ require.NoError(t, err)
+ defer temp.Close()
+ _, err = files.Tgz(parent, nil, nil, temp)
+ require.NoError(t, err)
+ _, err = temp.Seek(0, io.SeekStart)
+ require.NoError(t, err)
+ all, err := io.ReadAll(temp)
+
+ require.NoError(t, err)
+
+ return generateManifest(t, store, layerConf{content.NewDescriptorFromBytes("application/vnd.cncf.helm.chart.content.v1.tar+gzip", all), all})
+ },
+ postValidationFunc: func(_, path string, _ Client, _ fields, _ args) {
+ tempDir, err := files.CreateTempDir(os.TempDir())
+ defer os.RemoveAll(tempDir)
+ require.NoError(t, err)
+ chartDir, err := os.ReadDir(path)
+ require.NoError(t, err)
+ require.Len(t, chartDir, 1)
+ require.Equal(t, "Chart.yaml", chartDir[0].Name())
+ chartYaml, err := os.Open(filepath.Join(path, chartDir[0].Name()))
+ require.NoError(t, err)
+ contents, err := io.ReadAll(chartYaml)
+ require.NoError(t, err)
+ require.Equal(t, "some content", string(contents))
+ },
+ manifestMaxExtractedSize: 10000,
+ disableManifestMaxExtractedSize: false,
+ },
+ },
+ {
+ name: "extraction with standard gzip layer",
+ fields: fields{
+ allowedMediaTypes: []string{imagev1.MediaTypeImageLayerGzip},
+ },
+ args: args{
+ digestFunc: func(store *memory.Store) string {
+ layerBlob := createGzippedTarWithContent(t, "foo.yaml", "some content")
+ return generateManifest(t, store, layerConf{content.NewDescriptorFromBytes(imagev1.MediaTypeImageLayerGzip, layerBlob), layerBlob})
+ },
+ postValidationFunc: func(_, path string, _ Client, _ fields, _ args) {
+ manifestDir, err := os.ReadDir(path)
+ require.NoError(t, err)
+ require.Len(t, manifestDir, 1)
+ require.Equal(t, "foo.yaml", manifestDir[0].Name())
+ f, err := os.Open(filepath.Join(path, manifestDir[0].Name()))
+ require.NoError(t, err)
+ contents, err := io.ReadAll(f)
+ require.NoError(t, err)
+ require.Equal(t, "some content", string(contents))
+ },
+ manifestMaxExtractedSize: 1000,
+ disableManifestMaxExtractedSize: false,
+ },
+ },
+ {
+ name: "extraction with standard gzip layer using cache",
+ fields: fields{
+ allowedMediaTypes: []string{imagev1.MediaTypeImageLayerGzip},
+ },
+ args: args{
+ digestFunc: func(store *memory.Store) string {
+ layerBlob := createGzippedTarWithContent(t, "foo.yaml", "some content")
+ return generateManifest(t, store, layerConf{content.NewDescriptorFromBytes(imagev1.MediaTypeImageLayerGzip, layerBlob), layerBlob})
+ },
+ manifestMaxExtractedSize: 1000,
+ disableManifestMaxExtractedSize: false,
+ postValidationFunc: func(sha string, _ string, _ Client, fields fields, args args) {
+ store := memory.New()
+ c := newClientWithLock(fields.repoURL, globalLock, store, fields.tagsFunc, func(_ context.Context) error {
+ return nil
+ }, fields.allowedMediaTypes, WithImagePaths(cacheDir), WithManifestMaxExtractedSize(args.manifestMaxExtractedSize), WithDisableManifestMaxExtractedSize(args.disableManifestMaxExtractedSize))
+ _, gotCloser, err := c.Extract(t.Context(), sha)
+ require.NoError(t, err)
+ require.NoError(t, gotCloser.Close())
+ },
+ },
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ store := memory.New()
+ sha := tt.args.digestFunc(store)
+
+ c := newClientWithLock(tt.fields.repoURL, globalLock, store, tt.fields.tagsFunc, func(_ context.Context) error {
+ return nil
+ }, tt.fields.allowedMediaTypes, WithImagePaths(cacheDir), WithManifestMaxExtractedSize(tt.args.manifestMaxExtractedSize), WithDisableManifestMaxExtractedSize(tt.args.disableManifestMaxExtractedSize))
+ path, gotCloser, err := c.Extract(t.Context(), sha)
+
+ if tt.expectedError != nil {
+ require.EqualError(t, err, tt.expectedError.Error())
+ return
+ }
+
+ require.NoError(t, err)
+ require.NotEmpty(t, path)
+ require.NotNil(t, gotCloser)
+
+ exists, err := fileExists(path)
+ require.True(t, exists)
+ require.NoError(t, err)
+
+ if tt.args.postValidationFunc != nil {
+ tt.args.postValidationFunc(sha, path, c, tt.fields, tt.args)
+ }
+
+ require.NoError(t, gotCloser.Close())
+
+ exists, err = fileExists(path)
+ require.False(t, exists)
+ require.NoError(t, err)
+ })
+ }
+}
+
+func Test_nativeOCIClient_ResolveRevision(t *testing.T) {
+ store := memory.New()
+ data := []byte("")
+ descriptor := imagev1.Descriptor{
+ MediaType: "",
+ Digest: digest.FromBytes(data),
+ }
+ require.NoError(t, store.Push(t.Context(), descriptor, bytes.NewReader(data)))
+ require.NoError(t, store.Tag(t.Context(), descriptor, "latest"))
+ require.NoError(t, store.Tag(t.Context(), descriptor, "1.2.0"))
+ require.NoError(t, store.Tag(t.Context(), descriptor, "v1.2.0"))
+ require.NoError(t, store.Tag(t.Context(), descriptor, descriptor.Digest.String()))
+
+ type fields struct {
+ repoURL string
+ repo oras.ReadOnlyTarget
+ tagsFunc func(context.Context, string) (tags []string, err error)
+ allowedMediaTypes []string
+ }
+ tests := []struct {
+ name string
+ fields fields
+ revision string
+ noCache bool
+ expectedDigest string
+ expectedError error
+ }{
+ {
+ name: "resolve semantic version constraint",
+ revision: "^1.0.0",
+ fields: fields{repo: store, tagsFunc: func(context.Context, string) (tags []string, err error) {
+ return []string{"1.0.0", "1.1.0", "1.2.0", "2.0.0"}, nil
+ }},
+ expectedDigest: descriptor.Digest.String(),
+ },
+ {
+ name: "resolve exact version",
+ revision: "1.2.0",
+ fields: fields{repo: store, tagsFunc: func(context.Context, string) (tags []string, err error) {
+ return []string{"1.0.0", "1.1.0", "1.2.0", "2.0.0"}, nil
+ }},
+ expectedDigest: descriptor.Digest.String(),
+ },
+ {
+ name: "resolve digest directly",
+ revision: descriptor.Digest.String(),
+ fields: fields{repo: store, tagsFunc: func(context.Context, string) (tags []string, err error) {
+ return []string{}, errors.New("this should not be invoked")
+ }},
+ expectedDigest: descriptor.Digest.String(),
+ },
+ {
+ name: "no matching version for constraint",
+ revision: "^3.0.0",
+ fields: fields{repo: store, tagsFunc: func(context.Context, string) (tags []string, err error) {
+ return []string{"1.0.0", "1.1.0", "1.2.0", "2.0.0"}, nil
+ }},
+ expectedError: errors.New("no version for constraints: version matching constraint not found in 4 tags"),
+ },
+ {
+ name: "error fetching tags",
+ revision: "^1.0.0",
+ fields: fields{repo: store, tagsFunc: func(context.Context, string) (tags []string, err error) {
+ return []string{}, errors.New("some random error")
+ }},
+ expectedError: errors.New("error fetching tags: failed to get tags: some random error"),
+ },
+ {
+ name: "error resolving digest",
+ revision: "sha256:abc123",
+ fields: fields{repo: store, tagsFunc: func(context.Context, string) (tags []string, err error) {
+ return []string{"1.0.0", "1.1.0", "1.2.0", "2.0.0"}, nil
+ }},
+ expectedError: errors.New("no version for constraints: failed to determine semver constraint: improper constraint: sha256:abc123"),
+ },
+ {
+ name: "resolve latest tag",
+ revision: "latest",
+ fields: fields{repo: store, tagsFunc: func(context.Context, string) (tags []string, err error) {
+ return []string{"1.0.0", "1.1.0", "1.2.0", "2.0.0", "latest"}, nil
+ }},
+ expectedDigest: descriptor.Digest.String(),
+ },
+ {
+ name: "resolve with complex semver constraint",
+ revision: ">=1.0.0 <2.0.0",
+ fields: fields{repo: store, tagsFunc: func(context.Context, string) (tags []string, err error) {
+ return []string{"0.9.0", "1.0.0", "1.1.0", "1.2.0", "2.0.0", "2.1.0"}, nil
+ }},
+ expectedDigest: descriptor.Digest.String(),
+ },
+ {
+ name: "resolve with only non-semver tags",
+ revision: "^1.0.0",
+ fields: fields{repo: store, tagsFunc: func(context.Context, string) (tags []string, err error) {
+ return []string{"latest", "stable", "prod", "dev"}, nil
+ }},
+ expectedError: errors.New("no version for constraints: version matching constraint not found in 4 tags"),
+ },
+ {
+ name: "resolve explicit tag",
+ revision: "v1.2.0",
+ fields: fields{repo: store, tagsFunc: func(context.Context, string) (tags []string, err error) {
+ return []string{}, errors.New("this should not be invoked")
+ }},
+ expectedError: nil,
+ expectedDigest: descriptor.Digest.String(),
+ },
+ {
+ name: "resolve with empty tag list",
+ revision: "^1.0.0",
+ fields: fields{repo: store, tagsFunc: func(context.Context, string) (tags []string, err error) {
+ return []string{}, nil
+ }},
+ expectedError: errors.New("no version for constraints: version matching constraint not found in 0 tags"),
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ c := newClientWithLock(tt.fields.repoURL, globalLock, tt.fields.repo, tt.fields.tagsFunc, func(_ context.Context) error {
+ return nil
+ }, tt.fields.allowedMediaTypes)
+ got, err := c.ResolveRevision(t.Context(), tt.revision, tt.noCache)
+ if tt.expectedError != nil {
+ require.EqualError(t, err, tt.expectedError.Error())
+ return
+ }
+
+ require.NoError(t, err)
+ if got != tt.expectedDigest {
+ t.Errorf("ResolveRevision() got = %v, expectedDigest %v", got, tt.expectedDigest)
+ }
+ })
+ }
+}