A container registry that uses the AT Protocol for manifest storage and S3 for blob storage. atcr.io
docker container atproto go
72
fork

Configure Feed

Select the types of activity you want to include in your feed.

implement a POC for vulnerability scans using syft and grype

+5028 -185
+27
.env.hold.example
··· 112 112 HOLD_OWNER=did:plc:your-did-here 113 113 114 114 # ============================================================================== 115 + # Scanner Configuration (SBOM & Vulnerability Scanning) 116 + # ============================================================================== 117 + 118 + # Enable automatic SBOM generation and vulnerability scanning on image push 119 + # Default: true 120 + HOLD_SBOM_ENABLED=true 121 + 122 + # Number of concurrent scanner worker threads 123 + # Default: 2 124 + HOLD_SBOM_WORKERS=2 125 + 126 + # Enable vulnerability scanning with Grype 127 + # If false, only SBOM generation (Syft) will run 128 + # Default: true 129 + HOLD_VULN_ENABLED=true 130 + 131 + # Path to Grype vulnerability database 132 + # Database is auto-downloaded and cached at this location 133 + # Default: /var/lib/atcr-hold/grype-db 134 + # HOLD_VULN_DB_PATH=/var/lib/atcr-hold/grype-db 135 + 136 + # How often to update vulnerability database 137 + # Examples: 24h, 12h, 48h 138 + # Default: 24h 139 + # HOLD_VULN_DB_UPDATE_INTERVAL=24h 140 + 141 + # ============================================================================== 115 142 # Logging Configuration 116 143 # ============================================================================== 117 144
+6
cmd/appview/serve.go
··· 376 376 slog.Info("UI enabled", "home", "/", "settings", "/settings") 377 377 } 378 378 379 + // API endpoint for vulnerability details 380 + if uiSessionStore != nil { 381 + repoHandler := &uihandlers.RepositoryPageHandler{} 382 + mainRouter.Get("/api/vulnerabilities", repoHandler.HandleVulnerabilityDetails) 383 + } 384 + 379 385 // Mount OAuth endpoints 380 386 mainRouter.Get("/auth/oauth/authorize", oauthServer.ServeAuthorize) 381 387 mainRouter.Get("/auth/oauth/callback", oauthServer.ServeCallback)
+27 -1
cmd/hold/main.go
··· 13 13 "atcr.io/pkg/hold" 14 14 "atcr.io/pkg/hold/oci" 15 15 "atcr.io/pkg/hold/pds" 16 + "atcr.io/pkg/hold/scanner" 16 17 "atcr.io/pkg/logging" 17 18 "atcr.io/pkg/s3" 18 19 ··· 111 112 // Create PDS XRPC handler (ATProto endpoints) 112 113 xrpcHandler = pds.NewXRPCHandler(holdPDS, *s3Service, driver, broadcaster, nil) 113 114 115 + // Initialize scanner queue if scanning is enabled 116 + // Use interface type to ensure proper nil checking (avoid typed nil pointer issue) 117 + var scanQueue oci.ScanQueue 118 + if cfg.Scanner.Enabled { 119 + slog.Info("Initializing vulnerability scanner", 120 + "workers", cfg.Scanner.Workers, 121 + "vulnEnabled", cfg.Scanner.VulnEnabled, 122 + "vulnDBPath", cfg.Scanner.VulnDBPath) 123 + 124 + // Create scanner worker 125 + scanWorker := scanner.NewWorker(cfg, driver, holdPDS) 126 + 127 + // Create and start scanner queue (buffer size = workers * 2 for some headroom) 128 + bufferSize := cfg.Scanner.Workers * 2 129 + concreteQueue := scanner.NewQueue(cfg.Scanner.Workers, bufferSize) 130 + scanWorker.Start(concreteQueue) 131 + 132 + // Assign to interface variable (ensures proper nil behavior) 133 + scanQueue = concreteQueue 134 + 135 + slog.Info("Scanner queue initialized successfully") 136 + } else { 137 + slog.Info("SBOM/vulnerability scanning disabled") 138 + } 139 + 114 140 // Create OCI XRPC handler (multipart upload endpoints) 115 - ociHandler = oci.NewXRPCHandler(holdPDS, *s3Service, driver, cfg.Server.DisablePresignedURLs, cfg.Registration.EnableBlueskyPosts, nil) 141 + ociHandler = oci.NewXRPCHandler(holdPDS, *s3Service, driver, cfg.Server.DisablePresignedURLs, cfg.Registration.EnableBlueskyPosts, nil, scanQueue) 116 142 } 117 143 118 144 // Setup HTTP routes with chi router
+34
deploy/.env.prod.template
··· 101 101 HOLD_BLUESKY_POSTS_ENABLED=true 102 102 103 103 # ============================================================================== 104 + # Scanner Configuration (SBOM & Vulnerability Scanning) 105 + # ============================================================================== 106 + 107 + # Enable automatic SBOM generation and vulnerability scanning on image push 108 + # When enabled, the hold service will: 109 + # 1. Generate SBOM (Software Bill of Materials) using Syft 110 + # 2. Scan for vulnerabilities using Grype 111 + # 3. Store results as ORAS artifacts (OCI referrers pattern) 112 + # 4. Display vulnerability counts on repository pages in AppView 113 + # 114 + # Default: true 115 + HOLD_SBOM_ENABLED=true 116 + 117 + # Number of concurrent scanner worker threads 118 + # Increase for faster scanning on multi-core systems 119 + # Default: 2 120 + HOLD_SBOM_WORKERS=2 121 + 122 + # Enable vulnerability scanning with Grype 123 + # If false, only SBOM generation (Syft) will run 124 + # Default: true 125 + HOLD_VULN_ENABLED=true 126 + 127 + # Path to Grype vulnerability database 128 + # Database is auto-downloaded and cached at this location on first run 129 + # Default: /var/lib/atcr-hold/grype-db 130 + HOLD_VULN_DB_PATH=/var/lib/atcr-hold/grype-db 131 + 132 + # How often to update vulnerability database 133 + # Examples: 24h, 12h, 48h 134 + # Default: 24h 135 + HOLD_VULN_DB_UPDATE_INTERVAL=24h 136 + 137 + # ============================================================================== 104 138 # S3/UpCloud Object Storage Configuration 105 139 # ============================================================================== 106 140
+7
deploy/docker-compose.prod.yml
··· 114 114 S3_ENDPOINT: ${S3_ENDPOINT:-} 115 115 S3_REGION_ENDPOINT: ${S3_REGION_ENDPOINT:-} 116 116 117 + # Scanner configuration (SBOM & Vulnerability Scanning) 118 + HOLD_SBOM_ENABLED: ${HOLD_SBOM_ENABLED:-true} 119 + HOLD_SBOM_WORKERS: ${HOLD_SBOM_WORKERS:-2} 120 + HOLD_VULN_ENABLED: ${HOLD_VULN_ENABLED:-true} 121 + HOLD_VULN_DB_PATH: ${HOLD_VULN_DB_PATH:-/var/lib/atcr-hold/grype-db} 122 + HOLD_VULN_DB_UPDATE_INTERVAL: ${HOLD_VULN_DB_UPDATE_INTERVAL:-24h} 123 + 117 124 # Logging 118 125 ATCR_LOG_LEVEL: ${ATCR_LOG_LEVEL:-debug} 119 126 ATCR_LOG_FORMATTER: ${ATCR_LOG_FORMATTER:-text}
+4
docker-compose.yml
··· 50 50 # STORAGE_ROOT_DIR: /var/lib/atcr/hold 51 51 TEST_MODE: true 52 52 # DISABLE_PRESIGNED_URLS: true 53 + # Scanner configuration 54 + HOLD_SBOM_ENABLED: true 55 + HOLD_SBOM_WORKERS: 2 56 + HOLD_VULN_ENABLED: true 53 57 # Logging 54 58 ATCR_LOG_LEVEL: debug 55 59 # Storage config comes from env_file (STORAGE_DRIVER, AWS_*, S3_*)
+287 -35
go.mod
··· 1 1 module atcr.io 2 2 3 - go 1.24.7 3 + go 1.24.9 4 4 5 5 require ( 6 + github.com/anchore/grype v0.102.0 7 + github.com/anchore/syft v1.36.0 6 8 github.com/aws/aws-sdk-go v1.55.5 7 9 github.com/bluesky-social/indigo v0.0.0-20251021193747-543ab1124beb 8 10 github.com/distribution/distribution/v3 v3.0.0 ··· 23 25 github.com/microcosm-cc/bluemonday v1.0.27 24 26 github.com/multiformats/go-multihash v0.2.3 25 27 github.com/opencontainers/go-digest v1.0.0 26 - github.com/spf13/cobra v1.8.0 27 - github.com/stretchr/testify v1.10.0 28 + github.com/spf13/cobra v1.10.1 29 + github.com/stretchr/testify v1.11.1 28 30 github.com/whyrusleeping/cbor-gen v0.3.1 29 31 github.com/yuin/goldmark v1.7.13 30 - go.opentelemetry.io/otel v1.32.0 32 + go.opentelemetry.io/otel v1.37.0 31 33 go.yaml.in/yaml/v4 v4.0.0-rc.2 32 - golang.org/x/crypto v0.39.0 33 - golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 34 - gorm.io/gorm v1.25.9 34 + golang.org/x/crypto v0.43.0 35 + golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da 36 + gorm.io/gorm v1.31.0 35 37 ) 36 38 37 39 require ( 40 + cel.dev/expr v0.24.0 // indirect 41 + cloud.google.com/go v0.121.3 // indirect 42 + cloud.google.com/go/auth v0.16.2 // indirect 43 + cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect 44 + cloud.google.com/go/compute/metadata v0.7.0 // indirect 45 + cloud.google.com/go/iam v1.5.2 // indirect 46 + cloud.google.com/go/monitoring v1.24.2 // indirect 47 + cloud.google.com/go/storage v1.55.0 // indirect 48 + dario.cat/mergo v1.0.2 // indirect 49 + github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 // indirect 50 + github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20250520111509-a70c2aa677fa // indirect 51 + github.com/BurntSushi/toml v1.5.0 // indirect 52 + github.com/CycloneDX/cyclonedx-go v0.9.3 // indirect 53 + github.com/DataDog/zstd v1.5.7 // indirect 54 + github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0 // indirect 55 + github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.53.0 // indirect 56 + github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.53.0 // indirect 57 + github.com/Intevation/gval v1.3.0 // indirect 58 + github.com/Intevation/jsonpath v0.2.1 // indirect 59 + github.com/Masterminds/goutils v1.1.1 // indirect 60 + github.com/Masterminds/semver/v3 v3.4.0 // indirect 61 + github.com/Masterminds/sprig/v3 v3.3.0 // indirect 62 + github.com/Microsoft/go-winio v0.6.2 // indirect 63 + github.com/Microsoft/hcsshim v0.13.0 // indirect 64 + github.com/OneOfOne/xxhash v1.2.8 // indirect 65 + github.com/ProtonMail/go-crypto v1.3.0 // indirect 38 66 github.com/RussellLuo/slidingwindow v0.0.0-20200528002341-535bb99d338b // indirect 67 + github.com/STARRY-S/zip v0.2.3 // indirect 68 + github.com/acobaugh/osrelease v0.1.0 // indirect 69 + github.com/adrg/xdg v0.5.3 // indirect 70 + github.com/agext/levenshtein v1.2.3 // indirect 71 + github.com/anchore/archiver/v3 v3.5.3-0.20241210171143-5b1d8d1c7c51 // indirect 72 + github.com/anchore/clio v0.0.0-20250715152405-a0fa658e5084 // indirect 73 + github.com/anchore/fangs v0.0.0-20250716230140-94c22408c232 // indirect 74 + github.com/anchore/go-collections v0.0.0-20251016125210-a3c352120e8c // indirect 75 + github.com/anchore/go-homedir v0.0.0-20250319154043-c29668562e4d // indirect 76 + github.com/anchore/go-logger v0.0.0-20250318195838-07ae343dd722 // indirect 77 + github.com/anchore/go-lzo v0.1.0 // indirect 78 + github.com/anchore/go-macholibre v0.0.0-20250320151634-807da7ad2331 // indirect 79 + github.com/anchore/go-rpmdb v0.0.0-20250516171929-f77691e1faec // indirect 80 + github.com/anchore/go-struct-converter v0.0.0-20250211213226-cce56d595160 // indirect 81 + github.com/anchore/go-sync v0.0.0-20250714163430-add63db73ad1 // indirect 82 + github.com/anchore/go-version v1.2.2-0.20210903204242-51efa5b487c4 // indirect 83 + github.com/anchore/packageurl-go v0.1.1-0.20250220190351-d62adb6e1115 // indirect 84 + github.com/anchore/stereoscope v0.1.11 // indirect 85 + github.com/andybalholm/brotli v1.2.0 // indirect 86 + github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect 87 + github.com/aquasecurity/go-pep440-version v0.0.1 // indirect 88 + github.com/aquasecurity/go-version v0.0.1 // indirect 89 + github.com/aws/aws-sdk-go-v2 v1.36.5 // indirect 90 + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10 // indirect 91 + github.com/aws/aws-sdk-go-v2/config v1.29.17 // indirect 92 + github.com/aws/aws-sdk-go-v2/credentials v1.17.70 // indirect 93 + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.32 // indirect 94 + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.36 // indirect 95 + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.36 // indirect 96 + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect 97 + github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34 // indirect 98 + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.4 // indirect 99 + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.2 // indirect 100 + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.17 // indirect 101 + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15 // indirect 102 + github.com/aws/aws-sdk-go-v2/service/s3 v1.80.1 // indirect 103 + github.com/aws/aws-sdk-go-v2/service/sso v1.25.5 // indirect 104 + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.3 // indirect 105 + github.com/aws/aws-sdk-go-v2/service/sts v1.34.0 // indirect 106 + github.com/aws/smithy-go v1.22.4 // indirect 107 + github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect 39 108 github.com/aymerick/douceur v0.2.0 // indirect 109 + github.com/becheran/wildmatch-go v1.0.0 // indirect 40 110 github.com/beorn7/perks v1.0.1 // indirect 111 + github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect 112 + github.com/bitnami/go-version v0.0.0-20250505154626-452e8c5ee607 // indirect 113 + github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb // indirect 114 + github.com/bmatcuk/doublestar/v2 v2.0.4 // indirect 115 + github.com/bmatcuk/doublestar/v4 v4.9.1 // indirect 116 + github.com/bodgit/plumbing v1.3.0 // indirect 117 + github.com/bodgit/sevenzip v1.6.1 // indirect 118 + github.com/bodgit/windows v1.0.1 // indirect 41 119 github.com/bshuster-repo/logrus-logstash-hook v1.0.0 // indirect 42 120 github.com/cenkalti/backoff/v4 v4.3.0 // indirect 43 121 github.com/cespare/xxhash/v2 v2.3.0 // indirect 122 + github.com/charmbracelet/colorprofile v0.3.1 // indirect 123 + github.com/charmbracelet/lipgloss v1.1.0 // indirect 124 + github.com/charmbracelet/x/ansi v0.10.1 // indirect 125 + github.com/charmbracelet/x/cellbuf v0.0.13 // indirect 126 + github.com/charmbracelet/x/term v0.2.1 // indirect 127 + github.com/cloudflare/circl v1.6.1 // indirect 128 + github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443 // indirect 129 + github.com/containerd/cgroups/v3 v3.0.3 // indirect 130 + github.com/containerd/containerd v1.7.28 // indirect 131 + github.com/containerd/containerd/api v1.9.0 // indirect 132 + github.com/containerd/continuity v0.4.5 // indirect 133 + github.com/containerd/errdefs v1.0.0 // indirect 134 + github.com/containerd/errdefs/pkg v0.3.0 // indirect 135 + github.com/containerd/fifo v1.1.0 // indirect 136 + github.com/containerd/log v0.1.0 // indirect 137 + github.com/containerd/platforms v0.2.1 // indirect 138 + github.com/containerd/stargz-snapshotter/estargz v0.16.3 // indirect 139 + github.com/containerd/ttrpc v1.2.7 // indirect 140 + github.com/containerd/typeurl/v2 v2.2.3 // indirect 44 141 github.com/coreos/go-systemd/v22 v22.5.0 // indirect 45 - github.com/davecgh/go-spew v1.1.1 // indirect 142 + github.com/cyphar/filepath-securejoin v0.4.1 // indirect 143 + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect 144 + github.com/deitch/magic v0.0.0-20240306090643-c67ab88f10cb // indirect 46 145 github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect 47 - github.com/docker/docker-credential-helpers v0.8.2 // indirect 48 - github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c // indirect 146 + github.com/diskfs/go-diskfs v1.7.0 // indirect 147 + github.com/docker/cli v28.5.1+incompatible // indirect 148 + github.com/docker/distribution v2.8.3+incompatible // indirect 149 + github.com/docker/docker v28.5.1+incompatible // indirect 150 + github.com/docker/docker-credential-helpers v0.9.3 // indirect 151 + github.com/docker/go-connections v0.6.0 // indirect 152 + github.com/docker/go-events v0.0.0-20250114142523-c867878c5e32 // indirect 49 153 github.com/docker/go-metrics v0.0.1 // indirect 154 + github.com/docker/go-units v0.5.0 // indirect 155 + github.com/dsnet/compress v0.0.2-0.20230904184137-39efe44ab707 // indirect 156 + github.com/dustin/go-humanize v1.0.1 // indirect 157 + github.com/elliotchance/phpserialize v1.4.0 // indirect 158 + github.com/emirpasic/gods v1.18.1 // indirect 159 + github.com/envoyproxy/go-control-plane/envoy v1.32.4 // indirect 160 + github.com/envoyproxy/protoc-gen-validate v1.2.1 // indirect 161 + github.com/facebookincubator/nvdtools v0.1.5 // indirect 162 + github.com/fatih/color v1.18.0 // indirect 163 + github.com/felixge/fgprof v0.9.5 // indirect 50 164 github.com/felixge/httpsnoop v1.0.4 // indirect 165 + github.com/fsnotify/fsnotify v1.9.0 // indirect 166 + github.com/gabriel-vasile/mimetype v1.4.10 // indirect 167 + github.com/github/go-spdx/v2 v2.3.4 // indirect 168 + github.com/glebarez/go-sqlite v1.22.0 // indirect 169 + github.com/glebarez/sqlite v1.11.0 // indirect 170 + github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect 171 + github.com/go-git/go-billy/v5 v5.6.2 // indirect 172 + github.com/go-git/go-git/v5 v5.16.3 // indirect 51 173 github.com/go-jose/go-jose/v4 v4.1.2 // indirect 52 - github.com/go-logr/logr v1.4.2 // indirect 174 + github.com/go-logr/logr v1.4.3 // indirect 53 175 github.com/go-logr/stdr v1.2.2 // indirect 176 + github.com/go-restruct/restruct v1.2.0-alpha // indirect 177 + github.com/go-viper/mapstructure/v2 v2.4.0 // indirect 178 + github.com/goccy/go-yaml v1.18.0 // indirect 54 179 github.com/gocql/gocql v1.7.0 // indirect 180 + github.com/gocsaf/csaf/v3 v3.3.0 // indirect 55 181 github.com/gogo/protobuf v1.3.2 // indirect 56 - github.com/golang/snappy v0.0.4 // indirect 182 + github.com/gohugoio/hashstructure v0.6.0 // indirect 183 + github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect 184 + github.com/golang/snappy v1.0.0 // indirect 57 185 github.com/google/go-cmp v0.7.0 // indirect 186 + github.com/google/go-containerregistry v0.20.6 // indirect 58 187 github.com/google/go-querystring v1.1.0 // indirect 188 + github.com/google/licensecheck v0.3.1 // indirect 189 + github.com/google/pprof v0.0.0-20250630185457-6e76a2b096b5 // indirect 190 + github.com/google/s2a-go v0.1.9 // indirect 191 + github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect 192 + github.com/googleapis/gax-go/v2 v2.15.0 // indirect 193 + github.com/gookit/color v1.6.0 // indirect 59 194 github.com/gorilla/css v1.0.1 // indirect 60 195 github.com/gorilla/handlers v1.5.2 // indirect 61 196 github.com/gorilla/mux v1.8.1 // indirect 62 - github.com/grpc-ecosystem/grpc-gateway/v2 v2.23.0 // indirect 197 + github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0 // indirect 63 198 github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed // indirect 199 + github.com/hako/durafmt v0.0.0-20210608085754-5c1018a4e16b // indirect 200 + github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.65 // indirect 201 + github.com/hashicorp/errwrap v1.1.0 // indirect 64 202 github.com/hashicorp/go-cleanhttp v0.5.2 // indirect 203 + github.com/hashicorp/go-getter v1.8.2 // indirect 204 + github.com/hashicorp/go-multierror v1.1.1 // indirect 65 205 github.com/hashicorp/go-retryablehttp v0.7.5 // indirect 206 + github.com/hashicorp/go-version v1.7.0 // indirect 66 207 github.com/hashicorp/golang-lru v1.0.2 // indirect 67 208 github.com/hashicorp/golang-lru/arc/v2 v2.0.6 // indirect 68 209 github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect 210 + github.com/hashicorp/hcl/v2 v2.24.0 // indirect 211 + github.com/huandu/xstrings v1.5.0 // indirect 212 + github.com/iancoleman/strcase v0.3.0 // indirect 69 213 github.com/inconshreveable/mousetrap v1.1.0 // indirect 70 214 github.com/ipfs/bbloom v0.0.4 // indirect 71 215 github.com/ipfs/go-blockservice v0.5.2 // indirect ··· 86 230 github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect 87 231 github.com/jackc/pgx/v5 v5.5.0 // indirect 88 232 github.com/jackc/puddle/v2 v2.2.1 // indirect 233 + github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect 89 234 github.com/jbenet/goprocess v0.1.4 // indirect 235 + github.com/jinzhu/copier v0.4.0 // indirect 90 236 github.com/jinzhu/inflection v1.0.0 // indirect 91 237 github.com/jinzhu/now v1.1.5 // indirect 92 238 github.com/jmespath/go-jmespath v0.4.0 // indirect 239 + github.com/kastenhq/goversion v0.0.0-20230811215019-93b2f8823953 // indirect 240 + github.com/kevinburke/ssh_config v1.2.0 // indirect 93 241 github.com/klauspost/cpuid/v2 v2.2.7 // indirect 242 + github.com/klauspost/pgzip v1.2.6 // indirect 243 + github.com/knqyf263/go-apk-version v0.0.0-20200609155635-041fdbb8563f // indirect 244 + github.com/knqyf263/go-deb-version v0.0.0-20241115132648-6f4aee6ccd23 // indirect 245 + github.com/lucasb-eyer/go-colorful v1.2.0 // indirect 246 + github.com/masahiro331/go-mvn-version v0.0.0-20250131095131-f4974fa13b8a // indirect 247 + github.com/mattn/go-colorable v0.1.14 // indirect 94 248 github.com/mattn/go-isatty v0.0.20 // indirect 249 + github.com/mattn/go-runewidth v0.0.16 // indirect 250 + github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect 251 + github.com/mholt/archives v0.1.5 // indirect 252 + github.com/mikelolasagasti/xz v1.0.1 // indirect 253 + github.com/minio/minlz v1.0.1 // indirect 95 254 github.com/minio/sha256-simd v1.0.1 // indirect 255 + github.com/mitchellh/copystructure v1.2.0 // indirect 256 + github.com/mitchellh/go-homedir v1.1.0 // indirect 257 + github.com/mitchellh/go-wordwrap v1.0.1 // indirect 258 + github.com/mitchellh/reflectwalk v1.0.2 // indirect 259 + github.com/moby/docker-image-spec v1.3.1 // indirect 260 + github.com/moby/locker v1.0.1 // indirect 261 + github.com/moby/sys/mountinfo v0.7.2 // indirect 262 + github.com/moby/sys/sequential v0.6.0 // indirect 263 + github.com/moby/sys/signal v0.7.1 // indirect 264 + github.com/moby/sys/user v0.4.0 // indirect 265 + github.com/moby/sys/userns v0.1.0 // indirect 96 266 github.com/mr-tron/base58 v1.2.0 // indirect 267 + github.com/muesli/termenv v0.16.0 // indirect 97 268 github.com/multiformats/go-base32 v0.1.0 // indirect 98 269 github.com/multiformats/go-base36 v0.2.0 // indirect 99 270 github.com/multiformats/go-multibase v0.2.0 // indirect 100 271 github.com/multiformats/go-varint v0.0.7 // indirect 101 272 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect 102 - github.com/opencontainers/image-spec v1.1.0 // indirect 273 + github.com/ncruces/go-strftime v0.1.9 // indirect 274 + github.com/nix-community/go-nix v0.0.0-20250101154619-4bdde671e0a1 // indirect 275 + github.com/nwaples/rardecode v1.1.3 // indirect 276 + github.com/nwaples/rardecode/v2 v2.2.0 // indirect 277 + github.com/olekukonko/errors v1.1.0 // indirect 278 + github.com/olekukonko/ll v0.0.9 // indirect 279 + github.com/olekukonko/tablewriter v1.1.0 // indirect 280 + github.com/opencontainers/image-spec v1.1.1 // indirect 281 + github.com/opencontainers/runtime-spec v1.2.1 // indirect 282 + github.com/opencontainers/selinux v1.12.0 // indirect 103 283 github.com/opentracing/opentracing-go v1.2.0 // indirect 104 - github.com/pmezard/go-difflib v1.0.0 // indirect 284 + github.com/openvex/go-vex v0.2.7 // indirect 285 + github.com/package-url/packageurl-go v0.1.3 // indirect 286 + github.com/pandatix/go-cvss v0.6.2 // indirect 287 + github.com/pborman/indent v1.2.1 // indirect 288 + github.com/pelletier/go-toml v1.9.5 // indirect 289 + github.com/pelletier/go-toml/v2 v2.2.4 // indirect 290 + github.com/pierrec/lz4/v4 v4.1.22 // indirect 291 + github.com/pjbgf/sha1cd v0.4.0 // indirect 292 + github.com/pkg/errors v0.9.1 // indirect 293 + github.com/pkg/profile v1.7.0 // indirect 294 + github.com/pkg/xattr v0.4.12 // indirect 295 + github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect 296 + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect 105 297 github.com/polydawn/refmt v0.89.1-0.20221221234430-40501e09de1f // indirect 106 298 github.com/prometheus/client_golang v1.20.5 // indirect 107 299 github.com/prometheus/client_model v0.6.1 // indirect ··· 110 302 github.com/redis/go-redis/extra/rediscmd/v9 v9.0.5 // indirect 111 303 github.com/redis/go-redis/extra/redisotel/v9 v9.0.5 // indirect 112 304 github.com/redis/go-redis/v9 v9.7.3 // indirect 113 - github.com/sirupsen/logrus v1.9.3 // indirect 305 + github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect 306 + github.com/rivo/uniseg v0.4.7 // indirect 307 + github.com/rust-secure-code/go-rustaudit v0.0.0-20250226111315-e20ec32e963c // indirect 308 + github.com/sagikazarmark/locafero v0.9.0 // indirect 309 + github.com/saintfish/chardet v0.0.0-20230101081208-5e3ef4b5456d // indirect 310 + github.com/santhosh-tekuri/jsonschema/v6 v6.0.2 // indirect 311 + github.com/sassoftware/go-rpmutils v0.4.0 // indirect 312 + github.com/scylladb/go-set v1.0.3-0.20200225121959-cc7b2070d91e // indirect 313 + github.com/sergi/go-diff v1.4.0 // indirect 314 + github.com/shopspring/decimal v1.4.0 // indirect 315 + github.com/sirupsen/logrus v1.9.4-0.20230606125235-dd1b4c2e81af // indirect 316 + github.com/skeema/knownhosts v1.3.1 // indirect 317 + github.com/sorairolake/lzip-go v0.3.8 // indirect 318 + github.com/sourcegraph/conc v0.3.0 // indirect 114 319 github.com/spaolacci/murmur3 v1.1.0 // indirect 115 - github.com/spf13/pflag v1.0.5 // indirect 320 + github.com/spdx/gordf v0.0.0-20250128162952-000978ccd6fb // indirect 321 + github.com/spdx/tools-golang v0.5.5 // indirect 322 + github.com/spf13/afero v1.15.0 // indirect 323 + github.com/spf13/cast v1.9.2 // indirect 324 + github.com/spf13/pflag v1.0.9 // indirect 325 + github.com/spf13/viper v1.20.1 // indirect 326 + github.com/spiffe/go-spiffe/v2 v2.5.0 // indirect 327 + github.com/subosito/gotenv v1.6.0 // indirect 328 + github.com/sylabs/sif/v2 v2.22.0 // indirect 329 + github.com/sylabs/squashfs v1.0.6 // indirect 330 + github.com/therootcompany/xz v1.0.1 // indirect 331 + github.com/ulikunitz/xz v0.5.15 // indirect 332 + github.com/vbatts/go-mtree v0.6.0 // indirect 333 + github.com/vbatts/tar-split v0.12.1 // indirect 334 + github.com/vifraa/gopom v1.0.0 // indirect 335 + github.com/wagoodman/go-partybus v0.0.0-20230516145632-8ccac152c651 // indirect 336 + github.com/wagoodman/go-progress v0.0.0-20230925121702-07e42b3cdba0 // indirect 337 + github.com/xanzy/ssh-agent v0.3.3 // indirect 338 + github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect 339 + github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect 340 + github.com/zclconf/go-cty v1.16.3 // indirect 341 + github.com/zeebo/errs v1.4.0 // indirect 116 342 gitlab.com/yawning/secp256k1-voi v0.0.0-20230925100816-f2616030848b // indirect 117 343 gitlab.com/yawning/tuplehash v0.0.0-20230713102510-df83abbf9a02 // indirect 344 + go.etcd.io/bbolt v1.4.2 // indirect 345 + go.opencensus.io v0.24.0 // indirect 346 + go.opentelemetry.io/auto/sdk v1.1.0 // indirect 118 347 go.opentelemetry.io/contrib/bridges/prometheus v0.57.0 // indirect 348 + go.opentelemetry.io/contrib/detectors/gcp v1.37.0 // indirect 119 349 go.opentelemetry.io/contrib/exporters/autoexport v0.57.0 // indirect 120 - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.57.0 // indirect 350 + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.62.0 // indirect 351 + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 // indirect 121 352 go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.8.0 // indirect 122 353 go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.8.0 // indirect 123 354 go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.32.0 // indirect 124 355 go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.32.0 // indirect 125 - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.32.0 // indirect 356 + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.33.0 // indirect 126 357 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.32.0 // indirect 127 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.32.0 // indirect 358 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.33.0 // indirect 128 359 go.opentelemetry.io/otel/exporters/prometheus v0.54.0 // indirect 129 360 go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.8.0 // indirect 130 - go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.32.0 // indirect 361 + go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0 // indirect 131 362 go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.32.0 // indirect 132 363 go.opentelemetry.io/otel/log v0.8.0 // indirect 133 - go.opentelemetry.io/otel/metric v1.32.0 // indirect 134 - go.opentelemetry.io/otel/sdk v1.32.0 // indirect 364 + go.opentelemetry.io/otel/metric v1.37.0 // indirect 365 + go.opentelemetry.io/otel/sdk v1.37.0 // indirect 135 366 go.opentelemetry.io/otel/sdk/log v0.8.0 // indirect 136 - go.opentelemetry.io/otel/sdk/metric v1.32.0 // indirect 137 - go.opentelemetry.io/otel/trace v1.32.0 // indirect 138 - go.opentelemetry.io/proto/otlp v1.3.1 // indirect 367 + go.opentelemetry.io/otel/sdk/metric v1.37.0 // indirect 368 + go.opentelemetry.io/otel/trace v1.37.0 // indirect 369 + go.opentelemetry.io/proto/otlp v1.4.0 // indirect 139 370 go.uber.org/atomic v1.11.0 // indirect 140 371 go.uber.org/multierr v1.11.0 // indirect 141 372 go.uber.org/zap v1.26.0 // indirect 142 - golang.org/x/net v0.37.0 // indirect 143 - golang.org/x/sync v0.15.0 // indirect 144 - golang.org/x/sys v0.33.0 // indirect 145 - golang.org/x/text v0.26.0 // indirect 146 - golang.org/x/time v0.6.0 // indirect 147 - google.golang.org/genproto/googleapis/api v0.0.0-20241104194629-dd2ea8efbc28 // indirect 148 - google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect 149 - google.golang.org/grpc v1.68.0 // indirect 150 - google.golang.org/protobuf v1.35.1 // indirect 373 + go.yaml.in/yaml/v3 v3.0.4 // indirect 374 + go4.org v0.0.0-20230225012048-214862532bf5 // indirect 375 + golang.org/x/exp v0.0.0-20250711185948-6ae5c78190dc // indirect 376 + golang.org/x/mod v0.29.0 // indirect 377 + golang.org/x/net v0.46.0 // indirect 378 + golang.org/x/oauth2 v0.30.0 // indirect 379 + golang.org/x/sync v0.17.0 // indirect 380 + golang.org/x/sys v0.37.0 // indirect 381 + golang.org/x/term v0.36.0 // indirect 382 + golang.org/x/text v0.30.0 // indirect 383 + golang.org/x/time v0.14.0 // indirect 384 + golang.org/x/tools v0.38.0 // indirect 385 + google.golang.org/api v0.242.0 // indirect 386 + google.golang.org/genproto v0.0.0-20250715232539-7130f93afb79 // indirect 387 + google.golang.org/genproto/googleapis/api v0.0.0-20250715232539-7130f93afb79 // indirect 388 + google.golang.org/genproto/googleapis/rpc v0.0.0-20250715232539-7130f93afb79 // indirect 389 + google.golang.org/grpc v1.74.0 // indirect 390 + google.golang.org/protobuf v1.36.6 // indirect 151 391 gopkg.in/inf.v0 v0.9.1 // indirect 392 + gopkg.in/warnings.v0 v0.1.2 // indirect 152 393 gopkg.in/yaml.v2 v2.4.0 // indirect 153 394 gopkg.in/yaml.v3 v3.0.1 // indirect 154 395 gorm.io/driver/postgres v1.5.7 // indirect 155 396 lukechampine.com/blake3 v1.2.1 // indirect 397 + modernc.org/libc v1.66.10 // indirect 398 + modernc.org/mathutil v1.7.1 // indirect 399 + modernc.org/memory v1.11.0 // indirect 400 + modernc.org/sqlite v1.39.1 // indirect 401 + ) 402 + 403 + // Pin OpenTelemetry SDK to v1.32.0 for compatibility with distribution/distribution 404 + replace ( 405 + go.opentelemetry.io/otel/sdk => go.opentelemetry.io/otel/sdk v1.32.0 406 + go.opentelemetry.io/otel/sdk/log => go.opentelemetry.io/otel/sdk/log v0.8.0 407 + go.opentelemetry.io/otel/sdk/metric => go.opentelemetry.io/otel/sdk/metric v1.32.0 156 408 )
+1367 -77
go.sum
··· 1 - github.com/AdaLogics/go-fuzz-headers v0.0.0-20221103172237-443f56ff4ba8 h1:d+pBUmsteW5tM87xmVXHZ4+LibHRFn40SPAoZJOg2ak= 2 - github.com/AdaLogics/go-fuzz-headers v0.0.0-20221103172237-443f56ff4ba8/go.mod h1:i9fr2JpcEcY/IHEvzCM3qXUZYOQHgR89dt4es1CgMhc= 1 + cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY= 2 + cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw= 3 + cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= 4 + cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= 5 + cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= 6 + cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= 7 + cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= 8 + cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= 9 + cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= 10 + cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= 11 + cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= 12 + cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= 13 + cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= 14 + cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= 15 + cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= 16 + cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= 17 + cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= 18 + cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= 19 + cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= 20 + cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= 21 + cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= 22 + cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= 23 + cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= 24 + cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= 25 + cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= 26 + cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= 27 + cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= 28 + cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= 29 + cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= 30 + cloud.google.com/go v0.98.0/go.mod h1:ua6Ush4NALrHk5QXDWnjvZHN93OuF0HfuEPq9I1X0cM= 31 + cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= 32 + cloud.google.com/go v0.121.3 h1:84RD+hQXNdY5Sw/MWVAx5O9Aui/rd5VQ9HEcdN19afo= 33 + cloud.google.com/go v0.121.3/go.mod h1:6vWF3nJWRrEUv26mMB3FEIU/o1MQNVPG1iHdisa2SJc= 34 + cloud.google.com/go/auth v0.16.2 h1:QvBAGFPLrDeoiNjyfVunhQ10HKNYuOwZ5noee0M5df4= 35 + cloud.google.com/go/auth v0.16.2/go.mod h1:sRBas2Y1fB1vZTdurouM0AzuYQBMZinrUYL8EufhtEA= 36 + cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= 37 + cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= 38 + cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= 39 + cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= 40 + cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= 41 + cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= 42 + cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= 43 + cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= 44 + cloud.google.com/go/compute/metadata v0.7.0 h1:PBWF+iiAerVNe8UCHxdOt6eHLVc3ydFeOCw78U8ytSU= 45 + cloud.google.com/go/compute/metadata v0.7.0/go.mod h1:j5MvL9PprKL39t166CoB1uVHfQMs4tFQZZcKwksXUjo= 46 + cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= 47 + cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= 48 + cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY= 49 + cloud.google.com/go/iam v1.5.2 h1:qgFRAGEmd8z6dJ/qyEchAuL9jpswyODjA2lS+w234g8= 50 + cloud.google.com/go/iam v1.5.2/go.mod h1:SE1vg0N81zQqLzQEwxL2WI6yhetBdbNQuTvIKCSkUHE= 51 + cloud.google.com/go/logging v1.13.0 h1:7j0HgAp0B94o1YRDqiqm26w4q1rDMH7XNRU34lJXHYc= 52 + cloud.google.com/go/logging v1.13.0/go.mod h1:36CoKh6KA/M0PbhPKMq6/qety2DCAErbhXT62TuXALA= 53 + cloud.google.com/go/longrunning v0.6.7 h1:IGtfDWHhQCgCjwQjV9iiLnUta9LBCo8R9QmAFsS/PrE= 54 + cloud.google.com/go/longrunning v0.6.7/go.mod h1:EAFV3IZAKmM56TyiE6VAP3VoTzhZzySwI/YI1s/nRsY= 55 + cloud.google.com/go/monitoring v1.24.2 h1:5OTsoJ1dXYIiMiuL+sYscLc9BumrL3CarVLL7dd7lHM= 56 + cloud.google.com/go/monitoring v1.24.2/go.mod h1:x7yzPWcgDRnPEv3sI+jJGBkwl5qINf+6qY4eq0I9B4U= 57 + cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= 58 + cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= 59 + cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= 60 + cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= 61 + cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= 62 + cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= 63 + cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= 64 + cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= 65 + cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= 66 + cloud.google.com/go/storage v1.55.0 h1:NESjdAToN9u1tmhVqhXCaCwYBuvEhZLLv0gBr+2znf0= 67 + cloud.google.com/go/storage v1.55.0/go.mod h1:ztSmTTwzsdXe5syLVS0YsbFxXuvEmEyZj7v7zChEmuY= 68 + cloud.google.com/go/trace v1.11.6 h1:2O2zjPzqPYAHrn3OKl029qlqG6W8ZdYaOWRyr8NgMT4= 69 + cloud.google.com/go/trace v1.11.6/go.mod h1:GA855OeDEBiBMzcckLPE2kDunIpC72N+Pq8WFieFjnI= 70 + dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8= 71 + dario.cat/mergo v1.0.2/go.mod h1:E/hbnu0NxMFBjpMIE34DRGLWqDy0g5FuKDhCb31ngxA= 72 + dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= 73 + github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 h1:He8afgbRMd7mFxO99hRNu+6tazq8nFF9lIwo9JFroBk= 74 + github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= 75 + github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20250520111509-a70c2aa677fa h1:x6kFzdPgBoLbyoNkA/jny0ENpoEz4wqY8lPTQL2DPkg= 76 + github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20250520111509-a70c2aa677fa/go.mod h1:gCLVsLfv1egrcZu+GoJATN5ts75F2s62ih/457eWzOw= 77 + github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= 78 + github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= 3 79 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= 80 + github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= 81 + github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg= 82 + github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= 83 + github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= 84 + github.com/CycloneDX/cyclonedx-go v0.9.3 h1:Pyk/lwavPz7AaZNvugKFkdWOm93MzaIyWmBwmBo3aUI= 85 + github.com/CycloneDX/cyclonedx-go v0.9.3/go.mod h1:vcK6pKgO1WanCdd61qx4bFnSsDJQ6SbM2ZuMIgq86Jg= 86 + github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= 87 + github.com/DataDog/zstd v1.5.7 h1:ybO8RBeh29qrxIhCA9E8gKY6xfONU9T6G6aP9DTKfLE= 88 + github.com/DataDog/zstd v1.5.7/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= 89 + github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0 h1:UQUsRi8WTzhZntp5313l+CHIAT95ojUI2lpP/ExlZa4= 90 + github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0/go.mod h1:Cz6ft6Dkn3Et6l2v2a9/RpN7epQ1GtDlO6lj8bEcOvw= 91 + github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.53.0 h1:owcC2UnmsZycprQ5RfRgjydWhuoxg71LUfyiQdijZuM= 92 + github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.53.0/go.mod h1:ZPpqegjbE99EPKsu3iUWV22A04wzGPcAY/ziSIQEEgs= 93 + github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.53.0 h1:4LP6hvB4I5ouTbGgWtixJhgED6xdf67twf9PoY96Tbg= 94 + github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.53.0/go.mod h1:jUZ5LYlw40WMd07qxcQJD5M40aUxrfwqQX1g7zxYnrQ= 95 + github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.53.0 h1:Ron4zCA/yk6U7WOBXhTJcDpsUBG9npumK6xw2auFltQ= 96 + github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.53.0/go.mod h1:cSgYe11MCNYunTnRXrKiR/tHc0eoKjICUuWpNZoVCOo= 97 + github.com/Intevation/gval v1.3.0 h1:+Ze5sft5MmGbZrHj06NVUbcxCb67l9RaPTLMNr37mjw= 98 + github.com/Intevation/gval v1.3.0/go.mod h1:xmGyGpP5be12EL0P12h+dqiYG8qn2j3PJxIgkoOHO5o= 99 + github.com/Intevation/jsonpath v0.2.1 h1:rINNQJ0Pts5XTFEG+zamtdL7l9uuE1z0FBA+r55Sw+A= 100 + github.com/Intevation/jsonpath v0.2.1/go.mod h1:WnZ8weMmwAx/fAO3SutjYFU+v7DFreNYnibV7CiaYIw= 101 + github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= 102 + github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= 103 + github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0= 104 + github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= 105 + github.com/Masterminds/sprig/v3 v3.3.0 h1:mQh0Yrg1XPo6vjYXgtf5OtijNAKJRNcTdOOGZe3tPhs= 106 + github.com/Masterminds/sprig/v3 v3.3.0/go.mod h1:Zy1iXRYNqNLUolqCpL4uhk6SHUMAOSCzdgBfDb35Lz0= 107 + github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= 108 + github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= 109 + github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= 110 + github.com/Microsoft/hcsshim v0.13.0 h1:/BcXOiS6Qi7N9XqUcv27vkIuVOkBEcWstd2pMlWSeaA= 111 + github.com/Microsoft/hcsshim v0.13.0/go.mod h1:9KWJ/8DgU+QzYGupX4tzMhRQE8h6w90lH6HAaclpEok= 112 + github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= 113 + github.com/OneOfOne/xxhash v1.2.8 h1:31czK/TI9sNkxIKfaUfGlU47BAxQ0ztGgd9vPyqimf8= 114 + github.com/OneOfOne/xxhash v1.2.8/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= 115 + github.com/ProtonMail/go-crypto v1.3.0 h1:ILq8+Sf5If5DCpHQp4PbZdS1J7HDFRXz/+xKBiRGFrw= 116 + github.com/ProtonMail/go-crypto v1.3.0/go.mod h1:9whxjD8Rbs29b4XWbB8irEcE8KHMqaR2e7GWU1R+/PE= 4 117 github.com/RussellLuo/slidingwindow v0.0.0-20200528002341-535bb99d338b h1:5/++qT1/z812ZqBvqQt6ToRswSuPZ/B33m6xVHRzADU= 5 118 github.com/RussellLuo/slidingwindow v0.0.0-20200528002341-535bb99d338b/go.mod h1:4+EPqMRApwwE/6yo6CxiHoSnBzjRr3jsqer7frxP8y4= 119 + github.com/STARRY-S/zip v0.2.3 h1:luE4dMvRPDOWQdeDdUxUoZkzUIpTccdKdhHHsQJ1fm4= 120 + github.com/STARRY-S/zip v0.2.3/go.mod h1:lqJ9JdeRipyOQJrYSOtpNAiaesFO6zVDsE8GIGFaoSk= 121 + github.com/acobaugh/osrelease v0.1.0 h1:Yb59HQDGGNhCj4suHaFQQfBps5wyoKLSSX/J/+UifRE= 122 + github.com/acobaugh/osrelease v0.1.0/go.mod h1:4bFEs0MtgHNHBrmHCt67gNisnabCRAlzdVasCEGHTWY= 123 + github.com/adrg/xdg v0.5.3 h1:xRnxJXne7+oWDatRhR1JLnvuccuIeCoBu2rtuLqQB78= 124 + github.com/adrg/xdg v0.5.3/go.mod h1:nlTsY+NNiCBGCK2tpm09vRqfVzrc2fLmXGpBLF0zlTQ= 125 + github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo= 126 + github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= 6 127 github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= 128 + github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= 7 129 github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= 130 + github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= 8 131 github.com/alexbrainman/goissue34681 v0.0.0-20191006012335-3fc7a47baff5 h1:iW0a5ljuFxkLGPNem5Ui+KBjFJzKg4Fv2fnxe4dvzpM= 9 132 github.com/alexbrainman/goissue34681 v0.0.0-20191006012335-3fc7a47baff5/go.mod h1:Y2QMoi1vgtOIfc+6DhrMOGkLoGzqSV2rKp4Sm+opsyA= 133 + github.com/anchore/archiver/v3 v3.5.3-0.20241210171143-5b1d8d1c7c51 h1:yhk+P8lF3ZiROjmaVRao9WGTRo4b/wYjoKEiAHWrKwc= 134 + github.com/anchore/archiver/v3 v3.5.3-0.20241210171143-5b1d8d1c7c51/go.mod h1:nwuGSd7aZp0rtYt79YggCGafz1RYsclE7pi3fhLwvuw= 135 + github.com/anchore/clio v0.0.0-20250715152405-a0fa658e5084 h1:7DUAXEdAxoANPlDgxYiaSRKnWnTygvdrrWhnmvEjNLg= 136 + github.com/anchore/clio v0.0.0-20250715152405-a0fa658e5084/go.mod h1:42dWox8z4//b898OIELsQnSdYq9q1aCXkwp5fKF+BEU= 137 + github.com/anchore/fangs v0.0.0-20250716230140-94c22408c232 h1:aVC6r9h5wGNh8BYTW3CXxOdPoZzY/bBRWne1NvSTlO8= 138 + github.com/anchore/fangs v0.0.0-20250716230140-94c22408c232/go.mod h1:Zees1AEKNpXIRgdVAMYWITncarLFiPOtEQ7rl45V/h0= 139 + github.com/anchore/go-collections v0.0.0-20251016125210-a3c352120e8c h1:eoJXyC0n7DZ4YvySG/ETdYkTar2Due7eH+UmLK6FbrA= 140 + github.com/anchore/go-collections v0.0.0-20251016125210-a3c352120e8c/go.mod h1:1aiktV46ATCkuVg0O573ZrH56BUawTECPETbZyBcqT8= 141 + github.com/anchore/go-homedir v0.0.0-20250319154043-c29668562e4d h1:gT69osH9AsdpOfqxbRwtxcNnSZ1zg4aKy2BevO3ZBdc= 142 + github.com/anchore/go-homedir v0.0.0-20250319154043-c29668562e4d/go.mod h1:PhSnuFYknwPZkOWKB1jXBNToChBA+l0FjwOxtViIc50= 143 + github.com/anchore/go-logger v0.0.0-20250318195838-07ae343dd722 h1:2SqmFgE7h+Ql4VyBzhjLkRF/3gDrcpUBj8LjvvO6OOM= 144 + github.com/anchore/go-logger v0.0.0-20250318195838-07ae343dd722/go.mod h1:oFuE8YuTCM+spgMXhePGzk3asS94yO9biUfDzVTFqNw= 145 + github.com/anchore/go-lzo v0.1.0 h1:NgAacnzqPeGH49Ky19QKLBZEuFRqtTG9cdaucc3Vncs= 146 + github.com/anchore/go-lzo v0.1.0/go.mod h1:3kLx0bve2oN1iDwgM1U5zGku1Tfbdb0No5qp1eL1fIk= 147 + github.com/anchore/go-macholibre v0.0.0-20250320151634-807da7ad2331 h1:fWPHXkH3FQGVCyPkFMqNvMjQvdNMfkylBTsDqZC4lE4= 148 + github.com/anchore/go-macholibre v0.0.0-20250320151634-807da7ad2331/go.mod h1:DYvTRnWrlJ//6YOR83SiewmJiNFDEMRaOTnrzgco9FA= 149 + github.com/anchore/go-rpmdb v0.0.0-20250516171929-f77691e1faec h1:SjjPMOXTzpuU1ZME4XeoHyek+dry3/C7I8gzaCo02eg= 150 + github.com/anchore/go-rpmdb v0.0.0-20250516171929-f77691e1faec/go.mod h1:eQVa6QFGzKy0qMcnW2pez0XBczvgwSjw9vA23qifEyU= 151 + github.com/anchore/go-struct-converter v0.0.0-20221118182256-c68fdcfa2092/go.mod h1:rYqSE9HbjzpHTI74vwPvae4ZVYZd1lue2ta6xHPdblA= 152 + github.com/anchore/go-struct-converter v0.0.0-20250211213226-cce56d595160 h1:r8/1fxpbDMlQO6GgQiud1uL5eAu3p/NVUmfNx95/KY8= 153 + github.com/anchore/go-struct-converter v0.0.0-20250211213226-cce56d595160/go.mod h1:rYqSE9HbjzpHTI74vwPvae4ZVYZd1lue2ta6xHPdblA= 154 + github.com/anchore/go-sync v0.0.0-20250714163430-add63db73ad1 h1:UK1SWZf2xD5jq8QVeDdpt6wW31cO3RckBvPmGlDrTkg= 155 + github.com/anchore/go-sync v0.0.0-20250714163430-add63db73ad1/go.mod h1:hd0Ol9qFM8tRDdF50a+DpZEoB0HFNaEnCp/BSVyBRlg= 156 + github.com/anchore/go-testutils v0.0.0-20200925183923-d5f45b0d3c04 h1:VzprUTpc0vW0nnNKJfJieyH/TZ9UYAnTZs5/gHTdAe8= 157 + github.com/anchore/go-testutils v0.0.0-20200925183923-d5f45b0d3c04/go.mod h1:6dK64g27Qi1qGQZ67gFmBFvEHScy0/C8qhQhNe5B5pQ= 158 + github.com/anchore/go-version v1.2.2-0.20210903204242-51efa5b487c4 h1:rmZG77uXgE+o2gozGEBoUMpX27lsku+xrMwlmBZJtbg= 159 + github.com/anchore/go-version v1.2.2-0.20210903204242-51efa5b487c4/go.mod h1:Bkc+JYWjMCF8OyZ340IMSIi2Ebf3uwByOk6ho4wne1E= 160 + github.com/anchore/grype v0.102.0 h1:yf8YKGklukxIobObK2WQEYEp8mU3ofTnB4+cBR7S9vE= 161 + github.com/anchore/grype v0.102.0/go.mod h1:9EFzjrlx81aP37YKpxktXSbAhgJ8jNCm4jP9tim9jww= 162 + github.com/anchore/packageurl-go v0.1.1-0.20250220190351-d62adb6e1115 h1:ZyRCmiEjnoGJZ1+Ah0ZZ/mKKqNhGcUZBl0s7PTTDzvY= 163 + github.com/anchore/packageurl-go v0.1.1-0.20250220190351-d62adb6e1115/go.mod h1:KoYIv7tdP5+CC9VGkeZV4/vGCKsY55VvoG+5dadg4YI= 164 + github.com/anchore/stereoscope v0.1.11 h1:YP/XUNcJyMbOOPAWPkeZNCVlKKTRO2cnBTEeUW6I40Y= 165 + github.com/anchore/stereoscope v0.1.11/go.mod h1:G3PZlzPbxFhylj9pQwtqfVPaahuWmy/UCtv5FTIIMvg= 166 + github.com/anchore/syft v1.36.0 h1:vmrQz/eCPEdniHi2XRqEXxpvO3Q3wHL9o+YcE45XtUI= 167 + github.com/anchore/syft v1.36.0/go.mod h1:DdJMDHhI2V7pOjC/5FL98BKbG2DkbIT5zYmig6AORdU= 168 + github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= 169 + github.com/andybalholm/brotli v1.2.0 h1:ukwgCxwYrmACq68yiUqwIWnGY0cTPox/M94sVwToPjQ= 170 + github.com/andybalholm/brotli v1.2.0/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY= 171 + github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= 172 + github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= 173 + github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= 174 + github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew1u1fNQOlOtuGxQY= 175 + github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4= 176 + github.com/aquasecurity/go-pep440-version v0.0.1 h1:8VKKQtH2aV61+0hovZS3T//rUF+6GDn18paFTVS0h0M= 177 + github.com/aquasecurity/go-pep440-version v0.0.1/go.mod h1:3naPe+Bp6wi3n4l5iBFCZgS0JG8vY6FT0H4NGhFJ+i4= 178 + github.com/aquasecurity/go-version v0.0.1 h1:4cNl516agK0TCn5F7mmYN+xVs1E3S45LkgZk3cbaW2E= 179 + github.com/aquasecurity/go-version v0.0.1/go.mod h1:s1UU6/v2hctXcOa3OLwfj5d9yoXHa3ahf+ipSwEvGT0= 180 + github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= 181 + github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= 182 + github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= 183 + github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= 184 + github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= 185 + github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= 186 + github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= 187 + github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= 188 + github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= 10 189 github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU= 11 190 github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= 191 + github.com/aws/aws-sdk-go-v2 v1.36.5 h1:0OF9RiEMEdDdZEMqF9MRjevyxAQcf6gY+E7vwBILFj0= 192 + github.com/aws/aws-sdk-go-v2 v1.36.5/go.mod h1:EYrzvCCN9CMUTa5+6lf6MM4tq3Zjp8UhSGR/cBsjai0= 193 + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10 h1:zAybnyUQXIZ5mok5Jqwlf58/TFE7uvd3IAsa1aF9cXs= 194 + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10/go.mod h1:qqvMj6gHLR/EXWZw4ZbqlPbQUyenf4h82UQUlKc+l14= 195 + github.com/aws/aws-sdk-go-v2/config v1.29.17 h1:jSuiQ5jEe4SAMH6lLRMY9OVC+TqJLP5655pBGjmnjr0= 196 + github.com/aws/aws-sdk-go-v2/config v1.29.17/go.mod h1:9P4wwACpbeXs9Pm9w1QTh6BwWwJjwYvJ1iCt5QbCXh8= 197 + github.com/aws/aws-sdk-go-v2/credentials v1.17.70 h1:ONnH5CM16RTXRkS8Z1qg7/s2eDOhHhaXVd72mmyv4/0= 198 + github.com/aws/aws-sdk-go-v2/credentials v1.17.70/go.mod h1:M+lWhhmomVGgtuPOhO85u4pEa3SmssPTdcYpP/5J/xc= 199 + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.32 h1:KAXP9JSHO1vKGCr5f4O6WmlVKLFFXgWYAGoJosorxzU= 200 + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.32/go.mod h1:h4Sg6FQdexC1yYG9RDnOvLbW1a/P986++/Y/a+GyEM8= 201 + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.36 h1:SsytQyTMHMDPspp+spo7XwXTP44aJZZAC7fBV2C5+5s= 202 + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.36/go.mod h1:Q1lnJArKRXkenyog6+Y+zr7WDpk4e6XlR6gs20bbeNo= 203 + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.36 h1:i2vNHQiXUvKhs3quBR6aqlgJaiaexz/aNvdCktW/kAM= 204 + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.36/go.mod h1:UdyGa7Q91id/sdyHPwth+043HhmP6yP9MBHgbZM0xo8= 205 + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 h1:bIqFDwgGXXN1Kpp99pDOdKMTTb5d2KyU5X/BZxjOkRo= 206 + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3/go.mod h1:H5O/EsxDWyU+LP/V8i5sm8cxoZgc2fdNR9bxlOFrQTo= 207 + github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34 h1:ZNTqv4nIdE/DiBfUUfXcLZ/Spcuz+RjeziUtNJackkM= 208 + github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34/go.mod h1:zf7Vcd1ViW7cPqYWEHLHJkS50X0JS2IKz9Cgaj6ugrs= 209 + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.4 h1:CXV68E2dNqhuynZJPB80bhPQwAKqBWVer887figW6Jc= 210 + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.4/go.mod h1:/xFi9KtvBXP97ppCz1TAEvU1Uf66qvid89rbem3wCzQ= 211 + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.2 h1:BCG7DCXEXpNCcpwCxg1oi9pkJWH2+eZzTn9MY56MbVw= 212 + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.2/go.mod h1:iu6FSzgt+M2/x3Dk8zhycdIcHjEFb36IS8HVUVFoMg0= 213 + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.17 h1:t0E6FzREdtCsiLIoLCWsYliNsRBgyGD/MCK571qk4MI= 214 + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.17/go.mod h1:ygpklyoaypuyDvOM5ujWGrYWpAK3h7ugnmKCU/76Ys4= 215 + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15 h1:moLQUoVq91LiqT1nbvzDukyqAlCv89ZmwaHw/ZFlFZg= 216 + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15/go.mod h1:ZH34PJUc8ApjBIfgQCFvkWcUDBtl/WTD+uiYHjd8igA= 217 + github.com/aws/aws-sdk-go-v2/service/s3 v1.80.1 h1:xYEAf/6QHiTZDccKnPMbsMwlau13GsDsTgdue3wmHGw= 218 + github.com/aws/aws-sdk-go-v2/service/s3 v1.80.1/go.mod h1:qbn305Je/IofWBJ4bJz/Q7pDEtnnoInw/dGt71v6rHE= 219 + github.com/aws/aws-sdk-go-v2/service/sso v1.25.5 h1:AIRJ3lfb2w/1/8wOOSqYb9fUKGwQbtysJ2H1MofRUPg= 220 + github.com/aws/aws-sdk-go-v2/service/sso v1.25.5/go.mod h1:b7SiVprpU+iGazDUqvRSLf5XmCdn+JtT1on7uNL6Ipc= 221 + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.3 h1:BpOxT3yhLwSJ77qIY3DoHAQjZsc4HEGfMCE4NGy3uFg= 222 + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.3/go.mod h1:vq/GQR1gOFLquZMSrxUK/cpvKCNVYibNyJ1m7JrU88E= 223 + github.com/aws/aws-sdk-go-v2/service/sts v1.34.0 h1:NFOJ/NXEGV4Rq//71Hs1jC/NvPs1ezajK+yQmkwnPV0= 224 + github.com/aws/aws-sdk-go-v2/service/sts v1.34.0/go.mod h1:7ph2tGpfQvwzgistp2+zga9f+bCjlQJPkPUmMgDSD7w= 225 + github.com/aws/smithy-go v1.22.4 h1:uqXzVZNuNexwc/xrh6Tb56u89WDlJY6HS+KC0S4QSjw= 226 + github.com/aws/smithy-go v1.22.4/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI= 227 + github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= 228 + github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= 12 229 github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= 13 230 github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= 231 + github.com/becheran/wildmatch-go v1.0.0 h1:mE3dGGkTmpKtT4Z+88t8RStG40yN9T+kFEGj2PZFSzA= 232 + github.com/becheran/wildmatch-go v1.0.0/go.mod h1:gbMvj0NtVdJ15Mg/mH9uxk2R1QCistMyU7d9KFzroX4= 14 233 github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= 15 234 github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= 16 235 github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= ··· 18 237 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= 19 238 github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= 20 239 github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= 240 + github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= 241 + github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= 242 + github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= 21 243 github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932 h1:mXoPYz/Ul5HYEDvkta6I8/rnYM5gSdSV2tJ6XbZuEtY= 22 244 github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k= 245 + github.com/bitnami/go-version v0.0.0-20250505154626-452e8c5ee607 h1:lBg3tHGquFySSblLi9zNi2iGNmVLRHBzVal2fqphCM8= 246 + github.com/bitnami/go-version v0.0.0-20250505154626-452e8c5ee607/go.mod h1:9iglf1GG4oNRJ39bZ5AZrjgAFD2RwQbXw6Qf7Cs47wo= 247 + github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb h1:m935MPodAbYS46DG4pJSv7WO+VECIWUQ7OJYSoTrMh4= 248 + github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb/go.mod h1:PkYb9DJNAwrSvRx5DYA+gUcOIgTGVMNkfSCbZM8cWpI= 23 249 github.com/bluesky-social/indigo v0.0.0-20251021193747-543ab1124beb h1:zzyqB1W/itfdIA5cnOZ7IFCJ6QtqwOsXltmLunL4sHw= 24 250 github.com/bluesky-social/indigo v0.0.0-20251021193747-543ab1124beb/go.mod h1:GuGAU33qKulpZCZNPcUeIQ4RW6KzNvOy7s8MSUXbAng= 251 + github.com/bmatcuk/doublestar/v2 v2.0.4 h1:6I6oUiT/sU27eE2OFcWqBhL1SwjyvQuOssxT4a1yidI= 252 + github.com/bmatcuk/doublestar/v2 v2.0.4/go.mod h1:QMmcs3H2AUQICWhfzLXz+IYln8lRQmTZRptLie8RgRw= 253 + github.com/bmatcuk/doublestar/v4 v4.9.1 h1:X8jg9rRZmJd4yRy7ZeNDRnM+T3ZfHv15JiBJ/avrEXE= 254 + github.com/bmatcuk/doublestar/v4 v4.9.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc= 25 255 github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY= 26 256 github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= 257 + github.com/bodgit/plumbing v1.3.0 h1:pf9Itz1JOQgn7vEOE7v7nlEfBykYqvUYioC61TwWCFU= 258 + github.com/bodgit/plumbing v1.3.0/go.mod h1:JOTb4XiRu5xfnmdnDJo6GmSbSbtSyufrsyZFByMtKEs= 259 + github.com/bodgit/sevenzip v1.6.1 h1:kikg2pUMYC9ljU7W9SaqHXhym5HyKm8/M/jd31fYan4= 260 + github.com/bodgit/sevenzip v1.6.1/go.mod h1:GVoYQbEVbOGT8n2pfqCIMRUaRjQ8F9oSqoBEqZh5fQ8= 261 + github.com/bodgit/windows v1.0.1 h1:tF7K6KOluPYygXa3Z2594zxlkbKPAOvqr97etrGNIz4= 262 + github.com/bodgit/windows v1.0.1/go.mod h1:a6JLwrB4KrTR5hBpp8FI9/9W9jJfeQ2h4XDXU74ZCdM= 263 + github.com/bradleyjkemp/cupaloy/v2 v2.8.0 h1:any4BmKE+jGIaMpnU8YgH/I2LPiLBufr6oMMlVBbn9M= 264 + github.com/bradleyjkemp/cupaloy/v2 v2.8.0/go.mod h1:bm7JXdkRd4BHJk9HpwqAI8BoAY1lps46Enkdqw6aRX0= 27 265 github.com/bshuster-repo/logrus-logstash-hook v1.0.0 h1:e+C0SB5R1pu//O4MQ3f9cFuPGoOVeF2fE4Og9otCc70= 28 266 github.com/bshuster-repo/logrus-logstash-hook v1.0.0/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= 29 267 github.com/bsm/ginkgo/v2 v2.7.0/go.mod h1:AiKlXPm7ItEHNc/2+OkrNG4E0ITzojb9/xWzvQ9XZ9w= ··· 34 272 github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= 35 273 github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= 36 274 github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= 275 + github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= 276 + github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= 277 + github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= 278 + github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= 279 + github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= 37 280 github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= 38 281 github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= 39 282 github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= 283 + github.com/charmbracelet/bubbles v0.21.0 h1:9TdC97SdRVg/1aaXNVWfFH3nnLAwOXr8Fn6u6mfQdFs= 284 + github.com/charmbracelet/bubbles v0.21.0/go.mod h1:HF+v6QUR4HkEpz62dx7ym2xc71/KBHg+zKwJtMw+qtg= 285 + github.com/charmbracelet/bubbletea v1.3.10 h1:otUDHWMMzQSB0Pkc87rm691KZ3SWa4KUlvF9nRvCICw= 286 + github.com/charmbracelet/bubbletea v1.3.10/go.mod h1:ORQfo0fk8U+po9VaNvnV95UPWA1BitP1E0N6xJPlHr4= 287 + github.com/charmbracelet/colorprofile v0.3.1 h1:k8dTHMd7fgw4bnFd7jXTLZrSU/CQrKnL3m+AxCzDz40= 288 + github.com/charmbracelet/colorprofile v0.3.1/go.mod h1:/GkGusxNs8VB/RSOh3fu0TJmQ4ICMMPApIIVn0KszZ0= 289 + github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY= 290 + github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30= 291 + github.com/charmbracelet/x/ansi v0.10.1 h1:rL3Koar5XvX0pHGfovN03f5cxLbCF2YvLeyz7D2jVDQ= 292 + github.com/charmbracelet/x/ansi v0.10.1/go.mod h1:3RQDQ6lDnROptfpWuUVIUG64bD2g2BgntdxH0Ya5TeE= 293 + github.com/charmbracelet/x/cellbuf v0.0.13 h1:/KBBKHuVRbq1lYx5BzEHBAFBP8VcQzJejZ/IA3iR28k= 294 + github.com/charmbracelet/x/cellbuf v0.0.13/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs= 295 + github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ= 296 + github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg= 297 + github.com/chromedp/cdproto v0.0.0-20230802225258-3cf4e6d46a89/go.mod h1:GKljq0VrfU4D5yc+2qA6OVr8pmO/MBbPEWqWQ/oqGEs= 298 + github.com/chromedp/chromedp v0.9.2/go.mod h1:LkSXJKONWTCHAfQasKFUZI+mxqS4tZqhmtGzzhLsnLs= 299 + github.com/chromedp/sysutil v1.0.0/go.mod h1:kgWmDdq8fTzXYcKIBqIYvRRTnYb9aNS9moAV0xufSww= 300 + github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= 301 + github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ= 302 + github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= 303 + github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk= 304 + github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= 305 + github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= 306 + github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= 307 + github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= 308 + github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= 309 + github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0= 310 + github.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= 311 + github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= 312 + github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= 313 + github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= 314 + github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= 315 + github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= 316 + github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= 317 + github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= 318 + github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= 319 + github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= 320 + github.com/cncf/xds/go v0.0.0-20211130200136-a8f946100490/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= 321 + github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443 h1:aQ3y1lwWyqYPiWZThqv1aFbZMiM9vblcSArJRf2Irls= 322 + github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= 323 + github.com/containerd/cgroups/v3 v3.0.3 h1:S5ByHZ/h9PMe5IOQoN7E+nMc2UcLEM/V48DGDJ9kip0= 324 + github.com/containerd/cgroups/v3 v3.0.3/go.mod h1:8HBe7V3aWGLFPd/k03swSIsGjZhHI2WzJmticMgVuz0= 325 + github.com/containerd/containerd v1.7.28 h1:Nsgm1AtcmEh4AHAJ4gGlNSaKgXiNccU270Dnf81FQ3c= 326 + github.com/containerd/containerd v1.7.28/go.mod h1:azUkWcOvHrWvaiUjSQH0fjzuHIwSPg1WL5PshGP4Szs= 327 + github.com/containerd/containerd/api v1.9.0 h1:HZ/licowTRazus+wt9fM6r/9BQO7S0vD5lMcWspGIg0= 328 + github.com/containerd/containerd/api v1.9.0/go.mod h1:GhghKFmTR3hNtyznBoQ0EMWr9ju5AqHjcZPsSpTKutI= 329 + github.com/containerd/continuity v0.4.5 h1:ZRoN1sXq9u7V6QoHMcVWGhOwDFqZ4B9i5H6un1Wh0x4= 330 + github.com/containerd/continuity v0.4.5/go.mod h1:/lNJvtJKUQStBzpVQ1+rasXO1LAWtUQssk28EZvJ3nE= 331 + github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI= 332 + github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M= 333 + github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE= 334 + github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk= 335 + github.com/containerd/fifo v1.1.0 h1:4I2mbh5stb1u6ycIABlBw9zgtlK8viPI9QkQNRQEEmY= 336 + github.com/containerd/fifo v1.1.0/go.mod h1:bmC4NWMbXlt2EZ0Hc7Fx7QzTFxgPID13eH0Qu+MAb2o= 337 + github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= 338 + github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= 339 + github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A= 340 + github.com/containerd/platforms v0.2.1/go.mod h1:XHCb+2/hzowdiut9rkudds9bE5yJ7npe7dG/wG+uFPw= 341 + github.com/containerd/stargz-snapshotter/estargz v0.16.3 h1:7evrXtoh1mSbGj/pfRccTampEyKpjpOnS3CyiV1Ebr8= 342 + github.com/containerd/stargz-snapshotter/estargz v0.16.3/go.mod h1:uyr4BfYfOj3G9WBVE8cOlQmXAbPN9VEQpBBeJIuOipU= 343 + github.com/containerd/ttrpc v1.2.7 h1:qIrroQvuOL9HQ1X6KHe2ohc7p+HP/0VE6XPU7elJRqQ= 344 + github.com/containerd/ttrpc v1.2.7/go.mod h1:YCXHsb32f+Sq5/72xHubdiJRQY9inL4a4ZQrAbN1q9o= 345 + github.com/containerd/typeurl/v2 v2.2.3 h1:yNA/94zxWdvYACdYO8zofhrTVuQY73fFU1y++dYSw40= 346 + github.com/containerd/typeurl/v2 v2.2.3/go.mod h1:95ljDnPfD3bAbDJRugOiShd/DlAAsxGtUBhJxIn7SCk= 347 + github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= 348 + github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= 40 349 github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= 41 350 github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= 42 351 github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= 43 - github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= 352 + github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= 353 + github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= 44 354 github.com/cskr/pubsub v1.0.2 h1:vlOzMhl6PFn60gRlTQQsIfVwaPB/B/8MziK8FhEPt/0= 45 355 github.com/cskr/pubsub v1.0.2/go.mod h1:/8MzYXk/NJAz782G8RPkFzXTZVu63VotefPnR9TIRis= 46 - github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= 47 - github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= 356 + github.com/cyphar/filepath-securejoin v0.4.1 h1:JyxxyPEaktOD+GAnqIqTf9A8tHyAG22rowi7HkoSU1s= 357 + github.com/cyphar/filepath-securejoin v0.4.1/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI= 48 358 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 49 - github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 50 359 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 360 + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= 361 + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 51 362 github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= 52 363 github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= 364 + github.com/deitch/magic v0.0.0-20240306090643-c67ab88f10cb h1:4W/2rQ3wzEimF5s+J6OY3ODiQtJZ5W1sForSgogVXkY= 365 + github.com/deitch/magic v0.0.0-20240306090643-c67ab88f10cb/go.mod h1:B3tI9iGHi4imdLi4Asdha1Sc6feLMTfPLXh9IUYmysk= 366 + github.com/dgrijalva/jwt-go/v4 v4.0.0-preview1/go.mod h1:+hnT3ywWDTAFrW5aE+u2Sa/wT555ZqwoCS+pk3p6ry4= 53 367 github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= 54 368 github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= 369 + github.com/diskfs/go-diskfs v1.7.0 h1:vonWmt5CMowXwUc79jWyGrf2DIMeoOjkLlMnQYGVOs8= 370 + github.com/diskfs/go-diskfs v1.7.0/go.mod h1:LhQyXqOugWFRahYUSw47NyZJPezFzB9UELwhpszLP/k= 55 371 github.com/distribution/distribution/v3 v3.0.0 h1:q4R8wemdRQDClzoNNStftB2ZAfqOiN6UX90KJc4HjyM= 56 372 github.com/distribution/distribution/v3 v3.0.0/go.mod h1:tRNuFoZsUdyRVegq8xGNeds4KLjwLCRin/tTo6i1DhU= 57 373 github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= 58 374 github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= 59 - github.com/docker/docker-credential-helpers v0.8.2 h1:bX3YxiGzFP5sOXWc3bTPEXdEaZSeVMrFgOr3T+zrFAo= 60 - github.com/docker/docker-credential-helpers v0.8.2/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M= 61 - github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8= 62 - github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= 375 + github.com/djherbis/times v1.6.0 h1:w2ctJ92J8fBvWPxugmXIv7Nz7Q3iDMKNx9v5ocVH20c= 376 + github.com/djherbis/times v1.6.0/go.mod h1:gOHeRAz2h+VJNZ5Gmc/o7iD9k4wW7NMVqieYCY99oc0= 377 + github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI= 378 + github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= 379 + github.com/docker/cli v28.5.1+incompatible h1:ESutzBALAD6qyCLqbQSEf1a/U8Ybms5agw59yGVc+yY= 380 + github.com/docker/cli v28.5.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= 381 + github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= 382 + github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= 383 + github.com/docker/docker v28.5.1+incompatible h1:Bm8DchhSD2J6PsFzxC35TZo4TLGR2PdW/E69rU45NhM= 384 + github.com/docker/docker v28.5.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= 385 + github.com/docker/docker-credential-helpers v0.9.3 h1:gAm/VtF9wgqJMoxzT3Gj5p4AqIjCBS4wrsOh9yRqcz8= 386 + github.com/docker/docker-credential-helpers v0.9.3/go.mod h1:x+4Gbw9aGmChi3qTLZj8Dfn0TD20M/fuWy0E5+WDeCo= 387 + github.com/docker/go-connections v0.6.0 h1:LlMG9azAe1TqfR7sO+NJttz1gy6KO7VJBh+pMmjSD94= 388 + github.com/docker/go-connections v0.6.0/go.mod h1:AahvXYshr6JgfUJGdDCs2b5EZG/vmaMAntpSFH5BFKE= 389 + github.com/docker/go-events v0.0.0-20250114142523-c867878c5e32 h1:EHZfspsnLAz8Hzccd67D5abwLiqoqym2jz/jOS39mCk= 390 + github.com/docker/go-events v0.0.0-20250114142523-c867878c5e32/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= 63 391 github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8= 64 392 github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= 393 + github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= 394 + github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= 395 + github.com/dsnet/compress v0.0.2-0.20230904184137-39efe44ab707 h1:2tV76y6Q9BB+NEBasnqvs7e49aEBFI8ejC89PSnWH+4= 396 + github.com/dsnet/compress v0.0.2-0.20230904184137-39efe44ab707/go.mod h1:qssHWj60/X5sZFNxpG4HBPDHVqxNm4DfnCKgrbZOT+s= 397 + github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= 398 + github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= 399 + github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= 65 400 github.com/earthboundkid/versioninfo/v2 v2.24.1 h1:SJTMHaoUx3GzjjnUO1QzP3ZXK6Ee/nbWyCm58eY3oUg= 66 401 github.com/earthboundkid/versioninfo/v2 v2.24.1/go.mod h1:VcWEooDEuyUJnMfbdTh0uFN4cfEIg+kHMuWB2CDCLjw= 402 + github.com/elazarl/goproxy v1.7.2 h1:Y2o6urb7Eule09PjlhQRGNsqRfPmYI3KKQLFpCAV3+o= 403 + github.com/elazarl/goproxy v1.7.2/go.mod h1:82vkLNir0ALaW14Rc399OTTjyNREgmdL2cVoIbS6XaE= 404 + github.com/elliotchance/phpserialize v1.4.0 h1:cAp/9+KSnEbUC8oYCE32n2n84BeW8HOY3HMDI8hG2OY= 405 + github.com/elliotchance/phpserialize v1.4.0/go.mod h1:gt7XX9+ETUcLXbtTKEuyrqW3lcLUAeS/AnGZ2e49TZs= 406 + github.com/elliotwutingfeng/asciiset v0.0.0-20230602022725-51bbb787efab h1:h1UgjJdAAhj+uPL68n7XASS6bU+07ZX1WJvVS2eyoeY= 407 + github.com/elliotwutingfeng/asciiset v0.0.0-20230602022725-51bbb787efab/go.mod h1:GLo/8fDswSAniFG+BFIaiSPcK610jyzgEhWYPQwuQdw= 408 + github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= 409 + github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= 410 + github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= 411 + github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= 412 + github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= 413 + github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= 414 + github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= 415 + github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= 416 + github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= 417 + github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= 418 + github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ= 419 + github.com/envoyproxy/go-control-plane v0.13.4 h1:zEqyPVyku6IvWCFwux4x9RxkLOMUL+1vC9xUFv5l2/M= 420 + github.com/envoyproxy/go-control-plane v0.13.4/go.mod h1:kDfuBlDVsSj2MjrLEtRWtHlsWIFcGyB2RMO44Dc5GZA= 421 + github.com/envoyproxy/go-control-plane/envoy v1.32.4 h1:jb83lalDRZSpPWW2Z7Mck/8kXZ5CQAFYVjQcdVIr83A= 422 + github.com/envoyproxy/go-control-plane/envoy v1.32.4/go.mod h1:Gzjc5k8JcJswLjAx1Zm+wSYE20UrLtt7JZMWiWQXQEw= 423 + github.com/envoyproxy/go-control-plane/ratelimit v0.1.0 h1:/G9QYbddjL25KvtKTv3an9lx6VBE2cnb8wp1vEGNYGI= 424 + github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJPzVVHnPgRKdUdwW/KdbRt94AzgRee4= 425 + github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= 426 + github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws= 427 + github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8= 428 + github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU= 429 + github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4= 430 + github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM= 431 + github.com/facebookincubator/flog v0.0.0-20190930132826-d2511d0ce33c/go.mod h1:QGzNH9ujQ2ZUr/CjDGZGWeDAVStrWNjHeEcjJL96Nuk= 432 + github.com/facebookincubator/nvdtools v0.1.5 h1:jbmDT1nd6+k+rlvKhnkgMokrCAzHoASWE5LtHbX2qFQ= 433 + github.com/facebookincubator/nvdtools v0.1.5/go.mod h1:Kh55SAWnjckS96TBSrXI99KrEKH4iB0OJby3N8GRJO4= 434 + github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= 435 + github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= 436 + github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= 437 + github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= 438 + github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= 439 + github.com/fatih/set v0.2.1 h1:nn2CaJyknWE/6txyUDGwysr3G5QC6xWB/PtVjPBbeaA= 440 + github.com/fatih/set v0.2.1/go.mod h1:+RKtMCH+favT2+3YecHGxcc0b4KyVWA1QWWJUs4E0CI= 441 + github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw= 442 + github.com/felixge/fgprof v0.9.5 h1:8+vR6yu2vvSKn08urWyEuxx75NWPEvybbkBirEpsbVY= 443 + github.com/felixge/fgprof v0.9.5/go.mod h1:yKl+ERSa++RYOs32d8K6WEXCB4uXdLls4ZaZPpayhMM= 67 444 github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= 68 445 github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= 69 446 github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= 70 447 github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= 448 + github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= 449 + github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= 450 + github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= 451 + github.com/gabriel-vasile/mimetype v1.4.10 h1:zyueNbySn/z8mJZHLt6IPw0KoZsiQNszIpU+bX4+ZK0= 452 + github.com/gabriel-vasile/mimetype v1.4.10/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= 453 + github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= 454 + github.com/github/go-spdx/v2 v2.3.4 h1:6VNAsYWvQge+SOeoubTlH81MY21d5uekXNIRGfXMNXo= 455 + github.com/github/go-spdx/v2 v2.3.4/go.mod h1:7LYNCshU2Gj17qZ0heJ5CQUKWWmpd98K7o93K8fJSMk= 456 + github.com/glebarez/go-sqlite v1.22.0 h1:uAcMJhaA6r3LHMTFgP0SifzgXg46yJkgxqyuyec+ruQ= 457 + github.com/glebarez/go-sqlite v1.22.0/go.mod h1:PlBIdHe0+aUEFn+r2/uthrWq4FxbzugL0L8Li6yQJbc= 458 + github.com/glebarez/sqlite v1.11.0 h1:wSG0irqzP6VurnMEpFGer5Li19RpIRi2qvQz++w0GMw= 459 + github.com/glebarez/sqlite v1.11.0/go.mod h1:h8/o8j5wiAsqSPoWELDUdJXhjAhsVliSn7bWZjOhrgQ= 460 + github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c= 461 + github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU= 71 462 github.com/go-chi/chi/v5 v5.2.3 h1:WQIt9uxdsAbgIYgid+BpYc+liqQZGMHRaUwp0JUcvdE= 72 463 github.com/go-chi/chi/v5 v5.2.3/go.mod h1:L2yAIGWB3H+phAw1NxKwWM+7eUH/lU8pOMm5hHcoops= 464 + github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= 465 + github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= 466 + github.com/go-git/go-billy/v5 v5.6.2 h1:6Q86EsPXMa7c3YZ3aLAQsMA0VlWmy43r6FHqa/UNbRM= 467 + github.com/go-git/go-billy/v5 v5.6.2/go.mod h1:rcFC2rAsp/erv7CMz9GczHcuD0D32fWzH+MJAU+jaUU= 468 + github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= 469 + github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII= 470 + github.com/go-git/go-git/v5 v5.16.3 h1:Z8BtvxZ09bYm/yYNgPKCzgWtaRqDTgIKRgIRHBfU6Z8= 471 + github.com/go-git/go-git/v5 v5.16.3/go.mod h1:4Ge4alE/5gPs30F2H1esi2gPd69R0C39lolkucHBOp8= 472 + github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= 473 + github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= 474 + github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= 73 475 github.com/go-jose/go-jose/v4 v4.1.2 h1:TK/7NqRQZfgAh+Td8AlsrvtPoUyiHh0LqVvokh+1vHI= 74 476 github.com/go-jose/go-jose/v4 v4.1.2/go.mod h1:22cg9HWM1pOlnRiY+9cQYJ9XHmya1bYW8OeDM6Ku6Oo= 75 477 github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= 478 + github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= 76 479 github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= 77 480 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= 78 481 github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= 79 - github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= 80 - github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= 482 + github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= 483 + github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= 81 484 github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= 82 485 github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= 83 486 github.com/go-redis/redis v6.15.9+incompatible h1:K0pv1D7EQUjfyoMql+r/jZqCLizCGKFlFgcHWWmHQjg= 84 487 github.com/go-redis/redis v6.15.9+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= 488 + github.com/go-restruct/restruct v1.2.0-alpha h1:2Lp474S/9660+SJjpVxoKuWX09JsXHSrdV7Nv3/gkvc= 489 + github.com/go-restruct/restruct v1.2.0-alpha/go.mod h1:KqrpKpn4M8OLznErihXTGLlsXFGeLxHUrLRRI/1YjGk= 490 + github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= 85 491 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= 492 + github.com/go-test/deep v1.1.1 h1:0r/53hagsehfO4bzD2Pgr/+RgHqhmf+k1Bpse2cTu1U= 493 + github.com/go-test/deep v1.1.1/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= 494 + github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs= 495 + github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= 86 496 github.com/go-yaml/yaml v2.1.0+incompatible/go.mod h1:w2MrLa16VYP0jy6N7M5kHaCkaLENm+P+Tv+MfurjSw0= 497 + github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM= 498 + github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= 499 + github.com/gobwas/ws v1.2.1/go.mod h1:hRKAFb8wOxFROYNsT1bqfWnhX+b5MFeJM9r2ZSwg/KY= 500 + github.com/goccy/go-yaml v1.18.0 h1:8W7wMFS12Pcas7KU+VVkaiCng+kG8QiFeFwzFb+rwuw= 501 + github.com/goccy/go-yaml v1.18.0/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= 87 502 github.com/gocql/gocql v1.7.0 h1:O+7U7/1gSN7QTEAaMEsJc1Oq2QHXvCWoF3DFK9HDHus= 88 503 github.com/gocql/gocql v1.7.0/go.mod h1:vnlvXyFZeLBF0Wy+RS8hrOdbn0UWsWtdg07XJnFxZ+4= 504 + github.com/gocsaf/csaf/v3 v3.3.0 h1:zQwCgBJfMMM/Q5vuIuj8eo5fVLcCKpaBa3t5uw6ku1U= 505 + github.com/gocsaf/csaf/v3 v3.3.0/go.mod h1:cDvnE5tnrO37OcOGWJsOl3mgfZjA4/EuC7TlDVRLGos= 89 506 github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= 90 507 github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= 91 508 github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= 92 509 github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= 510 + github.com/gohugoio/hashstructure v0.6.0 h1:7wMB/2CfXoThFYhdWRGv3u3rUM761Cq29CxUW+NltUg= 511 + github.com/gohugoio/hashstructure v0.6.0/go.mod h1:lapVLk9XidheHG1IQ4ZSbyYrXcaILU1ZEP/+vno5rBQ= 93 512 github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= 94 513 github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= 514 + github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= 515 + github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 516 + github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 517 + github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 518 + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 519 + github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= 520 + github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw= 521 + github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= 522 + github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= 523 + github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= 524 + github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= 525 + github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= 526 + github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= 527 + github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= 528 + github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= 529 + github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= 95 530 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= 96 531 github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= 97 532 github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= 533 + github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= 534 + github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= 535 + github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= 536 + github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= 537 + github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= 538 + github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= 539 + github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= 540 + github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= 541 + github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= 542 + github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= 543 + github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= 544 + github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= 545 + github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= 546 + github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= 98 547 github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= 99 548 github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= 100 549 github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= 101 - github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= 102 - github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= 550 + github.com/golang/snappy v1.0.0 h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs= 551 + github.com/golang/snappy v1.0.0/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= 552 + github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= 553 + github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= 554 + github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= 103 555 github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= 556 + github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= 557 + github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 558 + github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 559 + github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 560 + github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 104 561 github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 562 + github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 563 + github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 564 + github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 565 + github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 566 + github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 567 + github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 105 568 github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= 106 569 github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= 570 + github.com/google/go-containerregistry v0.20.6 h1:cvWX87UxxLgaH76b4hIvya6Dzz9qHB31qAwjAohdSTU= 571 + github.com/google/go-containerregistry v0.20.6/go.mod h1:T0x8MuoAoKX/873bkeSfLD2FAkwCDf9/HZgsFJ02E2Y= 107 572 github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= 108 573 github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= 109 574 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= 110 575 github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= 111 576 github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= 577 + github.com/google/licensecheck v0.3.1 h1:QoxgoDkaeC4nFrtGN1jV7IPmDCHFNIVh54e5hSt6sPs= 578 + github.com/google/licensecheck v0.3.1/go.mod h1:ORkR35t/JjW+emNKtfJDII0zlciG9JgbT7SmsohlHmY= 579 + github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= 580 + github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= 581 + github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= 582 + github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= 583 + github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= 584 + github.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc= 585 + github.com/google/martian/v3 v3.3.3/go.mod h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1E6RWzmBA0= 586 + github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= 587 + github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= 588 + github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= 589 + github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= 590 + github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= 591 + github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= 592 + github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= 593 + github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= 594 + github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= 595 + github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= 596 + github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= 597 + github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= 598 + github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= 599 + github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= 600 + github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg= 601 + github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= 602 + github.com/google/pprof v0.0.0-20250630185457-6e76a2b096b5 h1:xhMrHhTJ6zxu3gA4enFM9MLn9AY7613teCdFnlUVbSQ= 603 + github.com/google/pprof v0.0.0-20250630185457-6e76a2b096b5/go.mod h1:5hDyRhoBCxViHszMt12TnOpEI4VVi+U8Gm9iphldiMA= 112 604 github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= 605 + github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0= 606 + github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM= 607 + github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 113 608 github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= 114 609 github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 610 + github.com/googleapis/enterprise-certificate-proxy v0.3.6 h1:GW/XbdyBFQ8Qe+YAmFU9uHLo7OnF5tL52HFAgMmyrf4= 611 + github.com/googleapis/enterprise-certificate-proxy v0.3.6/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA= 612 + github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= 613 + github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= 614 + github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= 615 + github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= 616 + github.com/googleapis/gax-go/v2 v2.15.0 h1:SyjDc1mGgZU5LncH8gimWo9lW1DtIfPibOG81vgd/bo= 617 + github.com/googleapis/gax-go/v2 v2.15.0/go.mod h1:zVVkkxAQHa1RQpg9z2AUCMnKhi0Qld9rcmyfL1OZhoc= 618 + github.com/gookit/assert v0.1.1 h1:lh3GcawXe/p+cU7ESTZ5Ui3Sm/x8JWpIis4/1aF0mY0= 619 + github.com/gookit/assert v0.1.1/go.mod h1:jS5bmIVQZTIwk42uXl4lyj4iaaxx32tqH16CFj0VX2E= 620 + github.com/gookit/color v1.2.5/go.mod h1:AhIE+pS6D4Ql0SQWbBeXPHw7gY0/sjHoA4s/n1KB7xg= 621 + github.com/gookit/color v1.6.0 h1:JjJXBTk1ETNyqyilJhkTXJYYigHG24TM9Xa2M1xAhRA= 622 + github.com/gookit/color v1.6.0/go.mod h1:9ACFc7/1IpHGBW8RwuDm/0YEnhg3dwwXpoMsmtyHfjs= 115 623 github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= 116 624 github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= 117 625 github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8= ··· 122 630 github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= 123 631 github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= 124 632 github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= 125 - github.com/grpc-ecosystem/grpc-gateway/v2 v2.23.0 h1:ad0vkEBuk23VJzZR9nkLVG0YAoN9coASF1GusYX6AlU= 126 - github.com/grpc-ecosystem/grpc-gateway/v2 v2.23.0/go.mod h1:igFoXX2ELCW06bol23DWPB5BEWfZISOzSP5K2sbLea0= 633 + github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= 634 + github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0 h1:TmHmbvxPmaegwhDubVz0lICL0J5Ka2vwTzhoePEXsGE= 635 + github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0/go.mod h1:qztMSjm835F2bXf+5HKAPIS5qsmQDqZna/PgVt4rWtI= 127 636 github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed h1:5upAirOpQc1Q53c0bnx2ufif5kANL7bfZWcc6VJWJd8= 128 637 github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4= 638 + github.com/hako/durafmt v0.0.0-20210608085754-5c1018a4e16b h1:wDUNC2eKiL35DbLvsDhiblTUXHxcOPwQSCzi7xpQUN4= 639 + github.com/hako/durafmt v0.0.0-20210608085754-5c1018a4e16b/go.mod h1:VzxiSdG6j1pi7rwGm/xYI5RbtpBgM8sARDXlvEvxlu0= 640 + github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.65 h1:81+kWbE1yErFBMjME0I5k3x3kojjKsWtPYHEAutoPow= 641 + github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.65/go.mod h1:WtMzv9T++tfWVea+qB2MXoaqxw33S8bpJslzUike2mQ= 642 + github.com/hashicorp/consul/api v1.11.0/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= 643 + github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= 644 + github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= 645 + github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= 646 + github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= 647 + github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= 648 + github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= 129 649 github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= 130 650 github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= 131 - github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxCsHI= 651 + github.com/hashicorp/go-getter v1.8.2 h1:CGCK+bZQLl44PYiwJweVzfpjg7bBwtuXu3AGcLiod2o= 652 + github.com/hashicorp/go-getter v1.8.2/go.mod h1:CUTt9x2bCtJ/sV8ihgrITL3IUE+0BE1j/e4n5P/GIM4= 132 653 github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= 654 + github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= 655 + github.com/hashicorp/go-hclog v1.0.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= 656 + github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= 657 + github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= 658 + github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= 659 + github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= 660 + github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= 661 + github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= 662 + github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= 663 + github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= 664 + github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= 665 + github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= 133 666 github.com/hashicorp/go-retryablehttp v0.7.5 h1:bJj+Pj19UZMIweq/iie+1u5YCdGrnxCT9yvm0e+Nd5M= 134 667 github.com/hashicorp/go-retryablehttp v0.7.5/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= 668 + github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= 669 + github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= 670 + github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= 671 + github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= 672 + github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= 673 + github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= 674 + github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= 675 + github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= 676 + github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= 677 + github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= 135 678 github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= 136 679 github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= 137 680 github.com/hashicorp/golang-lru/arc/v2 v2.0.6 h1:4NU7uP5vSoK6TbaMj3NtY478TTAWLso/vL1gpNrInHg= 138 681 github.com/hashicorp/golang-lru/arc/v2 v2.0.6/go.mod h1:cfdDIX05DWvYV6/shsxDfa/OVcRieOt+q4FnM8x+Xno= 139 682 github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= 140 683 github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= 684 + github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= 685 + github.com/hashicorp/hcl/v2 v2.24.0 h1:2QJdZ454DSsYGoaE6QheQZjtKZSUs9Nh2izTWiwQxvE= 686 + github.com/hashicorp/hcl/v2 v2.24.0/go.mod h1:oGoO1FIQYfn/AgyOhlg9qLC6/nOJPX3qGbkZpYAcqfM= 687 + github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= 688 + github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= 689 + github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= 690 + github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= 691 + github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= 692 + github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= 693 + github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= 694 + github.com/huandu/xstrings v1.5.0 h1:2ag3IFq9ZDANvthTwTiqSSZLjDc+BedvHPAp5tJy2TI= 695 + github.com/huandu/xstrings v1.5.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= 141 696 github.com/huin/goupnp v1.0.3 h1:N8No57ls+MnjlB+JPiCVSOyy/ot7MJTqlo7rn+NYSqQ= 142 697 github.com/huin/goupnp v1.0.3/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= 698 + github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= 699 + github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI= 700 + github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= 701 + github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= 702 + github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= 703 + github.com/ianlancetaylor/demangle v0.0.0-20210905161508-09a460cdf81d/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= 704 + github.com/ianlancetaylor/demangle v0.0.0-20230524184225-eabc099b10ab/go.mod h1:gx7rwoVhcfuVKG5uya9Hs3Sxj7EIvldVofAWIUtGouw= 705 + github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= 143 706 github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= 144 707 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= 145 708 github.com/ipfs/bbloom v0.0.4 h1:Gi+8EGJ2y5qiD5FbsbpX/TMNcJw8gSqr7eyjHa4Fhvs= ··· 216 779 github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= 217 780 github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= 218 781 github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= 782 + github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= 783 + github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= 219 784 github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0o= 220 785 github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= 786 + github.com/jinzhu/copier v0.4.0 h1:w3ciUoD19shMCRargcpm0cm91ytaBhDvuRpz1ODO/U8= 787 + github.com/jinzhu/copier v0.4.0/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg= 221 788 github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= 222 789 github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= 223 790 github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= ··· 226 793 github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= 227 794 github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= 228 795 github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= 796 + github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= 229 797 github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= 230 798 github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= 799 + github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= 800 + github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= 801 + github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= 802 + github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= 803 + github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= 231 804 github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= 232 805 github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= 233 806 github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= 807 + github.com/kastenhq/goversion v0.0.0-20230811215019-93b2f8823953 h1:WdAeg/imY2JFPc/9CST4bZ80nNJbiBFCAdSZCSgrS5Y= 808 + github.com/kastenhq/goversion v0.0.0-20230811215019-93b2f8823953/go.mod h1:6o+UrvuZWc4UTyBhQf0LGjW9Ld7qJxLz/OqvSOWWlEc= 809 + github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= 810 + github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= 234 811 github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= 235 812 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= 813 + github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= 236 814 github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= 237 815 github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= 816 + github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= 238 817 github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM= 239 818 github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= 819 + github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU= 820 + github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= 821 + github.com/knqyf263/go-apk-version v0.0.0-20200609155635-041fdbb8563f h1:GvCU5GXhHq+7LeOzx/haG7HSIZokl3/0GkoUFzsRJjg= 822 + github.com/knqyf263/go-apk-version v0.0.0-20200609155635-041fdbb8563f/go.mod h1:q59u9px8b7UTj0nIjEjvmTWekazka6xIt6Uogz5Dm+8= 823 + github.com/knqyf263/go-deb-version v0.0.0-20241115132648-6f4aee6ccd23 h1:dWzdsqjh1p2gNtRKqNwuBvKqMNwnLOPLzVZT1n6DK7s= 824 + github.com/knqyf263/go-deb-version v0.0.0-20241115132648-6f4aee6ccd23/go.mod h1:lUaIXCWzf7BRKTY5iEcrYy1TfgbYLYVIS/B2vPkJzOc= 240 825 github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= 241 826 github.com/koron/go-ssdp v0.0.3 h1:JivLMY45N76b4p/vsWGOKewBQu6uf39y8l+AQ7sDKx8= 242 827 github.com/koron/go-ssdp v0.0.3/go.mod h1:b2MxI6yh02pKrsyNoQUsk4+YNikaGhe4894J+Q5lDvA= 828 + github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= 243 829 github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= 244 830 github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= 831 + github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= 245 832 github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= 246 833 github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= 247 834 github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= ··· 250 837 github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= 251 838 github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= 252 839 github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= 840 + github.com/ledongthuc/pdf v0.0.0-20220302134840-0c2507a12d80/go.mod h1:imJHygn/1yfhB7XSJJKlFZKl/J+dCPAknuiaGOshXAs= 253 841 github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= 254 842 github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= 255 843 github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38yPW7c= ··· 268 856 github.com/libp2p/go-nat v0.1.0/go.mod h1:X7teVkwRHNInVNWQiO/tAiAVRwSr5zoRz4YSTC3uRBM= 269 857 github.com/libp2p/go-netroute v0.2.1 h1:V8kVrpD8GK0Riv15/7VN6RbUQ3URNZVosw7H2v9tksU= 270 858 github.com/libp2p/go-netroute v0.2.1/go.mod h1:hraioZr0fhBjG0ZRXJJ6Zj2IVEVNx6tDTFQfSmcq7mQ= 859 + github.com/logrusorgru/aurora v2.0.3+incompatible h1:tOpm7WcpBTn4fjmVfgpQq0EfczGlG91VSDkswnjF5A8= 860 + github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= 861 + github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= 862 + github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= 863 + github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w= 864 + github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= 865 + github.com/magiconair/properties v1.8.10 h1:s31yESBquKXCV9a/ScB3ESkOjUYYv+X0rg8SYxI99mE= 866 + github.com/magiconair/properties v1.8.10/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= 867 + github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= 868 + github.com/masahiro331/go-mvn-version v0.0.0-20250131095131-f4974fa13b8a h1:eLvAzVoRfHEOl64OxFhepPf3vj7SKvXY/tFc3BS0b7s= 869 + github.com/masahiro331/go-mvn-version v0.0.0-20250131095131-f4974fa13b8a/go.mod h1:jZ3F25l7DbD7l7DcA8aj7eo1EZ84nbzcQHBB4lCSrI8= 870 + github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= 871 + github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= 872 + github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= 873 + github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= 874 + github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= 875 + github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= 876 + github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= 877 + github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= 878 + github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= 879 + github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= 880 + github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= 881 + github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= 271 882 github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= 272 883 github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= 273 884 github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= 885 + github.com/mattn/go-localereader v0.0.2-0.20220822084749-2491eb6c1c75 h1:P8UmIzZMYDR+NGImiFvErt6VWfIRPuGM+vyjiEdkmIw= 886 + github.com/mattn/go-localereader v0.0.2-0.20220822084749-2491eb6c1c75/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88= 887 + github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= 888 + github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= 274 889 github.com/mattn/go-sqlite3 v1.14.32 h1:JD12Ag3oLy1zQA+BNn74xRgaBbdhbNIDYvQUEuuErjs= 275 890 github.com/mattn/go-sqlite3 v1.14.32/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= 276 891 github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= 892 + github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI= 893 + github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= 894 + github.com/mholt/archives v0.1.5 h1:Fh2hl1j7VEhc6DZs2DLMgiBNChUux154a1G+2esNvzQ= 895 + github.com/mholt/archives v0.1.5/go.mod h1:3TPMmBLPsgszL+1As5zECTuKwKvIfj6YcwWPpeTAXF4= 277 896 github.com/microcosm-cc/bluemonday v1.0.27 h1:MpEUotklkwCSLeH+Qdx1VJgNqLlpY2KXwXFM08ygZfk= 278 897 github.com/microcosm-cc/bluemonday v1.0.27/go.mod h1:jFi9vgW+H7c3V0lb6nR74Ib/DIB5OBs92Dimizgw2cA= 898 + github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= 899 + github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= 900 + github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= 279 901 github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA= 280 902 github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= 903 + github.com/mikelolasagasti/xz v1.0.1 h1:Q2F2jX0RYJUG3+WsM+FJknv+6eVjsjXNDV0KJXZzkD0= 904 + github.com/mikelolasagasti/xz v1.0.1/go.mod h1:muAirjiOUxPRXwm9HdDtB3uoRPrGnL85XHtokL9Hcgc= 905 + github.com/minio/minlz v1.0.1 h1:OUZUzXcib8diiX+JYxyRLIdomyZYzHct6EShOKtQY2A= 906 + github.com/minio/minlz v1.0.1/go.mod h1:qT0aEB35q79LLornSzeDH75LBf3aH1MV+jB5w9Wasec= 281 907 github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= 282 908 github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= 909 + github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= 910 + github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= 911 + github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= 912 + github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= 913 + github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= 914 + github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= 915 + github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= 916 + github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= 917 + github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= 918 + github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= 919 + github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= 920 + github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= 921 + github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= 922 + github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= 923 + github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= 924 + github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= 925 + github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= 926 + github.com/moby/sys/atomicwriter v0.1.0 h1:kw5D/EqkBwsBFi0ss9v1VG3wIkVhzGvLklJ+w3A14Sw= 927 + github.com/moby/sys/atomicwriter v0.1.0/go.mod h1:Ul8oqv2ZMNHOceF643P6FKPXeCmYtlQMvpizfsSoaWs= 928 + github.com/moby/sys/mountinfo v0.7.2 h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9KouLrg= 929 + github.com/moby/sys/mountinfo v0.7.2/go.mod h1:1YOa8w8Ih7uW0wALDUgT1dTTSBrZ+HiBLGws92L2RU4= 930 + github.com/moby/sys/sequential v0.6.0 h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7zgvCU= 931 + github.com/moby/sys/sequential v0.6.0/go.mod h1:uyv8EUTrca5PnDsdMGXhZe6CCe8U/UiTWd+lL+7b/Ko= 932 + github.com/moby/sys/signal v0.7.1 h1:PrQxdvxcGijdo6UXXo/lU/TvHUWyPhj7UOpSo8tuvk0= 933 + github.com/moby/sys/signal v0.7.1/go.mod h1:Se1VGehYokAkrSQwL4tDzHvETwUZlnY7S5XtQ50mQp8= 934 + github.com/moby/sys/user v0.4.0 h1:jhcMKit7SA80hivmFJcbB1vqmw//wU61Zdui2eQXuMs= 935 + github.com/moby/sys/user v0.4.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs= 936 + github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g= 937 + github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28= 938 + github.com/moby/term v0.5.2 h1:6qk3FJAFDs6i/q3W/pQ97SX192qKfZgGjCQqfCJkgzQ= 939 + github.com/moby/term v0.5.2/go.mod h1:d3djjFCrjnB+fl8NJux+EJzu0msscUP+f8it8hPkFLc= 283 940 github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= 284 941 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= 285 942 github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= 286 943 github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= 944 + github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= 945 + github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= 946 + github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= 287 947 github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= 288 948 github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= 949 + github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI= 950 + github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo= 951 + github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA= 952 + github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo= 953 + github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc= 954 + github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk= 289 955 github.com/multiformats/go-base32 v0.1.0 h1:pVx9xoSPqEIQG8o+UbAe7DNi51oej1NtK+aGkbLYxPE= 290 956 github.com/multiformats/go-base32 v0.1.0/go.mod h1:Kj3tFY6zNr+ABYMqeUNeGvkIC/UYgtWibDcT0rExnbI= 291 957 github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9rQyccr0= ··· 309 975 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= 310 976 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= 311 977 github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= 978 + github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= 979 + github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= 980 + github.com/nix-community/go-nix v0.0.0-20250101154619-4bdde671e0a1 h1:kpt9ZfKcm+EDG4s40hMwE//d5SBgDjUOrITReV2u4aA= 981 + github.com/nix-community/go-nix v0.0.0-20250101154619-4bdde671e0a1/go.mod h1:qgCw4bBKZX8qMgGeEZzGFVT3notl42dBjNqO2jut0M0= 982 + github.com/nsf/jsondiff v0.0.0-20210926074059-1e845ec5d249 h1:NHrXEjTNQY7P0Zfx1aMrNhpgxHmow66XQtm0aQLY0AE= 983 + github.com/nsf/jsondiff v0.0.0-20210926074059-1e845ec5d249/go.mod h1:mpRZBD8SJ55OIICQ3iWH0Yz3cjzA61JdqMLoWXeB2+8= 984 + github.com/nwaples/rardecode v1.1.3 h1:cWCaZwfM5H7nAD6PyEdcVnczzV8i/JtotnyW/dD9lEc= 985 + github.com/nwaples/rardecode v1.1.3/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= 986 + github.com/nwaples/rardecode/v2 v2.2.0 h1:4ufPGHiNe1rYJxYfehALLjup4Ls3ck42CWwjKiOqu0A= 987 + github.com/nwaples/rardecode/v2 v2.2.0/go.mod h1:7uz379lSxPe6j9nvzxUZ+n7mnJNgjsRNb6IbvGVHRmw= 988 + github.com/olekukonko/errors v1.1.0 h1:RNuGIh15QdDenh+hNvKrJkmxxjV4hcS50Db478Ou5sM= 989 + github.com/olekukonko/errors v1.1.0/go.mod h1:ppzxA5jBKcO1vIpCXQ9ZqgDh8iwODz6OXIGKU8r5m4Y= 990 + github.com/olekukonko/ll v0.0.9 h1:Y+1YqDfVkqMWuEQMclsF9HUR5+a82+dxJuL1HHSRpxI= 991 + github.com/olekukonko/ll v0.0.9/go.mod h1:En+sEW0JNETl26+K8eZ6/W4UQ7CYSrrgg/EdIYT2H8g= 992 + github.com/olekukonko/tablewriter v1.1.0 h1:N0LHrshF4T39KvI96fn6GT8HEjXRXYNDrDjKFDB7RIY= 993 + github.com/olekukonko/tablewriter v1.1.0/go.mod h1:5c+EBPeSqvXnLLgkm9isDdzR3wjfBkHR9Nhfp3NWrzo= 994 + github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= 995 + github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= 312 996 github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= 313 997 github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= 314 - github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= 315 - github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= 998 + github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040= 999 + github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M= 1000 + github.com/opencontainers/runtime-spec v1.2.1 h1:S4k4ryNgEpxW1dzyqffOmhI1BHYcjzU8lpJfSlR0xww= 1001 + github.com/opencontainers/runtime-spec v1.2.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= 1002 + github.com/opencontainers/selinux v1.12.0 h1:6n5JV4Cf+4y0KNXW48TLj5DwfXpvWlxXplUkdTrmPb8= 1003 + github.com/opencontainers/selinux v1.12.0/go.mod h1:BTPX+bjVbWGXw7ZZWUbdENt8w0htPSrlgOOysQaU62U= 316 1004 github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= 317 1005 github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= 1006 + github.com/openvex/go-vex v0.2.7 h1:/pN3bqvS4QOc6WkkL0hbKzJuAtsUD9vmvk9IZkzD3Zc= 1007 + github.com/openvex/go-vex v0.2.7/go.mod h1:ZyQC3NXl9jjS53JOpBG3LAUXySkW8IlJ/GIhsnf5D54= 1008 + github.com/orisano/pixelmatch v0.0.0-20220722002657-fb0b55479cde/go.mod h1:nZgzbfBr3hhjoZnS66nKrHmduYNpc34ny7RK4z5/HM0= 1009 + github.com/package-url/packageurl-go v0.1.3 h1:4juMED3hHiz0set3Vq3KeQ75KD1avthoXLtmE3I0PLs= 1010 + github.com/package-url/packageurl-go v0.1.3/go.mod h1:nKAWB8E6uk1MHqiS/lQb9pYBGH2+mdJ2PJc2s50dQY0= 1011 + github.com/pandatix/go-cvss v0.6.2 h1:TFiHlzUkT67s6UkelHmK6s1INKVUG7nlKYiWWDTITGI= 1012 + github.com/pandatix/go-cvss v0.6.2/go.mod h1:jDXYlQBZrc8nvrMUVVvTG8PhmuShOnKrxP53nOFkt8Q= 1013 + github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= 1014 + github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= 1015 + github.com/pborman/indent v1.2.1 h1:lFiviAbISHv3Rf0jcuh489bi06hj98JsVMtIDZQb9yM= 1016 + github.com/pborman/indent v1.2.1/go.mod h1:FitS+t35kIYtB5xWTZAPhnmrxcciEEOdbyrrpz5K6Vw= 1017 + github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= 1018 + github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= 1019 + github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= 1020 + github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= 1021 + github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= 318 1022 github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9 h1:1/WtZae0yGtPq+TI6+Tv1WTxkukpXeMlviSxvL7SRgk= 319 1023 github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9/go.mod h1:x3N5drFsm2uilKKuuYo6LdyD8vZAW55sH/9w+pbo1sw= 1024 + github.com/pierrec/lz4/v4 v4.1.22 h1:cKFw6uJDK+/gfw5BcDL0JL5aBsAFdsIT18eRtLj7VIU= 1025 + github.com/pierrec/lz4/v4 v4.1.22/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= 1026 + github.com/pjbgf/sha1cd v0.4.0 h1:NXzbL1RvjTUi6kgYZCX3fPwwl27Q1LJndxtUDVfJGRY= 1027 + github.com/pjbgf/sha1cd v0.4.0/go.mod h1:zQWigSxVmsHEZow5qaLtPYxpcKMMQpa09ixqBxuCS6A= 320 1028 github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 321 1029 github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 322 - github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 1030 + github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= 1031 + github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 1032 + github.com/pkg/profile v1.7.0 h1:hnbDkaNWPCLMO9wGLdBFTIZvzDrDfBM2072E1S9gJkA= 1033 + github.com/pkg/profile v1.7.0/go.mod h1:8Uer0jas47ZQMJ7VD+OHknK4YDY07LPUC6dEvqDjvNo= 1034 + github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= 1035 + github.com/pkg/xattr v0.4.12 h1:rRTkSyFNTRElv6pkA3zpjHpQ90p/OdHQC1GmGh1aTjM= 1036 + github.com/pkg/xattr v0.4.12/go.mod h1:di8WF84zAKk8jzR1UBTEWh9AUlIZZ7M/JNt8e9B6ktU= 1037 + github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= 1038 + github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= 323 1039 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 1040 + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= 1041 + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 324 1042 github.com/polydawn/refmt v0.89.1-0.20221221234430-40501e09de1f h1:VXTQfuJj9vKR4TCkEuWIckKvdHFeJH/huIFJ9/cXOB0= 325 1043 github.com/polydawn/refmt v0.89.1-0.20221221234430-40501e09de1f/go.mod h1:/zvteZs/GwLtCgZ4BL6CBsk9IKIlexP43ObX9AxTqTw= 1044 + github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= 1045 + github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= 326 1046 github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= 327 1047 github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= 328 1048 github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= 1049 + github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= 329 1050 github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y= 330 1051 github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= 331 1052 github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= 332 1053 github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= 1054 + github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= 1055 + github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= 333 1056 github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= 334 1057 github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= 335 1058 github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= 336 1059 github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= 1060 + github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= 337 1061 github.com/prometheus/common v0.60.1 h1:FUas6GcOw66yB/73KC+BOZoFJmbo/1pojoILArPAaSc= 338 1062 github.com/prometheus/common v0.60.1/go.mod h1:h0LYf1R1deLSKtD4Vdg8gy4RuOvENW2J/h19V5NADQw= 339 1063 github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= 340 1064 github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= 341 1065 github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= 1066 + github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= 342 1067 github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= 343 1068 github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= 344 1069 github.com/redis/go-redis/extra/rediscmd/v9 v9.0.5 h1:EaDatTxkdHG+U3Bk4EUr+DZ7fOGwTfezUiUJMaIcaho= ··· 348 1073 github.com/redis/go-redis/v9 v9.0.5/go.mod h1:WqMKv5vnQbRuZstUwxQI195wHy+t4PuXDOjzMvcuQHk= 349 1074 github.com/redis/go-redis/v9 v9.7.3 h1:YpPyAayJV+XErNsatSElgRZZVCwXX9QzkKYNvO7x0wM= 350 1075 github.com/redis/go-redis/v9 v9.7.3/go.mod h1:bGUrSggJ9X9GUmZpZNEOQKaANxSGgOEBRltRTZHSvrA= 1076 + github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= 1077 + github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= 1078 + github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= 1079 + github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= 1080 + github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= 1081 + github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= 351 1082 github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= 352 - github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= 353 - github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= 1083 + github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= 1084 + github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= 354 1085 github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= 355 1086 github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= 1087 + github.com/rust-secure-code/go-rustaudit v0.0.0-20250226111315-e20ec32e963c h1:8gOLsYwaY2JwlTMT4brS5/9XJdrdIbmk2obvQ748CC0= 1088 + github.com/rust-secure-code/go-rustaudit v0.0.0-20250226111315-e20ec32e963c/go.mod h1:kwM/7r/rVluTE8qJbHAffduuqmSv4knVQT2IajGvSiA= 1089 + github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk= 1090 + github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= 1091 + github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43MRiaGWX1Nig= 1092 + github.com/sagikazarmark/locafero v0.9.0 h1:GbgQGNtTrEmddYDSAH9QLRyfAHY12md+8YFTqyMTC9k= 1093 + github.com/sagikazarmark/locafero v0.9.0/go.mod h1:UBUyz37V+EdMS3hDF3QWIiVr/2dPrx49OMO0Bn0hJqk= 1094 + github.com/sahilm/fuzzy v0.1.1 h1:ceu5RHF8DGgoi+/dR5PsECjCDH1BE3Fnmpo7aVXOdRA= 1095 + github.com/sahilm/fuzzy v0.1.1/go.mod h1:VFvziUEIMCrT6A6tw2RFIXPXXmzXbOsSHF0DOI8ZK9Y= 1096 + github.com/saintfish/chardet v0.0.0-20230101081208-5e3ef4b5456d h1:hrujxIzL1woJ7AwssoOcM/tq5JjjG2yYOc8odClEiXA= 1097 + github.com/saintfish/chardet v0.0.0-20230101081208-5e3ef4b5456d/go.mod h1:uugorj2VCxiV1x+LzaIdVa9b4S4qGAcH6cbhh4qVxOU= 1098 + github.com/sanity-io/litter v1.5.8 h1:uM/2lKrWdGbRXDrIq08Lh9XtVYoeGtcQxk9rtQ7+rYg= 1099 + github.com/sanity-io/litter v1.5.8/go.mod h1:9gzJgR2i4ZpjZHsKvUXIRQVk7P+yM3e+jAF7bU2UI5U= 1100 + github.com/santhosh-tekuri/jsonschema/v6 v6.0.2 h1:KRzFb2m7YtdldCEkzs6KqmJw4nqEVZGK7IN2kJkjTuQ= 1101 + github.com/santhosh-tekuri/jsonschema/v6 v6.0.2/go.mod h1:JXeL+ps8p7/KNMjDQk3TCwPpBy0wYklyWTfbkIzdIFU= 1102 + github.com/sassoftware/go-rpmutils v0.4.0 h1:ojND82NYBxgwrV+mX1CWsd5QJvvEZTKddtCdFLPWhpg= 1103 + github.com/sassoftware/go-rpmutils v0.4.0/go.mod h1:3goNWi7PGAT3/dlql2lv3+MSN5jNYPjT5mVcQcIsYzI= 1104 + github.com/scylladb/go-set v1.0.3-0.20200225121959-cc7b2070d91e h1:7q6NSFZDeGfvvtIRwBrU/aegEYJYmvev0cHAwo17zZQ= 1105 + github.com/scylladb/go-set v1.0.3-0.20200225121959-cc7b2070d91e/go.mod h1:DkpGd78rljTxKAnTDPFqXSGxvETQnJyuSOQwsHycqfs= 1106 + github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= 1107 + github.com/sebdah/goldie/v2 v2.7.1 h1:PkBHymaYdtvEkZV7TmyqKxdmn5/Vcj+8TpATWZjnG5E= 1108 + github.com/sebdah/goldie/v2 v2.7.1/go.mod h1:oZ9fp0+se1eapSRjfYbsV/0Hqhbuu3bJVvKI/NNtssI= 1109 + github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= 1110 + github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= 1111 + github.com/sergi/go-diff v1.4.0 h1:n/SP9D5ad1fORl+llWyN+D6qoUETXNZARKjyY2/KVCw= 1112 + github.com/sergi/go-diff v1.4.0/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= 1113 + github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= 1114 + github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= 1115 + github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= 356 1116 github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= 357 1117 github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= 358 - github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= 359 - github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= 1118 + github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= 1119 + github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= 1120 + github.com/sirupsen/logrus v1.9.4-0.20230606125235-dd1b4c2e81af h1:Sp5TG9f7K39yfB+If0vjp97vuT74F72r8hfRpP8jLU0= 1121 + github.com/sirupsen/logrus v1.9.4-0.20230606125235-dd1b4c2e81af/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= 1122 + github.com/skeema/knownhosts v1.3.1 h1:X2osQ+RAjK76shCbvhHHHVl3ZlgDm8apHEHFqRjnBY8= 1123 + github.com/skeema/knownhosts v1.3.1/go.mod h1:r7KTdC8l4uxWRyK2TpQZ/1o5HaSzh06ePQNxPwTcfiY= 360 1124 github.com/smartystreets/assertions v1.2.0 h1:42S6lae5dvLc7BrLu/0ugRtcFVjoJNMC/N3yZFZkDFs= 361 1125 github.com/smartystreets/assertions v1.2.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo= 362 1126 github.com/smartystreets/goconvey v1.7.2 h1:9RBaZCeXEQ3UselpuwUQHltGVXvdwm6cv1hgR6gDIPg= 363 1127 github.com/smartystreets/goconvey v1.7.2/go.mod h1:Vw0tHAZW6lzCRk3xgdin6fKYcG+G3Pg9vgXWeJpQFMM= 1128 + github.com/sorairolake/lzip-go v0.3.8 h1:j5Q2313INdTA80ureWYRhX+1K78mUXfMoPZCw/ivWik= 1129 + github.com/sorairolake/lzip-go v0.3.8/go.mod h1:JcBqGMV0frlxwrsE9sMWXDjqn3EeVf0/54YPsw66qkU= 1130 + github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= 1131 + github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= 1132 + github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= 364 1133 github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= 365 1134 github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= 366 - github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= 367 - github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= 368 - github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= 1135 + github.com/spdx/gordf v0.0.0-20201111095634-7098f93598fb/go.mod h1:uKWaldnbMnjsSAXRurWqqrdyZen1R7kxl8TkmWk2OyM= 1136 + github.com/spdx/gordf v0.0.0-20250128162952-000978ccd6fb h1:7G2Czq97VORM5xNRrD8tSQdhoXPRs8s+Otlc7st9TS0= 1137 + github.com/spdx/gordf v0.0.0-20250128162952-000978ccd6fb/go.mod h1:uKWaldnbMnjsSAXRurWqqrdyZen1R7kxl8TkmWk2OyM= 1138 + github.com/spdx/tools-golang v0.5.5 h1:61c0KLfAcNqAjlg6UNMdkwpMernhw3zVRwDZ2x9XOmk= 1139 + github.com/spdx/tools-golang v0.5.5/go.mod h1:MVIsXx8ZZzaRWNQpUDhC4Dud34edUYJYecciXgrw5vE= 1140 + github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= 1141 + github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= 1142 + github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I= 1143 + github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg= 1144 + github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= 1145 + github.com/spf13/cast v1.9.2 h1:SsGfm7M8QOFtEzumm7UZrZdLLquNdzFYfIbEXntcFbE= 1146 + github.com/spf13/cast v1.9.2/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo= 1147 + github.com/spf13/cobra v1.3.0/go.mod h1:BrRVncBjOJa/eUcVVm9CE+oC6as8k+VYr4NY7WCi9V4= 1148 + github.com/spf13/cobra v1.10.1 h1:lJeBwCfmrnXthfAupyUTzJ/J4Nc1RsHC/mSRU2dll/s= 1149 + github.com/spf13/cobra v1.10.1/go.mod h1:7SmJGaTHFVBY0jW4NXGluQoLvhqFQM+6XSKD+P4XaB0= 1150 + github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= 369 1151 github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= 1152 + github.com/spf13/pflag v1.0.9 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY= 1153 + github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= 1154 + github.com/spf13/viper v1.10.0/go.mod h1:SoyBPwAtKDzypXNDFKN5kzH7ppppbGZtls1UpIy5AsM= 1155 + github.com/spf13/viper v1.20.1 h1:ZMi+z/lvLyPSCoNtFCpqjy0S4kPbirhpTMwl8BkW9X4= 1156 + github.com/spf13/viper v1.20.1/go.mod h1:P9Mdzt1zoHIG8m2eZQinpiBjo6kCmZSKBClNNqjJvu4= 1157 + github.com/spiffe/go-spiffe/v2 v2.5.0 h1:N2I01KCUkv1FAjZXJMwh95KK1ZIQLYbPfhaxw8WS0hE= 1158 + github.com/spiffe/go-spiffe/v2 v2.5.0/go.mod h1:P+NxobPc6wXhVtINNtFjNWGBTreew1GBUCwT2wPmb7g= 370 1159 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 371 1160 github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 1161 + github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= 1162 + github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= 1163 + github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= 1164 + github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= 372 1165 github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= 373 1166 github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= 374 1167 github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= 1168 + github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= 1169 + github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 375 1170 github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 376 - github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= 377 - github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= 1171 + github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 1172 + github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= 1173 + github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= 1174 + github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= 1175 + github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= 1176 + github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= 1177 + github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= 1178 + github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= 1179 + github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= 1180 + github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= 1181 + github.com/sylabs/sif/v2 v2.22.0 h1:Y+xXufp4RdgZe02SR3nWEg7S6q4tPWN237WHYzkDSKA= 1182 + github.com/sylabs/sif/v2 v2.22.0/go.mod h1:W1XhWTmG1KcG7j5a3KSYdMcUIFvbs240w/MMVW627hs= 1183 + github.com/sylabs/squashfs v1.0.6 h1:PvJcDzxr+vIm2kH56mEMbaOzvGu79gK7P7IX+R7BDZI= 1184 + github.com/sylabs/squashfs v1.0.6/go.mod h1:DlDeUawVXLWAsSRa085Eo0ZenGzAB32JdAUFaB0LZfE= 1185 + github.com/terminalstatic/go-xsd-validate v0.1.6 h1:TenYeQ3eY631qNi1/cTmLH/s2slHPRKTTHT+XSHkepo= 1186 + github.com/terminalstatic/go-xsd-validate v0.1.6/go.mod h1:18lsvYFofBflqCrvo1umpABZ99+GneNTw2kEEc8UPJw= 1187 + github.com/therootcompany/xz v1.0.1 h1:CmOtsn1CbtmyYiusbfmhmkpAAETj0wBIH6kCYaX+xzw= 1188 + github.com/therootcompany/xz v1.0.1/go.mod h1:3K3UH1yCKgBneZYhuQUvJ9HPD19UEXEI0BWbMn8qNMY= 1189 + github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= 1190 + github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= 1191 + github.com/ulikunitz/xz v0.5.15 h1:9DNdB5s+SgV3bQ2ApL10xRc35ck0DuIX/isZvIk+ubY= 1192 + github.com/ulikunitz/xz v0.5.15/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= 378 1193 github.com/urfave/cli v1.22.10/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= 1194 + github.com/vbatts/go-mtree v0.6.0 h1:n4r+Tweta4oH0+zWfv77VmfvWXrO69smspK37xvzgMI= 1195 + github.com/vbatts/go-mtree v0.6.0/go.mod h1:W7bcG9PCn6lFY+ljGlZxx9DONkxL3v8a7HyN+PrSrjA= 1196 + github.com/vbatts/tar-split v0.12.1 h1:CqKoORW7BUWBe7UL/iqTVvkTBOF8UvOMKOIZykxnnbo= 1197 + github.com/vbatts/tar-split v0.12.1/go.mod h1:eF6B6i6ftWQcDqEn3/iGFRFRo8cBIMSJVOpnNdfTMFA= 1198 + github.com/vifraa/gopom v1.0.0 h1:L9XlKbyvid8PAIK8nr0lihMApJQg/12OBvMA28BcWh0= 1199 + github.com/vifraa/gopom v1.0.0/go.mod h1:oPa1dcrGrtlO37WPDBm5SqHAT+wTgF8An1Q71Z6Vv4o= 1200 + github.com/wagoodman/go-partybus v0.0.0-20230516145632-8ccac152c651 h1:jIVmlAFIqV3d+DOxazTR9v+zgj8+VYuQBzPgBZvWBHA= 1201 + github.com/wagoodman/go-partybus v0.0.0-20230516145632-8ccac152c651/go.mod h1:b26F2tHLqaoRQf8DywqzVaV1MQ9yvjb0OMcNl7Nxu20= 1202 + github.com/wagoodman/go-progress v0.0.0-20230925121702-07e42b3cdba0 h1:0KGbf+0SMg+UFy4e1A/CPVvXn21f1qtWdeJwxZFoQG8= 1203 + github.com/wagoodman/go-progress v0.0.0-20230925121702-07e42b3cdba0/go.mod h1:jLXFoL31zFaHKAAyZUh+sxiTDFe1L1ZHrcK2T1itVKA= 379 1204 github.com/warpfork/go-testmark v0.12.1 h1:rMgCpJfwy1sJ50x0M0NgyphxYYPMOODIJHhsXyEHU0s= 380 1205 github.com/warpfork/go-testmark v0.12.1/go.mod h1:kHwy7wfvGSPh1rQJYKayD4AbtNaeyZdcGi9tNJTaa5Y= 381 1206 github.com/warpfork/go-wish v0.0.0-20220906213052-39a1cc7a02d0 h1:GDDkbFiaK8jsSDJfjId/PEGEShv6ugrt4kYsC5UIDaQ= ··· 384 1209 github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11/go.mod h1:Wlo/SzPmxVp6vXpGt/zaXhHH0fn4IxgqZc82aKg6bpQ= 385 1210 github.com/whyrusleeping/cbor-gen v0.3.1 h1:82ioxmhEYut7LBVGhGq8xoRkXPLElVuh5mV67AFfdv0= 386 1211 github.com/whyrusleeping/cbor-gen v0.3.1/go.mod h1:pM99HXyEbSQHcosHc0iW7YFmwnscr+t9Te4ibko05so= 1212 + github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= 1213 + github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= 1214 + github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= 1215 + github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= 1216 + github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= 1217 + github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= 1218 + github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= 1219 + github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= 1220 + github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 h1:nIPpBwaJSVYIxUFsDv3M8ofmx9yWTog9BfvIu0q41lo= 1221 + github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= 1222 + github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= 1223 + github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= 1224 + github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= 1225 + github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= 1226 + github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= 387 1227 github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= 1228 + github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= 388 1229 github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= 389 1230 github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= 1231 + github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= 390 1232 github.com/yuin/goldmark v1.7.13 h1:GPddIs617DnBLFFVJFgpo1aBfe/4xcvMc3SB5t/D0pA= 391 1233 github.com/yuin/goldmark v1.7.13/go.mod h1:ip/1k0VRfGynBgxOz0yCqHrbZXhcjxyuS66Brc7iBKg= 1234 + github.com/zclconf/go-cty v1.16.3 h1:osr++gw2T61A8KVYHoQiFbFd1Lh3JOCXc/jFLJXKTxk= 1235 + github.com/zclconf/go-cty v1.16.3/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= 1236 + github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940 h1:4r45xpDWB6ZMSMNJFMOjqrGHynW3DIBuR2H9j0ug+Mo= 1237 + github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940/go.mod h1:CmBdvvj3nqzfzJ6nTCIwDTPZ56aVGvDrmztiO5g3qrM= 1238 + github.com/zeebo/errs v1.4.0 h1:XNdoD/RRMKP7HD0UhJnIzUy74ISdGGxURlYG8HSWSfM= 1239 + github.com/zeebo/errs v1.4.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= 392 1240 gitlab.com/yawning/secp256k1-voi v0.0.0-20230925100816-f2616030848b h1:CzigHMRySiX3drau9C6Q5CAbNIApmLdat5jPMqChvDA= 393 1241 gitlab.com/yawning/secp256k1-voi v0.0.0-20230925100816-f2616030848b/go.mod h1:/y/V339mxv2sZmYYR64O07VuCpdNZqCTwO8ZcouTMI8= 394 1242 gitlab.com/yawning/tuplehash v0.0.0-20230713102510-df83abbf9a02 h1:qwDnMxjkyLmAFgcfgTnfJrmYKWhHnci3GjDqcZp1M3Q= 395 1243 gitlab.com/yawning/tuplehash v0.0.0-20230713102510-df83abbf9a02/go.mod h1:JTnUj0mpYiAsuZLmKjTx/ex3AtMowcCgnE7YNyCEP0I= 1244 + go.etcd.io/bbolt v1.4.2 h1:IrUHp260R8c+zYx/Tm8QZr04CX+qWS5PGfPdevhdm1I= 1245 + go.etcd.io/bbolt v1.4.2/go.mod h1:Is8rSHO/b4f3XigBC0lL0+4FwAQv3HXEEIgFMuKHceM= 1246 + go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= 1247 + go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= 1248 + go.etcd.io/etcd/client/v2 v2.305.1/go.mod h1:pMEacxZW7o8pg4CrFE7pquyCJJzZvkvdD2RibOCCCGs= 1249 + go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= 1250 + go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= 1251 + go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= 1252 + go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= 1253 + go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= 1254 + go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= 1255 + go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= 1256 + go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= 1257 + go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= 1258 + go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= 1259 + go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= 396 1260 go.opentelemetry.io/contrib/bridges/prometheus v0.57.0 h1:UW0+QyeyBVhn+COBec3nGhfnFe5lwB0ic1JBVjzhk0w= 397 1261 go.opentelemetry.io/contrib/bridges/prometheus v0.57.0/go.mod h1:ppciCHRLsyCio54qbzQv0E4Jyth/fLWDTJYfvWpcSVk= 1262 + go.opentelemetry.io/contrib/detectors/gcp v1.37.0 h1:B+WbN9RPsvobe6q4vP6KgM8/9plR/HNjgGBrfcOlweA= 1263 + go.opentelemetry.io/contrib/detectors/gcp v1.37.0/go.mod h1:K5zQ3TT7p2ru9Qkzk0bKtCql0RGkPj9pRjpXgZJZ+rU= 398 1264 go.opentelemetry.io/contrib/exporters/autoexport v0.57.0 h1:jmTVJ86dP60C01K3slFQa2NQ/Aoi7zA+wy7vMOKD9H4= 399 1265 go.opentelemetry.io/contrib/exporters/autoexport v0.57.0/go.mod h1:EJBheUMttD/lABFyLXhce47Wr6DPWYReCzaZiXadH7g= 400 - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.57.0 h1:DheMAlT6POBP+gh8RUH19EOTnQIor5QE0uSRPtzCpSw= 401 - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.57.0/go.mod h1:wZcGmeVO9nzP67aYSLDqXNWK87EZWhi7JWj1v7ZXf94= 402 - go.opentelemetry.io/otel v1.32.0 h1:WnBN+Xjcteh0zdk01SVqV55d/m62NJLJdIyb4y/WO5U= 403 - go.opentelemetry.io/otel v1.32.0/go.mod h1:00DCVSB0RQcnzlwyTfqtxSm+DRr9hpYrHjNGiBHVQIg= 1266 + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.62.0 h1:rbRJ8BBoVMsQShESYZ0FkvcITu8X8QNwJogcLUmDNNw= 1267 + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.62.0/go.mod h1:ru6KHrNtNHxM4nD/vd6QrLVWgKhxPYgblq4VAtNawTQ= 1268 + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 h1:Hf9xI/XLML9ElpiHVDNwvqI0hIFlzV8dgIr35kV1kRU= 1269 + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0/go.mod h1:NfchwuyNoMcZ5MLHwPrODwUF1HWCXWrL31s8gSAdIKY= 1270 + go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= 1271 + go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= 404 1272 go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.8.0 h1:WzNab7hOOLzdDF/EoWCt4glhrbMPVMOO5JYTmpz36Ls= 405 1273 go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.8.0/go.mod h1:hKvJwTzJdp90Vh7p6q/9PAOd55dI6WA6sWj62a/JvSs= 406 1274 go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.8.0 h1:S+LdBGiQXtJdowoJoQPEtI52syEP/JYBUpjO49EQhV8= ··· 409 1277 go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.32.0/go.mod h1:WXbYJTUaZXAbYd8lbgGuvih0yuCfOFC5RJoYnoLcGz8= 410 1278 go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.32.0 h1:t/Qur3vKSkUCcDVaSumWF2PKHt85pc7fRvFuoVT8qFU= 411 1279 go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.32.0/go.mod h1:Rl61tySSdcOJWoEgYZVtmnKdA0GeKrSqkHC1t+91CH8= 412 - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.32.0 h1:IJFEoHiytixx8cMiVAO+GmHR6Frwu+u5Ur8njpFO6Ac= 413 - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.32.0/go.mod h1:3rHrKNtLIoS0oZwkY2vxi+oJcwFRWdtUyRII+so45p8= 1280 + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.33.0 h1:Vh5HayB/0HHfOQA7Ctx69E/Y/DcQSMPpKANYVMQ7fBA= 1281 + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.33.0/go.mod h1:cpgtDBaqD/6ok/UG0jT15/uKjAY8mRA53diogHBg3UI= 414 1282 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.32.0 h1:9kV11HXBHZAvuPUZxmMWrH8hZn/6UnHX4K0mu36vNsU= 415 1283 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.32.0/go.mod h1:JyA0FHXe22E1NeNiHmVp7kFHglnexDQ7uRWDiiJ1hKQ= 416 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.32.0 h1:cMyu9O88joYEaI47CnQkxO1XZdpoTF9fEnW2duIddhw= 417 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.32.0/go.mod h1:6Am3rn7P9TVVeXYG+wtcGE7IE1tsQ+bP3AuWcKt/gOI= 1284 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.33.0 h1:wpMfgF8E1rkrT1Z6meFh1NDtownE9Ii3n3X2GJYjsaU= 1285 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.33.0/go.mod h1:wAy0T/dUbs468uOlkT31xjvqQgEVXv58BRFWEgn5v/0= 418 1286 go.opentelemetry.io/otel/exporters/prometheus v0.54.0 h1:rFwzp68QMgtzu9PgP3jm9XaMICI6TsofWWPcBDKwlsU= 419 1287 go.opentelemetry.io/otel/exporters/prometheus v0.54.0/go.mod h1:QyjcV9qDP6VeK5qPyKETvNjmaaEc7+gqjh4SS0ZYzDU= 420 1288 go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.8.0 h1:CHXNXwfKWfzS65yrlB2PVds1IBZcdsX8Vepy9of0iRU= 421 1289 go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.8.0/go.mod h1:zKU4zUgKiaRxrdovSS2amdM5gOc59slmo/zJwGX+YBg= 422 - go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.32.0 h1:SZmDnHcgp3zwlPBS2JX2urGYe/jBKEIT6ZedHRUyCz8= 423 - go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.32.0/go.mod h1:fdWW0HtZJ7+jNpTKUR0GpMEDP69nR8YBJQxNiVCE3jk= 1290 + go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0 h1:rixTyDGXFxRy1xzhKrotaHy3/KXdPhlWARrCgK+eqUY= 1291 + go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0/go.mod h1:dowW6UsM9MKbJq5JTz2AMVp3/5iW5I/TStsk8S+CfHw= 424 1292 go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.32.0 h1:cC2yDI3IQd0Udsux7Qmq8ToKAx1XCilTQECZ0KDZyTw= 425 1293 go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.32.0/go.mod h1:2PD5Ex6z8CFzDbTdOlwyNIUywRr1DN0ospafJM1wJ+s= 426 1294 go.opentelemetry.io/otel/log v0.8.0 h1:egZ8vV5atrUWUbnSsHn6vB8R21G2wrKqNiDt3iWertk= 427 1295 go.opentelemetry.io/otel/log v0.8.0/go.mod h1:M9qvDdUTRCopJcGRKg57+JSQ9LgLBrwwfC32epk5NX8= 428 - go.opentelemetry.io/otel/metric v1.32.0 h1:xV2umtmNcThh2/a/aCP+h64Xx5wsj8qqnkYZktzNa0M= 429 - go.opentelemetry.io/otel/metric v1.32.0/go.mod h1:jH7CIbbK6SH2V2wE16W05BHCtIDzauciCRLoc/SyMv8= 1296 + go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= 1297 + go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= 430 1298 go.opentelemetry.io/otel/sdk v1.32.0 h1:RNxepc9vK59A8XsgZQouW8ue8Gkb4jpWtJm9ge5lEG4= 431 1299 go.opentelemetry.io/otel/sdk v1.32.0/go.mod h1:LqgegDBjKMmb2GC6/PrTnteJG39I8/vJCAP9LlJXEjU= 432 1300 go.opentelemetry.io/otel/sdk/log v0.8.0 h1:zg7GUYXqxk1jnGF/dTdLPrK06xJdrXgqgFLnI4Crxvs= 433 1301 go.opentelemetry.io/otel/sdk/log v0.8.0/go.mod h1:50iXr0UVwQrYS45KbruFrEt4LvAdCaWWgIrsN3ZQggo= 434 1302 go.opentelemetry.io/otel/sdk/metric v1.32.0 h1:rZvFnvmvawYb0alrYkjraqJq0Z4ZUJAiyYCU9snn1CU= 435 1303 go.opentelemetry.io/otel/sdk/metric v1.32.0/go.mod h1:PWeZlq0zt9YkYAp3gjKZ0eicRYvOh1Gd+X99x6GHpCQ= 436 - go.opentelemetry.io/otel/trace v1.32.0 h1:WIC9mYrXf8TmY/EXuULKc8hR17vE+Hjv2cssQDe03fM= 437 - go.opentelemetry.io/otel/trace v1.32.0/go.mod h1:+i4rkvCraA+tG6AzwloGaCtkx53Fa+L+V8e9a7YvhT8= 438 - go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= 439 - go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= 1304 + go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= 1305 + go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= 1306 + go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= 1307 + go.opentelemetry.io/proto/otlp v1.4.0 h1:TA9WRvW6zMwP+Ssb6fLoUIuirti1gGbP28GcKG1jgeg= 1308 + go.opentelemetry.io/proto/otlp v1.4.0/go.mod h1:PPBWZIP98o2ElSqI35IHfu7hIhSwvc5N38Jw8pXuGFY= 440 1309 go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= 441 1310 go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= 442 1311 go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= ··· 450 1319 go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= 451 1320 go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= 452 1321 go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= 1322 + go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= 453 1323 go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= 454 1324 go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= 455 1325 go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= 1326 + go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= 1327 + go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= 456 1328 go.yaml.in/yaml/v4 v4.0.0-rc.2 h1:/FrI8D64VSr4HtGIlUtlFMGsm7H7pWTbj6vOLVZcA6s= 457 1329 go.yaml.in/yaml/v4 v4.0.0-rc.2/go.mod h1:aZqd9kCMsGL7AuUv/m/PvWLdg5sjJsZ4oHDEnfPPfY0= 1330 + go4.org v0.0.0-20230225012048-214862532bf5 h1:nifaUDeh+rPaBCMPMQHZmvJf+QdpLFnuQPwx+LxVmtc= 1331 + go4.org v0.0.0-20230225012048-214862532bf5/go.mod h1:F57wTi5Lrj6WLyswp5EYV1ncrEbFGHD4hhz6S1ZYeaU= 458 1332 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= 1333 + golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= 459 1334 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= 460 1335 golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 1336 + golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 1337 + golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 1338 + golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= 461 1339 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 462 1340 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= 463 - golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM= 464 - golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U= 465 - golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= 466 - golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= 1341 + golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= 1342 + golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= 1343 + golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= 1344 + golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04= 1345 + golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0= 1346 + golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= 1347 + golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= 1348 + golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= 1349 + golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= 1350 + golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= 1351 + golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= 1352 + golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= 1353 + golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= 1354 + golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= 1355 + golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= 1356 + golang.org/x/exp v0.0.0-20250711185948-6ae5c78190dc h1:TS73t7x3KarrNd5qAipmspBDS1rkMcgVG/fS1aRb4Rc= 1357 + golang.org/x/exp v0.0.0-20250711185948-6ae5c78190dc/go.mod h1:A+z0yzpGtvnG90cToK5n2tu8UJVP2XUATh+r+sfOOOc= 1358 + golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= 1359 + golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= 1360 + golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= 1361 + golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= 1362 + golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= 1363 + golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= 1364 + golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= 1365 + golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= 467 1366 golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= 1367 + golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= 1368 + golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= 1369 + golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= 1370 + golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= 1371 + golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= 1372 + golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= 1373 + golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= 468 1374 golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= 1375 + golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= 1376 + golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= 1377 + golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= 469 1378 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 470 1379 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 1380 + golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 1381 + golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 471 1382 golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 472 - golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w= 473 - golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= 1383 + golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= 1384 + golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= 1385 + golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA= 1386 + golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w= 1387 + golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 1388 + golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 1389 + golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 474 1390 golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 1391 + golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 1392 + golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 475 1393 golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 476 1394 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 1395 + golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 1396 + golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 1397 + golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= 477 1398 golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 478 1399 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 1400 + golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 1401 + golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 1402 + golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 1403 + golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 1404 + golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 1405 + golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 1406 + golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 479 1407 golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 1408 + golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 1409 + golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= 1410 + golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= 1411 + golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= 1412 + golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= 1413 + golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= 1414 + golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= 1415 + golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= 1416 + golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= 480 1417 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= 1418 + golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= 1419 + golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= 1420 + golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= 1421 + golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= 1422 + golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= 1423 + golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= 481 1424 golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= 482 - golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= 483 - golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= 1425 + golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= 1426 + golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= 1427 + golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= 1428 + golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= 1429 + golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= 1430 + golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= 1431 + golang.org/x/net v0.46.0 h1:giFlY12I07fugqwPuWJi68oOnpfqFnJIJzaIIm2JVV4= 1432 + golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210= 1433 + golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= 1434 + golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= 1435 + golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= 1436 + golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= 1437 + golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= 1438 + golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 1439 + golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 1440 + golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 1441 + golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 1442 + golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 1443 + golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 1444 + golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 1445 + golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 1446 + golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 1447 + golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 1448 + golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 1449 + golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 1450 + golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI= 1451 + golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU= 1452 + golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 484 1453 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 485 1454 golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 1455 + golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 486 1456 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 487 1457 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 1458 + golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 1459 + golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 488 1460 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 1461 + golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 489 1462 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 490 - golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8= 491 - golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= 1463 + golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 1464 + golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= 1465 + golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= 1466 + golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 1467 + golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 492 1468 golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 1469 + golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 493 1470 golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 494 1471 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 1472 + golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 1473 + golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 495 1474 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1475 + golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1476 + golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1477 + golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1478 + golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1479 + golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1480 + golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 496 1481 golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1482 + golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1483 + golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1484 + golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1485 + golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1486 + golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1487 + golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1488 + golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1489 + golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1490 + golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1491 + golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1492 + golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1493 + golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1494 + golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1495 + golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1496 + golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1497 + golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1498 + golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1499 + golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1500 + golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1501 + golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1502 + golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1503 + golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1504 + golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 497 1505 golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 498 1506 golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1507 + golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1508 + golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1509 + golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1510 + golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1511 + golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1512 + golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1513 + golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1514 + golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1515 + golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 499 1516 golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1517 + golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1518 + golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 500 1519 golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 1520 + golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 1521 + golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 1522 + golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 1523 + golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 501 1524 golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 1525 + golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 1526 + golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 1527 + golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 1528 + golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 1529 + golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 1530 + golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 1531 + golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 1532 + golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 1533 + golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 1534 + golang.org/x/sys v0.0.0-20220408201424-a24fb2fb8a0f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 1535 + golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 502 1536 golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 1537 + golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 503 1538 golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 504 1539 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 505 - golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= 506 - golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= 1540 + golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ= 1541 + golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= 507 1542 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= 1543 + golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= 1544 + golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= 1545 + golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q= 1546 + golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss= 1547 + golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 508 1548 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 1549 + golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 1550 + golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= 509 1551 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 510 - golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= 511 - golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= 512 - golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= 513 - golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= 1552 + golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 1553 + golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 1554 + golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 1555 + golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= 1556 + golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= 1557 + golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k= 1558 + golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM= 1559 + golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= 1560 + golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= 1561 + golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= 1562 + golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= 1563 + golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= 514 1564 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 1565 + golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 1566 + golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= 515 1567 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= 1568 + golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= 1569 + golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= 516 1570 golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= 1571 + golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= 1572 + golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= 1573 + golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= 1574 + golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= 517 1575 golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= 1576 + golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= 1577 + golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 1578 + golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 1579 + golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 1580 + golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 518 1581 golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 519 1582 golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 1583 + golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 1584 + golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 520 1585 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 1586 + golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 1587 + golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 1588 + golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 1589 + golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 1590 + golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 1591 + golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 1592 + golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 1593 + golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 1594 + golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 1595 + golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 1596 + golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 1597 + golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 1598 + golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= 1599 + golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= 1600 + golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= 1601 + golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= 1602 + golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= 1603 + golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= 1604 + golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= 521 1605 golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= 1606 + golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= 1607 + golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= 1608 + golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= 1609 + golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= 1610 + golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 1611 + golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 1612 + golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 1613 + golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 522 1614 golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 1615 + golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= 1616 + golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= 1617 + golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= 1618 + golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= 1619 + golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= 523 1620 golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= 524 - golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc= 525 - golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI= 1621 + golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= 1622 + golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ= 1623 + golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs= 526 1624 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 527 1625 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 528 1626 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 529 1627 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 530 - golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU= 531 - golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= 532 - google.golang.org/genproto/googleapis/api v0.0.0-20241104194629-dd2ea8efbc28 h1:M0KvPgPmDZHPlbRbaNU1APr28TvwvvdUPlSv7PUvy8g= 533 - google.golang.org/genproto/googleapis/api v0.0.0-20241104194629-dd2ea8efbc28/go.mod h1:dguCy7UOdZhTvLzDyt15+rOrawrpM4q7DD9dQ1P11P4= 534 - google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 h1:XVhgTWWV3kGQlwJHR3upFWZeTsei6Oks1apkZSeonIE= 535 - google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= 536 - google.golang.org/grpc v1.68.0 h1:aHQeeJbo8zAkAa3pRzrVjZlbz6uSfeOXlJNQM0RAbz0= 537 - google.golang.org/grpc v1.68.0/go.mod h1:fmSPC5AsjSBCK54MyHRx48kpOti1/jRfOlwEWywNjWA= 538 - google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA= 539 - google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 1628 + golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da h1:noIWHXmPHxILtqtCOPIhSt0ABwskkZKjD3bXGnZGpNY= 1629 + golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= 1630 + google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= 1631 + google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= 1632 + google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= 1633 + google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= 1634 + google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= 1635 + google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= 1636 + google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= 1637 + google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= 1638 + google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= 1639 + google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= 1640 + google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= 1641 + google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= 1642 + google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= 1643 + google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= 1644 + google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= 1645 + google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= 1646 + google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= 1647 + google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= 1648 + google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= 1649 + google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= 1650 + google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= 1651 + google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= 1652 + google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= 1653 + google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= 1654 + google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= 1655 + google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= 1656 + google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= 1657 + google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= 1658 + google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= 1659 + google.golang.org/api v0.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUbuZU= 1660 + google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= 1661 + google.golang.org/api v0.62.0/go.mod h1:dKmwPCydfsad4qCH08MSdgWjfHOyfpd4VtDGgRFdavw= 1662 + google.golang.org/api v0.242.0 h1:7Lnb1nfnpvbkCiZek6IXKdJ0MFuAZNAJKQfA1ws62xg= 1663 + google.golang.org/api v0.242.0/go.mod h1:cOVEm2TpdAGHL2z+UwyS+kmlGr3bVWQQ6sYEqkKje50= 1664 + google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= 1665 + google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= 1666 + google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= 1667 + google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= 1668 + google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= 1669 + google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= 1670 + google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= 1671 + google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= 1672 + google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= 1673 + google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= 1674 + google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= 1675 + google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= 1676 + google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= 1677 + google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= 1678 + google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= 1679 + google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= 1680 + google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= 1681 + google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= 1682 + google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= 1683 + google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= 1684 + google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= 1685 + google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= 1686 + google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= 1687 + google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= 1688 + google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= 1689 + google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= 1690 + google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= 1691 + google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= 1692 + google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= 1693 + google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= 1694 + google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= 1695 + google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= 1696 + google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= 1697 + google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= 1698 + google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 1699 + google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 1700 + google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 1701 + google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 1702 + google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 1703 + google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 1704 + google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 1705 + google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 1706 + google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 1707 + google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 1708 + google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 1709 + google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 1710 + google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= 1711 + google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= 1712 + google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= 1713 + google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= 1714 + google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= 1715 + google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= 1716 + google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= 1717 + google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= 1718 + google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= 1719 + google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= 1720 + google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= 1721 + google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= 1722 + google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= 1723 + google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= 1724 + google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= 1725 + google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= 1726 + google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= 1727 + google.golang.org/genproto v0.0.0-20211008145708-270636b82663/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= 1728 + google.golang.org/genproto v0.0.0-20211028162531-8db9c33dc351/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= 1729 + google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= 1730 + google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= 1731 + google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= 1732 + google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= 1733 + google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= 1734 + google.golang.org/genproto v0.0.0-20250715232539-7130f93afb79 h1:Nt6z9UHqSlIdIGJdz6KhTIs2VRx/iOsA5iE8bmQNcxs= 1735 + google.golang.org/genproto v0.0.0-20250715232539-7130f93afb79/go.mod h1:kTmlBHMPqR5uCZPBvwa2B18mvubkjyY3CRLI0c6fj0s= 1736 + google.golang.org/genproto/googleapis/api v0.0.0-20250715232539-7130f93afb79 h1:iOye66xuaAK0WnkPuhQPUFy8eJcmwUXqGGP3om6IxX8= 1737 + google.golang.org/genproto/googleapis/api v0.0.0-20250715232539-7130f93afb79/go.mod h1:HKJDgKsFUnv5VAGeQjz8kxcgDP0HoE0iZNp0OdZNlhE= 1738 + google.golang.org/genproto/googleapis/rpc v0.0.0-20250715232539-7130f93afb79 h1:1ZwqphdOdWYXsUHgMpU/101nCtf/kSp9hOrcvFsnl10= 1739 + google.golang.org/genproto/googleapis/rpc v0.0.0-20250715232539-7130f93afb79/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= 1740 + google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= 1741 + google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= 1742 + google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= 1743 + google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= 1744 + google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= 1745 + google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= 1746 + google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= 1747 + google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= 1748 + google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= 1749 + google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= 1750 + google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= 1751 + google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= 1752 + google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= 1753 + google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= 1754 + google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= 1755 + google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= 1756 + google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= 1757 + google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= 1758 + google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= 1759 + google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= 1760 + google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= 1761 + google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= 1762 + google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= 1763 + google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= 1764 + google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= 1765 + google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= 1766 + google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= 1767 + google.golang.org/grpc v1.74.0 h1:sxRSkyLxlceWQiqDofxDot3d4u7DyoHPc7SBXMj8gGY= 1768 + google.golang.org/grpc v1.74.0/go.mod h1:NZUaK8dAMUfzhK6uxZ+9511LtOrk73UGWOFoNvz7z+s= 1769 + google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= 1770 + google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= 1771 + google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= 1772 + google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= 1773 + google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= 1774 + google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= 1775 + google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= 1776 + google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= 1777 + google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= 1778 + google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= 1779 + google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= 1780 + google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= 1781 + google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= 1782 + google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= 1783 + google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= 1784 + google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= 540 1785 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= 541 1786 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 542 1787 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 1788 + gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 543 1789 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= 544 1790 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= 545 1791 gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= 546 1792 gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= 547 1793 gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= 1794 + gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= 1795 + gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= 1796 + gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= 548 1797 gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 549 1798 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 1799 + gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 1800 + gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 1801 + gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 550 1802 gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 551 1803 gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= 552 1804 gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= ··· 556 1808 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 557 1809 gorm.io/driver/postgres v1.5.7 h1:8ptbNJTDbEmhdr62uReG5BGkdQyeasu/FZHxI0IMGnM= 558 1810 gorm.io/driver/postgres v1.5.7/go.mod h1:3e019WlBaYI5o5LIdNV+LyxCMNtLOQETBXL2h4chKpA= 559 - gorm.io/driver/sqlite v1.5.5 h1:7MDMtUZhV065SilG62E0MquljeArQZNfJnjd9i9gx3E= 560 - gorm.io/driver/sqlite v1.5.5/go.mod h1:6NgQ7sQWAIFsPrJJl1lSNSu2TABh0ZZ/zm5fosATavE= 561 - gorm.io/gorm v1.25.9 h1:wct0gxZIELDk8+ZqF/MVnHLkA1rvYlBWUMv2EdsK1g8= 562 - gorm.io/gorm v1.25.9/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8= 1811 + gorm.io/driver/sqlite v1.6.0 h1:WHRRrIiulaPiPFmDcod6prc4l2VGVWHz80KspNsxSfQ= 1812 + gorm.io/driver/sqlite v1.6.0/go.mod h1:AO9V1qIQddBESngQUKWL9yoH93HIeA1X6V633rBwyT8= 1813 + gorm.io/gorm v1.31.0 h1:0VlycGreVhK7RF/Bwt51Fk8v0xLiiiFdbGDPIZQ7mJY= 1814 + gorm.io/gorm v1.31.0/go.mod h1:XyQVbO2k6YkOis7C2437jSit3SsDK72s7n7rsSHd+Gs= 1815 + gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= 1816 + gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= 1817 + honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 1818 + honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 1819 + honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 1820 + honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 563 1821 honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= 1822 + honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= 1823 + honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= 564 1824 lukechampine.com/blake3 v1.2.1 h1:YuqqRuaqsGV71BV/nm9xlI0MKUv4QC54jQnBChWbGnI= 565 1825 lukechampine.com/blake3 v1.2.1/go.mod h1:0OFRp7fBtAylGVCO40o87sbupkyIGgbpv1+M1k1LM6k= 1826 + modernc.org/cc/v4 v4.26.5 h1:xM3bX7Mve6G8K8b+T11ReenJOT+BmVqQj0FY5T4+5Y4= 1827 + modernc.org/cc/v4 v4.26.5/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0= 1828 + modernc.org/ccgo/v4 v4.28.1 h1:wPKYn5EC/mYTqBO373jKjvX2n+3+aK7+sICCv4Fjy1A= 1829 + modernc.org/ccgo/v4 v4.28.1/go.mod h1:uD+4RnfrVgE6ec9NGguUNdhqzNIeeomeXf6CL0GTE5Q= 1830 + modernc.org/fileutil v1.3.40 h1:ZGMswMNc9JOCrcrakF1HrvmergNLAmxOPjizirpfqBA= 1831 + modernc.org/fileutil v1.3.40/go.mod h1:HxmghZSZVAz/LXcMNwZPA/DRrQZEVP9VX0V4LQGQFOc= 1832 + modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI= 1833 + modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito= 1834 + modernc.org/goabi0 v0.2.0 h1:HvEowk7LxcPd0eq6mVOAEMai46V+i7Jrj13t4AzuNks= 1835 + modernc.org/goabi0 v0.2.0/go.mod h1:CEFRnnJhKvWT1c1JTI3Avm+tgOWbkOu5oPA8eH8LnMI= 1836 + modernc.org/libc v1.66.10 h1:yZkb3YeLx4oynyR+iUsXsybsX4Ubx7MQlSYEw4yj59A= 1837 + modernc.org/libc v1.66.10/go.mod h1:8vGSEwvoUoltr4dlywvHqjtAqHBaw0j1jI7iFBTAr2I= 1838 + modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU= 1839 + modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg= 1840 + modernc.org/memory v1.11.0 h1:o4QC8aMQzmcwCK3t3Ux/ZHmwFPzE6hf2Y5LbkRs+hbI= 1841 + modernc.org/memory v1.11.0/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw= 1842 + modernc.org/opt v0.1.4 h1:2kNGMRiUjrp4LcaPuLY2PzUfqM/w9N23quVwhKt5Qm8= 1843 + modernc.org/opt v0.1.4/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns= 1844 + modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w= 1845 + modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE= 1846 + modernc.org/sqlite v1.39.1 h1:H+/wGFzuSCIEVCvXYVHX5RQglwhMOvtHSv+VtidL2r4= 1847 + modernc.org/sqlite v1.39.1/go.mod h1:9fjQZ0mB1LLP0GYrp39oOJXx/I2sxEnZtzCmEQIKvGE= 1848 + modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0= 1849 + modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A= 1850 + modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= 1851 + modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= 1852 + rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= 1853 + rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= 1854 + rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= 1855 + sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
+17 -6
pkg/appview/db/models.go
··· 151 151 IsMultiArch bool 152 152 } 153 153 154 + // VulnerabilitySummary represents vulnerability counts by severity 155 + type VulnerabilitySummary struct { 156 + Critical int 157 + High int 158 + Medium int 159 + Low int 160 + Total int 161 + } 162 + 154 163 // ManifestWithMetadata extends Manifest with tags and platform information 155 164 type ManifestWithMetadata struct { 156 165 Manifest 157 - Tags []string 158 - Platforms []PlatformInfo 159 - PlatformCount int 160 - IsManifestList bool 161 - Reachable bool // Whether the hold endpoint is reachable 162 - Pending bool // Whether health check is still in progress 166 + Tags []string 167 + Platforms []PlatformInfo 168 + PlatformCount int 169 + IsManifestList bool 170 + Reachable bool // Whether the hold endpoint is reachable 171 + Pending bool // Whether health check is still in progress 172 + Vulnerabilities *VulnerabilitySummary 173 + HasVulnerabilities bool 163 174 }
+213
pkg/appview/handlers/repository.go
··· 3 3 import ( 4 4 "context" 5 5 "database/sql" 6 + "encoding/json" 7 + "fmt" 6 8 "html/template" 9 + "io" 7 10 "log/slog" 8 11 "net/http" 12 + "net/url" 13 + "strconv" 9 14 "sync" 10 15 "time" 11 16 ··· 30 35 ReadmeCache *readme.Cache 31 36 } 32 37 38 + // queryVulnerabilities queries the hold service for vulnerability scan results 39 + func (h *RepositoryPageHandler) queryVulnerabilities(ctx context.Context, holdEndpoint string, digest string) (*db.VulnerabilitySummary, error) { 40 + // Skip if no hold endpoint 41 + if holdEndpoint == "" { 42 + return nil, nil 43 + } 44 + 45 + // Query referrers endpoint for vulnerability scan results 46 + // Match the artifactType used by the scanner in pkg/hold/scanner/storage.go 47 + artifactType := "application/vnd.atcr.vulnerabilities+json" 48 + 49 + // Properly encode query parameters (especially the + in the media type) 50 + queryParams := url.Values{} 51 + queryParams.Set("digest", digest) 52 + queryParams.Set("artifactType", artifactType) 53 + requestURL := fmt.Sprintf("%s/xrpc/io.atcr.hold.getReferrers?%s", holdEndpoint, queryParams.Encode()) 54 + 55 + req, err := http.NewRequestWithContext(ctx, "GET", requestURL, nil) 56 + if err != nil { 57 + return nil, err 58 + } 59 + 60 + resp, err := http.DefaultClient.Do(req) 61 + if err != nil { 62 + return nil, err 63 + } 64 + defer resp.Body.Close() 65 + 66 + if resp.StatusCode == http.StatusNotFound { 67 + // No scan results found 68 + return nil, nil 69 + } 70 + 71 + if resp.StatusCode != http.StatusOK { 72 + body, _ := io.ReadAll(resp.Body) 73 + return nil, fmt.Errorf("failed to query referrers: %s - %s", resp.Status, string(body)) 74 + } 75 + 76 + // Parse response 77 + var result struct { 78 + Referrers []struct { 79 + Annotations map[string]string `json:"annotations"` 80 + } `json:"referrers"` 81 + } 82 + 83 + if err := json.NewDecoder(resp.Body).Decode(&result); err != nil { 84 + return nil, fmt.Errorf("failed to decode referrers response: %w", err) 85 + } 86 + 87 + slog.Debug("Received referrers response", 88 + "digest", digest, 89 + "referrerCount", len(result.Referrers)) 90 + 91 + // Find the most recent vulnerability scan result 92 + if len(result.Referrers) == 0 { 93 + return nil, nil 94 + } 95 + 96 + // Parse vulnerability counts from annotations 97 + // Match the annotation keys used by the scanner in pkg/hold/scanner/storage.go 98 + annotations := result.Referrers[0].Annotations 99 + slog.Debug("First referrer annotations", 100 + "digest", digest, 101 + "annotations", annotations, 102 + "annotationsLen", len(annotations)) 103 + 104 + summary := &db.VulnerabilitySummary{} 105 + 106 + if critical, ok := annotations["io.atcr.vuln.critical"]; ok { 107 + summary.Critical, _ = strconv.Atoi(critical) 108 + } 109 + if high, ok := annotations["io.atcr.vuln.high"]; ok { 110 + summary.High, _ = strconv.Atoi(high) 111 + } 112 + if medium, ok := annotations["io.atcr.vuln.medium"]; ok { 113 + summary.Medium, _ = strconv.Atoi(medium) 114 + } 115 + if low, ok := annotations["io.atcr.vuln.low"]; ok { 116 + summary.Low, _ = strconv.Atoi(low) 117 + } 118 + if total, ok := annotations["io.atcr.vuln.total"]; ok { 119 + summary.Total, _ = strconv.Atoi(total) 120 + } 121 + 122 + // If Total is missing or 0, calculate from individual counts 123 + if summary.Total == 0 { 124 + summary.Total = summary.Critical + summary.High + summary.Medium + summary.Low 125 + } 126 + 127 + slog.Debug("Parsed vulnerability summary", 128 + "digest", digest, 129 + "critical", summary.Critical, 130 + "high", summary.High, 131 + "medium", summary.Medium, 132 + "low", summary.Low, 133 + "total", summary.Total) 134 + 135 + return summary, nil 136 + } 137 + 138 + // HandleVulnerabilityDetails returns the full vulnerability report for a manifest 139 + func (h *RepositoryPageHandler) HandleVulnerabilityDetails(w http.ResponseWriter, r *http.Request) { 140 + digest := r.URL.Query().Get("digest") 141 + holdEndpoint := r.URL.Query().Get("holdEndpoint") 142 + 143 + if digest == "" || holdEndpoint == "" { 144 + http.Error(w, "digest and holdEndpoint required", http.StatusBadRequest) 145 + return 146 + } 147 + 148 + // Query referrers to get the vulnerability report digest 149 + artifactType := "application/vnd.atcr.vulnerabilities+json" 150 + queryParams := url.Values{} 151 + queryParams.Set("digest", digest) 152 + queryParams.Set("artifactType", artifactType) 153 + requestURL := fmt.Sprintf("%s/xrpc/io.atcr.hold.getReferrers?%s", holdEndpoint, queryParams.Encode()) 154 + 155 + req, err := http.NewRequestWithContext(r.Context(), "GET", requestURL, nil) 156 + if err != nil { 157 + http.Error(w, err.Error(), http.StatusInternalServerError) 158 + return 159 + } 160 + 161 + resp, err := http.DefaultClient.Do(req) 162 + if err != nil { 163 + http.Error(w, err.Error(), http.StatusInternalServerError) 164 + return 165 + } 166 + defer resp.Body.Close() 167 + 168 + if resp.StatusCode == http.StatusNotFound { 169 + http.Error(w, "No vulnerability scan found", http.StatusNotFound) 170 + return 171 + } 172 + 173 + if resp.StatusCode != http.StatusOK { 174 + http.Error(w, "Failed to query referrers", resp.StatusCode) 175 + return 176 + } 177 + 178 + // Parse response - now includes the vulnerability report data directly 179 + var result struct { 180 + Referrers []struct { 181 + Digest string `json:"digest"` 182 + Annotations map[string]string `json:"annotations"` 183 + ReportData map[string]interface{} `json:"reportData"` // The actual vulnerability report 184 + } `json:"referrers"` 185 + } 186 + 187 + if err := json.NewDecoder(resp.Body).Decode(&result); err != nil { 188 + http.Error(w, "Failed to decode referrers response", http.StatusInternalServerError) 189 + return 190 + } 191 + 192 + if len(result.Referrers) == 0 { 193 + http.Error(w, "No vulnerability scan found", http.StatusNotFound) 194 + return 195 + } 196 + 197 + // Check if reportData is included 198 + if result.Referrers[0].ReportData == nil { 199 + http.Error(w, "Vulnerability report data not available", http.StatusNotFound) 200 + return 201 + } 202 + 203 + // Return the vulnerability report JSON directly 204 + w.Header().Set("Content-Type", "application/json") 205 + json.NewEncoder(w).Encode(result.Referrers[0].ReportData) 206 + } 207 + 33 208 func (h *RepositoryPageHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { 34 209 handle := chi.URLParam(r, "handle") 35 210 repository := chi.URLParam(r, "repository") ··· 58 233 if err != nil { 59 234 http.Error(w, err.Error(), http.StatusInternalServerError) 60 235 return 236 + } 237 + 238 + // Query vulnerability scan results for each manifest (concurrent with 2s timeout) 239 + { 240 + ctx, cancel := context.WithTimeout(r.Context(), 2*time.Second) 241 + defer cancel() 242 + 243 + var wg sync.WaitGroup 244 + var mu sync.Mutex 245 + 246 + for i := range manifests { 247 + // Skip manifest lists - only query for image manifests 248 + if manifests[i].IsManifestList { 249 + continue 250 + } 251 + 252 + wg.Add(1) 253 + go func(idx int) { 254 + defer wg.Done() 255 + 256 + vulnerabilities, err := h.queryVulnerabilities(ctx, manifests[idx].Manifest.HoldEndpoint, manifests[idx].Manifest.Digest) 257 + if err != nil { 258 + slog.Warn("Failed to query vulnerabilities", 259 + "digest", manifests[idx].Manifest.Digest, 260 + "error", err) 261 + return 262 + } 263 + 264 + mu.Lock() 265 + if vulnerabilities != nil && vulnerabilities.Total > 0 { 266 + manifests[idx].Vulnerabilities = vulnerabilities 267 + manifests[idx].HasVulnerabilities = true 268 + } 269 + mu.Unlock() 270 + }(i) 271 + } 272 + 273 + wg.Wait() 61 274 } 62 275 63 276 // Check health status for each manifest's hold endpoint (concurrent with 1s timeout)
+9 -2
pkg/appview/jetstream/processor.go
··· 107 107 // Detect manifest type 108 108 isManifestList := len(manifestRecord.Manifests) > 0 109 109 110 + // Parse CreatedAt timestamp 111 + createdAt, err := time.Parse(time.RFC3339, manifestRecord.CreatedAt) 112 + if err != nil { 113 + // If parsing fails, use current time 114 + createdAt = time.Now() 115 + } 116 + 110 117 // Prepare manifest for insertion (WITHOUT annotation fields) 111 118 manifest := &db.Manifest{ 112 119 DID: did, 113 120 Repository: manifestRecord.Repository, 114 121 Digest: manifestRecord.Digest, 115 122 MediaType: manifestRecord.MediaType, 116 - SchemaVersion: manifestRecord.SchemaVersion, 123 + SchemaVersion: int(manifestRecord.SchemaVersion), 117 124 HoldEndpoint: manifestRecord.HoldEndpoint, 118 - CreatedAt: manifestRecord.CreatedAt, 125 + CreatedAt: createdAt, 119 126 // Annotations removed - stored separately in repository_annotations table 120 127 } 121 128
+4 -4
pkg/appview/jetstream/processor_test.go
··· 148 148 MediaType: "application/vnd.oci.image.manifest.v1+json", 149 149 SchemaVersion: 2, 150 150 HoldEndpoint: "did:web:hold01.atcr.io", 151 - CreatedAt: time.Now(), 151 + CreatedAt: time.Now().String(), 152 152 Config: &atproto.BlobReference{ 153 153 Digest: "sha256:config123", 154 154 Size: 1234, ··· 247 247 MediaType: "application/vnd.oci.image.index.v1+json", 248 248 SchemaVersion: 2, 249 249 HoldEndpoint: "did:web:hold01.atcr.io", 250 - CreatedAt: time.Now(), 250 + CreatedAt: time.Now().String(), 251 251 Manifests: []atproto.ManifestReference{ 252 252 { 253 253 Digest: "sha256:amd64manifest", ··· 471 471 MediaType: "application/vnd.oci.image.manifest.v1+json", 472 472 SchemaVersion: 2, 473 473 HoldEndpoint: "did:web:hold01.atcr.io", 474 - CreatedAt: time.Now(), 474 + CreatedAt: time.Now().String(), 475 475 } 476 476 477 477 // Marshal to bytes for ProcessManifest ··· 523 523 MediaType: "application/vnd.oci.image.manifest.v1+json", 524 524 SchemaVersion: 2, 525 525 HoldEndpoint: "did:web:hold01.atcr.io", 526 - CreatedAt: time.Now(), 526 + CreatedAt: time.Now().String(), 527 527 Annotations: nil, 528 528 } 529 529
+23 -5
pkg/appview/storage/manifest_store.go
··· 307 307 } 308 308 309 309 // Add layers if present 310 + slog.Debug("Preparing manifest notification", 311 + "repository", s.ctx.Repository, 312 + "tag", tag, 313 + "manifestLayers", len(manifestRecord.Layers)) 314 + 310 315 if len(manifestRecord.Layers) > 0 { 311 316 layers := make([]map[string]any, len(manifestRecord.Layers)) 312 317 for i, layer := range manifestRecord.Layers { ··· 317 322 } 318 323 } 319 324 manifestData["layers"] = layers 325 + slog.Debug("Added layers to notification", "layerCount", len(layers)) 326 + } else { 327 + slog.Warn("Manifest has no layers", 328 + "repository", s.ctx.Repository, 329 + "tag", tag, 330 + "digest", manifestDigest, 331 + "mediaType", manifestRecord.MediaType) 320 332 } 321 333 322 334 notifyReq := map[string]any{ 323 - "repository": s.ctx.Repository, 324 - "tag": tag, 325 - "userDid": s.ctx.DID, 326 - "userHandle": s.ctx.Handle, 327 - "manifest": manifestData, 335 + "repository": s.ctx.Repository, 336 + "tag": tag, 337 + "manifestDigest": manifestDigest, 338 + "userDid": s.ctx.DID, 339 + "userHandle": s.ctx.Handle, 340 + "manifest": manifestData, 328 341 } 342 + 343 + slog.Debug("Sending manifest notification", 344 + "repository", s.ctx.Repository, 345 + "holdEndpoint", holdEndpoint, 346 + "hasLayers", manifestData["layers"] != nil) 329 347 330 348 // Marshal request 331 349 reqBody, err := json.Marshal(notifyReq)
+251
pkg/appview/templates/pages/repository.html
··· 176 176 {{ else }} 177 177 <span class="manifest-type"><i data-lucide="file-text"></i> Image</span> 178 178 {{ end }} 179 + {{ if .HasVulnerabilities }} 180 + <div class="vuln-badges-link" 181 + onclick="showVulnerabilities('{{ .Manifest.Digest }}', '{{ .Manifest.HoldEndpoint }}')" 182 + style="cursor: pointer;" 183 + title="Click to view vulnerability details"> 184 + {{ if gt .Vulnerabilities.Critical 0 }} 185 + <span class="vuln-badge vuln-critical" title="Critical vulnerabilities"> 186 + <i data-lucide="alert-octagon"></i> {{ .Vulnerabilities.Critical }} Critical 187 + </span> 188 + {{ end }} 189 + {{ if gt .Vulnerabilities.High 0 }} 190 + <span class="vuln-badge vuln-high" title="High severity vulnerabilities"> 191 + <i data-lucide="alert-triangle"></i> {{ .Vulnerabilities.High }} High 192 + </span> 193 + {{ end }} 194 + {{ if gt .Vulnerabilities.Medium 0 }} 195 + <span class="vuln-badge vuln-medium" title="Medium severity vulnerabilities"> 196 + <i data-lucide="alert-circle"></i> {{ .Vulnerabilities.Medium }} Medium 197 + </span> 198 + {{ end }} 199 + {{ if gt .Vulnerabilities.Low 0 }} 200 + <span class="vuln-badge vuln-low" title="Low severity vulnerabilities"> 201 + <i data-lucide="info"></i> {{ .Vulnerabilities.Low }} Low 202 + </span> 203 + {{ end }} 204 + </div> 205 + {{ end }} 179 206 {{ if .Pending }} 180 207 <span class="checking-badge" 181 208 hx-get="/api/manifest-health?endpoint={{ .Manifest.HoldEndpoint | urlquery }}" ··· 242 269 <!-- Modal container for HTMX --> 243 270 <div id="modal"></div> 244 271 272 + <!-- Vulnerability Details Modal --> 273 + <div id="vuln-modal" class="modal-overlay" style="display: none;"> 274 + <div class="modal-dialog vuln-modal-dialog"> 275 + <div class="modal-header"> 276 + <h3>Vulnerability Report</h3> 277 + <button class="modal-close" onclick="closeVulnModal()">&times;</button> 278 + </div> 279 + <div class="modal-body" id="vuln-modal-body"> 280 + <div class="loading">Loading vulnerabilities...</div> 281 + </div> 282 + <div class="modal-footer"> 283 + <button class="btn btn-secondary" onclick="closeVulnModal()">Close</button> 284 + </div> 285 + </div> 286 + </div> 287 + 245 288 <!-- Manifest Delete Confirmation Modal --> 246 289 <div id="manifest-delete-modal" class="modal-overlay" style="display: none;"> 247 290 <div class="modal-dialog"> ··· 357 400 .btn-danger:hover { 358 401 background: #c82333; 359 402 } 403 + 404 + /* Vulnerability badges */ 405 + .vuln-badges-link { 406 + display: inline-flex; 407 + gap: 0.5rem; 408 + text-decoration: none; 409 + cursor: pointer; 410 + } 411 + 412 + .vuln-badges-link:hover .vuln-badge { 413 + opacity: 0.8; 414 + transform: translateY(-1px); 415 + transition: all 0.2s ease; 416 + } 417 + 418 + .vuln-badge { 419 + display: inline-flex; 420 + align-items: center; 421 + gap: 0.25rem; 422 + padding: 0.25rem 0.5rem; 423 + border-radius: 4px; 424 + font-size: 0.75rem; 425 + font-weight: 600; 426 + color: white; 427 + white-space: nowrap; 428 + } 429 + 430 + .vuln-badge svg { 431 + width: 14px; 432 + height: 14px; 433 + } 434 + 435 + .vuln-critical { 436 + background: #dc3545; 437 + border: 1px solid #bd2130; 438 + } 439 + 440 + .vuln-high { 441 + background: #fd7e14; 442 + border: 1px solid #dc6502; 443 + } 444 + 445 + .vuln-medium { 446 + background: #ffc107; 447 + border: 1px solid #e0a800; 448 + color: #000; 449 + } 450 + 451 + .vuln-low { 452 + background: #6c757d; 453 + border: 1px solid #5a6268; 454 + } 455 + 456 + /* Vulnerability modal specific styles */ 457 + .vuln-modal-dialog { 458 + max-width: 900px; 459 + max-height: 80vh; 460 + } 461 + 462 + .vuln-modal-dialog .modal-body { 463 + max-height: 60vh; 464 + overflow-y: auto; 465 + } 466 + 467 + .vuln-summary { 468 + display: flex; 469 + gap: 1rem; 470 + margin-bottom: 1.5rem; 471 + padding: 1rem; 472 + background: var(--bg-tertiary, #2a2a2a); 473 + border-radius: 4px; 474 + } 475 + 476 + .vuln-table { 477 + width: 100%; 478 + border-collapse: collapse; 479 + } 480 + 481 + .vuln-table th { 482 + text-align: left; 483 + padding: 0.75rem; 484 + background: var(--bg-tertiary, #2a2a2a); 485 + border-bottom: 2px solid var(--border-color, #333); 486 + font-weight: 600; 487 + } 488 + 489 + .vuln-table td { 490 + padding: 0.75rem; 491 + border-bottom: 1px solid var(--border-color, #333); 492 + } 493 + 494 + .vuln-table tr:hover { 495 + background: var(--bg-hover, #3a3a3a); 496 + } 497 + 498 + .vuln-id { 499 + font-family: monospace; 500 + font-weight: 600; 501 + } 502 + 503 + .vuln-severity-critical { 504 + color: #dc3545; 505 + font-weight: 600; 506 + } 507 + 508 + .vuln-severity-high { 509 + color: #fd7e14; 510 + font-weight: 600; 511 + } 512 + 513 + .vuln-severity-medium { 514 + color: #ffc107; 515 + font-weight: 600; 516 + } 517 + 518 + .vuln-severity-low { 519 + color: #6c757d; 520 + font-weight: 600; 521 + } 522 + 523 + .loading { 524 + text-align: center; 525 + padding: 2rem; 526 + color: var(--text-muted, #999); 527 + } 360 528 </style> 529 + 530 + <script> 531 + function showVulnerabilities(digest, holdEndpoint) { 532 + const modal = document.getElementById('vuln-modal'); 533 + const modalBody = document.getElementById('vuln-modal-body'); 534 + 535 + // Show modal with loading state 536 + modal.style.display = 'flex'; 537 + modalBody.innerHTML = '<div class="loading">Loading vulnerabilities...</div>'; 538 + 539 + // Fetch vulnerability data 540 + const url = `/api/vulnerabilities?digest=${encodeURIComponent(digest)}&holdEndpoint=${encodeURIComponent(holdEndpoint)}`; 541 + 542 + fetch(url) 543 + .then(response => { 544 + if (!response.ok) { 545 + throw new Error(`HTTP ${response.status}: ${response.statusText}`); 546 + } 547 + return response.json(); 548 + }) 549 + .then(data => { 550 + renderVulnerabilities(data, modalBody); 551 + }) 552 + .catch(error => { 553 + modalBody.innerHTML = `<div class="loading" style="color: #dc3545;">Failed to load vulnerabilities: ${error.message}</div>`; 554 + }); 555 + } 556 + 557 + function renderVulnerabilities(data, container) { 558 + const summary = data.summary || {}; 559 + const matches = data.matches || []; 560 + 561 + let html = ''; 562 + 563 + // Summary 564 + html += '<div class="vuln-summary">'; 565 + if (summary.critical > 0) html += `<span class="vuln-badge vuln-critical">${summary.critical} Critical</span>`; 566 + if (summary.high > 0) html += `<span class="vuln-badge vuln-high">${summary.high} High</span>`; 567 + if (summary.medium > 0) html += `<span class="vuln-badge vuln-medium">${summary.medium} Medium</span>`; 568 + if (summary.low > 0) html += `<span class="vuln-badge vuln-low">${summary.low} Low</span>`; 569 + html += `<span style="margin-left: auto;">Total: ${summary.total || matches.length}</span>`; 570 + html += '</div>'; 571 + 572 + // Vulnerabilities table 573 + if (matches.length === 0) { 574 + html += '<p>No vulnerabilities found.</p>'; 575 + } else { 576 + html += '<table class="vuln-table">'; 577 + html += '<thead><tr><th>CVE</th><th>Severity</th><th>Package</th><th>Installed</th><th>Fixed In</th></tr></thead>'; 578 + html += '<tbody>'; 579 + 580 + matches.forEach(match => { 581 + const vuln = match.Vulnerability || {}; 582 + const pkg = match.Package || {}; 583 + const severity = (vuln.Metadata?.Severity || 'Unknown').toLowerCase(); 584 + const severityClass = `vuln-severity-${severity}`; 585 + 586 + html += '<tr>'; 587 + html += `<td class="vuln-id">${vuln.ID || 'N/A'}</td>`; 588 + html += `<td class="${severityClass}">${vuln.Metadata?.Severity || 'Unknown'}</td>`; 589 + html += `<td>${pkg.Name || 'N/A'}</td>`; 590 + html += `<td>${pkg.Version || 'N/A'}</td>`; 591 + html += `<td>${vuln.Fix?.Versions?.join(', ') || 'No fix available'}</td>`; 592 + html += '</tr>'; 593 + }); 594 + 595 + html += '</tbody></table>'; 596 + } 597 + 598 + container.innerHTML = html; 599 + } 600 + 601 + function closeVulnModal() { 602 + document.getElementById('vuln-modal').style.display = 'none'; 603 + } 604 + 605 + // Close modal when clicking outside 606 + document.getElementById('vuln-modal')?.addEventListener('click', function(e) { 607 + if (e.target === this) { 608 + closeVulnModal(); 609 + } 610 + }); 611 + </script> 361 612 </body> 362 613 </html> 363 614 {{ end }}
+2189
pkg/atproto/cbor_gen.go
··· 1419 1419 1420 1420 return nil 1421 1421 } 1422 + func (t *ManifestRecord) MarshalCBOR(w io.Writer) error { 1423 + if t == nil { 1424 + _, err := w.Write(cbg.CborNull) 1425 + return err 1426 + } 1427 + 1428 + cw := cbg.NewCborWriter(w) 1429 + fieldCount := 18 1430 + 1431 + if t.HoldDID == "" { 1432 + fieldCount-- 1433 + } 1434 + 1435 + if t.HoldEndpoint == "" { 1436 + fieldCount-- 1437 + } 1438 + 1439 + if t.ArtifactType == "" { 1440 + fieldCount-- 1441 + } 1442 + 1443 + if t.OwnerDID == "" { 1444 + fieldCount-- 1445 + } 1446 + 1447 + if t.ScannedAt == "" { 1448 + fieldCount-- 1449 + } 1450 + 1451 + if t.ScannerVersion == "" { 1452 + fieldCount-- 1453 + } 1454 + 1455 + if t.Config == nil { 1456 + fieldCount-- 1457 + } 1458 + 1459 + if t.Layers == nil { 1460 + fieldCount-- 1461 + } 1462 + 1463 + if t.Manifests == nil { 1464 + fieldCount-- 1465 + } 1466 + 1467 + if t.Subject == nil { 1468 + fieldCount-- 1469 + } 1470 + 1471 + if t.ManifestBlob == nil { 1472 + fieldCount-- 1473 + } 1474 + 1475 + if _, err := cw.Write(cbg.CborEncodeMajorType(cbg.MajMap, uint64(fieldCount))); err != nil { 1476 + return err 1477 + } 1478 + 1479 + // t.Type (string) (string) 1480 + if len("$type") > 8192 { 1481 + return xerrors.Errorf("Value in field \"$type\" was too long") 1482 + } 1483 + 1484 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("$type"))); err != nil { 1485 + return err 1486 + } 1487 + if _, err := cw.WriteString(string("$type")); err != nil { 1488 + return err 1489 + } 1490 + 1491 + if len(t.Type) > 8192 { 1492 + return xerrors.Errorf("Value in field t.Type was too long") 1493 + } 1494 + 1495 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.Type))); err != nil { 1496 + return err 1497 + } 1498 + if _, err := cw.WriteString(string(t.Type)); err != nil { 1499 + return err 1500 + } 1501 + 1502 + // t.Config (atproto.BlobReference) (struct) 1503 + if t.Config != nil { 1504 + 1505 + if len("config") > 8192 { 1506 + return xerrors.Errorf("Value in field \"config\" was too long") 1507 + } 1508 + 1509 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("config"))); err != nil { 1510 + return err 1511 + } 1512 + if _, err := cw.WriteString(string("config")); err != nil { 1513 + return err 1514 + } 1515 + 1516 + if err := t.Config.MarshalCBOR(cw); err != nil { 1517 + return err 1518 + } 1519 + } 1520 + 1521 + // t.Digest (string) (string) 1522 + if len("digest") > 8192 { 1523 + return xerrors.Errorf("Value in field \"digest\" was too long") 1524 + } 1525 + 1526 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("digest"))); err != nil { 1527 + return err 1528 + } 1529 + if _, err := cw.WriteString(string("digest")); err != nil { 1530 + return err 1531 + } 1532 + 1533 + if len(t.Digest) > 8192 { 1534 + return xerrors.Errorf("Value in field t.Digest was too long") 1535 + } 1536 + 1537 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.Digest))); err != nil { 1538 + return err 1539 + } 1540 + if _, err := cw.WriteString(string(t.Digest)); err != nil { 1541 + return err 1542 + } 1543 + 1544 + // t.Layers ([]atproto.BlobReference) (slice) 1545 + if t.Layers != nil { 1546 + 1547 + if len("layers") > 8192 { 1548 + return xerrors.Errorf("Value in field \"layers\" was too long") 1549 + } 1550 + 1551 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("layers"))); err != nil { 1552 + return err 1553 + } 1554 + if _, err := cw.WriteString(string("layers")); err != nil { 1555 + return err 1556 + } 1557 + 1558 + if len(t.Layers) > 8192 { 1559 + return xerrors.Errorf("Slice value in field t.Layers was too long") 1560 + } 1561 + 1562 + if err := cw.WriteMajorTypeHeader(cbg.MajArray, uint64(len(t.Layers))); err != nil { 1563 + return err 1564 + } 1565 + for _, v := range t.Layers { 1566 + if err := v.MarshalCBOR(cw); err != nil { 1567 + return err 1568 + } 1569 + 1570 + } 1571 + } 1572 + 1573 + // t.HoldDID (string) (string) 1574 + if t.HoldDID != "" { 1575 + 1576 + if len("holdDid") > 8192 { 1577 + return xerrors.Errorf("Value in field \"holdDid\" was too long") 1578 + } 1579 + 1580 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("holdDid"))); err != nil { 1581 + return err 1582 + } 1583 + if _, err := cw.WriteString(string("holdDid")); err != nil { 1584 + return err 1585 + } 1586 + 1587 + if len(t.HoldDID) > 8192 { 1588 + return xerrors.Errorf("Value in field t.HoldDID was too long") 1589 + } 1590 + 1591 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.HoldDID))); err != nil { 1592 + return err 1593 + } 1594 + if _, err := cw.WriteString(string(t.HoldDID)); err != nil { 1595 + return err 1596 + } 1597 + } 1598 + 1599 + // t.Subject (atproto.BlobReference) (struct) 1600 + if t.Subject != nil { 1601 + 1602 + if len("subject") > 8192 { 1603 + return xerrors.Errorf("Value in field \"subject\" was too long") 1604 + } 1605 + 1606 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("subject"))); err != nil { 1607 + return err 1608 + } 1609 + if _, err := cw.WriteString(string("subject")); err != nil { 1610 + return err 1611 + } 1612 + 1613 + if err := t.Subject.MarshalCBOR(cw); err != nil { 1614 + return err 1615 + } 1616 + } 1617 + 1618 + // t.OwnerDID (string) (string) 1619 + if t.OwnerDID != "" { 1620 + 1621 + if len("ownerDid") > 8192 { 1622 + return xerrors.Errorf("Value in field \"ownerDid\" was too long") 1623 + } 1624 + 1625 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("ownerDid"))); err != nil { 1626 + return err 1627 + } 1628 + if _, err := cw.WriteString(string("ownerDid")); err != nil { 1629 + return err 1630 + } 1631 + 1632 + if len(t.OwnerDID) > 8192 { 1633 + return xerrors.Errorf("Value in field t.OwnerDID was too long") 1634 + } 1635 + 1636 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.OwnerDID))); err != nil { 1637 + return err 1638 + } 1639 + if _, err := cw.WriteString(string(t.OwnerDID)); err != nil { 1640 + return err 1641 + } 1642 + } 1643 + 1644 + // t.CreatedAt (string) (string) 1645 + if len("createdAt") > 8192 { 1646 + return xerrors.Errorf("Value in field \"createdAt\" was too long") 1647 + } 1648 + 1649 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("createdAt"))); err != nil { 1650 + return err 1651 + } 1652 + if _, err := cw.WriteString(string("createdAt")); err != nil { 1653 + return err 1654 + } 1655 + 1656 + if len(t.CreatedAt) > 8192 { 1657 + return xerrors.Errorf("Value in field t.CreatedAt was too long") 1658 + } 1659 + 1660 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.CreatedAt))); err != nil { 1661 + return err 1662 + } 1663 + if _, err := cw.WriteString(string(t.CreatedAt)); err != nil { 1664 + return err 1665 + } 1666 + 1667 + // t.Manifests ([]atproto.ManifestReference) (slice) 1668 + if t.Manifests != nil { 1669 + 1670 + if len("manifests") > 8192 { 1671 + return xerrors.Errorf("Value in field \"manifests\" was too long") 1672 + } 1673 + 1674 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("manifests"))); err != nil { 1675 + return err 1676 + } 1677 + if _, err := cw.WriteString(string("manifests")); err != nil { 1678 + return err 1679 + } 1680 + 1681 + if len(t.Manifests) > 8192 { 1682 + return xerrors.Errorf("Slice value in field t.Manifests was too long") 1683 + } 1684 + 1685 + if err := cw.WriteMajorTypeHeader(cbg.MajArray, uint64(len(t.Manifests))); err != nil { 1686 + return err 1687 + } 1688 + for _, v := range t.Manifests { 1689 + if err := v.MarshalCBOR(cw); err != nil { 1690 + return err 1691 + } 1692 + 1693 + } 1694 + } 1695 + 1696 + // t.MediaType (string) (string) 1697 + if len("mediaType") > 8192 { 1698 + return xerrors.Errorf("Value in field \"mediaType\" was too long") 1699 + } 1700 + 1701 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("mediaType"))); err != nil { 1702 + return err 1703 + } 1704 + if _, err := cw.WriteString(string("mediaType")); err != nil { 1705 + return err 1706 + } 1707 + 1708 + if len(t.MediaType) > 8192 { 1709 + return xerrors.Errorf("Value in field t.MediaType was too long") 1710 + } 1711 + 1712 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.MediaType))); err != nil { 1713 + return err 1714 + } 1715 + if _, err := cw.WriteString(string(t.MediaType)); err != nil { 1716 + return err 1717 + } 1718 + 1719 + // t.ScannedAt (string) (string) 1720 + if t.ScannedAt != "" { 1721 + 1722 + if len("scannedAt") > 8192 { 1723 + return xerrors.Errorf("Value in field \"scannedAt\" was too long") 1724 + } 1725 + 1726 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("scannedAt"))); err != nil { 1727 + return err 1728 + } 1729 + if _, err := cw.WriteString(string("scannedAt")); err != nil { 1730 + return err 1731 + } 1732 + 1733 + if len(t.ScannedAt) > 8192 { 1734 + return xerrors.Errorf("Value in field t.ScannedAt was too long") 1735 + } 1736 + 1737 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.ScannedAt))); err != nil { 1738 + return err 1739 + } 1740 + if _, err := cw.WriteString(string(t.ScannedAt)); err != nil { 1741 + return err 1742 + } 1743 + } 1744 + 1745 + // t.Repository (string) (string) 1746 + if len("repository") > 8192 { 1747 + return xerrors.Errorf("Value in field \"repository\" was too long") 1748 + } 1749 + 1750 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("repository"))); err != nil { 1751 + return err 1752 + } 1753 + if _, err := cw.WriteString(string("repository")); err != nil { 1754 + return err 1755 + } 1756 + 1757 + if len(t.Repository) > 8192 { 1758 + return xerrors.Errorf("Value in field t.Repository was too long") 1759 + } 1760 + 1761 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.Repository))); err != nil { 1762 + return err 1763 + } 1764 + if _, err := cw.WriteString(string(t.Repository)); err != nil { 1765 + return err 1766 + } 1767 + 1768 + // t.Annotations (map[string]string) (map) 1769 + if len("annotations") > 8192 { 1770 + return xerrors.Errorf("Value in field \"annotations\" was too long") 1771 + } 1772 + 1773 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("annotations"))); err != nil { 1774 + return err 1775 + } 1776 + if _, err := cw.WriteString(string("annotations")); err != nil { 1777 + return err 1778 + } 1779 + 1780 + { 1781 + if len(t.Annotations) > 4096 { 1782 + return xerrors.Errorf("cannot marshal t.Annotations map too large") 1783 + } 1784 + 1785 + if err := cw.WriteMajorTypeHeader(cbg.MajMap, uint64(len(t.Annotations))); err != nil { 1786 + return err 1787 + } 1788 + 1789 + keys := make([]string, 0, len(t.Annotations)) 1790 + for k := range t.Annotations { 1791 + keys = append(keys, k) 1792 + } 1793 + sort.Strings(keys) 1794 + for _, k := range keys { 1795 + v := t.Annotations[k] 1796 + 1797 + if len(k) > 8192 { 1798 + return xerrors.Errorf("Value in field k was too long") 1799 + } 1800 + 1801 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(k))); err != nil { 1802 + return err 1803 + } 1804 + if _, err := cw.WriteString(string(k)); err != nil { 1805 + return err 1806 + } 1807 + 1808 + if len(v) > 8192 { 1809 + return xerrors.Errorf("Value in field v was too long") 1810 + } 1811 + 1812 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(v))); err != nil { 1813 + return err 1814 + } 1815 + if _, err := cw.WriteString(string(v)); err != nil { 1816 + return err 1817 + } 1818 + 1819 + } 1820 + } 1821 + 1822 + // t.ArtifactType (string) (string) 1823 + if t.ArtifactType != "" { 1824 + 1825 + if len("artifactType") > 8192 { 1826 + return xerrors.Errorf("Value in field \"artifactType\" was too long") 1827 + } 1828 + 1829 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("artifactType"))); err != nil { 1830 + return err 1831 + } 1832 + if _, err := cw.WriteString(string("artifactType")); err != nil { 1833 + return err 1834 + } 1835 + 1836 + if len(t.ArtifactType) > 8192 { 1837 + return xerrors.Errorf("Value in field t.ArtifactType was too long") 1838 + } 1839 + 1840 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.ArtifactType))); err != nil { 1841 + return err 1842 + } 1843 + if _, err := cw.WriteString(string(t.ArtifactType)); err != nil { 1844 + return err 1845 + } 1846 + } 1847 + 1848 + // t.HoldEndpoint (string) (string) 1849 + if t.HoldEndpoint != "" { 1850 + 1851 + if len("holdEndpoint") > 8192 { 1852 + return xerrors.Errorf("Value in field \"holdEndpoint\" was too long") 1853 + } 1854 + 1855 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("holdEndpoint"))); err != nil { 1856 + return err 1857 + } 1858 + if _, err := cw.WriteString(string("holdEndpoint")); err != nil { 1859 + return err 1860 + } 1861 + 1862 + if len(t.HoldEndpoint) > 8192 { 1863 + return xerrors.Errorf("Value in field t.HoldEndpoint was too long") 1864 + } 1865 + 1866 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.HoldEndpoint))); err != nil { 1867 + return err 1868 + } 1869 + if _, err := cw.WriteString(string(t.HoldEndpoint)); err != nil { 1870 + return err 1871 + } 1872 + } 1873 + 1874 + // t.ManifestBlob (atproto.ATProtoBlobRef) (struct) 1875 + if t.ManifestBlob != nil { 1876 + 1877 + if len("manifestBlob") > 8192 { 1878 + return xerrors.Errorf("Value in field \"manifestBlob\" was too long") 1879 + } 1880 + 1881 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("manifestBlob"))); err != nil { 1882 + return err 1883 + } 1884 + if _, err := cw.WriteString(string("manifestBlob")); err != nil { 1885 + return err 1886 + } 1887 + 1888 + if err := t.ManifestBlob.MarshalCBOR(cw); err != nil { 1889 + return err 1890 + } 1891 + } 1892 + 1893 + // t.SchemaVersion (int64) (int64) 1894 + if len("schemaVersion") > 8192 { 1895 + return xerrors.Errorf("Value in field \"schemaVersion\" was too long") 1896 + } 1897 + 1898 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("schemaVersion"))); err != nil { 1899 + return err 1900 + } 1901 + if _, err := cw.WriteString(string("schemaVersion")); err != nil { 1902 + return err 1903 + } 1904 + 1905 + if t.SchemaVersion >= 0 { 1906 + if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.SchemaVersion)); err != nil { 1907 + return err 1908 + } 1909 + } else { 1910 + if err := cw.WriteMajorTypeHeader(cbg.MajNegativeInt, uint64(-t.SchemaVersion-1)); err != nil { 1911 + return err 1912 + } 1913 + } 1914 + 1915 + // t.ScannerVersion (string) (string) 1916 + if t.ScannerVersion != "" { 1917 + 1918 + if len("scannerVersion") > 8192 { 1919 + return xerrors.Errorf("Value in field \"scannerVersion\" was too long") 1920 + } 1921 + 1922 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("scannerVersion"))); err != nil { 1923 + return err 1924 + } 1925 + if _, err := cw.WriteString(string("scannerVersion")); err != nil { 1926 + return err 1927 + } 1928 + 1929 + if len(t.ScannerVersion) > 8192 { 1930 + return xerrors.Errorf("Value in field t.ScannerVersion was too long") 1931 + } 1932 + 1933 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.ScannerVersion))); err != nil { 1934 + return err 1935 + } 1936 + if _, err := cw.WriteString(string(t.ScannerVersion)); err != nil { 1937 + return err 1938 + } 1939 + } 1940 + return nil 1941 + } 1942 + 1943 + func (t *ManifestRecord) UnmarshalCBOR(r io.Reader) (err error) { 1944 + *t = ManifestRecord{} 1945 + 1946 + cr := cbg.NewCborReader(r) 1947 + 1948 + maj, extra, err := cr.ReadHeader() 1949 + if err != nil { 1950 + return err 1951 + } 1952 + defer func() { 1953 + if err == io.EOF { 1954 + err = io.ErrUnexpectedEOF 1955 + } 1956 + }() 1957 + 1958 + if maj != cbg.MajMap { 1959 + return fmt.Errorf("cbor input should be of type map") 1960 + } 1961 + 1962 + if extra > cbg.MaxLength { 1963 + return fmt.Errorf("ManifestRecord: map struct too large (%d)", extra) 1964 + } 1965 + 1966 + n := extra 1967 + 1968 + nameBuf := make([]byte, 14) 1969 + for i := uint64(0); i < n; i++ { 1970 + nameLen, ok, err := cbg.ReadFullStringIntoBuf(cr, nameBuf, 8192) 1971 + if err != nil { 1972 + return err 1973 + } 1974 + 1975 + if !ok { 1976 + // Field doesn't exist on this type, so ignore it 1977 + if err := cbg.ScanForLinks(cr, func(cid.Cid) {}); err != nil { 1978 + return err 1979 + } 1980 + continue 1981 + } 1982 + 1983 + switch string(nameBuf[:nameLen]) { 1984 + // t.Type (string) (string) 1985 + case "$type": 1986 + 1987 + { 1988 + sval, err := cbg.ReadStringWithMax(cr, 8192) 1989 + if err != nil { 1990 + return err 1991 + } 1992 + 1993 + t.Type = string(sval) 1994 + } 1995 + // t.Config (atproto.BlobReference) (struct) 1996 + case "config": 1997 + 1998 + { 1999 + 2000 + b, err := cr.ReadByte() 2001 + if err != nil { 2002 + return err 2003 + } 2004 + if b != cbg.CborNull[0] { 2005 + if err := cr.UnreadByte(); err != nil { 2006 + return err 2007 + } 2008 + t.Config = new(BlobReference) 2009 + if err := t.Config.UnmarshalCBOR(cr); err != nil { 2010 + return xerrors.Errorf("unmarshaling t.Config pointer: %w", err) 2011 + } 2012 + } 2013 + 2014 + } 2015 + // t.Digest (string) (string) 2016 + case "digest": 2017 + 2018 + { 2019 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2020 + if err != nil { 2021 + return err 2022 + } 2023 + 2024 + t.Digest = string(sval) 2025 + } 2026 + // t.Layers ([]atproto.BlobReference) (slice) 2027 + case "layers": 2028 + 2029 + maj, extra, err = cr.ReadHeader() 2030 + if err != nil { 2031 + return err 2032 + } 2033 + 2034 + if extra > 8192 { 2035 + return fmt.Errorf("t.Layers: array too large (%d)", extra) 2036 + } 2037 + 2038 + if maj != cbg.MajArray { 2039 + return fmt.Errorf("expected cbor array") 2040 + } 2041 + 2042 + if extra > 0 { 2043 + t.Layers = make([]BlobReference, extra) 2044 + } 2045 + 2046 + for i := 0; i < int(extra); i++ { 2047 + { 2048 + var maj byte 2049 + var extra uint64 2050 + var err error 2051 + _ = maj 2052 + _ = extra 2053 + _ = err 2054 + 2055 + { 2056 + 2057 + if err := t.Layers[i].UnmarshalCBOR(cr); err != nil { 2058 + return xerrors.Errorf("unmarshaling t.Layers[i]: %w", err) 2059 + } 2060 + 2061 + } 2062 + 2063 + } 2064 + } 2065 + // t.HoldDID (string) (string) 2066 + case "holdDid": 2067 + 2068 + { 2069 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2070 + if err != nil { 2071 + return err 2072 + } 2073 + 2074 + t.HoldDID = string(sval) 2075 + } 2076 + // t.Subject (atproto.BlobReference) (struct) 2077 + case "subject": 2078 + 2079 + { 2080 + 2081 + b, err := cr.ReadByte() 2082 + if err != nil { 2083 + return err 2084 + } 2085 + if b != cbg.CborNull[0] { 2086 + if err := cr.UnreadByte(); err != nil { 2087 + return err 2088 + } 2089 + t.Subject = new(BlobReference) 2090 + if err := t.Subject.UnmarshalCBOR(cr); err != nil { 2091 + return xerrors.Errorf("unmarshaling t.Subject pointer: %w", err) 2092 + } 2093 + } 2094 + 2095 + } 2096 + // t.OwnerDID (string) (string) 2097 + case "ownerDid": 2098 + 2099 + { 2100 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2101 + if err != nil { 2102 + return err 2103 + } 2104 + 2105 + t.OwnerDID = string(sval) 2106 + } 2107 + // t.CreatedAt (string) (string) 2108 + case "createdAt": 2109 + 2110 + { 2111 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2112 + if err != nil { 2113 + return err 2114 + } 2115 + 2116 + t.CreatedAt = string(sval) 2117 + } 2118 + // t.Manifests ([]atproto.ManifestReference) (slice) 2119 + case "manifests": 2120 + 2121 + maj, extra, err = cr.ReadHeader() 2122 + if err != nil { 2123 + return err 2124 + } 2125 + 2126 + if extra > 8192 { 2127 + return fmt.Errorf("t.Manifests: array too large (%d)", extra) 2128 + } 2129 + 2130 + if maj != cbg.MajArray { 2131 + return fmt.Errorf("expected cbor array") 2132 + } 2133 + 2134 + if extra > 0 { 2135 + t.Manifests = make([]ManifestReference, extra) 2136 + } 2137 + 2138 + for i := 0; i < int(extra); i++ { 2139 + { 2140 + var maj byte 2141 + var extra uint64 2142 + var err error 2143 + _ = maj 2144 + _ = extra 2145 + _ = err 2146 + 2147 + { 2148 + 2149 + if err := t.Manifests[i].UnmarshalCBOR(cr); err != nil { 2150 + return xerrors.Errorf("unmarshaling t.Manifests[i]: %w", err) 2151 + } 2152 + 2153 + } 2154 + 2155 + } 2156 + } 2157 + // t.MediaType (string) (string) 2158 + case "mediaType": 2159 + 2160 + { 2161 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2162 + if err != nil { 2163 + return err 2164 + } 2165 + 2166 + t.MediaType = string(sval) 2167 + } 2168 + // t.ScannedAt (string) (string) 2169 + case "scannedAt": 2170 + 2171 + { 2172 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2173 + if err != nil { 2174 + return err 2175 + } 2176 + 2177 + t.ScannedAt = string(sval) 2178 + } 2179 + // t.Repository (string) (string) 2180 + case "repository": 2181 + 2182 + { 2183 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2184 + if err != nil { 2185 + return err 2186 + } 2187 + 2188 + t.Repository = string(sval) 2189 + } 2190 + // t.Annotations (map[string]string) (map) 2191 + case "annotations": 2192 + 2193 + maj, extra, err = cr.ReadHeader() 2194 + if err != nil { 2195 + return err 2196 + } 2197 + if maj != cbg.MajMap { 2198 + return fmt.Errorf("expected a map (major type 5)") 2199 + } 2200 + if extra > 4096 { 2201 + return fmt.Errorf("t.Annotations: map too large") 2202 + } 2203 + 2204 + t.Annotations = make(map[string]string, extra) 2205 + 2206 + for i, l := 0, int(extra); i < l; i++ { 2207 + 2208 + var k string 2209 + 2210 + { 2211 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2212 + if err != nil { 2213 + return err 2214 + } 2215 + 2216 + k = string(sval) 2217 + } 2218 + 2219 + var v string 2220 + 2221 + { 2222 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2223 + if err != nil { 2224 + return err 2225 + } 2226 + 2227 + v = string(sval) 2228 + } 2229 + 2230 + t.Annotations[k] = v 2231 + 2232 + } 2233 + // t.ArtifactType (string) (string) 2234 + case "artifactType": 2235 + 2236 + { 2237 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2238 + if err != nil { 2239 + return err 2240 + } 2241 + 2242 + t.ArtifactType = string(sval) 2243 + } 2244 + // t.HoldEndpoint (string) (string) 2245 + case "holdEndpoint": 2246 + 2247 + { 2248 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2249 + if err != nil { 2250 + return err 2251 + } 2252 + 2253 + t.HoldEndpoint = string(sval) 2254 + } 2255 + // t.ManifestBlob (atproto.ATProtoBlobRef) (struct) 2256 + case "manifestBlob": 2257 + 2258 + { 2259 + 2260 + b, err := cr.ReadByte() 2261 + if err != nil { 2262 + return err 2263 + } 2264 + if b != cbg.CborNull[0] { 2265 + if err := cr.UnreadByte(); err != nil { 2266 + return err 2267 + } 2268 + t.ManifestBlob = new(ATProtoBlobRef) 2269 + if err := t.ManifestBlob.UnmarshalCBOR(cr); err != nil { 2270 + return xerrors.Errorf("unmarshaling t.ManifestBlob pointer: %w", err) 2271 + } 2272 + } 2273 + 2274 + } 2275 + // t.SchemaVersion (int64) (int64) 2276 + case "schemaVersion": 2277 + { 2278 + maj, extra, err := cr.ReadHeader() 2279 + if err != nil { 2280 + return err 2281 + } 2282 + var extraI int64 2283 + switch maj { 2284 + case cbg.MajUnsignedInt: 2285 + extraI = int64(extra) 2286 + if extraI < 0 { 2287 + return fmt.Errorf("int64 positive overflow") 2288 + } 2289 + case cbg.MajNegativeInt: 2290 + extraI = int64(extra) 2291 + if extraI < 0 { 2292 + return fmt.Errorf("int64 negative overflow") 2293 + } 2294 + extraI = -1 - extraI 2295 + default: 2296 + return fmt.Errorf("wrong type for int64 field: %d", maj) 2297 + } 2298 + 2299 + t.SchemaVersion = int64(extraI) 2300 + } 2301 + // t.ScannerVersion (string) (string) 2302 + case "scannerVersion": 2303 + 2304 + { 2305 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2306 + if err != nil { 2307 + return err 2308 + } 2309 + 2310 + t.ScannerVersion = string(sval) 2311 + } 2312 + 2313 + default: 2314 + // Field doesn't exist on this type, so ignore it 2315 + if err := cbg.ScanForLinks(r, func(cid.Cid) {}); err != nil { 2316 + return err 2317 + } 2318 + } 2319 + } 2320 + 2321 + return nil 2322 + } 2323 + func (t *BlobReference) MarshalCBOR(w io.Writer) error { 2324 + if t == nil { 2325 + _, err := w.Write(cbg.CborNull) 2326 + return err 2327 + } 2328 + 2329 + cw := cbg.NewCborWriter(w) 2330 + fieldCount := 5 2331 + 2332 + if t.URLs == nil { 2333 + fieldCount-- 2334 + } 2335 + 2336 + if _, err := cw.Write(cbg.CborEncodeMajorType(cbg.MajMap, uint64(fieldCount))); err != nil { 2337 + return err 2338 + } 2339 + 2340 + // t.Size (int64) (int64) 2341 + if len("size") > 8192 { 2342 + return xerrors.Errorf("Value in field \"size\" was too long") 2343 + } 2344 + 2345 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("size"))); err != nil { 2346 + return err 2347 + } 2348 + if _, err := cw.WriteString(string("size")); err != nil { 2349 + return err 2350 + } 2351 + 2352 + if t.Size >= 0 { 2353 + if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.Size)); err != nil { 2354 + return err 2355 + } 2356 + } else { 2357 + if err := cw.WriteMajorTypeHeader(cbg.MajNegativeInt, uint64(-t.Size-1)); err != nil { 2358 + return err 2359 + } 2360 + } 2361 + 2362 + // t.URLs ([]string) (slice) 2363 + if t.URLs != nil { 2364 + 2365 + if len("urls") > 8192 { 2366 + return xerrors.Errorf("Value in field \"urls\" was too long") 2367 + } 2368 + 2369 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("urls"))); err != nil { 2370 + return err 2371 + } 2372 + if _, err := cw.WriteString(string("urls")); err != nil { 2373 + return err 2374 + } 2375 + 2376 + if len(t.URLs) > 8192 { 2377 + return xerrors.Errorf("Slice value in field t.URLs was too long") 2378 + } 2379 + 2380 + if err := cw.WriteMajorTypeHeader(cbg.MajArray, uint64(len(t.URLs))); err != nil { 2381 + return err 2382 + } 2383 + for _, v := range t.URLs { 2384 + if len(v) > 8192 { 2385 + return xerrors.Errorf("Value in field v was too long") 2386 + } 2387 + 2388 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(v))); err != nil { 2389 + return err 2390 + } 2391 + if _, err := cw.WriteString(string(v)); err != nil { 2392 + return err 2393 + } 2394 + 2395 + } 2396 + } 2397 + 2398 + // t.Digest (string) (string) 2399 + if len("digest") > 8192 { 2400 + return xerrors.Errorf("Value in field \"digest\" was too long") 2401 + } 2402 + 2403 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("digest"))); err != nil { 2404 + return err 2405 + } 2406 + if _, err := cw.WriteString(string("digest")); err != nil { 2407 + return err 2408 + } 2409 + 2410 + if len(t.Digest) > 8192 { 2411 + return xerrors.Errorf("Value in field t.Digest was too long") 2412 + } 2413 + 2414 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.Digest))); err != nil { 2415 + return err 2416 + } 2417 + if _, err := cw.WriteString(string(t.Digest)); err != nil { 2418 + return err 2419 + } 2420 + 2421 + // t.MediaType (string) (string) 2422 + if len("mediaType") > 8192 { 2423 + return xerrors.Errorf("Value in field \"mediaType\" was too long") 2424 + } 2425 + 2426 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("mediaType"))); err != nil { 2427 + return err 2428 + } 2429 + if _, err := cw.WriteString(string("mediaType")); err != nil { 2430 + return err 2431 + } 2432 + 2433 + if len(t.MediaType) > 8192 { 2434 + return xerrors.Errorf("Value in field t.MediaType was too long") 2435 + } 2436 + 2437 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.MediaType))); err != nil { 2438 + return err 2439 + } 2440 + if _, err := cw.WriteString(string(t.MediaType)); err != nil { 2441 + return err 2442 + } 2443 + 2444 + // t.Annotations (map[string]string) (map) 2445 + if len("annotations") > 8192 { 2446 + return xerrors.Errorf("Value in field \"annotations\" was too long") 2447 + } 2448 + 2449 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("annotations"))); err != nil { 2450 + return err 2451 + } 2452 + if _, err := cw.WriteString(string("annotations")); err != nil { 2453 + return err 2454 + } 2455 + 2456 + { 2457 + if len(t.Annotations) > 4096 { 2458 + return xerrors.Errorf("cannot marshal t.Annotations map too large") 2459 + } 2460 + 2461 + if err := cw.WriteMajorTypeHeader(cbg.MajMap, uint64(len(t.Annotations))); err != nil { 2462 + return err 2463 + } 2464 + 2465 + keys := make([]string, 0, len(t.Annotations)) 2466 + for k := range t.Annotations { 2467 + keys = append(keys, k) 2468 + } 2469 + sort.Strings(keys) 2470 + for _, k := range keys { 2471 + v := t.Annotations[k] 2472 + 2473 + if len(k) > 8192 { 2474 + return xerrors.Errorf("Value in field k was too long") 2475 + } 2476 + 2477 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(k))); err != nil { 2478 + return err 2479 + } 2480 + if _, err := cw.WriteString(string(k)); err != nil { 2481 + return err 2482 + } 2483 + 2484 + if len(v) > 8192 { 2485 + return xerrors.Errorf("Value in field v was too long") 2486 + } 2487 + 2488 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(v))); err != nil { 2489 + return err 2490 + } 2491 + if _, err := cw.WriteString(string(v)); err != nil { 2492 + return err 2493 + } 2494 + 2495 + } 2496 + } 2497 + return nil 2498 + } 2499 + 2500 + func (t *BlobReference) UnmarshalCBOR(r io.Reader) (err error) { 2501 + *t = BlobReference{} 2502 + 2503 + cr := cbg.NewCborReader(r) 2504 + 2505 + maj, extra, err := cr.ReadHeader() 2506 + if err != nil { 2507 + return err 2508 + } 2509 + defer func() { 2510 + if err == io.EOF { 2511 + err = io.ErrUnexpectedEOF 2512 + } 2513 + }() 2514 + 2515 + if maj != cbg.MajMap { 2516 + return fmt.Errorf("cbor input should be of type map") 2517 + } 2518 + 2519 + if extra > cbg.MaxLength { 2520 + return fmt.Errorf("BlobReference: map struct too large (%d)", extra) 2521 + } 2522 + 2523 + n := extra 2524 + 2525 + nameBuf := make([]byte, 11) 2526 + for i := uint64(0); i < n; i++ { 2527 + nameLen, ok, err := cbg.ReadFullStringIntoBuf(cr, nameBuf, 8192) 2528 + if err != nil { 2529 + return err 2530 + } 2531 + 2532 + if !ok { 2533 + // Field doesn't exist on this type, so ignore it 2534 + if err := cbg.ScanForLinks(cr, func(cid.Cid) {}); err != nil { 2535 + return err 2536 + } 2537 + continue 2538 + } 2539 + 2540 + switch string(nameBuf[:nameLen]) { 2541 + // t.Size (int64) (int64) 2542 + case "size": 2543 + { 2544 + maj, extra, err := cr.ReadHeader() 2545 + if err != nil { 2546 + return err 2547 + } 2548 + var extraI int64 2549 + switch maj { 2550 + case cbg.MajUnsignedInt: 2551 + extraI = int64(extra) 2552 + if extraI < 0 { 2553 + return fmt.Errorf("int64 positive overflow") 2554 + } 2555 + case cbg.MajNegativeInt: 2556 + extraI = int64(extra) 2557 + if extraI < 0 { 2558 + return fmt.Errorf("int64 negative overflow") 2559 + } 2560 + extraI = -1 - extraI 2561 + default: 2562 + return fmt.Errorf("wrong type for int64 field: %d", maj) 2563 + } 2564 + 2565 + t.Size = int64(extraI) 2566 + } 2567 + // t.URLs ([]string) (slice) 2568 + case "urls": 2569 + 2570 + maj, extra, err = cr.ReadHeader() 2571 + if err != nil { 2572 + return err 2573 + } 2574 + 2575 + if extra > 8192 { 2576 + return fmt.Errorf("t.URLs: array too large (%d)", extra) 2577 + } 2578 + 2579 + if maj != cbg.MajArray { 2580 + return fmt.Errorf("expected cbor array") 2581 + } 2582 + 2583 + if extra > 0 { 2584 + t.URLs = make([]string, extra) 2585 + } 2586 + 2587 + for i := 0; i < int(extra); i++ { 2588 + { 2589 + var maj byte 2590 + var extra uint64 2591 + var err error 2592 + _ = maj 2593 + _ = extra 2594 + _ = err 2595 + 2596 + { 2597 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2598 + if err != nil { 2599 + return err 2600 + } 2601 + 2602 + t.URLs[i] = string(sval) 2603 + } 2604 + 2605 + } 2606 + } 2607 + // t.Digest (string) (string) 2608 + case "digest": 2609 + 2610 + { 2611 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2612 + if err != nil { 2613 + return err 2614 + } 2615 + 2616 + t.Digest = string(sval) 2617 + } 2618 + // t.MediaType (string) (string) 2619 + case "mediaType": 2620 + 2621 + { 2622 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2623 + if err != nil { 2624 + return err 2625 + } 2626 + 2627 + t.MediaType = string(sval) 2628 + } 2629 + // t.Annotations (map[string]string) (map) 2630 + case "annotations": 2631 + 2632 + maj, extra, err = cr.ReadHeader() 2633 + if err != nil { 2634 + return err 2635 + } 2636 + if maj != cbg.MajMap { 2637 + return fmt.Errorf("expected a map (major type 5)") 2638 + } 2639 + if extra > 4096 { 2640 + return fmt.Errorf("t.Annotations: map too large") 2641 + } 2642 + 2643 + t.Annotations = make(map[string]string, extra) 2644 + 2645 + for i, l := 0, int(extra); i < l; i++ { 2646 + 2647 + var k string 2648 + 2649 + { 2650 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2651 + if err != nil { 2652 + return err 2653 + } 2654 + 2655 + k = string(sval) 2656 + } 2657 + 2658 + var v string 2659 + 2660 + { 2661 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2662 + if err != nil { 2663 + return err 2664 + } 2665 + 2666 + v = string(sval) 2667 + } 2668 + 2669 + t.Annotations[k] = v 2670 + 2671 + } 2672 + 2673 + default: 2674 + // Field doesn't exist on this type, so ignore it 2675 + if err := cbg.ScanForLinks(r, func(cid.Cid) {}); err != nil { 2676 + return err 2677 + } 2678 + } 2679 + } 2680 + 2681 + return nil 2682 + } 2683 + func (t *ManifestReference) MarshalCBOR(w io.Writer) error { 2684 + if t == nil { 2685 + _, err := w.Write(cbg.CborNull) 2686 + return err 2687 + } 2688 + 2689 + cw := cbg.NewCborWriter(w) 2690 + fieldCount := 5 2691 + 2692 + if t.Platform == nil { 2693 + fieldCount-- 2694 + } 2695 + 2696 + if _, err := cw.Write(cbg.CborEncodeMajorType(cbg.MajMap, uint64(fieldCount))); err != nil { 2697 + return err 2698 + } 2699 + 2700 + // t.Size (int64) (int64) 2701 + if len("size") > 8192 { 2702 + return xerrors.Errorf("Value in field \"size\" was too long") 2703 + } 2704 + 2705 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("size"))); err != nil { 2706 + return err 2707 + } 2708 + if _, err := cw.WriteString(string("size")); err != nil { 2709 + return err 2710 + } 2711 + 2712 + if t.Size >= 0 { 2713 + if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.Size)); err != nil { 2714 + return err 2715 + } 2716 + } else { 2717 + if err := cw.WriteMajorTypeHeader(cbg.MajNegativeInt, uint64(-t.Size-1)); err != nil { 2718 + return err 2719 + } 2720 + } 2721 + 2722 + // t.Digest (string) (string) 2723 + if len("digest") > 8192 { 2724 + return xerrors.Errorf("Value in field \"digest\" was too long") 2725 + } 2726 + 2727 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("digest"))); err != nil { 2728 + return err 2729 + } 2730 + if _, err := cw.WriteString(string("digest")); err != nil { 2731 + return err 2732 + } 2733 + 2734 + if len(t.Digest) > 8192 { 2735 + return xerrors.Errorf("Value in field t.Digest was too long") 2736 + } 2737 + 2738 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.Digest))); err != nil { 2739 + return err 2740 + } 2741 + if _, err := cw.WriteString(string(t.Digest)); err != nil { 2742 + return err 2743 + } 2744 + 2745 + // t.Platform (atproto.Platform) (struct) 2746 + if t.Platform != nil { 2747 + 2748 + if len("platform") > 8192 { 2749 + return xerrors.Errorf("Value in field \"platform\" was too long") 2750 + } 2751 + 2752 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("platform"))); err != nil { 2753 + return err 2754 + } 2755 + if _, err := cw.WriteString(string("platform")); err != nil { 2756 + return err 2757 + } 2758 + 2759 + if err := t.Platform.MarshalCBOR(cw); err != nil { 2760 + return err 2761 + } 2762 + } 2763 + 2764 + // t.MediaType (string) (string) 2765 + if len("mediaType") > 8192 { 2766 + return xerrors.Errorf("Value in field \"mediaType\" was too long") 2767 + } 2768 + 2769 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("mediaType"))); err != nil { 2770 + return err 2771 + } 2772 + if _, err := cw.WriteString(string("mediaType")); err != nil { 2773 + return err 2774 + } 2775 + 2776 + if len(t.MediaType) > 8192 { 2777 + return xerrors.Errorf("Value in field t.MediaType was too long") 2778 + } 2779 + 2780 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.MediaType))); err != nil { 2781 + return err 2782 + } 2783 + if _, err := cw.WriteString(string(t.MediaType)); err != nil { 2784 + return err 2785 + } 2786 + 2787 + // t.Annotations (map[string]string) (map) 2788 + if len("annotations") > 8192 { 2789 + return xerrors.Errorf("Value in field \"annotations\" was too long") 2790 + } 2791 + 2792 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("annotations"))); err != nil { 2793 + return err 2794 + } 2795 + if _, err := cw.WriteString(string("annotations")); err != nil { 2796 + return err 2797 + } 2798 + 2799 + { 2800 + if len(t.Annotations) > 4096 { 2801 + return xerrors.Errorf("cannot marshal t.Annotations map too large") 2802 + } 2803 + 2804 + if err := cw.WriteMajorTypeHeader(cbg.MajMap, uint64(len(t.Annotations))); err != nil { 2805 + return err 2806 + } 2807 + 2808 + keys := make([]string, 0, len(t.Annotations)) 2809 + for k := range t.Annotations { 2810 + keys = append(keys, k) 2811 + } 2812 + sort.Strings(keys) 2813 + for _, k := range keys { 2814 + v := t.Annotations[k] 2815 + 2816 + if len(k) > 8192 { 2817 + return xerrors.Errorf("Value in field k was too long") 2818 + } 2819 + 2820 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(k))); err != nil { 2821 + return err 2822 + } 2823 + if _, err := cw.WriteString(string(k)); err != nil { 2824 + return err 2825 + } 2826 + 2827 + if len(v) > 8192 { 2828 + return xerrors.Errorf("Value in field v was too long") 2829 + } 2830 + 2831 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(v))); err != nil { 2832 + return err 2833 + } 2834 + if _, err := cw.WriteString(string(v)); err != nil { 2835 + return err 2836 + } 2837 + 2838 + } 2839 + } 2840 + return nil 2841 + } 2842 + 2843 + func (t *ManifestReference) UnmarshalCBOR(r io.Reader) (err error) { 2844 + *t = ManifestReference{} 2845 + 2846 + cr := cbg.NewCborReader(r) 2847 + 2848 + maj, extra, err := cr.ReadHeader() 2849 + if err != nil { 2850 + return err 2851 + } 2852 + defer func() { 2853 + if err == io.EOF { 2854 + err = io.ErrUnexpectedEOF 2855 + } 2856 + }() 2857 + 2858 + if maj != cbg.MajMap { 2859 + return fmt.Errorf("cbor input should be of type map") 2860 + } 2861 + 2862 + if extra > cbg.MaxLength { 2863 + return fmt.Errorf("ManifestReference: map struct too large (%d)", extra) 2864 + } 2865 + 2866 + n := extra 2867 + 2868 + nameBuf := make([]byte, 11) 2869 + for i := uint64(0); i < n; i++ { 2870 + nameLen, ok, err := cbg.ReadFullStringIntoBuf(cr, nameBuf, 8192) 2871 + if err != nil { 2872 + return err 2873 + } 2874 + 2875 + if !ok { 2876 + // Field doesn't exist on this type, so ignore it 2877 + if err := cbg.ScanForLinks(cr, func(cid.Cid) {}); err != nil { 2878 + return err 2879 + } 2880 + continue 2881 + } 2882 + 2883 + switch string(nameBuf[:nameLen]) { 2884 + // t.Size (int64) (int64) 2885 + case "size": 2886 + { 2887 + maj, extra, err := cr.ReadHeader() 2888 + if err != nil { 2889 + return err 2890 + } 2891 + var extraI int64 2892 + switch maj { 2893 + case cbg.MajUnsignedInt: 2894 + extraI = int64(extra) 2895 + if extraI < 0 { 2896 + return fmt.Errorf("int64 positive overflow") 2897 + } 2898 + case cbg.MajNegativeInt: 2899 + extraI = int64(extra) 2900 + if extraI < 0 { 2901 + return fmt.Errorf("int64 negative overflow") 2902 + } 2903 + extraI = -1 - extraI 2904 + default: 2905 + return fmt.Errorf("wrong type for int64 field: %d", maj) 2906 + } 2907 + 2908 + t.Size = int64(extraI) 2909 + } 2910 + // t.Digest (string) (string) 2911 + case "digest": 2912 + 2913 + { 2914 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2915 + if err != nil { 2916 + return err 2917 + } 2918 + 2919 + t.Digest = string(sval) 2920 + } 2921 + // t.Platform (atproto.Platform) (struct) 2922 + case "platform": 2923 + 2924 + { 2925 + 2926 + b, err := cr.ReadByte() 2927 + if err != nil { 2928 + return err 2929 + } 2930 + if b != cbg.CborNull[0] { 2931 + if err := cr.UnreadByte(); err != nil { 2932 + return err 2933 + } 2934 + t.Platform = new(Platform) 2935 + if err := t.Platform.UnmarshalCBOR(cr); err != nil { 2936 + return xerrors.Errorf("unmarshaling t.Platform pointer: %w", err) 2937 + } 2938 + } 2939 + 2940 + } 2941 + // t.MediaType (string) (string) 2942 + case "mediaType": 2943 + 2944 + { 2945 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2946 + if err != nil { 2947 + return err 2948 + } 2949 + 2950 + t.MediaType = string(sval) 2951 + } 2952 + // t.Annotations (map[string]string) (map) 2953 + case "annotations": 2954 + 2955 + maj, extra, err = cr.ReadHeader() 2956 + if err != nil { 2957 + return err 2958 + } 2959 + if maj != cbg.MajMap { 2960 + return fmt.Errorf("expected a map (major type 5)") 2961 + } 2962 + if extra > 4096 { 2963 + return fmt.Errorf("t.Annotations: map too large") 2964 + } 2965 + 2966 + t.Annotations = make(map[string]string, extra) 2967 + 2968 + for i, l := 0, int(extra); i < l; i++ { 2969 + 2970 + var k string 2971 + 2972 + { 2973 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2974 + if err != nil { 2975 + return err 2976 + } 2977 + 2978 + k = string(sval) 2979 + } 2980 + 2981 + var v string 2982 + 2983 + { 2984 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2985 + if err != nil { 2986 + return err 2987 + } 2988 + 2989 + v = string(sval) 2990 + } 2991 + 2992 + t.Annotations[k] = v 2993 + 2994 + } 2995 + 2996 + default: 2997 + // Field doesn't exist on this type, so ignore it 2998 + if err := cbg.ScanForLinks(r, func(cid.Cid) {}); err != nil { 2999 + return err 3000 + } 3001 + } 3002 + } 3003 + 3004 + return nil 3005 + } 3006 + func (t *Platform) MarshalCBOR(w io.Writer) error { 3007 + if t == nil { 3008 + _, err := w.Write(cbg.CborNull) 3009 + return err 3010 + } 3011 + 3012 + cw := cbg.NewCborWriter(w) 3013 + fieldCount := 5 3014 + 3015 + if t.OSVersion == "" { 3016 + fieldCount-- 3017 + } 3018 + 3019 + if t.OSFeatures == nil { 3020 + fieldCount-- 3021 + } 3022 + 3023 + if t.Variant == "" { 3024 + fieldCount-- 3025 + } 3026 + 3027 + if _, err := cw.Write(cbg.CborEncodeMajorType(cbg.MajMap, uint64(fieldCount))); err != nil { 3028 + return err 3029 + } 3030 + 3031 + // t.OS (string) (string) 3032 + if len("os") > 8192 { 3033 + return xerrors.Errorf("Value in field \"os\" was too long") 3034 + } 3035 + 3036 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("os"))); err != nil { 3037 + return err 3038 + } 3039 + if _, err := cw.WriteString(string("os")); err != nil { 3040 + return err 3041 + } 3042 + 3043 + if len(t.OS) > 8192 { 3044 + return xerrors.Errorf("Value in field t.OS was too long") 3045 + } 3046 + 3047 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.OS))); err != nil { 3048 + return err 3049 + } 3050 + if _, err := cw.WriteString(string(t.OS)); err != nil { 3051 + return err 3052 + } 3053 + 3054 + // t.Variant (string) (string) 3055 + if t.Variant != "" { 3056 + 3057 + if len("variant") > 8192 { 3058 + return xerrors.Errorf("Value in field \"variant\" was too long") 3059 + } 3060 + 3061 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("variant"))); err != nil { 3062 + return err 3063 + } 3064 + if _, err := cw.WriteString(string("variant")); err != nil { 3065 + return err 3066 + } 3067 + 3068 + if len(t.Variant) > 8192 { 3069 + return xerrors.Errorf("Value in field t.Variant was too long") 3070 + } 3071 + 3072 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.Variant))); err != nil { 3073 + return err 3074 + } 3075 + if _, err := cw.WriteString(string(t.Variant)); err != nil { 3076 + return err 3077 + } 3078 + } 3079 + 3080 + // t.OSVersion (string) (string) 3081 + if t.OSVersion != "" { 3082 + 3083 + if len("os.version") > 8192 { 3084 + return xerrors.Errorf("Value in field \"os.version\" was too long") 3085 + } 3086 + 3087 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("os.version"))); err != nil { 3088 + return err 3089 + } 3090 + if _, err := cw.WriteString(string("os.version")); err != nil { 3091 + return err 3092 + } 3093 + 3094 + if len(t.OSVersion) > 8192 { 3095 + return xerrors.Errorf("Value in field t.OSVersion was too long") 3096 + } 3097 + 3098 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.OSVersion))); err != nil { 3099 + return err 3100 + } 3101 + if _, err := cw.WriteString(string(t.OSVersion)); err != nil { 3102 + return err 3103 + } 3104 + } 3105 + 3106 + // t.OSFeatures ([]string) (slice) 3107 + if t.OSFeatures != nil { 3108 + 3109 + if len("os.features") > 8192 { 3110 + return xerrors.Errorf("Value in field \"os.features\" was too long") 3111 + } 3112 + 3113 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("os.features"))); err != nil { 3114 + return err 3115 + } 3116 + if _, err := cw.WriteString(string("os.features")); err != nil { 3117 + return err 3118 + } 3119 + 3120 + if len(t.OSFeatures) > 8192 { 3121 + return xerrors.Errorf("Slice value in field t.OSFeatures was too long") 3122 + } 3123 + 3124 + if err := cw.WriteMajorTypeHeader(cbg.MajArray, uint64(len(t.OSFeatures))); err != nil { 3125 + return err 3126 + } 3127 + for _, v := range t.OSFeatures { 3128 + if len(v) > 8192 { 3129 + return xerrors.Errorf("Value in field v was too long") 3130 + } 3131 + 3132 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(v))); err != nil { 3133 + return err 3134 + } 3135 + if _, err := cw.WriteString(string(v)); err != nil { 3136 + return err 3137 + } 3138 + 3139 + } 3140 + } 3141 + 3142 + // t.Architecture (string) (string) 3143 + if len("architecture") > 8192 { 3144 + return xerrors.Errorf("Value in field \"architecture\" was too long") 3145 + } 3146 + 3147 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("architecture"))); err != nil { 3148 + return err 3149 + } 3150 + if _, err := cw.WriteString(string("architecture")); err != nil { 3151 + return err 3152 + } 3153 + 3154 + if len(t.Architecture) > 8192 { 3155 + return xerrors.Errorf("Value in field t.Architecture was too long") 3156 + } 3157 + 3158 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.Architecture))); err != nil { 3159 + return err 3160 + } 3161 + if _, err := cw.WriteString(string(t.Architecture)); err != nil { 3162 + return err 3163 + } 3164 + return nil 3165 + } 3166 + 3167 + func (t *Platform) UnmarshalCBOR(r io.Reader) (err error) { 3168 + *t = Platform{} 3169 + 3170 + cr := cbg.NewCborReader(r) 3171 + 3172 + maj, extra, err := cr.ReadHeader() 3173 + if err != nil { 3174 + return err 3175 + } 3176 + defer func() { 3177 + if err == io.EOF { 3178 + err = io.ErrUnexpectedEOF 3179 + } 3180 + }() 3181 + 3182 + if maj != cbg.MajMap { 3183 + return fmt.Errorf("cbor input should be of type map") 3184 + } 3185 + 3186 + if extra > cbg.MaxLength { 3187 + return fmt.Errorf("Platform: map struct too large (%d)", extra) 3188 + } 3189 + 3190 + n := extra 3191 + 3192 + nameBuf := make([]byte, 12) 3193 + for i := uint64(0); i < n; i++ { 3194 + nameLen, ok, err := cbg.ReadFullStringIntoBuf(cr, nameBuf, 8192) 3195 + if err != nil { 3196 + return err 3197 + } 3198 + 3199 + if !ok { 3200 + // Field doesn't exist on this type, so ignore it 3201 + if err := cbg.ScanForLinks(cr, func(cid.Cid) {}); err != nil { 3202 + return err 3203 + } 3204 + continue 3205 + } 3206 + 3207 + switch string(nameBuf[:nameLen]) { 3208 + // t.OS (string) (string) 3209 + case "os": 3210 + 3211 + { 3212 + sval, err := cbg.ReadStringWithMax(cr, 8192) 3213 + if err != nil { 3214 + return err 3215 + } 3216 + 3217 + t.OS = string(sval) 3218 + } 3219 + // t.Variant (string) (string) 3220 + case "variant": 3221 + 3222 + { 3223 + sval, err := cbg.ReadStringWithMax(cr, 8192) 3224 + if err != nil { 3225 + return err 3226 + } 3227 + 3228 + t.Variant = string(sval) 3229 + } 3230 + // t.OSVersion (string) (string) 3231 + case "os.version": 3232 + 3233 + { 3234 + sval, err := cbg.ReadStringWithMax(cr, 8192) 3235 + if err != nil { 3236 + return err 3237 + } 3238 + 3239 + t.OSVersion = string(sval) 3240 + } 3241 + // t.OSFeatures ([]string) (slice) 3242 + case "os.features": 3243 + 3244 + maj, extra, err = cr.ReadHeader() 3245 + if err != nil { 3246 + return err 3247 + } 3248 + 3249 + if extra > 8192 { 3250 + return fmt.Errorf("t.OSFeatures: array too large (%d)", extra) 3251 + } 3252 + 3253 + if maj != cbg.MajArray { 3254 + return fmt.Errorf("expected cbor array") 3255 + } 3256 + 3257 + if extra > 0 { 3258 + t.OSFeatures = make([]string, extra) 3259 + } 3260 + 3261 + for i := 0; i < int(extra); i++ { 3262 + { 3263 + var maj byte 3264 + var extra uint64 3265 + var err error 3266 + _ = maj 3267 + _ = extra 3268 + _ = err 3269 + 3270 + { 3271 + sval, err := cbg.ReadStringWithMax(cr, 8192) 3272 + if err != nil { 3273 + return err 3274 + } 3275 + 3276 + t.OSFeatures[i] = string(sval) 3277 + } 3278 + 3279 + } 3280 + } 3281 + // t.Architecture (string) (string) 3282 + case "architecture": 3283 + 3284 + { 3285 + sval, err := cbg.ReadStringWithMax(cr, 8192) 3286 + if err != nil { 3287 + return err 3288 + } 3289 + 3290 + t.Architecture = string(sval) 3291 + } 3292 + 3293 + default: 3294 + // Field doesn't exist on this type, so ignore it 3295 + if err := cbg.ScanForLinks(r, func(cid.Cid) {}); err != nil { 3296 + return err 3297 + } 3298 + } 3299 + } 3300 + 3301 + return nil 3302 + } 3303 + func (t *ATProtoBlobRef) MarshalCBOR(w io.Writer) error { 3304 + if t == nil { 3305 + _, err := w.Write(cbg.CborNull) 3306 + return err 3307 + } 3308 + 3309 + cw := cbg.NewCborWriter(w) 3310 + 3311 + if _, err := cw.Write([]byte{164}); err != nil { 3312 + return err 3313 + } 3314 + 3315 + // t.Ref (atproto.Link) (struct) 3316 + if len("ref") > 8192 { 3317 + return xerrors.Errorf("Value in field \"ref\" was too long") 3318 + } 3319 + 3320 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("ref"))); err != nil { 3321 + return err 3322 + } 3323 + if _, err := cw.WriteString(string("ref")); err != nil { 3324 + return err 3325 + } 3326 + 3327 + if err := t.Ref.MarshalCBOR(cw); err != nil { 3328 + return err 3329 + } 3330 + 3331 + // t.Size (int64) (int64) 3332 + if len("size") > 8192 { 3333 + return xerrors.Errorf("Value in field \"size\" was too long") 3334 + } 3335 + 3336 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("size"))); err != nil { 3337 + return err 3338 + } 3339 + if _, err := cw.WriteString(string("size")); err != nil { 3340 + return err 3341 + } 3342 + 3343 + if t.Size >= 0 { 3344 + if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.Size)); err != nil { 3345 + return err 3346 + } 3347 + } else { 3348 + if err := cw.WriteMajorTypeHeader(cbg.MajNegativeInt, uint64(-t.Size-1)); err != nil { 3349 + return err 3350 + } 3351 + } 3352 + 3353 + // t.Type (string) (string) 3354 + if len("$type") > 8192 { 3355 + return xerrors.Errorf("Value in field \"$type\" was too long") 3356 + } 3357 + 3358 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("$type"))); err != nil { 3359 + return err 3360 + } 3361 + if _, err := cw.WriteString(string("$type")); err != nil { 3362 + return err 3363 + } 3364 + 3365 + if len(t.Type) > 8192 { 3366 + return xerrors.Errorf("Value in field t.Type was too long") 3367 + } 3368 + 3369 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.Type))); err != nil { 3370 + return err 3371 + } 3372 + if _, err := cw.WriteString(string(t.Type)); err != nil { 3373 + return err 3374 + } 3375 + 3376 + // t.MimeType (string) (string) 3377 + if len("mimeType") > 8192 { 3378 + return xerrors.Errorf("Value in field \"mimeType\" was too long") 3379 + } 3380 + 3381 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("mimeType"))); err != nil { 3382 + return err 3383 + } 3384 + if _, err := cw.WriteString(string("mimeType")); err != nil { 3385 + return err 3386 + } 3387 + 3388 + if len(t.MimeType) > 8192 { 3389 + return xerrors.Errorf("Value in field t.MimeType was too long") 3390 + } 3391 + 3392 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.MimeType))); err != nil { 3393 + return err 3394 + } 3395 + if _, err := cw.WriteString(string(t.MimeType)); err != nil { 3396 + return err 3397 + } 3398 + return nil 3399 + } 3400 + 3401 + func (t *ATProtoBlobRef) UnmarshalCBOR(r io.Reader) (err error) { 3402 + *t = ATProtoBlobRef{} 3403 + 3404 + cr := cbg.NewCborReader(r) 3405 + 3406 + maj, extra, err := cr.ReadHeader() 3407 + if err != nil { 3408 + return err 3409 + } 3410 + defer func() { 3411 + if err == io.EOF { 3412 + err = io.ErrUnexpectedEOF 3413 + } 3414 + }() 3415 + 3416 + if maj != cbg.MajMap { 3417 + return fmt.Errorf("cbor input should be of type map") 3418 + } 3419 + 3420 + if extra > cbg.MaxLength { 3421 + return fmt.Errorf("ATProtoBlobRef: map struct too large (%d)", extra) 3422 + } 3423 + 3424 + n := extra 3425 + 3426 + nameBuf := make([]byte, 8) 3427 + for i := uint64(0); i < n; i++ { 3428 + nameLen, ok, err := cbg.ReadFullStringIntoBuf(cr, nameBuf, 8192) 3429 + if err != nil { 3430 + return err 3431 + } 3432 + 3433 + if !ok { 3434 + // Field doesn't exist on this type, so ignore it 3435 + if err := cbg.ScanForLinks(cr, func(cid.Cid) {}); err != nil { 3436 + return err 3437 + } 3438 + continue 3439 + } 3440 + 3441 + switch string(nameBuf[:nameLen]) { 3442 + // t.Ref (atproto.Link) (struct) 3443 + case "ref": 3444 + 3445 + { 3446 + 3447 + if err := t.Ref.UnmarshalCBOR(cr); err != nil { 3448 + return xerrors.Errorf("unmarshaling t.Ref: %w", err) 3449 + } 3450 + 3451 + } 3452 + // t.Size (int64) (int64) 3453 + case "size": 3454 + { 3455 + maj, extra, err := cr.ReadHeader() 3456 + if err != nil { 3457 + return err 3458 + } 3459 + var extraI int64 3460 + switch maj { 3461 + case cbg.MajUnsignedInt: 3462 + extraI = int64(extra) 3463 + if extraI < 0 { 3464 + return fmt.Errorf("int64 positive overflow") 3465 + } 3466 + case cbg.MajNegativeInt: 3467 + extraI = int64(extra) 3468 + if extraI < 0 { 3469 + return fmt.Errorf("int64 negative overflow") 3470 + } 3471 + extraI = -1 - extraI 3472 + default: 3473 + return fmt.Errorf("wrong type for int64 field: %d", maj) 3474 + } 3475 + 3476 + t.Size = int64(extraI) 3477 + } 3478 + // t.Type (string) (string) 3479 + case "$type": 3480 + 3481 + { 3482 + sval, err := cbg.ReadStringWithMax(cr, 8192) 3483 + if err != nil { 3484 + return err 3485 + } 3486 + 3487 + t.Type = string(sval) 3488 + } 3489 + // t.MimeType (string) (string) 3490 + case "mimeType": 3491 + 3492 + { 3493 + sval, err := cbg.ReadStringWithMax(cr, 8192) 3494 + if err != nil { 3495 + return err 3496 + } 3497 + 3498 + t.MimeType = string(sval) 3499 + } 3500 + 3501 + default: 3502 + // Field doesn't exist on this type, so ignore it 3503 + if err := cbg.ScanForLinks(r, func(cid.Cid) {}); err != nil { 3504 + return err 3505 + } 3506 + } 3507 + } 3508 + 3509 + return nil 3510 + } 3511 + func (t *Link) MarshalCBOR(w io.Writer) error { 3512 + if t == nil { 3513 + _, err := w.Write(cbg.CborNull) 3514 + return err 3515 + } 3516 + 3517 + cw := cbg.NewCborWriter(w) 3518 + 3519 + if _, err := cw.Write([]byte{161}); err != nil { 3520 + return err 3521 + } 3522 + 3523 + // t.Link (string) (string) 3524 + if len("$link") > 8192 { 3525 + return xerrors.Errorf("Value in field \"$link\" was too long") 3526 + } 3527 + 3528 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("$link"))); err != nil { 3529 + return err 3530 + } 3531 + if _, err := cw.WriteString(string("$link")); err != nil { 3532 + return err 3533 + } 3534 + 3535 + if len(t.Link) > 8192 { 3536 + return xerrors.Errorf("Value in field t.Link was too long") 3537 + } 3538 + 3539 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.Link))); err != nil { 3540 + return err 3541 + } 3542 + if _, err := cw.WriteString(string(t.Link)); err != nil { 3543 + return err 3544 + } 3545 + return nil 3546 + } 3547 + 3548 + func (t *Link) UnmarshalCBOR(r io.Reader) (err error) { 3549 + *t = Link{} 3550 + 3551 + cr := cbg.NewCborReader(r) 3552 + 3553 + maj, extra, err := cr.ReadHeader() 3554 + if err != nil { 3555 + return err 3556 + } 3557 + defer func() { 3558 + if err == io.EOF { 3559 + err = io.ErrUnexpectedEOF 3560 + } 3561 + }() 3562 + 3563 + if maj != cbg.MajMap { 3564 + return fmt.Errorf("cbor input should be of type map") 3565 + } 3566 + 3567 + if extra > cbg.MaxLength { 3568 + return fmt.Errorf("Link: map struct too large (%d)", extra) 3569 + } 3570 + 3571 + n := extra 3572 + 3573 + nameBuf := make([]byte, 5) 3574 + for i := uint64(0); i < n; i++ { 3575 + nameLen, ok, err := cbg.ReadFullStringIntoBuf(cr, nameBuf, 8192) 3576 + if err != nil { 3577 + return err 3578 + } 3579 + 3580 + if !ok { 3581 + // Field doesn't exist on this type, so ignore it 3582 + if err := cbg.ScanForLinks(cr, func(cid.Cid) {}); err != nil { 3583 + return err 3584 + } 3585 + continue 3586 + } 3587 + 3588 + switch string(nameBuf[:nameLen]) { 3589 + // t.Link (string) (string) 3590 + case "$link": 3591 + 3592 + { 3593 + sval, err := cbg.ReadStringWithMax(cr, 8192) 3594 + if err != nil { 3595 + return err 3596 + } 3597 + 3598 + t.Link = string(sval) 3599 + } 3600 + 3601 + default: 3602 + // Field doesn't exist on this type, so ignore it 3603 + if err := cbg.ScanForLinks(r, func(cid.Cid) {}); err != nil { 3604 + return err 3605 + } 3606 + } 3607 + } 3608 + 3609 + return nil 3610 + }
+5 -5
pkg/atproto/client.go
··· 266 266 // ATProtoBlobRef represents a reference to a blob in ATProto's native blob storage 267 267 // This is different from OCIBlobDescriptor which describes OCI image layers 268 268 type ATProtoBlobRef struct { 269 - Type string `json:"$type"` 270 - Ref Link `json:"ref"` 271 - MimeType string `json:"mimeType"` 272 - Size int64 `json:"size"` 269 + Type string `json:"$type" cborgen:"$type"` 270 + Ref Link `json:"ref" cborgen:"ref"` 271 + MimeType string `json:"mimeType" cborgen:"mimeType"` 272 + Size int64 `json:"size" cborgen:"size"` 273 273 } 274 274 275 275 // Link represents an IPFS link to blob content 276 276 type Link struct { 277 - Link string `json:"$link"` 277 + Link string `json:"$link" cborgen:"$link"` 278 278 } 279 279 280 280 // UploadBlob uploads binary data to the PDS and returns a blob reference
+6
pkg/atproto/endpoints.go
··· 45 45 // Request: {"repository": "...", "tag": "...", "userDid": "...", "userHandle": "...", "manifest": {...}} 46 46 // Response: {"success": true, "layersCreated": 5, "postCreated": true, "postUri": "at://..."} 47 47 HoldNotifyManifest = "/xrpc/io.atcr.hold.notifyManifest" 48 + 49 + // HoldGetReferrers queries for ORAS artifacts that reference a subject manifest (SBOM, signatures, scan reports). 50 + // Method: GET 51 + // Query: digest={sha256:...}&artifactType={optional-filter} 52 + // Response: {"referrers": [{"digest": "...", "artifactType": "...", "annotations": {...}}, ...]} 53 + HoldGetReferrers = "/xrpc/io.atcr.hold.getReferrers" 48 54 ) 49 55 50 56 // Hold service crew management endpoints (io.atcr.hold.*)
+7 -1
pkg/atproto/generate.go
··· 25 25 ) 26 26 27 27 func main() { 28 - // Generate map-style encoders for CrewRecord, CaptainRecord, LayerRecord, and TangledProfileRecord 28 + // Generate map-style encoders for all ATProto records and nested types 29 29 if err := cbg.WriteMapEncodersToFile("cbor_gen.go", "atproto", 30 30 atproto.CrewRecord{}, 31 31 atproto.CaptainRecord{}, 32 32 atproto.LayerRecord{}, 33 33 atproto.TangledProfileRecord{}, 34 + atproto.ManifestRecord{}, 35 + atproto.BlobReference{}, 36 + atproto.ManifestReference{}, 37 + atproto.Platform{}, 38 + atproto.ATProtoBlobRef{}, 39 + atproto.Link{}, 34 40 ); err != nil { 35 41 fmt.Printf("Failed to generate CBOR encoders: %v\n", err) 36 42 os.Exit(1)
+50 -32
pkg/atproto/lexicon.go
··· 53 53 // This follows the OCI image manifest specification but stored as an ATProto record 54 54 type ManifestRecord struct { 55 55 // Type should be "io.atcr.manifest" 56 - Type string `json:"$type"` 56 + Type string `json:"$type" cborgen:"$type"` 57 57 58 58 // Repository is the name of the repository (e.g., "myapp") 59 - Repository string `json:"repository"` 59 + Repository string `json:"repository" cborgen:"repository"` 60 60 61 61 // Digest is the content digest (e.g., "sha256:abc123...") 62 - Digest string `json:"digest"` 62 + Digest string `json:"digest" cborgen:"digest"` 63 63 64 64 // HoldDID is the DID of the hold service where blobs are stored 65 65 // This is the primary reference for hold resolution 66 66 // e.g., "did:web:hold01.atcr.io" 67 - HoldDID string `json:"holdDid,omitempty"` 67 + HoldDID string `json:"holdDid,omitempty" cborgen:"holdDid,omitempty"` 68 68 69 69 // HoldEndpoint is the hold service endpoint URL where blobs are stored (DEPRECATED) 70 70 // Kept for backward compatibility with manifests created before DID migration 71 71 // New manifests should use HoldDID instead 72 72 // This is a historical reference that doesn't change even if user's default hold changes 73 - HoldEndpoint string `json:"holdEndpoint,omitempty"` 73 + HoldEndpoint string `json:"holdEndpoint,omitempty" cborgen:"holdEndpoint,omitempty"` 74 74 75 75 // MediaType is the OCI media type (e.g., "application/vnd.oci.image.manifest.v1+json") 76 - MediaType string `json:"mediaType"` 76 + MediaType string `json:"mediaType" cborgen:"mediaType"` 77 + 78 + // ArtifactType distinguishes ORAS artifacts (SBOMs, signatures, scan reports) 79 + // e.g., "application/spdx+json", "application/vnd.atcr.vulnerabilities+json" 80 + // Empty for regular image manifests 81 + ArtifactType string `json:"artifactType,omitempty" cborgen:"artifactType,omitempty"` 82 + 83 + // OwnerDID is the DID of the user who owns this manifest (for multi-tenant holds) 84 + // Used for ORAS artifacts stored in hold's PDS to track ownership 85 + OwnerDID string `json:"ownerDid,omitempty" cborgen:"ownerDid,omitempty"` 86 + 87 + // ScannedAt is the timestamp when this artifact was scanned (for SBOM/vuln artifacts) 88 + ScannedAt string `json:"scannedAt,omitempty" cborgen:"scannedAt,omitempty"` 89 + 90 + // ScannerVersion is the version of the scanner that generated this artifact 91 + // e.g., "syft-v1.36.0", "grype-v0.102.0" 92 + ScannerVersion string `json:"scannerVersion,omitempty" cborgen:"scannerVersion,omitempty"` 77 93 78 94 // SchemaVersion is the OCI schema version (typically 2) 79 - SchemaVersion int `json:"schemaVersion"` 95 + SchemaVersion int64 `json:"schemaVersion" cborgen:"schemaVersion"` 80 96 81 97 // Config references the image configuration blob (for image manifests) 82 98 // Nil for manifest lists/indexes 83 - Config *BlobReference `json:"config,omitempty"` 99 + Config *BlobReference `json:"config,omitempty" cborgen:"config,omitempty"` 84 100 85 101 // Layers references the filesystem layers (for image manifests) 86 102 // Empty for manifest lists/indexes 87 - Layers []BlobReference `json:"layers,omitempty"` 103 + Layers []BlobReference `json:"layers,omitempty" cborgen:"layers,omitempty"` 88 104 89 105 // Manifests references other manifests (for manifest lists/indexes) 90 106 // Empty for image manifests 91 - Manifests []ManifestReference `json:"manifests,omitempty"` 107 + Manifests []ManifestReference `json:"manifests,omitempty" cborgen:"manifests,omitempty"` 92 108 93 109 // Annotations contains arbitrary metadata 94 - Annotations map[string]string `json:"annotations,omitempty"` 110 + Annotations map[string]string `json:"annotations,omitempty" cborgen:"annotations"` 95 111 96 112 // Subject references another manifest (for attestations, signatures, etc.) 97 - Subject *BlobReference `json:"subject,omitempty"` 113 + Subject *BlobReference `json:"subject,omitempty" cborgen:"subject,omitempty"` 98 114 99 115 // ManifestBlob is a reference to the manifest blob stored in ATProto blob storage 100 - ManifestBlob *ATProtoBlobRef `json:"manifestBlob,omitempty"` 116 + ManifestBlob *ATProtoBlobRef `json:"manifestBlob,omitempty" cborgen:"manifestBlob,omitempty"` 101 117 102 - // CreatedAt timestamp 103 - CreatedAt time.Time `json:"createdAt"` 118 + // CreatedAt timestamp (RFC3339) 119 + CreatedAt string `json:"createdAt" cborgen:"createdAt"` 104 120 } 105 121 106 122 // BlobReference represents a reference to a blob (layer or config) 107 123 // Blobs are stored in S3 and referenced by digest 108 124 type BlobReference struct { 109 125 // MediaType of the blob 110 - MediaType string `json:"mediaType"` 126 + MediaType string `json:"mediaType" cborgen:"mediaType"` 111 127 112 128 // Digest is the content digest (e.g., "sha256:abc123...") 113 - Digest string `json:"digest"` 129 + Digest string `json:"digest" cborgen:"digest"` 114 130 115 131 // Size in bytes 116 - Size int64 `json:"size"` 132 + Size int64 `json:"size" cborgen:"size"` 117 133 118 134 // URLs where the blob can be retrieved (S3 URLs) 119 - URLs []string `json:"urls,omitempty"` 135 + URLs []string `json:"urls,omitempty" cborgen:"urls,omitempty"` 120 136 121 137 // Annotations for the blob 122 - Annotations map[string]string `json:"annotations,omitempty"` 138 + Annotations map[string]string `json:"annotations,omitempty" cborgen:"annotations"` 123 139 } 124 140 125 141 // ManifestReference represents a reference to a manifest in a manifest list/index 126 142 type ManifestReference struct { 127 143 // MediaType of the referenced manifest 128 - MediaType string `json:"mediaType"` 144 + MediaType string `json:"mediaType" cborgen:"mediaType"` 129 145 130 146 // Digest is the content digest (e.g., "sha256:abc123...") 131 - Digest string `json:"digest"` 147 + Digest string `json:"digest" cborgen:"digest"` 132 148 133 149 // Size in bytes 134 - Size int64 `json:"size"` 150 + Size int64 `json:"size" cborgen:"size"` 135 151 136 152 // Platform describes the platform/architecture this manifest is for 137 - Platform *Platform `json:"platform,omitempty"` 153 + Platform *Platform `json:"platform,omitempty" cborgen:"platform,omitempty"` 138 154 139 155 // Annotations for the manifest reference 140 - Annotations map[string]string `json:"annotations,omitempty"` 156 + Annotations map[string]string `json:"annotations,omitempty" cborgen:"annotations"` 141 157 } 142 158 143 159 // Platform describes the platform (OS/architecture) for a manifest 144 160 type Platform struct { 145 161 // Architecture is the CPU architecture (e.g., "amd64", "arm64", "arm") 146 - Architecture string `json:"architecture"` 162 + Architecture string `json:"architecture" cborgen:"architecture"` 147 163 148 164 // OS is the operating system (e.g., "linux", "windows", "darwin") 149 - OS string `json:"os"` 165 + OS string `json:"os" cborgen:"os"` 150 166 151 167 // OSVersion is the optional OS version 152 - OSVersion string `json:"os.version,omitempty"` 168 + OSVersion string `json:"os.version,omitempty" cborgen:"os.version,omitempty"` 153 169 154 170 // OSFeatures is an optional list of OS features 155 - OSFeatures []string `json:"os.features,omitempty"` 171 + OSFeatures []string `json:"os.features,omitempty" cborgen:"os.features,omitempty"` 156 172 157 173 // Variant is the optional CPU variant (e.g., "v7" for ARM) 158 - Variant string `json:"variant,omitempty"` 174 + Variant string `json:"variant,omitempty" cborgen:"variant,omitempty"` 159 175 } 160 176 161 177 // NewManifestRecord creates a new manifest record from OCI manifest JSON ··· 164 180 var ociData struct { 165 181 SchemaVersion int `json:"schemaVersion"` 166 182 MediaType string `json:"mediaType"` 183 + ArtifactType string `json:"artifactType,omitempty"` 167 184 Config json.RawMessage `json:"config,omitempty"` 168 185 Layers []json.RawMessage `json:"layers,omitempty"` 169 186 Manifests []json.RawMessage `json:"manifests,omitempty"` ··· 195 212 Repository: repository, 196 213 Digest: digest, 197 214 MediaType: ociData.MediaType, 198 - SchemaVersion: ociData.SchemaVersion, 215 + ArtifactType: ociData.ArtifactType, 216 + SchemaVersion: int64(ociData.SchemaVersion), 199 217 Annotations: ociData.Annotations, 200 218 // ManifestBlob will be set by the caller after uploading to blob storage 201 - CreatedAt: time.Now(), 219 + CreatedAt: time.Now().Format(time.RFC3339), 202 220 } 203 221 204 222 if isManifestList {
+1 -1
pkg/atproto/lexicon_test.go
··· 146 146 if record.Annotations["org.opencontainers.image.created"] != "2025-01-01T00:00:00Z" { 147 147 t.Errorf("Annotations missing expected key") 148 148 } 149 - if record.CreatedAt.IsZero() { 149 + if record.CreatedAt == "0" { 150 150 t.Error("CreatedAt should not be zero") 151 151 } 152 152 if record.Subject != nil {
+40
pkg/hold/config.go
··· 22 22 Server ServerConfig `yaml:"server"` 23 23 Registration RegistrationConfig `yaml:"registration"` 24 24 Database DatabaseConfig `yaml:"database"` 25 + Scanner ScannerConfig `yaml:"scanner"` 25 26 } 26 27 27 28 // RegistrationConfig defines auto-registration settings ··· 85 86 KeyPath string `yaml:"key_path"` 86 87 } 87 88 89 + // ScannerConfig defines SBOM and vulnerability scanning settings 90 + type ScannerConfig struct { 91 + // Enabled controls whether SBOM scanning is enabled (from env: HOLD_SBOM_ENABLED) 92 + Enabled bool `yaml:"enabled"` 93 + 94 + // Workers is the number of concurrent scan workers (from env: HOLD_SBOM_WORKERS) 95 + Workers int `yaml:"workers"` 96 + 97 + // VulnEnabled controls whether vulnerability scanning is enabled (from env: HOLD_VULN_ENABLED) 98 + VulnEnabled bool `yaml:"vuln_enabled"` 99 + 100 + // VulnDBPath is the path to store Grype vulnerability database (from env: HOLD_VULN_DB_PATH) 101 + // Defaults to {DatabasePath}/grype-db 102 + VulnDBPath string `yaml:"vuln_db_path"` 103 + 104 + // VulnDBUpdateInterval is how often to update the vulnerability database (from env: HOLD_VULN_DB_UPDATE_INTERVAL) 105 + // Format: duration string (e.g., "24h", "1h30m") 106 + // Defaults to 24 hours 107 + VulnDBUpdateInterval time.Duration `yaml:"vuln_db_update_interval"` 108 + } 109 + 88 110 // LoadConfigFromEnv loads all configuration from environment variables 89 111 func LoadConfigFromEnv() (*Config, error) { 90 112 cfg := &Config{ ··· 119 141 if cfg.Database.KeyPath == "" && cfg.Database.Path != "" { 120 142 // Default: signing key in same directory as carstore 121 143 cfg.Database.KeyPath = filepath.Join(cfg.Database.Path, "signing.key") 144 + } 145 + 146 + // Scanner configuration (optional - enables SBOM/vulnerability scanning) 147 + cfg.Scanner.Enabled = os.Getenv("HOLD_SBOM_ENABLED") == "true" 148 + cfg.Scanner.Workers = 2 // Default 149 + if workersStr := os.Getenv("HOLD_SBOM_WORKERS"); workersStr != "" { 150 + var workersInt int 151 + if _, err := fmt.Sscanf(workersStr, "%d", &workersInt); err == nil && workersInt > 0 { 152 + cfg.Scanner.Workers = workersInt 153 + } 154 + } 155 + cfg.Scanner.VulnEnabled = os.Getenv("HOLD_VULN_ENABLED") == "true" 156 + cfg.Scanner.VulnDBPath = getEnvOrDefault("HOLD_VULN_DB_PATH", filepath.Join(cfg.Database.Path, "grype-db")) 157 + cfg.Scanner.VulnDBUpdateInterval = 24 * time.Hour // Default 158 + if intervalStr := os.Getenv("HOLD_VULN_DB_UPDATE_INTERVAL"); intervalStr != "" { 159 + if interval, err := time.ParseDuration(intervalStr); err == nil { 160 + cfg.Scanner.VulnDBUpdateInterval = interval 161 + } 122 162 } 123 163 124 164 // Storage configuration - build from env vars based on storage type
+134 -5
pkg/hold/oci/multipart.go
··· 4 4 "context" 5 5 "crypto/sha256" 6 6 "encoding/hex" 7 + "errors" 7 8 "fmt" 9 + "io" 8 10 "log/slog" 9 11 "sort" 10 12 "strings" ··· 387 389 } 388 390 slog.Debug("Source blob verified", "path", sourcePath) 389 391 390 - // Move from temp to final digest location using driver 391 - // Driver handles path management correctly (including S3 prefix) 392 - if err := h.driver.Move(ctx, sourcePath, destPath); err != nil { 393 - slog.Error("Failed to move blob", 392 + // Move from temp to final digest location 393 + // Strategy: Use S3 CopyObject directly instead of driver's Move() to avoid 394 + // UploadPartCopy issues with S3-compatible services (Storj, MinIO, etc.) 395 + // 396 + // Fallback order: 397 + // 1. S3 CopyObject (server-side, works up to 5GB, universally supported) 398 + // 2. Manual copy-and-delete (slower but works for any size/backend) 399 + // 400 + // Note: We skip driver.Move() because it uses UploadPartCopy for files >100MB, 401 + // which many S3-compatible services don't support (returns 501 Not Implemented) 402 + 403 + if err := h.s3CopyObject(ctx, sourcePath, destPath); err != nil { 404 + // S3 CopyObject failed (not S3, file too large, or other error) 405 + // Fall back to manual copy-and-delete 406 + slog.Warn("S3 CopyObject failed, attempting read/write fallback", 394 407 "source", sourcePath, 395 408 "dest", destPath, 396 409 "error", err) 397 - return fmt.Errorf("failed to move blob to final location: %w", err) 410 + 411 + if fallbackErr := h.copyAndDelete(ctx, sourcePath, destPath); fallbackErr != nil { 412 + slog.Error("All move strategies failed", 413 + "source", sourcePath, 414 + "dest", destPath, 415 + "s3CopyErr", err, 416 + "fallbackErr", fallbackErr) 417 + return fmt.Errorf("failed to move blob to final location: %w", fallbackErr) 418 + } 398 419 } 399 420 400 421 slog.Info("Moved blob to final location", ··· 498 519 } 499 520 // Add quotes 500 521 return fmt.Sprintf("\"%s\"", etag) 522 + } 523 + 524 + // s3CopyObject uses S3's CopyObject API directly for server-side copy. 525 + // This works for objects up to 5GB and is supported by most S3-compatible services. 526 + // Falls back to copyAndDelete if S3 is not available or the operation fails. 527 + func (h *XRPCHandler) s3CopyObject(ctx context.Context, sourcePath, destPath string) error { 528 + // Check if S3 is configured 529 + if h.s3Service.Client == nil { 530 + return fmt.Errorf("S3 not configured") 531 + } 532 + 533 + // Convert paths to S3 keys (remove leading slash and add prefix if configured) 534 + sourceKey := strings.TrimPrefix(sourcePath, "/") 535 + destKey := strings.TrimPrefix(destPath, "/") 536 + 537 + if h.s3Service.PathPrefix != "" { 538 + sourceKey = h.s3Service.PathPrefix + "/" + sourceKey 539 + destKey = h.s3Service.PathPrefix + "/" + destKey 540 + } 541 + 542 + // Construct the copy source (must be in format: bucket/key) 543 + copySource := h.s3Service.Bucket + "/" + sourceKey 544 + 545 + // Perform server-side copy using S3 CopyObject API 546 + // This works for objects up to 5GB in a single operation 547 + _, err := h.s3Service.Client.CopyObjectWithContext(ctx, &s3.CopyObjectInput{ 548 + Bucket: &h.s3Service.Bucket, 549 + Key: &destKey, 550 + CopySource: &copySource, 551 + }) 552 + if err != nil { 553 + return fmt.Errorf("S3 CopyObject failed: %w", err) 554 + } 555 + 556 + slog.Info("Successfully copied blob using S3 CopyObject (server-side)", 557 + "source", sourcePath, 558 + "dest", destPath) 559 + 560 + // Delete the source after successful copy 561 + if err := h.driver.Delete(ctx, sourcePath); err != nil { 562 + slog.Warn("Failed to delete source after S3 copy (destination created successfully)", 563 + "source", sourcePath, 564 + "error", err) 565 + // Don't return error - the copy succeeded, cleanup is best-effort 566 + } 567 + 568 + return nil 569 + } 570 + 571 + // copyAndDelete implements a fallback for Move() when the storage driver doesn't support 572 + // efficient server-side copy operations (e.g., S3 UploadPartCopy not available). 573 + // It reads from source, writes to destination, then deletes source. 574 + func (h *XRPCHandler) copyAndDelete(ctx context.Context, sourcePath, destPath string) error { 575 + // Read from source 576 + reader, err := h.driver.Reader(ctx, sourcePath, 0) 577 + if err != nil { 578 + return fmt.Errorf("failed to open source for reading: %w", err) 579 + } 580 + defer reader.Close() 581 + 582 + // Create writer for destination 583 + writer, err := h.driver.Writer(ctx, destPath, false) 584 + if err != nil { 585 + return fmt.Errorf("failed to create destination writer: %w", err) 586 + } 587 + 588 + // Copy data from source to destination 589 + // Use a buffered approach to avoid loading entire blob into memory 590 + buf := make([]byte, 32*1024*1024) // 32MB buffer 591 + var totalCopied int64 592 + for { 593 + n, readErr := reader.Read(buf) 594 + if n > 0 { 595 + written, writeErr := writer.Write(buf[:n]) 596 + if writeErr != nil { 597 + writer.Cancel(ctx) 598 + return fmt.Errorf("failed to write to destination: %w", writeErr) 599 + } 600 + totalCopied += int64(written) 601 + } 602 + if readErr != nil { 603 + if errors.Is(readErr, io.EOF) { 604 + break 605 + } 606 + writer.Cancel(ctx) 607 + return fmt.Errorf("failed to read from source: %w", readErr) 608 + } 609 + } 610 + 611 + // Commit the destination 612 + if err := writer.Commit(ctx); err != nil { 613 + return fmt.Errorf("failed to commit destination: %w", err) 614 + } 615 + 616 + // Delete the source 617 + if err := h.driver.Delete(ctx, sourcePath); err != nil { 618 + slog.Warn("Failed to delete source after copy (destination committed successfully)", 619 + "source", sourcePath, 620 + "error", err) 621 + // Don't return error - the copy succeeded, cleanup is best-effort 622 + } 623 + 624 + slog.Info("Successfully copied blob using fallback method", 625 + "source", sourcePath, 626 + "dest", destPath, 627 + "size", totalCopied) 628 + 629 + return nil 501 630 } 502 631 503 632 // blobPath converts a digest (e.g., "sha256:abc123...") or temp path to a storage path
+78 -10
pkg/hold/oci/xrpc.go
··· 9 9 10 10 "atcr.io/pkg/atproto" 11 11 "atcr.io/pkg/hold/pds" 12 + "atcr.io/pkg/hold/scanner" 12 13 "atcr.io/pkg/s3" 13 14 storagedriver "github.com/distribution/distribution/v3/registry/storage/driver" 14 15 "github.com/go-chi/chi/v5" ··· 23 24 pds *pds.HoldPDS 24 25 httpClient pds.HTTPClient 25 26 enableBlueskyPosts bool 27 + scanQueue ScanQueue // Scanner queue interface (nil if scanning disabled) 28 + } 29 + 30 + // ScanQueue is an interface for enqueuing scan jobs 31 + // This allows us to pass in a scanner queue without importing the scanner package (avoiding circular deps) 32 + type ScanQueue interface { 33 + Enqueue(job any) error 26 34 } 27 35 28 36 // NewXRPCHandler creates a new OCI XRPC handler 29 - func NewXRPCHandler(holdPDS *pds.HoldPDS, s3Service s3.S3Service, driver storagedriver.StorageDriver, disablePresignedURLs bool, enableBlueskyPosts bool, httpClient pds.HTTPClient) *XRPCHandler { 37 + func NewXRPCHandler(holdPDS *pds.HoldPDS, s3Service s3.S3Service, driver storagedriver.StorageDriver, disablePresignedURLs bool, enableBlueskyPosts bool, httpClient pds.HTTPClient, scanQueue ScanQueue) *XRPCHandler { 30 38 return &XRPCHandler{ 31 39 driver: driver, 32 40 disablePresignedURLs: disablePresignedURLs, ··· 35 43 pds: holdPDS, 36 44 httpClient: httpClient, 37 45 enableBlueskyPosts: enableBlueskyPosts, 46 + scanQueue: scanQueue, 38 47 } 39 48 } 40 49 ··· 215 224 216 225 // Parse request 217 226 var req struct { 218 - Repository string `json:"repository"` 219 - Tag string `json:"tag"` 220 - UserDID string `json:"userDid"` 221 - UserHandle string `json:"userHandle"` 222 - Manifest struct { 227 + Repository string `json:"repository"` 228 + Tag string `json:"tag"` 229 + ManifestDigest string `json:"manifestDigest"` 230 + UserDID string `json:"userDid"` 231 + UserHandle string `json:"userHandle"` 232 + Manifest struct { 223 233 MediaType string `json:"mediaType"` 224 234 Config struct { 225 235 Digest string `json:"digest"` ··· 237 247 RespondError(w, http.StatusBadRequest, err.Error()) 238 248 return 239 249 } 250 + 251 + slog.Info("Received manifest notification", 252 + "repository", req.Repository, 253 + "tag", req.Tag, 254 + "layerCount", len(req.Manifest.Layers), 255 + "hasConfig", req.Manifest.Config.Digest != "") 240 256 241 257 // Verify user DID matches token 242 258 if req.UserDID != validatedUser.DID { ··· 287 303 var postURI string 288 304 postCreated := false 289 305 if postsEnabled { 290 - // Extract manifest digest from first layer (or use config digest as fallback) 291 - manifestDigest := req.Manifest.Config.Digest 292 - if len(req.Manifest.Layers) > 0 { 293 - manifestDigest = req.Manifest.Layers[0].Digest 306 + // Use the actual manifest digest from the request 307 + manifestDigest := req.ManifestDigest 308 + if manifestDigest == "" { 309 + // Fallback to config digest for backward compatibility (shouldn't happen with updated AppView) 310 + manifestDigest = req.Manifest.Config.Digest 294 311 } 295 312 296 313 postURI, err = h.pds.CreateManifestPost( ··· 306 323 slog.Error("Failed to create manifest post", "error", err) 307 324 } else { 308 325 postCreated = true 326 + } 327 + } 328 + 329 + // Enqueue vulnerability scan if scanner is enabled 330 + if h.scanQueue != nil { 331 + // Use the actual manifest digest from the request 332 + manifestDigest := req.ManifestDigest 333 + if manifestDigest == "" { 334 + // Fallback to config digest for backward compatibility (shouldn't happen with updated AppView) 335 + manifestDigest = req.Manifest.Config.Digest 336 + slog.Warn("Manifest digest not provided in notification, using config digest as fallback", 337 + "repository", req.Repository, "configDigest", manifestDigest) 338 + } 339 + 340 + // Convert request layers to atproto.BlobReference 341 + layers := make([]atproto.BlobReference, len(req.Manifest.Layers)) 342 + for i, layer := range req.Manifest.Layers { 343 + layers[i] = atproto.BlobReference{ 344 + Digest: layer.Digest, 345 + Size: layer.Size, 346 + MediaType: layer.MediaType, 347 + } 348 + } 349 + 350 + // Create properly typed scan job 351 + scanJob := &scanner.ScanJob{ 352 + ManifestDigest: manifestDigest, 353 + Repository: req.Repository, 354 + Tag: req.Tag, 355 + UserDID: req.UserDID, 356 + UserHandle: req.UserHandle, 357 + Config: atproto.BlobReference{ 358 + Digest: req.Manifest.Config.Digest, 359 + Size: req.Manifest.Config.Size, 360 + MediaType: "application/vnd.oci.image.config.v1+json", 361 + }, 362 + Layers: layers, 363 + } 364 + 365 + slog.Info("Enqueueing scan job", 366 + "repository", req.Repository, 367 + "layersInJob", len(layers)) 368 + 369 + if err := h.scanQueue.Enqueue(scanJob); err != nil { 370 + slog.Error("Failed to enqueue scan job", "error", err, "repository", req.Repository) 371 + } else { 372 + slog.Info("Enqueued vulnerability scan", 373 + "repository", req.Repository, 374 + "tag", req.Tag, 375 + "digest", manifestDigest, 376 + "layers", len(req.Manifest.Layers)) 309 377 } 310 378 } 311 379
+1 -1
pkg/hold/oci/xrpc_test.go
··· 127 127 128 128 // Create OCI handler with buffered mode (no S3) 129 129 mockS3 := s3.S3Service{} 130 - handler := NewXRPCHandler(holdPDS, mockS3, driver, true, false, mockClient) 130 + handler := NewXRPCHandler(holdPDS, mockS3, driver, true, false, mockClient, nil) 131 131 132 132 return handler, ctx 133 133 }
+6
pkg/hold/pds/server.go
··· 267 267 return result, nil 268 268 } 269 269 270 + // CreateManifestRecord creates a manifest record with a specific rkey 271 + // Used by the scanner to store ORAS artifacts (SBOMs, vulnerability reports) 272 + func (p *HoldPDS) CreateManifestRecord(ctx context.Context, record *atproto.ManifestRecord, rkey string) (string, cid.Cid, error) { 273 + return p.repomgr.PutRecord(ctx, p.uid, atproto.ManifestCollection, rkey, record) 274 + } 275 + 270 276 // Close closes the carstore 271 277 func (p *HoldPDS) Close() error { 272 278 // TODO: Close session properly
+235
pkg/hold/pds/xrpc.go
··· 5 5 "context" 6 6 "encoding/json" 7 7 "fmt" 8 + "sort" 8 9 9 10 "atcr.io/pkg/atproto" 10 11 "atcr.io/pkg/s3" ··· 171 172 r.Get(atproto.IdentityResolveHandle, h.HandleResolveHandle) 172 173 r.Get(atproto.ActorGetProfile, h.HandleGetProfile) 173 174 r.Get(atproto.ActorGetProfiles, h.HandleGetProfiles) 175 + 176 + // ORAS/Scanner endpoints 177 + r.Get(atproto.HoldGetReferrers, h.HandleGetReferrers) 174 178 }) 175 179 176 180 // Blob read endpoints (conditional auth based on captain.public) ··· 1415 1419 // Clients should use multipart upload flow via com.atproto.repo.uploadBlob 1416 1420 return "" 1417 1421 } 1422 + 1423 + // HandleGetReferrers queries for ORAS artifacts (SBOMs, signatures, scan reports) that reference a subject manifest 1424 + // GET /xrpc/io.atcr.hold.getReferrers?digest=sha256:abc123&artifactType=application/vnd.atcr.vulnerabilities+json 1425 + func (h *XRPCHandler) HandleGetReferrers(w http.ResponseWriter, r *http.Request) { 1426 + ctx := r.Context() 1427 + 1428 + // Parse query parameters 1429 + digest := r.URL.Query().Get("digest") 1430 + artifactType := r.URL.Query().Get("artifactType") 1431 + 1432 + if digest == "" { 1433 + http.Error(w, "digest parameter required", http.StatusBadRequest) 1434 + return 1435 + } 1436 + 1437 + slog.Info("Querying referrers", "digest", digest, "artifactType", artifactType) 1438 + 1439 + // Query all manifest records from the hold's PDS using carstore 1440 + session, err := h.pds.carstore.ReadOnlySession(h.pds.uid) 1441 + if err != nil { 1442 + slog.Error("Failed to create session", "error", err) 1443 + http.Error(w, fmt.Sprintf("failed to create session: %v", err), http.StatusInternalServerError) 1444 + return 1445 + } 1446 + 1447 + head, err := h.pds.carstore.GetUserRepoHead(ctx, h.pds.uid) 1448 + if err != nil { 1449 + slog.Error("Failed to get repo head", "error", err) 1450 + http.Error(w, fmt.Sprintf("failed to get repo head: %v", err), http.StatusInternalServerError) 1451 + return 1452 + } 1453 + 1454 + if !head.Defined() { 1455 + // Empty repo, return empty referrers list 1456 + slog.Info("Empty repo, no referrers found") 1457 + response := map[string]interface{}{ 1458 + "referrers": []interface{}{}, 1459 + } 1460 + w.Header().Set("Content-Type", "application/json") 1461 + json.NewEncoder(w).Encode(response) 1462 + return 1463 + } 1464 + 1465 + repoHandle, err := repo.OpenRepo(ctx, session, head) 1466 + if err != nil { 1467 + slog.Error("Failed to open repo", "error", err) 1468 + http.Error(w, fmt.Sprintf("failed to open repo: %v", err), http.StatusInternalServerError) 1469 + return 1470 + } 1471 + 1472 + // Filter for referrers with matching subject 1473 + referrers := []map[string]interface{}{} 1474 + totalManifests := 0 1475 + 1476 + // Iterate over all records in the manifest collection 1477 + err = repoHandle.ForEach(ctx, atproto.ManifestCollection, func(k string, v cid.Cid) error { 1478 + totalManifests++ 1479 + 1480 + // Get the record bytes directly from the repo 1481 + _, recBytes, err := repoHandle.GetRecordBytes(ctx, k) 1482 + if err != nil { 1483 + slog.Warn("Failed to get record", "key", k, "error", err) 1484 + return nil // Skip this record 1485 + } 1486 + 1487 + // Unmarshal the CBOR bytes into our concrete type 1488 + var manifest atproto.ManifestRecord 1489 + if err := manifest.UnmarshalCBOR(bytes.NewReader(*recBytes)); err != nil { 1490 + slog.Warn("Failed to unmarshal ManifestRecord", "key", k, "error", err) 1491 + return nil // Skip this record 1492 + } 1493 + 1494 + // Debug: log what we found 1495 + slog.Debug("Checking manifest", 1496 + "key", k, 1497 + "digest", manifest.Digest, 1498 + "hasSubject", manifest.Subject != nil, 1499 + "subjectDigest", func() string { 1500 + if manifest.Subject != nil { 1501 + return manifest.Subject.Digest 1502 + } 1503 + return "none" 1504 + }(), 1505 + "artifactType", manifest.ArtifactType, 1506 + "mediaType", manifest.MediaType) 1507 + 1508 + // Check if this manifest has a subject that matches the requested digest 1509 + if manifest.Subject != nil && manifest.Subject.Digest == digest { 1510 + // If artifactType filter is specified, only include matching artifacts 1511 + if artifactType != "" && manifest.ArtifactType != artifactType { 1512 + slog.Debug("Skipping referrer due to artifactType mismatch", 1513 + "key", k, 1514 + "digest", manifest.Digest, 1515 + "wantArtifactType", artifactType, 1516 + "gotArtifactType", manifest.ArtifactType) 1517 + return nil // Skip this record 1518 + } 1519 + 1520 + // Build referrer response 1521 + referrer := map[string]interface{}{ 1522 + "digest": manifest.Digest, 1523 + "mediaType": manifest.MediaType, 1524 + "size": 0, // We don't track manifest size currently 1525 + "artifactType": manifest.ArtifactType, 1526 + "annotations": manifest.Annotations, 1527 + } 1528 + 1529 + // Add scanner metadata if available 1530 + if manifest.ScannedAt != "" { 1531 + referrer["scannedAt"] = manifest.ScannedAt 1532 + } 1533 + if manifest.ScannerVersion != "" { 1534 + referrer["scannerVersion"] = manifest.ScannerVersion 1535 + } 1536 + if manifest.OwnerDID != "" { 1537 + referrer["ownerDid"] = manifest.OwnerDID 1538 + } 1539 + 1540 + // Fetch the actual vulnerability report blob data 1541 + // manifest.Digest is the ORAS manifest digest, we need to: 1542 + // 1. Fetch the ORAS manifest blob 1543 + // 2. Parse it to get layers[0].digest (the actual vulnerability report) 1544 + // 3. Fetch that blob 1545 + 1546 + // Step 1: Fetch ORAS manifest 1547 + orasManifestPath := fmt.Sprintf("/docker/registry/v2/blobs/sha256/%s/%s/data", 1548 + manifest.Digest[7:9], // First 2 chars after "sha256:" 1549 + manifest.Digest[7:]) // Full hex after "sha256:" 1550 + 1551 + orasManifestData, err := h.storageDriver.GetContent(ctx, orasManifestPath) 1552 + if err != nil { 1553 + slog.Warn("Failed to fetch ORAS manifest blob", 1554 + "digest", manifest.Digest, 1555 + "path", orasManifestPath, 1556 + "error", err) 1557 + // Continue without the blob data 1558 + } else { 1559 + // Step 2: Parse ORAS manifest to get vulnerability report digest 1560 + var orasManifest struct { 1561 + Layers []struct { 1562 + Digest string `json:"digest"` 1563 + } `json:"layers"` 1564 + } 1565 + if err := json.Unmarshal(orasManifestData, &orasManifest); err != nil { 1566 + slog.Warn("Failed to parse ORAS manifest JSON", 1567 + "digest", manifest.Digest, 1568 + "error", err) 1569 + } else if len(orasManifest.Layers) > 0 { 1570 + // Step 3: Fetch the vulnerability report blob from layers[0] 1571 + vulnReportDigest := orasManifest.Layers[0].Digest 1572 + vulnReportPath := fmt.Sprintf("/docker/registry/v2/blobs/sha256/%s/%s/data", 1573 + vulnReportDigest[7:9], 1574 + vulnReportDigest[7:]) 1575 + 1576 + vulnReportData, err := h.storageDriver.GetContent(ctx, vulnReportPath) 1577 + if err != nil { 1578 + slog.Warn("Failed to fetch vulnerability report blob", 1579 + "digest", vulnReportDigest, 1580 + "path", vulnReportPath, 1581 + "error", err) 1582 + } else { 1583 + // Parse and include the vulnerability report 1584 + var reportData map[string]interface{} 1585 + if err := json.Unmarshal(vulnReportData, &reportData); err != nil { 1586 + slog.Warn("Failed to parse vulnerability report JSON", 1587 + "digest", vulnReportDigest, 1588 + "error", err) 1589 + } else { 1590 + referrer["reportData"] = reportData 1591 + slog.Debug("Included vulnerability report data in referrer", 1592 + "orasDigest", manifest.Digest, 1593 + "reportDigest", vulnReportDigest, 1594 + "reportSize", len(vulnReportData)) 1595 + } 1596 + } 1597 + } 1598 + } 1599 + 1600 + slog.Debug("Found matching referrer", 1601 + "key", k, 1602 + "digest", manifest.Digest, 1603 + "artifactType", manifest.ArtifactType, 1604 + "annotations", manifest.Annotations, 1605 + "annotationsLen", len(manifest.Annotations)) 1606 + 1607 + referrers = append(referrers, referrer) 1608 + } 1609 + 1610 + return nil // Continue iteration 1611 + }) 1612 + 1613 + if err != nil && err != repo.ErrDoneIterating && !strings.Contains(err.Error(), "done iterating") { 1614 + slog.Error("Failed to iterate records", "error", err) 1615 + http.Error(w, fmt.Sprintf("failed to iterate records: %v", err), http.StatusInternalServerError) 1616 + return 1617 + } 1618 + 1619 + // Sort referrers by scannedAt timestamp (descending, most recent first) 1620 + // This ensures the AppView gets the latest scan result when it takes the first referrer 1621 + sort.Slice(referrers, func(i, j int) bool { 1622 + iScanned, iOk := referrers[i]["scannedAt"].(string) 1623 + jScanned, jOk := referrers[j]["scannedAt"].(string) 1624 + // If both have scannedAt, compare timestamps (reverse order for descending) 1625 + if iOk && jOk { 1626 + return iScanned > jScanned 1627 + } 1628 + // If only one has scannedAt, prefer that one 1629 + if iOk { 1630 + return true 1631 + } 1632 + if jOk { 1633 + return false 1634 + } 1635 + // Neither has scannedAt, maintain original order 1636 + return false 1637 + }) 1638 + 1639 + slog.Info("Found referrers", 1640 + "count", len(referrers), 1641 + "totalManifests", totalManifests, 1642 + "digest", digest, 1643 + "artifactType", artifactType) 1644 + 1645 + // Return response 1646 + response := map[string]interface{}{ 1647 + "referrers": referrers, 1648 + } 1649 + 1650 + w.Header().Set("Content-Type", "application/json") 1651 + json.NewEncoder(w).Encode(response) 1652 + }