From fb6fbe2b55b2e66358b145744da93ba519d94830 Mon Sep 17 00:00:00 2001 From: zagrosi-code Date: Wed, 15 Jul 2026 20:11:31 +0300 Subject: [PATCH 01/49] feat(installer): establish safety foundation --- .github/workflows/installer-spike.yml | 670 ++++ .gitignore | 1 - NOTICE.md | 12 + build-constraints.txt | 20 + component-inventory.json | 1 + pyproject.toml | 31 +- src/zagrosi_forge/__init__.py | 3 + src/zagrosi_forge/_vendor/__init__.py | 1 + src/zagrosi_forge/_vendor/tomlkit-LICENSE | 20 + src/zagrosi_forge/_vendor/tomlkit/__init__.py | 59 + src/zagrosi_forge/_vendor/tomlkit/_compat.py | 20 + src/zagrosi_forge/_vendor/tomlkit/_types.py | 90 + src/zagrosi_forge/_vendor/tomlkit/_utils.py | 162 + src/zagrosi_forge/_vendor/tomlkit/api.py | 327 ++ .../_vendor/tomlkit/container.py | 1034 ++++++ .../_vendor/tomlkit/exceptions.py | 234 ++ src/zagrosi_forge/_vendor/tomlkit/items.py | 2308 +++++++++++++ src/zagrosi_forge/_vendor/tomlkit/parser.py | 1200 +++++++ src/zagrosi_forge/_vendor/tomlkit/py.typed | 0 src/zagrosi_forge/_vendor/tomlkit/source.py | 194 ++ .../_vendor/tomlkit/toml_char.py | 52 + .../_vendor/tomlkit/toml_document.py | 7 + .../_vendor/tomlkit/toml_file.py | 59 + src/zagrosi_forge/_vendor/vendor-receipt.json | 1 + src/zagrosi_forge/install/__init__.py | 34 + src/zagrosi_forge/install/contracts.py | 503 +++ src/zagrosi_forge/install/diagnostics.py | 158 + src/zagrosi_forge/install/limit-policy.json | 1 + .../install/native-isolation-policy.json | 1 + .../install/native-support-policy.json | 1 + src/zagrosi_forge/install/policies.py | 403 +++ .../install/recovery-retention-policy.json | 1 + .../schemas/limit-policy-v1.schema.json | 19 + .../native-isolation-policy-v1.schema.json | 20 + .../native-support-policy-v1.schema.json | 21 + .../recovery-retention-policy-v1.schema.json | 21 + .../schemas/toolchain-lock-v1.schema.json | 18 + .../schemas/vendor-receipt-v1.schema.json | 20 + src/zagrosi_forge/install/toolchain-lock.json | 1 + src/zagrosi_forge/install/toolchain.py | 191 ++ src/zagrosi_forge/install/vendor.py | 48 + src/zagrosi_forge/install/version.py | 44 + .../.agents/plugins/marketplace.json | 20 + .../zagrosi-forge/.codex-plugin/plugin.json | 11 + .../plugins/zagrosi-forge/scripts/spike.py | 3 + .../skills/zagrosi-implement/SKILL.md | 8 + .../skills/zagrosi-plan/SKILL.md | 8 + .../skills/zagrosi-project/SKILL.md | 8 + tests/package/conftest.py | 164 + tests/package/test_contracts.py | 486 +++ tests/package/test_limit_policy.py | 201 ++ tests/package/test_package_foundation.py | 418 +++ tests/package/test_toolchain_contract.py | 125 + tests/package/test_vendor_contract.py | 396 +++ tests/spikes/_platform_capabilities.py | 2158 ++++++++++++ tests/spikes/codex_cachebuster_support.py | 783 +++++ tests/spikes/test_codex_cachebuster.py | 102 + tests/spikes/test_platform_capabilities.py | 150 + toolchain.lock.json | 1 + tools/generate_component_inventory.py | 236 ++ tools/vendor_tomlkit.py | 303 ++ tools/verify_toolchain.py | 44 + uv.lock | 3054 +++++++++++++++++ 63 files changed, 16686 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/installer-spike.yml create mode 100644 build-constraints.txt create mode 100644 component-inventory.json create mode 100644 src/zagrosi_forge/__init__.py create mode 100644 src/zagrosi_forge/_vendor/__init__.py create mode 100644 src/zagrosi_forge/_vendor/tomlkit-LICENSE create mode 100644 src/zagrosi_forge/_vendor/tomlkit/__init__.py create mode 100644 src/zagrosi_forge/_vendor/tomlkit/_compat.py create mode 100644 src/zagrosi_forge/_vendor/tomlkit/_types.py create mode 100644 src/zagrosi_forge/_vendor/tomlkit/_utils.py create mode 100644 src/zagrosi_forge/_vendor/tomlkit/api.py create mode 100644 src/zagrosi_forge/_vendor/tomlkit/container.py create mode 100644 src/zagrosi_forge/_vendor/tomlkit/exceptions.py create mode 100644 src/zagrosi_forge/_vendor/tomlkit/items.py create mode 100644 src/zagrosi_forge/_vendor/tomlkit/parser.py create mode 100644 src/zagrosi_forge/_vendor/tomlkit/py.typed create mode 100644 src/zagrosi_forge/_vendor/tomlkit/source.py create mode 100644 src/zagrosi_forge/_vendor/tomlkit/toml_char.py create mode 100644 src/zagrosi_forge/_vendor/tomlkit/toml_document.py create mode 100644 src/zagrosi_forge/_vendor/tomlkit/toml_file.py create mode 100644 src/zagrosi_forge/_vendor/vendor-receipt.json create mode 100644 src/zagrosi_forge/install/__init__.py create mode 100644 src/zagrosi_forge/install/contracts.py create mode 100644 src/zagrosi_forge/install/diagnostics.py create mode 100644 src/zagrosi_forge/install/limit-policy.json create mode 100644 src/zagrosi_forge/install/native-isolation-policy.json create mode 100644 src/zagrosi_forge/install/native-support-policy.json create mode 100644 src/zagrosi_forge/install/policies.py create mode 100644 src/zagrosi_forge/install/recovery-retention-policy.json create mode 100644 src/zagrosi_forge/install/schemas/limit-policy-v1.schema.json create mode 100644 src/zagrosi_forge/install/schemas/native-isolation-policy-v1.schema.json create mode 100644 src/zagrosi_forge/install/schemas/native-support-policy-v1.schema.json create mode 100644 src/zagrosi_forge/install/schemas/recovery-retention-policy-v1.schema.json create mode 100644 src/zagrosi_forge/install/schemas/toolchain-lock-v1.schema.json create mode 100644 src/zagrosi_forge/install/schemas/vendor-receipt-v1.schema.json create mode 100644 src/zagrosi_forge/install/toolchain-lock.json create mode 100644 src/zagrosi_forge/install/toolchain.py create mode 100644 src/zagrosi_forge/install/vendor.py create mode 100644 src/zagrosi_forge/install/version.py create mode 100644 tests/fixtures/spike-marketplace/.agents/plugins/marketplace.json create mode 100644 tests/fixtures/spike-marketplace/plugins/zagrosi-forge/.codex-plugin/plugin.json create mode 100644 tests/fixtures/spike-marketplace/plugins/zagrosi-forge/scripts/spike.py create mode 100644 tests/fixtures/spike-marketplace/plugins/zagrosi-forge/skills/zagrosi-implement/SKILL.md create mode 100644 tests/fixtures/spike-marketplace/plugins/zagrosi-forge/skills/zagrosi-plan/SKILL.md create mode 100644 tests/fixtures/spike-marketplace/plugins/zagrosi-forge/skills/zagrosi-project/SKILL.md create mode 100644 tests/package/conftest.py create mode 100644 tests/package/test_contracts.py create mode 100644 tests/package/test_limit_policy.py create mode 100644 tests/package/test_package_foundation.py create mode 100644 tests/package/test_toolchain_contract.py create mode 100644 tests/package/test_vendor_contract.py create mode 100644 tests/spikes/_platform_capabilities.py create mode 100644 tests/spikes/codex_cachebuster_support.py create mode 100644 tests/spikes/test_codex_cachebuster.py create mode 100644 tests/spikes/test_platform_capabilities.py create mode 100644 toolchain.lock.json create mode 100644 tools/generate_component_inventory.py create mode 100644 tools/vendor_tomlkit.py create mode 100644 tools/verify_toolchain.py create mode 100644 uv.lock diff --git a/.github/workflows/installer-spike.yml b/.github/workflows/installer-spike.yml new file mode 100644 index 0000000..206fcfc --- /dev/null +++ b/.github/workflows/installer-spike.yml @@ -0,0 +1,670 @@ +name: Installer package and platform spike + +on: + pull_request: + push: + branches: [main] + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: installer-spike-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +env: + PYTHONUNBUFFERED: "1" + UV_NO_PROGRESS: "1" + UV_PYTHON_DOWNLOADS: never + +jobs: + package: + name: Package / Python ${{ matrix.python-version }} + runs-on: ubuntu-24.04 + timeout-minutes: 30 + strategy: + fail-fast: false + matrix: + python-version: ["3.11", "3.12", "3.13", "3.14"] + steps: + - name: Check out source + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 + with: + persist-credentials: false + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0 + with: + python-version: ${{ matrix.python-version }} + + - name: Acquire and verify locked uv and Codex + id: acquire + shell: pwsh + env: + PYTHONPATH: ${{ github.workspace }}/src + TOOLCHAIN_PLATFORM: linux-x86_64 + run: | + $ErrorActionPreference = "Stop" + $ToolRoot = Join-Path $env:RUNNER_TEMP "zagrosi-toolchain" + if ($env:RUNNER_ARCH -ne "X64") { throw "linux-x86_64 requires an X64 runner" } + + $UvOutput = & python tools/verify_toolchain.py --tool uv --platform $env:TOOLCHAIN_PLATFORM --destination $ToolRoot 2>&1 + if ($LASTEXITCODE -ne 0) { throw ($UvOutput -join "`n") } + $UvArchive = ($UvOutput | Select-Object -Last 1).ToString().Trim() + + $CodexOutput = & python tools/verify_toolchain.py --tool codex --platform $env:TOOLCHAIN_PLATFORM --destination $ToolRoot 2>&1 + if ($LASTEXITCODE -ne 0) { throw ($CodexOutput -join "`n") } + $CodexArchive = ($CodexOutput | Select-Object -Last 1).ToString().Trim() + + @' + import hashlib + import json + import os + from pathlib import Path + import stat + import sys + import tarfile + import zipfile + + MAX_TOOL_BYTES = 128 * 1024 * 1024 + root_lock = Path("toolchain.lock.json") + package_lock = Path("src/zagrosi_forge/install/toolchain-lock.json") + if root_lock.read_bytes() != package_lock.read_bytes(): + raise SystemExit("root and packaged toolchain locks differ") + lock = json.loads(root_lock.read_text(encoding="utf-8")) + + def selected(tool_name: str, platform: str) -> tuple[dict[str, object], dict[str, str]]: + tools = [tool for tool in lock["tools"] if tool["name"] == tool_name] + if len(tools) != 1: + raise SystemExit(f"tool is not uniquely locked: {tool_name}") + artifacts = [ + artifact + for artifact in tools[0]["artifacts"] + if artifact["platform"] == platform + ] + if len(artifacts) != 1: + raise SystemExit(f"artifact is not uniquely locked: {tool_name}/{platform}") + return tools[0], artifacts[0] + + def verified_bytes(archive_path: Path, artifact: dict[str, str]) -> bytes: + if archive_path.is_symlink() or not archive_path.is_file(): + raise SystemExit("verified archive is not a regular file") + digest = hashlib.sha256(archive_path.read_bytes()).hexdigest() + if digest != artifact["sha256"]: + raise SystemExit("archive changed after toolchain verification") + executable = artifact["executable"] + if artifact["archive_type"] == "tar.gz": + with tarfile.open(archive_path, "r:gz") as archive: + members = [member for member in archive.getmembers() if member.name == executable] + if len(members) != 1 or not members[0].isfile(): + raise SystemExit("locked executable is not one regular tar member") + if members[0].size > MAX_TOOL_BYTES: + raise SystemExit("locked executable exceeds the byte limit") + stream = archive.extractfile(members[0]) + if stream is None: + raise SystemExit("locked tar member cannot be read") + data = stream.read(MAX_TOOL_BYTES + 1) + elif artifact["archive_type"] == "zip": + with zipfile.ZipFile(archive_path) as archive: + matches = [info for info in archive.infolist() if info.filename == executable] + if len(matches) != 1 or matches[0].is_dir(): + raise SystemExit("locked executable is not one regular zip member") + mode = matches[0].external_attr >> 16 + if mode and stat.S_ISLNK(mode): + raise SystemExit("locked zip executable is a link") + if matches[0].file_size > MAX_TOOL_BYTES: + raise SystemExit("locked executable exceeds the byte limit") + data = archive.read(matches[0]) + else: + raise SystemExit("unsupported locked archive type") + if not data or len(data) > MAX_TOOL_BYTES: + raise SystemExit("locked executable has an invalid size") + return data + + platform = os.environ["TOOLCHAIN_PLATFORM"] + uv_tool, uv_artifact = selected("uv", platform) + codex_tool, codex_artifact = selected("codex", platform) + destinations = { + "uv": (Path(sys.argv[1]), uv_tool, uv_artifact), + "codex": (Path(sys.argv[2]), codex_tool, codex_artifact), + } + bin_dir = Path(sys.argv[3]) + bin_dir.mkdir(parents=True, exist_ok=False) + metadata: dict[str, object] = {} + for name, (archive_path, tool, artifact) in destinations.items(): + suffix = ".exe" if platform.startswith("windows-") else "" + executable_path = bin_dir / f"{name}{suffix}" + with executable_path.open("xb") as output: + output.write(verified_bytes(archive_path, artifact)) + executable_path.chmod(0o700) + metadata[name] = { + "path": str(executable_path.resolve()), + "sha256": artifact["sha256"], + "version": tool["version"], + } + Path(sys.argv[4]).write_text( + json.dumps(metadata, sort_keys=True, separators=(",", ":")) + "\n", + encoding="utf-8", + ) + '@ | python - $UvArchive $CodexArchive (Join-Path $ToolRoot "bin") (Join-Path $ToolRoot "metadata.json") + if ($LASTEXITCODE -ne 0) { throw "verified tool extraction failed" } + + $Metadata = Get-Content (Join-Path $ToolRoot "metadata.json") -Raw | ConvertFrom-Json + $env:ZAGROSI_UV_BIN = $Metadata.uv.path + $env:ZAGROSI_CODEX_BIN = $Metadata.codex.path + $UvVersion = (& $env:ZAGROSI_UV_BIN --version).Trim() + if ($LASTEXITCODE -ne 0 -or $UvVersion -notmatch '^uv 0\.11\.23(?:\s|$)') { + throw "verified uv reported an unexpected version" + } + $CodexVersion = (& $env:ZAGROSI_CODEX_BIN --version).Trim() + if ($LASTEXITCODE -ne 0 -or $CodexVersion -ne "codex-cli 0.144.4") { + throw "verified Codex reported an unexpected version" + } + + "ZAGROSI_UV_BIN=$($Metadata.uv.path)" | Out-File $env:GITHUB_ENV -Encoding utf8 -Append + "ZAGROSI_UV_SHA256=$($Metadata.uv.sha256)" | Out-File $env:GITHUB_ENV -Encoding utf8 -Append + "ZAGROSI_UV_VERSION=$UvVersion" | Out-File $env:GITHUB_ENV -Encoding utf8 -Append + "ZAGROSI_CODEX_BIN=$($Metadata.codex.path)" | Out-File $env:GITHUB_ENV -Encoding utf8 -Append + "ZAGROSI_CODEX_SHA256=$($Metadata.codex.sha256)" | Out-File $env:GITHUB_ENV -Encoding utf8 -Append + "ZAGROSI_CODEX_VERSION=$CodexVersion" | Out-File $env:GITHUB_ENV -Encoding utf8 -Append + "UV_PYTHON=$((Get-Command python).Source)" | Out-File $env:GITHUB_ENV -Encoding utf8 -Append + "UV_CACHE_DIR=$(Join-Path $env:RUNNER_TEMP 'uv-cache')" | Out-File $env:GITHUB_ENV -Encoding utf8 -Append + (Join-Path $ToolRoot "bin") | Out-File $env:GITHUB_PATH -Encoding utf8 -Append + + - name: Sync locked test environment + id: sync + shell: pwsh + run: | + $ErrorActionPreference = "Stop" + & $env:ZAGROSI_UV_BIN lock --check + if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } + & $env:ZAGROSI_UV_BIN sync --locked --no-default-groups --group test + if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } + + - name: Run package contract suite + id: package-tests + shell: pwsh + run: | + $EvidenceRoot = Join-Path $env:RUNNER_TEMP "zagrosi-evidence" + New-Item -ItemType Directory -Path $EvidenceRoot -Force | Out-Null + & $env:ZAGROSI_UV_BIN run --locked --no-sync python -m pytest tests/package --tb=short --junitxml (Join-Path $EvidenceRoot "raw-package.xml") + if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } + + - name: Sanitize and summarize evidence + if: always() + shell: pwsh + env: + ACQUIRE_OUTCOME: ${{ steps.acquire.outcome }} + SYNC_OUTCOME: ${{ steps.sync.outcome }} + PACKAGE_OUTCOME: ${{ steps.package-tests.outcome }} + MATRIX_OS: ubuntu-24.04 + MATRIX_PLATFORM: linux-x86_64 + MATRIX_PYTHON: ${{ matrix.python-version }} + run: | + $ErrorActionPreference = "Stop" + $EvidenceRoot = Join-Path $env:RUNNER_TEMP "zagrosi-evidence" + New-Item -ItemType Directory -Path $EvidenceRoot -Force | Out-Null + + function Protect-Text([string] $Value) { + if ($null -eq $Value) { return $Value } + $Roots = @( + @{ Value = $env:GITHUB_WORKSPACE; Label = "" }, + @{ Value = $env:RUNNER_TEMP; Label = "" }, + @{ Value = $env:RUNNER_TOOL_CACHE; Label = "" }, + @{ Value = $env:HOME; Label = "" }, + @{ Value = $env:USERPROFILE; Label = "" } + ) | Where-Object { -not [string]::IsNullOrEmpty($_.Value) } | Sort-Object { $_.Value.Length } -Descending + foreach ($Root in $Roots) { $Value = $Value.Replace($Root.Value, $Root.Label) } + $Value = [regex]::Replace( + $Value, + '(?i)(authorization|token|api[_-]?key|secret|password)(\s*[:=]\s*)[^\s<"]+', + '$1$2' + ) + if ($Value.Length -gt 4096) { return "" + $Value.Substring($Value.Length - 4096) } + return $Value + } + + function Write-FallbackJunit([string] $Destination, [string] $Reason) { + $Body = "$Reason" + [IO.File]::WriteAllText($Destination, $Body, [Text.UTF8Encoding]::new($false)) + } + + function Write-SanitizedJunit([string] $Source, [string] $Destination) { + if (-not (Test-Path -LiteralPath $Source -PathType Leaf)) { + Write-FallbackJunit $Destination "test execution did not produce JUnit" + return + } + try { + [xml] $Document = Get-Content -LiteralPath $Source -Raw + foreach ($Node in $Document.SelectNodes("//*")) { + foreach ($Attribute in $Node.Attributes) { $Attribute.Value = Protect-Text $Attribute.Value } + if ($Node.LocalName -in @("failure", "error", "system-out", "system-err")) { + $Node.InnerText = Protect-Text $Node.InnerText + } + } + $Settings = [Xml.XmlWriterSettings]::new() + $Settings.Encoding = [Text.UTF8Encoding]::new($false) + $Settings.Indent = $false + $Writer = [Xml.XmlWriter]::Create($Destination, $Settings) + try { $Document.Save($Writer) } finally { $Writer.Dispose() } + if ((Get-Item -LiteralPath $Destination).Length -gt 1MB) { + Write-FallbackJunit $Destination "sanitized JUnit exceeded the one MiB evidence limit" + } + } catch { + Write-FallbackJunit $Destination "raw JUnit could not be safely sanitized" + } + } + + Write-SanitizedJunit (Join-Path $EvidenceRoot "raw-package.xml") (Join-Path $EvidenceRoot "junit-package.xml") + + function File-Digest([string] $Path) { + if (-not (Test-Path -LiteralPath $Path -PathType Leaf)) { return $null } + return (Get-FileHash -LiteralPath $Path -Algorithm SHA256).Hash.ToLowerInvariant() + } + + $PolicyFiles = @{} + Get-ChildItem "src/zagrosi_forge/install" -Filter "*policy.json" | Sort-Object Name | ForEach-Object { + $PolicyFiles[$_.Name] = File-Digest $_.FullName + } + $NativePolicy = if (Test-Path "src/zagrosi_forge/install/native-support-policy.json") { + Get-Content "src/zagrosi_forge/install/native-support-policy.json" -Raw | ConvertFrom-Json + } else { $null } + $Toolchain = if (Test-Path "toolchain.lock.json") { + Get-Content "toolchain.lock.json" -Raw | ConvertFrom-Json + } else { $null } + $Evidence = [ordered]@{ + schema_version = "1.0" + commit = $env:GITHUB_SHA + runner = $env:MATRIX_OS + runner_arch = $env:RUNNER_ARCH + platform = $env:MATRIX_PLATFORM + python = $env:MATRIX_PYTHON + lock_digest = File-Digest "uv.lock" + policy_digest = $NativePolicy.record_digest + policy_file_digests = $PolicyFiles + toolchain_digest = $Toolchain.record_digest + toolchain_file_digest = File-Digest "toolchain.lock.json" + uv_artifact_digest = $env:ZAGROSI_UV_SHA256 + uv_version = $env:ZAGROSI_UV_VERSION + codex_artifact_digest = $env:ZAGROSI_CODEX_SHA256 + codex_version = $env:ZAGROSI_CODEX_VERSION + results = [ordered]@{ + acquisition = $env:ACQUIRE_OUTCOME + locked_sync = $env:SYNC_OUTCOME + package_contracts = $env:PACKAGE_OUTCOME + native_primitives = "not_applicable" + codex_cachebuster = "not_applicable" + } + } + $EvidencePath = Join-Path $EvidenceRoot "evidence.json" + [IO.File]::WriteAllText( + $EvidencePath, + (($Evidence | ConvertTo-Json -Depth 6 -Compress) + "`n"), + [Text.UTF8Encoding]::new($false) + ) + if ((Get-Item -LiteralPath $EvidencePath).Length -gt 64KB) { throw "summary evidence exceeded 64 KiB" } + + - name: Upload bounded package evidence + if: always() + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: installer-package-py${{ matrix.python-version }}-${{ github.run_attempt }} + path: | + ${{ runner.temp }}/zagrosi-evidence/evidence.json + ${{ runner.temp }}/zagrosi-evidence/junit-package.xml + if-no-files-found: error + retention-days: 7 + compression-level: 9 + include-hidden-files: false + + spikes: + name: Spikes / ${{ matrix.platform }} / Python ${{ matrix.python-version }} + runs-on: ${{ matrix.os }} + timeout-minutes: 30 + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-24.04 + platform: linux-x86_64 + python-version: "3.11" + - os: ubuntu-24.04 + platform: linux-x86_64 + python-version: "3.14" + - os: macos-15 + platform: macos-arm64 + python-version: "3.11" + - os: macos-15 + platform: macos-arm64 + python-version: "3.14" + - os: windows-2025 + platform: windows-x86_64 + python-version: "3.11" + - os: windows-2025 + platform: windows-x86_64 + python-version: "3.14" + steps: + - name: Check out source + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 + with: + persist-credentials: false + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0 + with: + python-version: ${{ matrix.python-version }} + + - name: Acquire and verify locked uv and Codex + id: acquire + shell: pwsh + env: + PYTHONPATH: ${{ github.workspace }}/src + TOOLCHAIN_PLATFORM: ${{ matrix.platform }} + run: | + $ErrorActionPreference = "Stop" + $ToolRoot = Join-Path $env:RUNNER_TEMP "zagrosi-toolchain" + $ExpectedArch = if ($env:TOOLCHAIN_PLATFORM -eq "macos-arm64") { "ARM64" } else { "X64" } + if ($env:RUNNER_ARCH -ne $ExpectedArch) { + throw "$($env:TOOLCHAIN_PLATFORM) requires a $ExpectedArch runner" + } + + $UvOutput = & python tools/verify_toolchain.py --tool uv --platform $env:TOOLCHAIN_PLATFORM --destination $ToolRoot 2>&1 + if ($LASTEXITCODE -ne 0) { throw ($UvOutput -join "`n") } + $UvArchive = ($UvOutput | Select-Object -Last 1).ToString().Trim() + + $CodexOutput = & python tools/verify_toolchain.py --tool codex --platform $env:TOOLCHAIN_PLATFORM --destination $ToolRoot 2>&1 + if ($LASTEXITCODE -ne 0) { throw ($CodexOutput -join "`n") } + $CodexArchive = ($CodexOutput | Select-Object -Last 1).ToString().Trim() + + @' + import hashlib + import json + import os + from pathlib import Path + import stat + import sys + import tarfile + import zipfile + + MAX_TOOL_BYTES = 128 * 1024 * 1024 + root_lock = Path("toolchain.lock.json") + package_lock = Path("src/zagrosi_forge/install/toolchain-lock.json") + if root_lock.read_bytes() != package_lock.read_bytes(): + raise SystemExit("root and packaged toolchain locks differ") + lock = json.loads(root_lock.read_text(encoding="utf-8")) + + def selected(tool_name: str, platform: str) -> tuple[dict[str, object], dict[str, str]]: + tools = [tool for tool in lock["tools"] if tool["name"] == tool_name] + if len(tools) != 1: + raise SystemExit(f"tool is not uniquely locked: {tool_name}") + artifacts = [ + artifact + for artifact in tools[0]["artifacts"] + if artifact["platform"] == platform + ] + if len(artifacts) != 1: + raise SystemExit(f"artifact is not uniquely locked: {tool_name}/{platform}") + return tools[0], artifacts[0] + + def verified_bytes(archive_path: Path, artifact: dict[str, str]) -> bytes: + if archive_path.is_symlink() or not archive_path.is_file(): + raise SystemExit("verified archive is not a regular file") + digest = hashlib.sha256(archive_path.read_bytes()).hexdigest() + if digest != artifact["sha256"]: + raise SystemExit("archive changed after toolchain verification") + executable = artifact["executable"] + if artifact["archive_type"] == "tar.gz": + with tarfile.open(archive_path, "r:gz") as archive: + members = [member for member in archive.getmembers() if member.name == executable] + if len(members) != 1 or not members[0].isfile(): + raise SystemExit("locked executable is not one regular tar member") + if members[0].size > MAX_TOOL_BYTES: + raise SystemExit("locked executable exceeds the byte limit") + stream = archive.extractfile(members[0]) + if stream is None: + raise SystemExit("locked tar member cannot be read") + data = stream.read(MAX_TOOL_BYTES + 1) + elif artifact["archive_type"] == "zip": + with zipfile.ZipFile(archive_path) as archive: + matches = [info for info in archive.infolist() if info.filename == executable] + if len(matches) != 1 or matches[0].is_dir(): + raise SystemExit("locked executable is not one regular zip member") + mode = matches[0].external_attr >> 16 + if mode and stat.S_ISLNK(mode): + raise SystemExit("locked zip executable is a link") + if matches[0].file_size > MAX_TOOL_BYTES: + raise SystemExit("locked executable exceeds the byte limit") + data = archive.read(matches[0]) + else: + raise SystemExit("unsupported locked archive type") + if not data or len(data) > MAX_TOOL_BYTES: + raise SystemExit("locked executable has an invalid size") + return data + + platform = os.environ["TOOLCHAIN_PLATFORM"] + uv_tool, uv_artifact = selected("uv", platform) + codex_tool, codex_artifact = selected("codex", platform) + destinations = { + "uv": (Path(sys.argv[1]), uv_tool, uv_artifact), + "codex": (Path(sys.argv[2]), codex_tool, codex_artifact), + } + bin_dir = Path(sys.argv[3]) + bin_dir.mkdir(parents=True, exist_ok=False) + metadata: dict[str, object] = {} + for name, (archive_path, tool, artifact) in destinations.items(): + suffix = ".exe" if platform.startswith("windows-") else "" + executable_path = bin_dir / f"{name}{suffix}" + with executable_path.open("xb") as output: + output.write(verified_bytes(archive_path, artifact)) + executable_path.chmod(0o700) + metadata[name] = { + "path": str(executable_path.resolve()), + "sha256": artifact["sha256"], + "version": tool["version"], + } + Path(sys.argv[4]).write_text( + json.dumps(metadata, sort_keys=True, separators=(",", ":")) + "\n", + encoding="utf-8", + ) + '@ | python - $UvArchive $CodexArchive (Join-Path $ToolRoot "bin") (Join-Path $ToolRoot "metadata.json") + if ($LASTEXITCODE -ne 0) { throw "verified tool extraction failed" } + + $Metadata = Get-Content (Join-Path $ToolRoot "metadata.json") -Raw | ConvertFrom-Json + $env:ZAGROSI_UV_BIN = $Metadata.uv.path + $env:ZAGROSI_CODEX_BIN = $Metadata.codex.path + $UvVersion = (& $env:ZAGROSI_UV_BIN --version).Trim() + if ($LASTEXITCODE -ne 0 -or $UvVersion -notmatch '^uv 0\.11\.23(?:\s|$)') { + throw "verified uv reported an unexpected version" + } + $CodexVersion = (& $env:ZAGROSI_CODEX_BIN --version).Trim() + if ($LASTEXITCODE -ne 0 -or $CodexVersion -ne "codex-cli 0.144.4") { + throw "verified Codex reported an unexpected version" + } + + "ZAGROSI_UV_BIN=$($Metadata.uv.path)" | Out-File $env:GITHUB_ENV -Encoding utf8 -Append + "ZAGROSI_UV_SHA256=$($Metadata.uv.sha256)" | Out-File $env:GITHUB_ENV -Encoding utf8 -Append + "ZAGROSI_UV_VERSION=$UvVersion" | Out-File $env:GITHUB_ENV -Encoding utf8 -Append + "ZAGROSI_CODEX_BIN=$($Metadata.codex.path)" | Out-File $env:GITHUB_ENV -Encoding utf8 -Append + "ZAGROSI_CODEX_SHA256=$($Metadata.codex.sha256)" | Out-File $env:GITHUB_ENV -Encoding utf8 -Append + "ZAGROSI_CODEX_VERSION=$CodexVersion" | Out-File $env:GITHUB_ENV -Encoding utf8 -Append + "UV_PYTHON=$((Get-Command python).Source)" | Out-File $env:GITHUB_ENV -Encoding utf8 -Append + "UV_CACHE_DIR=$(Join-Path $env:RUNNER_TEMP 'uv-cache')" | Out-File $env:GITHUB_ENV -Encoding utf8 -Append + (Join-Path $ToolRoot "bin") | Out-File $env:GITHUB_PATH -Encoding utf8 -Append + + - name: Sync locked test environment + id: sync + shell: pwsh + run: | + $ErrorActionPreference = "Stop" + & $env:ZAGROSI_UV_BIN lock --check + if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } + & $env:ZAGROSI_UV_BIN sync --locked --no-default-groups --group test + if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } + + - name: Prove native platform primitives + id: platform-tests + shell: pwsh + run: | + $ErrorActionPreference = "Stop" + $EvidenceRoot = Join-Path $env:RUNNER_TEMP "zagrosi-evidence" + New-Item -ItemType Directory -Path $EvidenceRoot -Force | Out-Null + $Junit = Join-Path $EvidenceRoot "raw-platform.xml" + & $env:ZAGROSI_UV_BIN run --locked --no-sync python -m pytest tests/spikes/test_platform_capabilities.py --tb=short --junitxml $Junit + $TestExit = $LASTEXITCODE + if ($TestExit -ne 0) { exit $TestExit } + [xml] $Document = Get-Content -LiteralPath $Junit -Raw + $Cases = @($Document.SelectNodes("//testcase")) + $NonPasses = @($Document.SelectNodes("//testcase/failure | //testcase/error | //testcase/skipped")) + if ($Cases.Count -ne 8 -or $NonPasses.Count -ne 0) { + throw "platform hard gate requires exactly 8 passed tests and zero failures, errors, or skips" + } + + - name: Prove Codex cachebuster behavior + id: codex-tests + if: always() && steps.acquire.outcome == 'success' && steps.sync.outcome == 'success' + shell: pwsh + run: | + $ErrorActionPreference = "Stop" + $EvidenceRoot = Join-Path $env:RUNNER_TEMP "zagrosi-evidence" + New-Item -ItemType Directory -Path $EvidenceRoot -Force | Out-Null + $Junit = Join-Path $EvidenceRoot "raw-codex.xml" + & $env:ZAGROSI_UV_BIN run --locked --no-sync python -m pytest tests/spikes/test_codex_cachebuster.py --tb=short --junitxml $Junit + $TestExit = $LASTEXITCODE + if ($TestExit -ne 0) { exit $TestExit } + [xml] $Document = Get-Content -LiteralPath $Junit -Raw + $Cases = @($Document.SelectNodes("//testcase")) + $NonPasses = @($Document.SelectNodes("//testcase/failure | //testcase/error | //testcase/skipped")) + if ($Cases.Count -ne 6 -or $NonPasses.Count -ne 0) { + throw "Codex hard gate requires exactly 6 passed tests and zero failures, errors, or skips" + } + + - name: Sanitize and summarize evidence + if: always() + shell: pwsh + env: + ACQUIRE_OUTCOME: ${{ steps.acquire.outcome }} + SYNC_OUTCOME: ${{ steps.sync.outcome }} + PLATFORM_OUTCOME: ${{ steps.platform-tests.outcome }} + CODEX_OUTCOME: ${{ steps.codex-tests.outcome }} + MATRIX_OS: ${{ matrix.os }} + MATRIX_PLATFORM: ${{ matrix.platform }} + MATRIX_PYTHON: ${{ matrix.python-version }} + run: | + $ErrorActionPreference = "Stop" + $EvidenceRoot = Join-Path $env:RUNNER_TEMP "zagrosi-evidence" + New-Item -ItemType Directory -Path $EvidenceRoot -Force | Out-Null + + function Protect-Text([string] $Value) { + if ($null -eq $Value) { return $Value } + $Roots = @( + @{ Value = $env:GITHUB_WORKSPACE; Label = "" }, + @{ Value = $env:RUNNER_TEMP; Label = "" }, + @{ Value = $env:RUNNER_TOOL_CACHE; Label = "" }, + @{ Value = $env:HOME; Label = "" }, + @{ Value = $env:USERPROFILE; Label = "" } + ) | Where-Object { -not [string]::IsNullOrEmpty($_.Value) } | Sort-Object { $_.Value.Length } -Descending + foreach ($Root in $Roots) { $Value = $Value.Replace($Root.Value, $Root.Label) } + $Value = [regex]::Replace( + $Value, + '(?i)(authorization|token|api[_-]?key|secret|password)(\s*[:=]\s*)[^\s<"]+', + '$1$2' + ) + if ($Value.Length -gt 4096) { return "" + $Value.Substring($Value.Length - 4096) } + return $Value + } + + function Write-FallbackJunit([string] $Destination, [string] $Reason) { + $Body = "$Reason" + [IO.File]::WriteAllText($Destination, $Body, [Text.UTF8Encoding]::new($false)) + } + + function Write-SanitizedJunit([string] $Source, [string] $Destination) { + if (-not (Test-Path -LiteralPath $Source -PathType Leaf)) { + Write-FallbackJunit $Destination "test execution did not produce JUnit" + return + } + try { + [xml] $Document = Get-Content -LiteralPath $Source -Raw + foreach ($Node in $Document.SelectNodes("//*")) { + foreach ($Attribute in $Node.Attributes) { $Attribute.Value = Protect-Text $Attribute.Value } + if ($Node.LocalName -in @("failure", "error", "system-out", "system-err")) { + $Node.InnerText = Protect-Text $Node.InnerText + } + } + $Settings = [Xml.XmlWriterSettings]::new() + $Settings.Encoding = [Text.UTF8Encoding]::new($false) + $Settings.Indent = $false + $Writer = [Xml.XmlWriter]::Create($Destination, $Settings) + try { $Document.Save($Writer) } finally { $Writer.Dispose() } + if ((Get-Item -LiteralPath $Destination).Length -gt 1MB) { + Write-FallbackJunit $Destination "sanitized JUnit exceeded the one MiB evidence limit" + } + } catch { + Write-FallbackJunit $Destination "raw JUnit could not be safely sanitized" + } + } + + Write-SanitizedJunit (Join-Path $EvidenceRoot "raw-platform.xml") (Join-Path $EvidenceRoot "junit-platform.xml") + Write-SanitizedJunit (Join-Path $EvidenceRoot "raw-codex.xml") (Join-Path $EvidenceRoot "junit-codex.xml") + + function File-Digest([string] $Path) { + if (-not (Test-Path -LiteralPath $Path -PathType Leaf)) { return $null } + return (Get-FileHash -LiteralPath $Path -Algorithm SHA256).Hash.ToLowerInvariant() + } + + $PolicyFiles = @{} + Get-ChildItem "src/zagrosi_forge/install" -Filter "*policy.json" | Sort-Object Name | ForEach-Object { + $PolicyFiles[$_.Name] = File-Digest $_.FullName + } + $NativePolicy = if (Test-Path "src/zagrosi_forge/install/native-support-policy.json") { + Get-Content "src/zagrosi_forge/install/native-support-policy.json" -Raw | ConvertFrom-Json + } else { $null } + $Toolchain = if (Test-Path "toolchain.lock.json") { + Get-Content "toolchain.lock.json" -Raw | ConvertFrom-Json + } else { $null } + $Evidence = [ordered]@{ + schema_version = "1.0" + commit = $env:GITHUB_SHA + runner = $env:MATRIX_OS + runner_arch = $env:RUNNER_ARCH + platform = $env:MATRIX_PLATFORM + python = $env:MATRIX_PYTHON + lock_digest = File-Digest "uv.lock" + policy_digest = $NativePolicy.record_digest + policy_file_digests = $PolicyFiles + toolchain_digest = $Toolchain.record_digest + toolchain_file_digest = File-Digest "toolchain.lock.json" + uv_artifact_digest = $env:ZAGROSI_UV_SHA256 + uv_version = $env:ZAGROSI_UV_VERSION + codex_artifact_digest = $env:ZAGROSI_CODEX_SHA256 + codex_version = $env:ZAGROSI_CODEX_VERSION + results = [ordered]@{ + acquisition = $env:ACQUIRE_OUTCOME + locked_sync = $env:SYNC_OUTCOME + package_contracts = "not_applicable" + native_primitives = $env:PLATFORM_OUTCOME + codex_cachebuster = $env:CODEX_OUTCOME + } + } + $EvidencePath = Join-Path $EvidenceRoot "evidence.json" + [IO.File]::WriteAllText( + $EvidencePath, + (($Evidence | ConvertTo-Json -Depth 6 -Compress) + "`n"), + [Text.UTF8Encoding]::new($false) + ) + if ((Get-Item -LiteralPath $EvidencePath).Length -gt 64KB) { throw "summary evidence exceeded 64 KiB" } + + - name: Upload bounded spike evidence + if: always() + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: installer-spike-${{ matrix.platform }}-py${{ matrix.python-version }}-${{ github.run_attempt }} + path: | + ${{ runner.temp }}/zagrosi-evidence/evidence.json + ${{ runner.temp }}/zagrosi-evidence/junit-platform.xml + ${{ runner.temp }}/zagrosi-evidence/junit-codex.xml + if-no-files-found: error + retention-days: 7 + compression-level: 9 + include-hidden-files: false diff --git a/.gitignore b/.gitignore index 1a30d84..01aa21c 100644 --- a/.gitignore +++ b/.gitignore @@ -7,7 +7,6 @@ build/ planning/ *.egg-info/ *.pyc -uv.lock .zagrosi-project/ .deep-project/ zagrosi_plan_config.json diff --git a/NOTICE.md b/NOTICE.md index f3ecc3d..fae5edf 100644 --- a/NOTICE.md +++ b/NOTICE.md @@ -37,3 +37,15 @@ Claude-specific workflow assumptions with Codex-native behavior: ## License Zagrosi Forge is distributed under the MIT License. See [LICENSE](LICENSE). + +## Vendored dependency + +Zagrosi Forge vendors the selected runtime tree from TOML Kit 0.15.0, licensed +under MIT. The verified upstream source artifact is +`https://files.pythonhosted.org/packages/51/db/03eaf4331631ef6b27d6e3c9b68c54dc6f0d63d87201fed600cc409307fd/tomlkit-0.15.0.tar.gz` +with SHA-256 +`7d1a9ecba3086638211b13814ea79c90dd54dd11993564376f3aa92271f5c7a3`. +Its copied license has SHA-256 +`f2f9b460ba719da6626add264d3782f275a4ff7aab677beda08b330911e23adb`. +See `src/zagrosi_forge/_vendor/vendor-receipt.json` for the exact selected-file +hashes and deterministic import transformation. diff --git a/build-constraints.txt b/build-constraints.txt new file mode 100644 index 0000000..71022bb --- /dev/null +++ b/build-constraints.txt @@ -0,0 +1,20 @@ +uv_build==0.11.28 \ + --hash=sha256:fb10719142d431087f5e177d43c83f304391084a28ea52e1588542fe0f113f91 \ + --hash=sha256:384a352d6b00df4824dcb56baa070498666795c3fd1b6d7377368649b695f864 \ + --hash=sha256:3ec5e107bb7128cd15c274f9562b966b038f6342cb7c94239c02e4f1809e7690 \ + --hash=sha256:5fb0d9e5e5b808d9ca3ed15356633b7e3ae00ae43f47e50e75eb72dddf98c6bc \ + --hash=sha256:7af5f0a4319832aefd4deeff5ef01df2809b71e0bfc897bab42c2670ec2fa21b \ + --hash=sha256:1a46aace1911c4502acc01c437a47602839b4dff91f58a3388998450f66cb5b1 \ + --hash=sha256:67b4d61a16886c8f4d91f987ea813630b80d1fb57f1bd5d2466591a72bb2a7af \ + --hash=sha256:fa4f2807129c852c2472e1fc2e1a2ba28018023a9349950cb19622fbb21156e4 \ + --hash=sha256:cb5265d4f692e30889d6ef81608041e970763c684919acdb41ed6af5c345296b \ + --hash=sha256:d99cb38411412134781140cc64dc7d296dbc383fa1e81ddc13ecb6863852ecf5 \ + --hash=sha256:a3b8bd731e57f1451de4ef15ade18d328a68b6cad173794eda8fafe2e912e997 \ + --hash=sha256:79091c7ee68a90ff44dd876c6d4b21d3c133015612ddecf9ade931779bfb4d92 \ + --hash=sha256:6c89dde2c9d3bbfde41fa92bd252a87ab016c7722a85331315151bd39a78a591 \ + --hash=sha256:2e57f0a02736b0b08f5d40b96be52be235de0898b58d00b0397485dffc55381b \ + --hash=sha256:75327189c71ad829fb1fb8d1b4be02b6b26aaf98e76c2817a68d16aa15c31a1d \ + --hash=sha256:75c1b66084502b42adbd1c6076347e2b97866030f81ecda5aac541499e928b6f \ + --hash=sha256:52ad1a230e2a0e7dfdf1fa6a93e40a94fcf3c390ab2aa44a7bd0d31b780d02ed \ + --hash=sha256:b5d4a79a0da94de28e2f2890782562e391d9936b686adf1403e671c355ad1370 \ + --hash=sha256:daba66fd25a9a82caa23949686e967cbb69fd056177e991650643186057adaef diff --git a/component-inventory.json b/component-inventory.json new file mode 100644 index 0000000..6f589c2 --- /dev/null +++ b/component-inventory.json @@ -0,0 +1 @@ +{"component_count":106,"components":[{"advisory_scope":"security","artifact_digests":["065665c041c42a5938ed220bdcd7230f22527fbec085e1853d2402c8a3615d9d","9243213661e29250eb41368e5daa826fc017156c3b8a11440826b2e3ed376472"],"kind":"locked-python","license":"NOASSERTION","name":"aiohappyeyeballs","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"2.7.1"},{"advisory_scope":"security","artifact_digests":["03ab4530fdcb3a543a122ba4b65ac9919da9fe9f78a03d328a6e38ff962f7aa5","07eabb979d236335fed927e137a928c9adfb7df3b9ec7aa31726f133a62be983","10ee9c1753a8f706345b22496c79fbddb5be0599e0823f3738b1534058e25340","1601cc37baf5750ccacae618ec2daf020769581695550e3b654a911f859c563d","1ac8531b638959718e18c2207fbfe297819875da46a740b29dfa29beba64355a","1b9748363260121d2927704f5d4fc498150669ca3ae93625986ee89c8f80dcd4","1c1421eb01d4fd608d88cc8290211d177a58532b55ad94076fb349c5bf467f0a","1c1af67559445498b502030c35c59db59966f47041ca9de5b4e707f86bd10b5f","1d459b98a932296c6f0e94f87511a0b1b90a8a02c30a50e60a297619cd5a58ee","20205f7f5ade7aaec9f4b500549bbc071b046453aed72f9c06dcab87896a83e8","237651caadc3a59badd39319c54642b5299e9cc98a3a194310e55d5bb9f5e397","250d14af67f6b6a1a4a811049b1afa69d61d617fca6bf33149b3ab1a6dbcf7b8","269b76ac5394092b95bc4a098f4fc6c191c083c3bd12775d1e30e663132f6a09","27fd7c91e51729b4f7e1577865fa6d34c9adccbc39aabe9000285b48af9f0ec2","2964cbf553df4d7a57348da44d961d871895fc1ee4e8c322b2a95612c7b17fba","2a73f487ab8ef5abbb24b7aa9b73e98eaba9e9e031804ff2416f02eca315ccaf","2aa92c87868cd13674989f9ee83e5f9f7ea4237589b728048e1f0c8f6caa3271","2b7edd08e0a5deb1e8564a2fcd8f4561014a3f05252334671bbf55ddd47db0e5","2c840c90759922cb5e6dda94596e079a30fb5a5ba548e7e0dc00574703940847","2f73e01dc37122325caf079982621262f96d74823c179038a82fddfc50359264","2fbc3ed048b3475b9f0cbcb9978e9d2d3511acd91ead203af26ed9f0056004cf","307f2cff90a764d329e77040603fa032db89c5c24fdad50c4c15334cba744035","313701e488100074ce99850404ee36e741abf6330179fec908a1944ecf570126","317acd9f8602858dc7d59679812c376c7f0b97bcbbf16e0d6237f54141d8a8a6","335c0cc3e3545ce98dcb9cfcb836f40c3411f43fa03dab757597d80c89af8a35","34b257ec41345c1e8f2df68fa908a7952f5de932723871eb633ecbbff396c9a4","367a9314fdc79dab0fac96e216cb41dd73c85bdca85306ce8999118ba7e0f333","38e1e7daaea81df51c952e18483f323d878499a1e2bfe564790e0f9701d6f203","3e6fc1a85fa7194a1a7d19f44e8609180f4a8eb5fa4c7ed8b4355f080fad235c","4132e72c608fe9fecb8f409113567605915b83e9bdd3ea56538d2f9cd35002f1","4691802dda97be727f79d86818acaad7eb8e9252626a1d6b519fedbb92d5e251","47ddf841cdecc810749921d25606dee45857d12d2ad5ddb7b5bd7eab12e4b365","486f7d16ed54c39c2cbd7ca71fd8ba2b8bb7860df65bd7b6ed640bab96a38a8b","4cd96b5ba05d67ed0cf00b5b405c8cd99586d8e3481e8ee0a831057591af7621","4d6e0ac9da31c9c04c84e1c0182ad8d6df35965a85cae29cd71d089621b3ae94","4dfd6e47d3c44c2279907607f73a4240b88c69eb8b90da7e2441a8045dfd21da","4fe1f1087cbadb280b5e1bb054a4f00d1423c74d6626c5e48400d871d34ecefe","5663ee9257cfa1add7253a7da3035a02f31b6600ec48261585e1800a81533080","5c0b3e614340c889d575451696374c9d17affd54cd607ca0babed8f8c37b9397","5e78b522b7a6e27e0b25d19b247b75039ac4c94f99823e3c9e53ae1603a9f7e9","5f2504bc0322437c9a1ff6d3333ca56c7477b727c995f036b976ae17b98372c8","603a2c834142172ffddc054067f5ec0ca65d57a0aa98a71bc81952573208e345","62a759436b29e677181a9e76bab8b8f689a29cb9c535f45f7c48c9c830d3f8c3","634e385930fb6d2d479cf3aa66515955863b77a5e3c2b5894ca259a25b308602","64c567bf9eaf664280116a8688f63016e6b32db2505908e2bdaca1b6438142f2","686b6c0d3911ec387b444ddf5dc62fb7f7c0a7d5186a7861626496a5ab4aff95","6f71173be42d3241d428f760122febb748de0623f44308a6f120d0dd9ec572e3","6ffbb2f4ec1ceaff7e07d43922954da26b223d188bf30658e561b98e23089444","73f05ea02013e02512c3bf42714f1208c57168c779cc6fe23516e4543089d0a6","764457a7be60825fb770a644852ff717bcbb5042f189f2bd16df61a81b3f6573","797457503c2d426bee06eef808d07b31ede30b65e054444e7de64cad0061b7af","7c106c26852ca1c2047c6b80384f17100b4e439af276f21ef3d4e2f450ae7e15","7fb4bdf95b0561a79f259f9d28fbc109728c5ee7f27aff6391f0ca703a329abe","819c054312f1af92947e6a55883d1b66feefab11531a7fc45e0fb9b63880b5c2","8560b4d712474335d08907db7973f71912d3a9a8f1dee992ec06b5d2fe359496","86a6dab78b0e43e2897a3bbe15745aa60dc5423ca437b7b0b164c069bf91b876","87a5eea1b2a5e21e1ebdbb33ad4165359189327e63fc4e4894693e7f821ac817","896e12dfdbbab9d8f7e16d2b28c6769a60126fa92095d1ebf9473d02593a2448","90d53f1609c29ccc2193945ef732428382a28f78d0456ae4d3daf0d48b74f0f6","915fbb7b41b115192259f8c9ae58f3ddc444d2b5579917270211858e606a4afd","93b032b5ec3255473c143627d21a69ac74ae12f7f33974cb587c564d11b1066f","979ed4717f59b8bb12e3963378fa285d93d367e15bcd66c721311826d3c44a6c","97e704dcd26271f5bda3fa07c3ce0fb76d6d3f8659f4baa1a24442cc9ba177ca","99abd37084b82f5830c635fddd0b4993b9742a66eb746dacf433c8590e8f9e3c","9af6779bfb46abf124068327abcdf9ce95c9ef8287a3e8da76ccf2d0f16c28fa","9e8f2d660c350b3d0e259c7a7e3d9b7fc8b41210cbcc3d4a7076ff0a5e5c2fdc","a24f677ebe83749039e7bdf862ff0bbb16818ae4193d4ef96505e269375bcce0","a9875b46d910cff3ea2f5962f9d266b465459fe634e22556ab9bd6fc1192eea0","aa00140699487bd435fde4342d85c94cb256b7cd3a5b9c3396c67f19922afda2","ae6be797afdef264e8a84864a85b196ca06045586481b3df8a967322fd2fa844","af8b4b81a960eeaf1234971ac3cd0ba5901f3cd42eae42a46b4d089a8b492719","b165790117eea512d7f3fb22f1f6dad3d55a7189571993eb015591c1401276d1","b3a03285a7f9c7b016324574a6d92a1c895da6b978cb8f1deee3ac72bc6da178","b6feea921016eb3d4e04d65fc4e9ca402d1a3801f562aef94989f54694917af3","b6ff7fcee63287ae57b5df3e4f5957ce032122802509246dec1a5bcc55904c95","b821a1f7dedf7e37450654e620038ac3b2e81e8fa6ea269337e97101978ec730","bb2c0c80d431c0d03f2c7dbf125150fedd4f0de17366a7ca33f7ccb822391842","bcfb80a2cc36fba2534e5e5b5264dc7ae6fcd9bf15256da3e53d2f499e6fa29d","bd869c427324e5cb15195793de951295710db28be7d818247f3097b4ab5d4b96","bedb0cd073cc2dc035e30aeb99444389d3cd2113afe4ef9fcd23d439f5bade85","c389c482a7e9b9dc3ee2701ac46c4125297a3818875b9c305ddb603c04828fd1","c6fa4dc7ad6f8109c70bb1499e589f76b0b792baf39f9b017eb92c8a81d0a199","c83afe0ba876be7e943d2e0ba645809ad441575d2840c895c21ee5de93b9377a","cb21957bb8aca671c1765e32f58164cf0c50e6bf41c0bbbd16da20732ecaf588","cf4491381b1b57425c315a56a439251b1bdac07b2275f19a8c44bc57744532ec","d03f281ed22579314ba00821ce20115a7c0ac430660b4cc05704a3f818b3e004","d35143e27778b4bb0fb189562d7f275bff79c62ab8e98459717c0ea617ff2480","d3b1a184a9a8f548a6b73f1e26b96b052193e4b3175ed7342aaf1151a1f00a04","d44ec478e713ee7f29b439f7eb8dc2b9d4079e11ae114d2c2ac3d5daf30516c8","de538791a80e5d862addbc183f70f0158ac9b9bb872bb147f1fd2a683691e087","e509a55f681e6158c20f70f102f9cf61fb20fbc382272bc6d94b7343f2582780","ec8dc383ee57ea3e883477dcca3f11b65d58199f1080acaf4cd6ad9a99698be4","ed09c7eb1c391271c2ed0314a51903e72a3acb653d5ccfc264cdf3ef11f8269d","eeea07c4397bbc57719c4eed8f9c284874d4f175f9b6d57f7a1546b976d455ca","eefd9cc9b6d4a2db5f00a26bc3e4f9acf71926a6ec557cd56c9c6f27c290b665","f234b4deb12f3ad59127e037bc57c40c21e45b45282df7d3a55a0f409f595296","f380468b09d2a81633ee863b0ec5648d364bd17bb8ecfb8c2f387f7ac1faf42c","f5e6ff2bdbb8f4cd3fbe41f99e25bbcd58e3bf9f13d3dd31a11e7917251cc77a","f7a16ef45b081454ef844502d87a848876c490c4cb5c650c230f6ec79ed2c1e7","faccab372e66bc76d5731525e7f1143c922271725b9d38c9f97edcc66266b451","fc0cacab7ba4e56f0f81c82a98c09bed2f39c940107b03a34b168bdf7597edd3"],"kind":"locked-python","license":"NOASSERTION","name":"aiohttp","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"3.14.1"},{"advisory_scope":"security","artifact_digests":["053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e","f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7"],"kind":"locked-python","license":"NOASSERTION","name":"aiosignal","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"1.4.0"},{"advisory_scope":"security","artifact_digests":["571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320","fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4"],"kind":"locked-python","license":"NOASSERTION","name":"annotated-doc","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"0.0.4"},{"advisory_scope":"security","artifact_digests":["1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53","aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"],"kind":"locked-python","license":"NOASSERTION","name":"annotated-types","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"0.7.0"},{"advisory_scope":"security","artifact_digests":["5fc248fbb9fe03ef686f8a774f81586bca31a043260aab88b387ea3660f4a396","6c0a7698e8d652455da3499978279bb2588c7264d0a35be3666009a4258c8256"],"kind":"locked-python","license":"NOASSERTION","name":"anthropic","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"0.116.0"},{"advisory_scope":"security","artifact_digests":["9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494","cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f"],"kind":"locked-python","license":"NOASSERTION","name":"anyio","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"4.14.2"},{"advisory_scope":"security","artifact_digests":["c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309","d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32"],"kind":"locked-python","license":"NOASSERTION","name":"attrs","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"26.1.0"},{"advisory_scope":"security","artifact_digests":["024c88eeec92ca068db80f02b8b07c9cef7b9fe261d1d535abfd5abd6f6af432","2227dcbaafe0d2f59279d1762ddddc37783ed4354594f194ffc31d20f41fc3db"],"kind":"locked-python","license":"NOASSERTION","name":"certifi","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"2026.6.17"},{"advisory_scope":"security","artifact_digests":["02cb7ff33ded4f1532476731f89ede53e2e488a8e6205515a82144246ffa7dcc","0582a58f3051372229ca8e7f5f589f9e5632678208d8636fea3676711fdf7fe5","0a96b74cda968eebbad56d973efe5098974f0a9fb323865bf99ea1fd24e3e64c","10537b1df4967ca26d21e5072d7d54188354483b91dc75058968d3f0cf13fbda","15faec4adfff450819f3aee0e2e02c812de6edb88203aa58807955db2003472a","1854b724d00f6654c742097d5387569021be12d3a0f770eae1df8f8acfcc6acd","1b96bfe2c4bd825681b7d311ad6d9b7280a091f43e8f63da5729638083cd3bfb","1e9f50d192a3e525b15a75ab5114e442d83d657b7ec29182a991bc9a88fd3a66","1ff3456eab0d889592d1936d6125bbfbc7ae4d3354a700f8bd80450a66445d4d","2282cd5e38aa8accd03e99d1256af8411c84cdbee6a89d841b563fdbd1f3e50f","276f20fffd7b396e12516ba8edf9509210ac248cbbc5acbc39cd512f9f59ebe6","30b65779d598c370374fefabf138d456fd6f3216bfa7bedfab1ba82025b0cd93","33eb1ad83ebe8f313e0df035c406227d55a79456704a863fad9842136af5ad7d","35aaea0c7ee0e58a5cd8c2fd1a48fdf7ece0d2699b7ecdda08194e9ce5dd9b3d","379de10ce1ba048b1448599d1b37b24caee16309d1ac98d3982fc997f768700b","3b926723c13eba9f81d2ef3820d63aeceec3b2d4639906047bf675cb8a7a500d","46b1c8db8f6122420f32d02fffb924c2fe9bc772d228c7c711748fff56aabb2b","47ff3a8bfd8cb9da1af7524b965127095055654c177fcfc7578debcb015eecd0","4f26194e3d95e06501b942642855aed4f953d55e95d7d01b7c4483db3ecff458","510aeeeac94811b138077451da1fb18b308a5feab47dd2b603af55804155e1c8","5972433ad71a9e46516584ef60a0fda12d9dc459938d1539c3ddecf9bdc1368d","5ecbd0499275d57506d397eebe1981cee87b47fcd9ef5c22cab7ed7644a39a94","63960549e4f8dc41e31accb97b975abaecfc44c03e396c093a6436763c2ea7db","64c753a0f87a256020004f37a1c8c02c480e725f910f0b2a0f3f07debd1b2479","6af371f3767faeffc6ac1ef57cdfd25844403e9d3f476c5537caee499de96376","6ca4919c6e4f89aa99c42510b42cf54596892c00b3f9077f6bdd1505e24b9c8d","6d194185eabd279f1c05ebe3504265ddfc5ad2b58d0714f7db9f01da592e9eb6","702c436735fbe99d59ada02a1f65cfc0d31c0ee8b7290912f8fbc5cd1e4b16c3","716ff8ec22f20b4d988b12884086bcef0fc99737043e503f7a3935a6be99b1ea","7762faa47e8ff7eb80bd261d9a7d8eea2d8baa69de5e95b70c1f338bbe712f02","78474632761faa0fb96f30b1c928c84ebcf68713cbb80d15bab09dfe61640fde","799416bae98336e400981ff6e532d67d5c709cfb30afb79865a1315f94b0e224","7d034dcffa09e9a46c93fa3a3be402096cb5354ac6e41ab8e5cc9cd8b642ad76","7d28dff1db6764108bc30788d85d61c876beff416d9a49cb9dd7c5a9f34f5804","7d5980a3433d4b71a5e120f9dd551403d7824e31e2e67124fe2769c404c06913","7ea6b3e2c4250ff1de21c630fe72d0f63eb95c2c32ffbf64a358cf4a8836d714","88023dfe18799507b73f1dbb0d14326a17465de1bc9c9c7655c22845e9ddc3a2","89095c1968b4ba8285840e131bf2891b09ae137fe2146905acae0354fbce1b5e","8e74a6135550c4748af665b1b1118b6aab33b1fc6a16f9aff630af107c3b4512","961be50688f7fba2fa65f63712d3b9b341a22311f5253460ce933f52f0de1c8c","98fff996e983a36d3aa2eca83af40c5821202e7e6f32d13ae94e3d2286f10cfe","9b8f0f26ca4e7513c534d351eca551947d053fac438f2a04ac96d882909b0d3a","9d8272c0e483b024e1b9ad029821470ed8ec65631dbd90217469da0e7cd89f1c","a5781494d4d400a3f47f8f1da94b324f6e6b440a53387774002890a2a2f4b50f","a95b05f9baf29b91171b3a8bd2020b028835243e7b0ff6bb23e2a3c228518b1b","aa7a1b53a2a4452ada2d1b5dade9960b2522f1e61293a811a077439e39029565","ac0f1a2d0cfa7eea3f2aaf006ab6e70e8feeb16b75d65b7e5939982ca2f11056","b6422532152adf4e59b110cb2808cee7a033800952f5c036b4af047ee43199e7","bf01d8c84cbea96b944c73b22182e6c7c432b3475632b8111dbfdc95ddad6e13","bf5c6cf48238b0eb4c086978c492ad1cbc22373fc5b2d7353b3a598ce6db887a","c16914df9fb7f500e440e6875fa23ff5e0b31db01fa9c06af98d59a91f0dc2e4","c351efb95e832a853a29361675f33a7ce53de1a109cd73fd47af0712213aa4ce","c4165821e131d6d4ca444347c2b694e2311bcfa3fe5a861cc72968f28867beac","c97f080ea627e2863524c5af3836e2270b5f5dfff1f104392b959f8df0c5d384","d2117334c3af3bdcb9a88522b844a2bdb5efdc4f71c6c822df55486ae1c3347a","d53d10f7da99ae46f7373b9150393e9c5eab9b224909982b43832668de4779f5","d9fafc5aa2e2a39aaf7f8cc0c1f044a9b07fca12e558dca53a3cc5c654ad67a7","db3eb7d46527159a878ec3460e9d40615bc25ba337d477db681aea6e4f05c5d2","dbf7c7a88e2bac086f06d14577332760bdeecc42bdec8ac4077f6260557d9326","df2b82571a1b30f58a87bf4e5a9e78d2b1eff6c6ce8fd3aa3757221f93f0863f","eb4e8997a49aa2c08a3e43c9045d224448b8941d88e7ac163c7d383e560cbf98","efc1cdd798b1aaf39b4610bba7aad28c9bea9b910f25c784ccf9ec1fa719d1f9","f5bce581e6b8c235e566a14768a943b172ada3ed73537bb0c0be1edee312d4e7","ff067a8d8d880e7809e4ac88eb009bb848870115317b306666502ccad30b147f"],"kind":"locked-python","license":"NOASSERTION","name":"cffi","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"2.1.0"},{"advisory_scope":"security","artifact_digests":["0327fcd59a935777d83410750c50600ee9571af2846f71ce40f25b13da1ef380","03d07803992c6c7bbc976327f34b18b6160327fc81cb82c9d504720ac0be3b62","04ce310cb89c15df659582aee80a0603788732a5e017d5bd5c81158106ce249c","0d861473f743244d349b50f850d10eb87aeb22bbdcc8e64f79273c94af5a8226","0e94703ec9684807f20cfb5eed95c70f67f2a8f21ad620146d7b5a13677b93e5","16b65ea0f2465b6fb52aa22de5eca612aa964ddfec00a912e26f4656cbef890b","19ac87f93086ce37b86e098888555c4b4bc48102279bae3350098c0ed664b501","1d22856ffbe153a602df38e4a5464f0b748a54002e0d69ac6d2ad0a197cc99ec","21e764fd1e70b6a3e205a0e46f3051701f98a8cb3fad66eeb80e48bb502f8698","280081916dc341820640489a66e4696049401ef1cf6dd672f672e70ad915aca3","2a441ea71902098ffe78c5abe6c494f44160b4af614ed16c3d9a3b1d17fd8ee2","304b13570067b2547562e308af560b3963857b1fa90bd6afd978130130fe2d6a","32286a2c8d167e897177b673176c1e3e00d4057caf5d2b64eef9a3666b03018e","33bdcc2a32c0a0e861f60841a512c8acc658c87c2ac59d89e3a46dacf7d866e4","3d92613ec25e43b05f042302531ec0f00b8445190e43325880cbd6ab7c2581da","40a126142a56b2dfc0aacbad1de8310cbf60da7656db0e6b16eebd48e3e93519","416c229f77e5ea25b3dfd4b582f8d73d7e43c22320302b9ab128a2d3a0b38efe","440eede837960000d74978f0eba527be106b5b9aee0daf779d395276ed0b0614","45b0cc4e3556cd875e09102988d1ab8356c998b596c9fced84547c8138b487a0","4773092f8019072343a7447203308b176e10199920eb02d6195e81bbb3274c29","4b3dac63058cc36820b0dd072f89898604e2d39686fe05321729d00d8ac185a0","4d1c96a7a18b9690a4d46df09e3e3382406ae3213727cd1019ebade1c4a81917","51307f5c71007673a2bf8232ad973483d281e74cb99c8c5a990af1eefa6277d9","51447e9aa2684679af07ca5021c3db526e0284347ebf4ffcec1154c3350cfe32","5b10cd92fc5c498b35a8635df6d5a100207f88b63a4dc1de7ef9a548e1e2cd63","5e226f6218febc71f6c1fc2fafb91c226f75bdc1d8fb12d66823716e891608fd","609b3ba8fcc0fb5ab7af00719d0fb6ad0cb518e48e7712d12fd68f1327951198","60f44ade2cf573dad7a277e6f8ca9a51a21dda572b13bd7d8539bb3cd5dbedde","611057cc5d5c0afc743ba8be6bd828c17e0aaa8643f9d0a9b9bb7dea80eb8012","6366a16e1a25018694d6a5d784d09b046edc9eac40ea2b54065c3052672516a1","673611bbd43f0810bec0b0f028ddeaaa501190339cac411f347ac76917c3ae7b","67830fc78e67501f47bb950471b2dcb9b35b140084429318e862895a8e89c993","68e5f26a1ad57ded6d1cfb85331d1c1a195314756471d97758c48498bb4dcdf5","69b157c5d3292bcd443faca052f3096f637f1e074b98212a933c074ae23dc3b8","75286256590a6320cf106a0d28970d3560aad9ee09aa7b34fb40524792436d35","78841cccf1af7b40f6f716338d50c0902dbe88d9f800b3c973b7a9a0a693a642","78fa18e436a1a0e58dbd7e02fc4473f3f32cceb12df9dfca542d075961c307d2","7b86a2b16095d250c6f58b3d9b2eee6f4147754344f3dab0922f7c9bf7d226c9","83aed2c10721ddd90f68140685391b50811a880af20654c59af6b6c66c40513c","84fd18bcc17526fc2b3c1af7d2b9217d32c9c04448c16ec693b9b4f1985c3d33","871ff67ea1aad4dfd91736464934d56b32dac49f9fbe16cddba36198a7b3a0db","898f0e9068ca27d37f8e83a5b962821df851532e6c4a7d615c1c033f9da6eedf","8a79d9f4d8001473a30c163556b3c3bfebec837495a412dde78b51672f6134f9","90c44bc373b7687f6948b693cceaea1348ae0975d7474746559494468e3c1d84","9104ed0bd76a429d46f9ec0dbc9b08ad1d2dcdf2b00a5a0daa1c145329b35b44","9b2aff1c7b3884512b9512c3eaadd9bab39fb45042ffaaa1dd08ff2b9f8109d9","9b8e0f3107e2200b76f6054de99016eac3ee6762713587b36baaa7e4bd2ae177","9cdef90ae47919cae358d8ab15797a800ed41da7aba5d72419fb510729e2ed4b","a1786910334ed46ab1dd73222f2cd1e05c2c3bb39f6dddb4f8b36fc382058a39","a4cfde78a9f2880208d16a93b795726a3017d5977e08d1e162a7a31322479c41","a4fbdde9dd4a9ce5fd52c2b3a347bb50cc89483ef783f1cb00d408c13f7a96c0","ac351b3b8014eead140e77e9717e2992c6bbe30b63bc3422422eb84865412e3d","bd47ba7fc3ca94896759ea0109775132d3e7ab921fbf54038e1bab2e46c313c9","c0323c9daef75ef2e5083624b4585018a0c9d5e3b40f607eed81a311270b934b","c1c948747b03be832dceed96ca815cef7360de9aa19d37c730f8e3f6101aca48","c25fe15c70c59eb7c5ce8c06a1f3fa1da0ecc5ea1e7a5922c40fd2fa9b0d5046","cc1b0fff8ead343dae06305f954eb8468ba0ec1a97881f42489d198e4ce3c632","cd6c3d4b783c556fa00bf540854e42f135e2f256abd29669fcd0da0f2dec79c2","d4d6fcde76f94f5cb9e43e9e9a61f16dacefd228cbbf6f1a09bd9b219a92f1a1","df115d4d83168fdf2cae48ef1ff6d1cb4c466364e30861b37121de0f3bf1b990","e4fd89cc178bced6ad29cb3e6dd4aa63fa5017c3524dbd0b25998fb64a87cc8b","ee2f2a527e3c1a6e6411eb4209642e138b544a2d72fe5d0d76daf77b24063534","f7fb7d750cfa0a070d2c24e831fd3481019a60dd317ea2b39acbcebc08b6ed81","f840ed6d8ecba8255df8c42b87fadeda98ddfc6eeec05e2dc66e26d46dd6f58a","f86c6358749bd4fda175388691e3ba8c46e24c5347d0afd20f9b7edfc9faf07d","fa36ec09ef71d158186bc79e359ff5fdd6e7996fe8ab638f00d6b93139ba4fcf","fe2c7201c642b7c308f1675355ad7ff7b66acfe3541625efe5a3ad38f29d6115"],"kind":"locked-python","license":"NOASSERTION","name":"charset-normalizer","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"3.4.9"},{"advisory_scope":"security","artifact_digests":["e49f979e97b7842549b1f531dc5f426c9780d798a0b21f0125044e3b5ae4a1f7","ebc98db3de689f820d1db365a2d783cfbacd9ed226723a399970bedd250c3672"],"kind":"locked-python","license":"NOASSERTION","name":"cisco-ai-skill-scanner","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"2.0.12"},{"advisory_scope":"security","artifact_digests":["9a6cea6e60b17ebe0a44c5cc636d94f09bd66142c1cd7d8b4cd731c4917a15f6","e6f9f66136c816745b9d65817da91d61d957fb16e02e4dcd0552553c5a197b76"],"kind":"locked-python","license":"NOASSERTION","name":"click","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"8.4.2"},{"advisory_scope":"security-and-test","artifact_digests":["08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44","4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"],"kind":"locked-python","license":"BSD-3-Clause","name":"colorama","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"0.4.6"},{"advisory_scope":"security","artifact_digests":["6d4fe287766166a98ca7bc6f6312daf04a0481b1eda43e7173484051c0ab4366","6f10c273a0ef7a1150b1120b6095cbdd68e5cf36dfd5d0fc957a2500bbf99a55"],"kind":"locked-python","license":"NOASSERTION","name":"colorclass","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"2.2.2"},{"advisory_scope":"security","artifact_digests":["84c92cb79dc7f55aa290d0762b2349abd8dee4c16fbe6f99eac978d394e2e6a1","b995001c9b2e1b4cea0cf5f3840a7c79188a8cbbad053d693572bd8c1c1ec460"],"kind":"locked-python","license":"NOASSERTION","name":"confusable-homoglyphs","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"3.3.1"},{"advisory_scope":"security","artifact_digests":["026ac7423e6fa66872d3bf889be5974507da3944f866f704fa200eadacd00001","07cab27cc7b7e0fd28e5e26bb9eeedde5c135c868b46de4a27845abe94af6122","084ef1af862eb07ec46d25f68689f2102a9fc0e05ce7b80f14f5fe51e4eef0f6","0b82e28ee398a386f0807bba7884d30f25218855690f45115831bcce5d90822c","0e959b578856a3924bc0cbb710fc12c387b9412a951389f3ca61704a9e25f325","0f21641cf4b30fca7aee061ced0ec7ad7b073518088b7c9969a297c0ae796c69","196ecd6a36e4e9aa10270393bb98d8df88fccee0bf1e5128b91ae4eb4375896d","2400ef9c9e2299a25614eb1dea3db54a69b1349efd043bfac9c67630d136df36","28d8b15e6275f12c8a207dc309dfa957903c927d08d0cc937ee3f63f200693cc","2afe9051da7ae7bd5905da5a949280c7d2bb75682e188f650a9d0f2756b834c6","2eda353d8a27bcbcaa4cbed18994a74ab4d19a2ca897db188ea269ab9b71419b","32703d93296f5c1f4b53349ad3a250c2cae0fdecd3a3dd5d47e616d8d616af27","33cd0565932807baddb67b96dbee92f2c374b5c89dee09fd74079aeb8c8dba61","35b151772baff2c74cba7fa290ceaff4c3b11c0c881eb93eb5dbc05a7cfbba18","36d1709f992593689b45bda411498d62c6e365f2ca00b84657d4dadd24de16db","42b0684e0e40cf26122427802486f6d93aea593612603a94fbf260c7eb1e9c1b","4ae387c9cb68ea569ca17e490d66d8142b81c3cc814bf179974b7d146e490bbb","53ecee2e23f7169b6117e99fc8a944e5e50f79e69758a83b52a00cb98ab2b2d2","66ec79c3904820572d7e987abdf304281f141d37ad9a489b8e97066e7b9b6459","67e1d20ad9ef3a563c59ef22e7a8a0b8210bd26604369ea4a30a7c66aefe504e","6f2debedf9ca60cf1d5bd466475638af5130f89965605cd818484d19987d3a21","6fc361c34fb6aac015ce19435876635e5c6d21db31998b0920f675f131e043b8","73a205dce83953d131a4aa1e0fd917a2fd1c5b1eef251e9d7152efefcbf5caf7","7abcee80084cda3f7691f3eb1ce480d8df49cec637b429aa35986c1de71738aa","8c25ceb16df5b9435f3f6a9829204985b0e0cbee3b48aacd432c7d2c850b44d9","966fe0e9c67490071f14c0d2b1cb2dfb3023c5ce39457343931415f08382f2db","9e82dcc8e56052715fb18b2429e3bca4823b1629136a2084fc45a9a5cecb9b64","b20133d204d2bb56ba047642199603876c872026ca53e79c35b83772ab2cc505","b39efa323140595abd3ecca8529d321ae50f55f3aa3ba9cc81ea56a6011953d5","b47db11c2c3525083296069b98ac5221907455e989ae0c2e3008bde851921615","b87e65d263b3e5d3bb92a57e2a6638e2f31110fa7aa890c7b2dbba42248d0a3f","b970c6da94d5bb18629db453d14f2a1300f6bf59b61e9b82377931ef95504866","be9fcb48a55f023493482827d4f459bd263cc20efde64f204b97c123201850c6","c2bc30226390d60ea19d9f82b19db005fe0452154a23c1c410c12ea801e43561","c83782480a4a9da4d0feb51950131ba32e12e70813848b3343f6e18c28a66838","cbc77da8c523d5abd028635ba850a6966fcee2c82e2bf65a41d1d8afe0f98be9","ccac2bfebc306b862133e3bb71f3f6ee8bb525240089b2d952e4144b3a6d5da7","d0527ce944105f257f605a827d6ebead966c752038b6e8656abb9c5edee6fc68","d8ecde755e2e91bf773fc94e8c9d730cd7f2007004cb492263a794ec3899a1c8","e3fb64c420688e5319ae25113a354015abbd8dffbfbc41781a1ea66fc7622ac3","e5dfc1e64de5677cec922ffa8da89c546d0415bf6efdf081842e5d44c84e1f0e","ec5e529fb80935c94fe7b729f9972b50e351a0e6b50aa294fd5cabb109fcc29a","f37d847238971164fdbc68ade6f6574aecc9c0af714190e2083429ff68f4ce9d","f78ff2c9ed8dc2d036b0f4d640e22522213d047c1b14e61205a7e55c80a494d4","f89660a348f4f78a92366240a61404e337586ef7f5909a2fef59ca88ef505493","fc1e275c2f1d97b1a6450b8b0ea3ebfa6e087a611c2b26cb2404d48588abab7b"],"kind":"locked-python","license":"NOASSERTION","name":"cryptography","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"49.0.0"},{"advisory_scope":"security","artifact_digests":["2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed","7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2"],"kind":"locked-python","license":"NOASSERTION","name":"distro","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"1.9.0"},{"advisory_scope":"security","artifact_digests":["292510982205c12b1248696f44959db3cdd1740237a968ea1e2e7a900eeb2015","b3fcbed555c47d8479be0796ef7e19c2670d428d72e96da63f3a40122860374b"],"kind":"locked-python","license":"NOASSERTION","name":"docstring-parser","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"0.18.0"},{"advisory_scope":"security","artifact_digests":["33498710c68b5376b459cd3fc48d1d1f33822139eb3ed01defbc0528326da3ba","d653ff79ee1f42f63b5a090f2f98ce02335d86ad8963b3ce2661805cafe99a04"],"kind":"locked-python","license":"NOASSERTION","name":"easygui","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"0.98.3"},{"advisory_scope":"security","artifact_digests":["99ab7b2d92223c76d6cf10757ab3f89d45b38267fc20b2a136cf02f6beac3145","cf15e1e9e667ddb0ad63811e60bd11390d1aac838ca4a7a23f421807b2308189"],"kind":"locked-python","license":"NOASSERTION","name":"fastapi","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"0.139.0"},{"advisory_scope":"security","artifact_digests":["05a8dde1f395e0c9b4be515b7a521403d1e8349443e7641761af07c7ad1624b1","09098762aad4f8da3a888eb9ae01c84430c907a297b97166b8abc07b640f2995","09378a05020e3e4883dfdab438926f31fea15fd17604908f3d39cbeb22a0b4dc","0c9ec605ace243b6dbe3bd27ebdd5d33b00d8d1d3f580b39fdd15cd96fd71796","0df14e92e7ad3276327631c9e7cec09e32572ce82089c55cb1bb8df71cf394ed","12ac85024637586a5b69645e7ed986f7535106ed3013640a393a03e461740cb7","1383fff584fa249b16329a059c68ad45d030d5a4b70fb7c73a08d98fd53bcdab","178947fc2f995b38497a74172adee64fdeb8b7ec18f2a5934d037641ba265d26","1bf539a7a95f35b419f9ad105d5a8a35036df35fdafae48fb2fd2e5f318f0d75","1ca61b592120cf314cfd66e662a5b54a578c5a15b26305e1b8b618a6f22df714","1e3cc56742f76cd25ecb98e4b82a25f978ccffba02e4bdce8aba857b6d85d87b","1e690d48f923c253f28151b3a6b4e335f2b06bf669c68a02665bc150b7839e94","2b29e23c97e77c3a9514d70ce343571e469098ac7f5a269320a0f0b3e193ab36","2fb3c0d7fef6674bbeacdd6dbd386924a7b60b26de849266d1ff6602937675c8","33e678459cf4addaedd9936bbb038e35b3f6b2061330fd8f2f6a1d80414c0f87","3acdf655684cc09e60fb7e4cf524e8f42ea760031945aa8086c7eae2eeeabeb8","73946cb950c8caf65127d4e9a325e2b6be0442a224fd51ba3b6ac44e1912ce34","77a09cb7427e7af74c594e409f7731a0cf887221de2f698e1ca0ebf0f3139021","77e94728324b63660ebf8adb27055e92d2e4611645bf12ed9d88d30486471d0a","808527f2407f58a76c916d6aa15d58692a4a019fdf8d4c32ac7ff303b7d7af09","9579618be6280700ae36ac42c3efd157049fe4dd40ca49b021280481c78c3176","9a133bf9cc78fdbd1179cb58a59ad0100aa32d8675508150f3658814aeefeaa4","9bd57289daf7b153bfa3e8013446aa144ce5e8c825e9e366d455155ede5ea2dc","a0809f8cc5731c066c909047f9a314d5f536c871a7a22e815cc4967c110ac9ad","a6f46790d59ab38c6aa0e35c681c0484b50dc0acf9e2679c005d61e019313c24","a8a0dfea3972200f72d4c7df02c8ac70bad1bb4c58d7e0ec1e6f341679073a7f","aa75b6657ec129d0abded3bec745e6f7ab642e6dba3a5272a68247e85f5f316f","ab32f74bd56565b186f036e33129da77db8be09178cd2f5206a5d4035fb2a23f","ab3f5d36e4393e628a4df337c2c039069344db5f4b9d2a3c9cea48284f1dd741","ac60fc860cdf3c3f327374db87ab8e064c86566ca8c49d2e30df15eda1b0c2d5","b852a870a61cfc26c884af205d502881a2e59cc07076b60ab4a951cc0c94d1ad","b9a0ca4f03b7e0b01425281ffd44e99d360e15c895f1907ca105854ed85e2057","bbb0c4b15d66b435d2538f3827f05e44e2baafcc003dd7d8472dc67807ab8fd8","c0a94245afae4d7af8c43b3159d5e3934c53f47140be0be624b96acd672ceb73","c7502d6f54cd08024c3ea9b3514e2d6f190feb2f46e6dbcd3747882264bb5f7b","caa1f14d2102cb8d353096bc6ef6c13b2c81f347e6ab9d6fbd48b9dea41c153d","cb9a030f609194b679e1660f7e32733b7a0f332d519c5d5a6a0a580991290022","cd5a7f648d4365b41dbf0e38fe8da4884e57bed4e77c83598e076ac0c93995e7","d23ef06f9e67163be38cece704170486715b177f6baae338110983f99a72c070","d9e4332dc4ba054434a9594cbfaf7823b57993d7d8e7267831c3e059857cf397","df61342889d0f5e7a32f7284e55ef95103f2110fee433c2ae7c2c0956d76ac8a","e150eab56c95dc9e3fefc234a0eedb342fac433dacc273cd4d150a5b0871e1fa","e23fc6a83f112de4be0cc1990e5b127c27663ae43f866353166f87df58e73d06","ec27778c6ca3393ef662e2762dba8af13f4ec1aaa32d08d77f71f2a70ae9feb8","f54d5b36c56a2d5e1a31e73b950b28a0d83eb0c37b91d10408875a5a29494bad"],"kind":"locked-python","license":"NOASSERTION","name":"fastuuid","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"0.14.0"},{"advisory_scope":"security","artifact_digests":["5b481979797ae69e72f0b389d89a80bdd585c260c5b3f1fb9c0a5ba9bb3f195d","987db6f789a3a2a59f55081801b2b3697cb97e2a736b5f1a9e99b559285fbc51"],"kind":"locked-python","license":"NOASSERTION","name":"filelock","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"3.29.7"},{"advisory_scope":"security","artifact_digests":["7634f50c427838bb021c2d66a3d1168e9d199b0607e6329399f04846d42e20b4"],"kind":"locked-python","license":"NOASSERTION","name":"flatbuffers","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"25.12.19"},{"advisory_scope":"security","artifact_digests":["0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686","032efa2674356903cd0261c4317a561a6850f3ac864a63fc1583147fb05a79b0","03ae967b4e297f58f8c774c7eabcce57fe3c2434817d4385c50661845a058121","06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd","073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7","07cdca25a91a4386d2e76ad992916a85038a9b97561bf7a3fd12d5d9ce31870c","09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84","0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d","0f96534f8bfebc1a394209427d0f8a63d343c9779cda6fc25e8e121b5fd8555b","102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79","11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967","119fb2a1bd47307e899c2fac7f28e85b9a543864df47aa7ec9d3c1b4545f096f","154e55ec0655291b5dd1b8731c637ecdb50975a2ae70c606d100750a540082f7","168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef","17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9","1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd","21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed","229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b","2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f","27c6e8077956cf73eadd514be8fb04d77fc946a7fe9f7fe167648b0b9085cc25","28bd570e8e189d7f7b001966435f9dac6718324b5be2990ac496cf1ea9ddb7fe","294e487f9ec720bd8ffcebc99d575f7eff3568a08a253d1ee1a0378754b74143","29548f9b5b5e3460ce7378144c3010363d8035cea44bc0bf02d57f5a685e084e","2c5dcbbc55383e5883246d11fd179782a9d07a986c40f49abe89ddf865913930","2dc43a022e555de94c3b68a4ef0b11c4f747d12c024a520c7101709a2144fb37","2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128","33139dc858c580ea50e7e60a1b0ea003efa1fd42e6ec7fdbad78fff65fad2fd2","33f48f51a446114bc5d251fb2954ab0164d5be02ad3382abcbfe07e2531d650f","34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746","342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df","3462dd9475af2025c31cc61be6652dfa25cbfb56cbbf52f4ccfe029f38decaf8","39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c","3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0","3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad","3ef2d026f16a2b1866e1d86fc4e1291e1ed8a387b2c333809419a2f8b3a77b82","405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29","4314debad13beb564b708b4a496020e5306c7333fa9a3ab90374169a20ffab30","433403ae80709741ce34038da08511d4a77062aa924baf411ef73d1146e74faf","44389d135b3ff43ba8cc89ff7f51f5a0bb6b63d829c8300f79a2fe4fe61bcc62","494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383","4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c","4e0c11f2cc6717e0a741f84a527c52616140741cd812a50422f83dc31749fb52","50066c3997d0091c411a66e710f4e11752251e6d2d73d70d8d5d4c76442a199d","517279f58009d0b1f2e7c1b130b377a349405da3f7621ed6bfae50b10adf20c1","54b2077180eb7f83dd52c40b2750d0a9f175e06a42e3213ce047219de902717a","5500ef82073f599ac84d888e3a8c1f77ac831183244bfd7f11eaa0289fb30714","581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65","5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506","5d63a068f978fc69421fb0e6eb91a9603187527c86b7cd3f534a5b77a592b888","6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41","74c51543498289c0c43656701be6b077f4b265868fa7f8a8859c197006efb608","776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa","778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8","78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1","8009897cdef112072f93a0efdce29cd819e717fd2f649ee3016efd3cd885a7ed","8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52","878be833caa6a3821caf85eb39c5ba92d28e85df26d57afb06b35b2efd937231","8b7b94a067d1c504ee0b16def57ad5738701e4ba10cec90529f13fa03c833496","8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a","908bd3f6439f2fef9e85031b59fd4f1297af54415fb60e4254a95f75b3cab3f3","92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24","957e7c38f250991e48a9a73e6423db1bb9dd14e722a10f6b8bb8e16a0f55f695","96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7","96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4","97260ff46b207a82a7567b581ab4190bd4dfa09f4db8a8b49d1a958f6aa4940e","974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e","ac913f8403b36a2c8610bbfd25b8013488533e71e62b4b4adce9c86c8cea905b","b2a095d45c5d46e5e79ba1e5b9cb787f541a8dee0433836cea4b96a2c439dcd8","b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51","b4dec9482a65c54a5044486847b8a66bf10c9cb4926d42927ec4e8fd5db7fed8","b6db2185db9be0a04fecf2f241c70b63b1a242e2805be291855078f2b404dd6b","bac9c42ba2ac65ddc115d930c78d24ab8d4f465fd3fc473cdedfccadb9429806","bf0a7e10b077bf5fb9380ad3ae8ce20ef919a6ad93b4552896419ac7e1d8e042","c4c800524c9cd9bac5166cd6f55285957fcfc907db323e193f2afcd4d9abd69b","c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d","c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567","cb89a7f2de3602cfed448095bab3f178399646ab7c61454315089787df07733a","cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2","cee686f1f4cadeb2136007ddedd0aaf928ab95216e7691c63e50a8ec066336d0","cf253e0e1c3ceb4aaff6df637ce033ff6535fb8c70a764a8f46aafd3d6ab798e","d1eaff1d00c7751b7c6662e9c5ba6eb2c17a2306ba5e2a37f24ddf3cc953402b","d3bb933317c52d7ea5004a1c442eef86f426886fba134ef8cf4226ea6ee1821d","d4d3214a0f8394edfa3e303136d0575eece0745ff2b47bd2cb2e66dd92d4351a","d6a5df73acd3399d893dafc71663ad22534b5aa4f94e8a2fabfe856c3c1b6a52","db1e72ede2d0d7ccb213f218df6a078a9c09a7de257c2fe8fcef16d5925230b1","e25ac20a2ef37e91c1b39938b591457666a0fa835c7783c3a8f33ea42870db94","eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822","eab8145831a0d56ec9c4139b6c3e594c7a83c2c8be25d5bcf2d86136a532287a","ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11","edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581","eefdba20de0d938cec6a89bd4d70f346a03108a19b9df4248d3cf0d88f1b0f51","f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40","f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92","f6292f1de555ffcc675941d65fffffb0a5bcd992905015f85d0592201793e0e5","f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4","fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93","fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027","fe3c58d2f5db5fbd18c2987cba06d51b0529f52bc3a6cdc33d3f4eab725104bd"],"kind":"locked-python","license":"NOASSERTION","name":"frozenlist","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"1.8.0"},{"advisory_scope":"security","artifact_digests":["02e0b71817df9b2169dc30a16832045764def1191b43dcff5bb85bdee212d2a1","f5bac145310fe30e16e1471bd6840b2d990d609e872251d7e674241822abf01a"],"kind":"locked-python","license":"NOASSERTION","name":"fsspec","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"2026.6.0"},{"advisory_scope":"security","artifact_digests":["4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1","63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"],"kind":"locked-python","license":"NOASSERTION","name":"h11","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"0.16.0"},{"advisory_scope":"security","artifact_digests":["0c97106032ef70467b4f6bc2d0ccc266d7613ee076afc56516c502f87ce1c4a6","3474760d10e3bb6f92ff3f024fcb00c0b3e4001e9b035c7483e49a5dd17aa70f","4f561cbbb92f80960772059864b7fb07eae879adde1b2e781ec6f86f6ac26c59","51ef4500dab3764b41135ee1381a4b62ce56fc54d4c92b719b59e597d6df5bf6","6071d5ccb4d8d2cbd5fea5cc798da4f0ba3f44e25369591c4e89a4987050e61d","6208adb15d192b90e4c2ad2a27ed864359b2cb0f2494eb6d7c7f3699ac02e2bf","6762d89b9e3267dfd502b29b2a327b4525f33b17e7b509a78d94e2151a30ce30","6abd35c3221eff63836618ddfb954dcf84798603f71d8e33e3ed7b04acfdbe6e","6f7a04a8ad962422e225bc49fbbac99dc1806764b1f3e54dbd154bffa7593947","8298485c1e36e7e67cbd01eeb1376619b7af43d4f1ec245caae306f890a8a32d","892e3a3a3aecc12aded8b93cf4f9cd059282c7de0732f7d55026f3abdf474350","93d090b57b211133f6c0dab0205ef5cb6d89162979ba75a74845045cc3063b8e","94e761bbd266bf4c03cee73753916062665ce8365aa40ed321f45afcb934b41e","97f212a88d14bbf573619a74b7fecb238de77d08fc702e54dec6f78276ca3283","a93df2039190502835b1db8cd7e178b0b7b889fe9ab51299d5ced26e0dd879a4","bf67e6ed10260cef62e852789dc91ebb03f382d5bdc4b1dbeb64763ea275e7d6","c6b6cd08ca095058780b50b8ce4d6cbf6787bcf27841705d58a9d32246e3e47a","d48199c2bf4f8df0adc55d31d1368b6ec0e4d4f45bc86b08038089c23db0bed8","dbf48c0d02cf0b2e568944330c60d9120c272dabe013bd892d48e25bc6797577","e1af0de8ca6f190d4294a28b88023db64a1e2d1d719cab044baf75bec569e7a9","e78e4e5192ad2b674c2e1160b651cb9134db974f8ae1835bdfbfb0166b894a43","e7dbb40617410f432182d918e37c12303fe6700fd6aa6c5964e30a535a4461d6","f4ad3ebd4c32dd2b27099d69dc7b2df821e30767e46fb6ee6a0713778243b8ff","f61e3665892a6c8c5e765395838b8ddf36185da835253d4bc4509a81e49fb342","f7b3002f95d1c13e24bcb4537baa8f0eb3838957067c91bb4959bc004a6435f5"],"kind":"locked-python","license":"NOASSERTION","name":"hf-xet","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"1.5.1"},{"advisory_scope":"security","artifact_digests":["2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55","6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8"],"kind":"locked-python","license":"NOASSERTION","name":"httpcore","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"1.0.9"},{"advisory_scope":"security","artifact_digests":["0770728beb05094c809b98e814edff5fef69d26ad7d21185f2f6d5884a0ba683","159e9ab5f701ccd42e555a12f1ad8ff69702910fc1c996cf2bb66e5fcb7a231b","19d1ee275bb59ba2643ba9a3a1e51cc0c788caf2b8df506368e03f56fdd08527","20b4aac66ff65f7db06a375808b78f42a94970aa22e826b3cb2b43eb09174124","2a021c3a8e65cc125390d72f59b968afca3bdcaff25bd67965e0a055a14946ca","2c032fa028f46871ec7e1fc59fc15e8023eab3e6bbe6ece786a1611719a5d081","2d689918c15a013c65ef52d9fd495d766893ab831a2c8d89f2ac5940a5df847c","384c17174464c8e873398b7af24f0b1f44d992c820328413951a625323155d77","425f83884fd6343828d8c565f046cb72b6d19063f6924093e11bcd8e1548cd09","48774d39cbb70e2b1f71f88852a3087ae1d3a1eb80482bb48c13067ab080c14f","52dd695b865fe96d9d2b16b64a895f3f57bf3cb064e8383cd3b5713a069e8085","57278e6fa0424c42a8a3e454828ab4f0aff27b40cddf9679579b98c6dce6a376","5931891fb7b441b8a3853cf1b85c82c903defce084dd5f6771ca46e31bf862c5","614ceea8ea606848bece2338ac03b3ce5324bcb4be8dc7d377ed708012fa4db8","6a43c9dd399758ccc0531acb0a3c4a6c299ee893ee9400e9c893b7bdcfae0681","6b2a32f18d97e16e90827d7a819ffa8dbd8cc245fc4e1fa9d1095b54ef4bd999","7685df791fad561384bfb139e77fde27a1ffd93134e016f95a0db424ffbf77b1","880490234c10f70a9830743097e8958d6e4b9f5a0ffc24515023afeef984054d","88bdd940f2b5d487b4d032c6afa5489a7dc4694410d43de3c38c4fb3af0dc45d","88eead8ec8680a9f146c655bc88445a325bd7921cfd8194c7337e9467282427d","9518c406d7b310f05adb1a37f80acabac40504a575d7c0da6d3e365c695ac20d","a1afd7c9fbff0d9f5d489c4ce2768bd09c84a46ddefc7161e6aa82ae35c85745","a1b4c8e7a489a0d750d91894e9a8cdc295838f1924c0ca903ae993456fddec07","a3b7387147361c3fd47a0bde763c5c91b5b4cd4dc9989b8ece84ff436c99843b","b15fc622b0f869d19207c4089a501d9bcc63ca5e071ffdd2f03f922df882dcb2","bbb8caadb2b742d293169d2b458b5c001ef70e3158704aa3d3ef9597624c5d1d","c4a9f1707e4823d54dfec6c33fa3697d302aed536ed352a7ebb5a061ddb869d0","cd96f29b4bab1d42fa6e3d008711c75e0f79e94e06827330160e3a304227f150","d76ad7b951387e3632c8716a9bb03ac5b45c5f16119aa409db0459520887944e","de1ed58a974e75d56560acc7e7fed01a454994429456f65209789992e41f2568","de242a49b5d18e0a8776e654e9f6bf6d89f3875a5c35b425a0e7ce940feb3fd6","e93c227b595c6926c1acee96891dd9da4be338cfbe82e5cd3bb9d8dd7dc4ac0b","eb3028cca2fc0a6d720e52ef61d8ebb62fcbfeb1de56874546d858d3f25a26b7","ed377e64805bdba4943c82717333f8f8603a13b09aff9cead2717c6c817fb168","ef7c3c97f4311c7be57e2986629df89d49cb434dbff78eafcd48c2bff986b15a","f256d6ce930c52ca1cb2a960b7da03548c454e7d28b06059ad41bfe789036ce0"],"kind":"locked-python","license":"NOASSERTION","name":"httptools","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"0.8.0"},{"advisory_scope":"security","artifact_digests":["75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc","d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"],"kind":"locked-python","license":"NOASSERTION","name":"httpx","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"0.28.1"},{"advisory_scope":"security","artifact_digests":["b1d604788f5adc7f0eb246e03e0ec19011ca06e38400218c347dccc3dffa64a2","c04997fb8bbdace1e57b7703d30ed7678af51f70d00d241819ff411b92ae9a88"],"kind":"locked-python","license":"NOASSERTION","name":"huggingface-hub","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"1.23.0"},{"advisory_scope":"test","artifact_digests":["01bb8270c46b3ef53b0c2d23ff613ea506d609d06f936d823ea57c58b66b05f7","050c8c0815f88d47dd0875a92698d20d61639b7b721ee043a6d687c7f14ff7d8","07f2bc9df1aeba80e12029c1618e2ee54abc440068c305d7075ffd6b85251843","08796b674c0b31a5dd4119b2173823390055921588d13eb77324e861b00fd7f8","1f81163d36d3763b09ffaef7c3a71e88174ca3e6816201fca9d1d159f448fdb5","2d47054d0230f0dd9b6868fc030126c7a6c25527144272ff376cc4e9c39f7540","32710718c22fe8c5571464e898bb87d282837b02617d6ad68130abf7cb4843cb","34a70a7b8226e34d658072d8fb81d03f97f0a75ceb536329a321b94ce2232fd6","38cd0c4a7b9f809f1e23a4d15adfa9c5d99869b9afc327350a5e563350b78e48","38ed3178526382d392d04ad699ad7a2e53845e521a09d40f1cbbc1e1ff63ba48","42760873d6db1069d6edbaa355a61b9078a9950259efcfc72fc695741d7db7cd","455f09107ec07c78f2a83cb8fc19e23879c9d51cdc831de6f9cb6ec4059cb9af","4c108655960b58ded3ca71b2dc5c69fb2ba7e9c723aeb6106facec3892d09087","4ca8cc26ea2d31d22cf7710e92951cfaa921f0f8aa1b6db33a5176335f583a4f","5291bd33c4704d274d7c214d5c200e77f372a06644f5cbbe96dcbe53cb2fbf10","556b905767e36147918634a64356aa05d8c956576f00aee01eb351678f193908","55f3ec50161b4a95bae63bff2b5166e45935b493013d3be30ede279bf6192318","59a8def90d9a5a9b67e1ac529e903a2363ceb6cf873c209da6b4284c5daab671","5ad94e28aabf4db0d479297d43b8a2a01e7caaa9bdfccfdac7a4a3717e05b993","5baec7943a14d106e982121dd4f74cfc5ef45e37c17f94fe49338d3d1377f38c","5bfa3c7b758f7278081c6bfec5f89b43c4eb075c0c9eb095323f7a9eb019b513","5e0afdf79cceed20fcf0a9fb80d4064a9b2b53d4d4eecbac0e21208a13f5a31b","74137bef6d502305c3648b2ed1a9bb4bc05fb1025e96b30a2c092204c40fe097","7489b9a8f9df8227edd6c7cd8b9ccfab2483bab24da6a474c175973ca2294f58","7baca17f4803ad4aa151732326f3990baf54c3127df44aa872ac5bdf8a98a9a6","7c8d37bebb6924729bc0bbf5852689df568842948abe4d93dd0ad3377adf76fa","8083806645f84243aade727f4978185caaa0b7190af4318673999ee15fdbf424","84dc89caaf741a02f904ca7bd02b1af99650c75552868162290208aeecb70858","8893b4da90e06828846c1b100c3414a7729d047a020d854c0899ae9339df0e70","9367ae25dfa6dc1af37904785e43c4f8fe1c4118cafdc2f06514154fbdd90992","96de02faefa3ce079873541da96f42595583bb001e8e4219294ed7d4501cc4cc","983a5cfd955994bffc7eb02976241f7a1f3c2d94dbc3389430c45858fa5c1ae0","a2a728b514fceb81e3f0464508911d5220fd74dadc3270f859427a686b60c4cf","a922eedcd8618f9c2e17b79fa7b3f3f0b2df34e201958611cc3f0f46cca33c10","b4e66aaa7385538a5d617174d47c198ee807f06de99e282a67c6cb724c69340d","b5f519905ddeb10e23b8ba2c254541a5b1a8f146fe0551be94d972f4a77226f4","b7fc0b7df9b28d028e4cc295b2ac8fbbbc22e090a23382c92fff5e37696be74f","c3363d3fb8015594636689572510bb6090602d8e8e838a5693c2d52d3b5b09d8","c3f2604b28d16d696aaaf4954d20f907b27e54034df98e64746a20c74c319f03","c574c3224563d730848bc5d1ef1683c4f83993400c0167899fe328f4bfcd4725","c76634c45a3ceee4c4fdfed39aebd08b8b822ec8b0c556877ef82846fd777730","caf6a93d011c10972da111c38ceb34ced20feaa8581e2b350c0655b022e27875","cbc2ec7b7d905e6b6ec1635f6340bfa52aaab718101c59f052bc012a6b486cd8","d0db1f4573800c618773622f03cb6533bb3377430ef938c9476ba10c39d22591","d4ea6559c13606e13b645927f2e0906e52b5ac5d99b40d3abaaeb2e8c7ceeb75","e96570ca5cdd9a5f2ff9e80a6fb2fd5420ebf33b833d7de5b09b6ebb26a3eb6c","eb7e9f8343bc6b948937e6ec12e6879ed25a17b53ceccbd2b84adadd3d511698","f0d73edab7b8a0051b3634f2d04d62b7e7282f8f274963b11188ee4957d672ef","f1969646beead7d8cf6a2537d2765af89d73056e2cb218e7fae92b83802250a3","f9631cd604ae6032c3edf99160dc1b9e33873f2e52762246b24f07fb758652ae","ffe012ad66dbe7b8e8ddef6f6992ab1b36719ea64430c2bf1ff7135521052a15"],"kind":"locked-python","license":"MPL-2.0","name":"hypothesis","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"6.156.6"},{"advisory_scope":"security","artifact_digests":["7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2","ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848"],"kind":"locked-python","license":"NOASSERTION","name":"idna","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"3.18"},{"advisory_scope":"security","artifact_digests":["58850626cef4bd2df100378b0f2aea9724a7b92f10770d547725b047078f99ee","e0f761b6ea91ced3b0844c14c9d955224d538105921f8e6754c00f6ca79fba7f"],"kind":"locked-python","license":"NOASSERTION","name":"importlib-metadata","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"8.9.0"},{"advisory_scope":"test","artifact_digests":["c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730","f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12"],"kind":"locked-python","license":"MIT","name":"iniconfig","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"2.3.0"},{"advisory_scope":"security","artifact_digests":["0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d","85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"],"kind":"locked-python","license":"NOASSERTION","name":"jinja2","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"3.1.6"},{"advisory_scope":"security","artifact_digests":["0542a7189c26920778658fc8fcf2af8bae05bae9924577f71804acef37996536","0df91907609837f33341b8e6fe73b95991fdaa57caf1a0fbd343dffe826f386f","0e2e9efbe042210df657bade597f66d6d75723e3d8f45a12ea6d8167ff8bbce3","0fa25b09b13075c46f5bc174f2690525a925a4fc2f7c82969a2bbabff22386ce","12288303c9844e61e1651d02a9a6f6633e47d39f897d6991d1427161ce6b746e","17ca7fae79f6d99cd9a042b75f917eaada7b895cfc7dd2ee3a16089dcaec7a85","1878349266f8ee36ecb1375cc5ba2f115f35fd9f0a1a4119e725e379126647f7","2577196f4474ef3fc4779a088a23b0897bbf86f9ea3679c372d45b8383b43207","26798522707abb47d767db536e4148ceac1b14446bf028ee85e579a2e043cfe5","2a8e9e39cf083016137aa5cadafe3188adc2ba6ba1fbf1e5d18889ad3e9ad056","2ed5738ae4af18271a51a528b8811b0cbfa4a1858de9d83359e4169855d6a331","3126a5dbad56401989ac769aca0cb56005bfb3e2366eea0ca99d1a91c3c1ee03","31aaee5b80f672c1dc21272bcfb9cbdcfc1ea04ff50f00ed5af500b80c44fa93","3a23f0e4f957e1be65752d2dfac9a5a06b1917af8dc85deb639c3b9d02e31290","3c1fd2dbe1b0af19e987f03fe66c5f5bd105a2229c1aff4ab14890b24f41d21a","3f4d9e473a5ce7d27fef8b848df4dc16e283893d3f53b4a585e72c9595f3c284","41977aa5654023948c2dae2a81cbf9c43343954bef1cd59a154dd15a4d84c195","44d019fa8cdaf89bf29c71b39e3712143fdd0ac76725c6ef954f9957a5ea8730","46add52f4ad47a08bfb1219f3e673da972191489a33016edefdb5ea55bfa8c48","49060fd70737fad59d33ba9dcc0d83247dc9e77187de26053a19c16c9f32bd69","51d7b836acb0108d7c77df1742332cac2a1fa04a74d6dacec46e7091f0e91274","560b2cf3fb03240cd34f27409a238547488708f05b7c3924f571a60422251ec7","561926e0573ffe4a32498420a76d64b16c513e1ab413b9d28158a8764ac701e5","57b37fc887a32d44798e4d8ebfa7c9683ff3da1d5bf38f08d1bb3573ccb39106","5ab4f50ff971b611d656554ea10b75f80097392c827bc32923c6eeb6386c8b00","5af7780e4a26bd7d0d989592bf9ef12ebf806b74ab709223ecca37c749872ea9","5cf109d010b4b05a105afb3d43be36a21322d345ad3111e13d15f680afef0e5b","616e89e008a93c01104161c75b4988e58716b01d62307ebfe161e52a56d2a818","62c1b7fe1f77925acf5af68b6140b8810fa87dfd4dc0a9c8568ec2fa2a10429c","63efadc657488f45db1c676d81e704cac2abf3fdb892def1faea61db053127e2","63ffdbdae7d4499f4cda14eadc12ddcabef0fc0c081191bdc2247489cb698077","64c0203212098470032aabcde9356fc168f377aade3e43def61dfe17e92f2037","64d613743df53199b1aa256a7d328340da6d7078aac7705a7db9d7a791e9cfd2","659039cc50b5addcc35fcc87ae2c1833b7c0a8e5326ef631a75e4478447bcf84","6722bcef4ffc86c835574b1b2fac6b33b9fb4a889c781e67950e891591f3c55a","67c3bc1760f8c99d805dcab4e644027142a53b1d5d861f18780ebdbd5d40b72a","67fddeda1688f0cce2d2ae83ccf8a80f79936f2d2997d6cc2261f82fdb54a4d3","6edb63a46e65a82c26800a868e49b2cac30dd5a4218b88d74bc2c848c8ad60bb","710cc51d4ebdcd3c1f70b232c1db1ea1344a075770422bbd4bede5708335acbe","7b24c3492c5f4f84a37946ad9cf504910cf6a782d6a4e0689b6673c5894b4a1c","850ccb1d7eedb4200f4014b1c0e8a577de114fc3cd88faad646dcc9bc4bb12ad","8597d23c87f59294f83bcb6229b9ed1fccee13dbba967b46930d2f1759466fee","8d031aabecc4f1b6276adfb42e3aabb77c89d468bf616600e8d3a11328929053","8d30a4a1c87713060c8d1cc59a7b6c8fb6b8ef0a6900368014c76c87922a2929","8fb8de1e23a0cb2a7f53c335049c7b72b6db41aa6227cdcc0972a1de5cb39450","96e38eea538c8ddf853a35727c7be0741c76c13f04148ac5c116222f50ece3b3","9c8a956fd72c2cf1e730d01ea080341f13aa0a97a4a33b51abebe725b7ae9ca9","a111256a7193bea0759267b10385e5870949c239ed7b6ddbaaf57573edb38734","a32d2027a9fa67f109ff245a3252ece3ccc32cc56703e1deab6cc846a59e0585","adbb8edeadd431bc4477879d5d371ece7cb1334486584e0f252656dd7ffada29","adff21bc78edfe086c15eb495b900306076de378dc2337c132401fc39bd79c91","b2c61484666ad42726029af0c00ef4541f0f3b5cdc550221f56c2343208018ee","b72d0b2990ca754a9102779ac98d8597b7cb31678958562214a007f909eab78e","b7dc85ea77d4abbae8bad0d3538678aedee75bceec4e2f6c8dfb1c74772e5aa5","b8a3f9a6008048fe9def7bf465180564a6e458047d2ce499149cfbe73c3ae9db","baad945ed47f163ad833314f8e3288c396118934f94e7bbb9e243ce4b341a4fd","bae96332410f866e5900d809298b1ed82735932986c672495f9701daacd80620","bc837c1b9631be10abfe0191537fe8009838204cec7e44827401ace390ddb567","bf3ea07d9bc8e7d03a9fbc051295462e6dbc295b894fd72457c3136e3e43d898","c22a488f7b9218e245a0025a9ba6b100e2e54700831cf4cf16833a27fba3ad01","c4b4717bdb35ae456f831a6b08d01880fff399887a6bbc526a583a406e484eea","c682bea068a90b764577bdb78a60a4c1d1606daf9cd4c893832a37c7cc9d9026","c90c0f63df322be920eda6ce622e3083d8906ba267f8220fe7873213b8b4430e","c9c53be232c2e206ef9cdbad81a48bfa74c3d3f08bcf8124630a8a748aad993e","cbd18dd5e2df96b580487b5745adf57ef64ad89ba2d9662fc3c19386acce7db8","cf0d73f50e7b6935677854f6e8e31d499ca7064dd24734f703e060f5b237d883","d284fb8d94d5855d60c44fefcab4bf966f1da6fada73992b01f6f0c9bc0c6702","d28bb3c26762358dadf3e5bf0bccd29ae987d65e6988d2e6f49829c76b003c09","d5bf78d0e05e45cfdd66558893938d59afe3d1b1a824a202039b20e607d25a72","d5f91b1c27fc22a57993d5a5cb8a627cb8ed4b10502716fac1ffbfe1d19d84e8","da3d7ec75dc83bb18bca888b5edfae0656a26849056c59e05a7728badd17e7af","dab907db06fc593645e73109acf4581ba5b548897d28b9348dc41ddc8343b2d3","de5ba8763e56b793561f43bed197c9ea55776daa5e9a6b91eed68a909bc9cdbf","e34e97bda77eb63242a410243c071e28ac7e0d8c0948c5ee658498690a4b2f2f","e431cfc9caf44c1d5459ff77d4e64cbf85fddb6a35dad836a15c6a9ec23087c1","eab2cd170150e70153de16896a1774e3a1dca80154c56b54d7a812c479a7165e","ee6162b77d49a9939229df666dfa8af3e656b6701b54c4c84966d740e189264e","f17d61a28b4b3e0e3e2ba98490c70501403b4d196f78732439160e7fd3678127","f4444a83f946605990c98f625cdd3d2725bfb818158760c5748c653170a20e0e"],"kind":"locked-python","license":"NOASSERTION","name":"jiter","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"0.16.0"},{"advisory_scope":"security","artifact_digests":["0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326","d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce"],"kind":"locked-python","license":"NOASSERTION","name":"jsonschema","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"4.26.0"},{"advisory_scope":"security","artifact_digests":["98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe","b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d"],"kind":"locked-python","license":"NOASSERTION","name":"jsonschema-specifications","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"2025.9.1"},{"advisory_scope":"test","artifact_digests":["0763ca2ab66058174f9dee426dc64f5e0a89c24a7df8d3fe3f1836c04e25de4b","091b60a4d2174fc1ec5c34cdc0b72efb6224753d76b7da61ebeab7a191aec8bd","0d38604854e8d22faadf683ec6c02bb0f886e2ba56ef981a1c36ee275f21ea22","109b84a9edf69ad89dc1f66358659e14a031baca95e3e5b0060bd903ede8efd6","1304368a3e7ffc3e9db986796cc5326fdb5943a3567ecc137cff318e4240c0e7","17221a7569f8f292aa0014226e48aa25b8c2b08da18088cd230953d0ea0f9cd1","1b5a7bbff495baedbd9b916c367d66854008f8f3b575908ded477c499dc60082","1ce61b3746545029d4f5c17d6bd74b676254ad98433086c846ffb5e8fa73f007","1d2a610c14ac0d0750ee0a3ab8548e83155258387891caaca04def4bf7289781","22034924f5b42d5a56371cf271771bfeaabf235a7a8b6264bef2d20013f786c6","25218d94b1d2cbc0ba1d8a3f9dc9af578d9646e5ed16443a70cde1dfdcce6d71","260c33e92263fa629b4f6d3c51967a1c2158fe6c33237aaa3ebeac586b085259","2f281549a4c52ac7bb97997f14353f8bd0e53a34ca0dad1c905cfd0b4a58ae99","301067672387902c55f94b51d5022304b36c966ea9fe1f21caab99a9bef487c9","30536798f4504c0fad0885b1d371b0539abb081e4570c9d7c641cb51141b49f0","32c26893cd085c1efe83219e78d866da23fb20a066101b8f68210004361d224c","34bc7938b9fdf14fe32a406c19c71faf894c5cee7e7474bd0be2f17200b82d14","371f7ce73026815dafd51c50ce38416e91428b28c4b2ec97cd39271164b0045c","375f5af8f99cbaa99dd293af986e3d57caabc9ba81a5d3f021603764854197a1","387e2f1d27e89bffe0d3f520f0da0662c973fd607ca16c1808f8a5085419485e","3aaedf52171bee90860704c560bc798fe83b76247df47568e0197e9b13c735a0","3dbb2a31882456cadc7053378e81ad7ed7693db4ac9f98ab5f81ef034aa8ec9f","4000d961ff9598ac6ea603c6c836a5ed49bc205ade5fc378b998dfe1e2c36628","40ccd13c252d3fe473ffc8a57be7565abc8b64cf1b108344c859d5164f7f3e0c","46c330e82565962c761dbce7941be2cff7db674ee807455a8d0cadc5f9b759b0","4f6db193d2e5e0ed60359b9a5a682cd67205d0d3b1e459a867dd4b5c4e7eaa7a","531b2df3e9fe96b1fcf73a6d165921e4656be5f58d631d384ebce344298368db","54dab44a847d5ad1acd05c8a83fe518ae685516ecf4d3f7cc6e3df2a66767650","5929da1981a46bcf4b28b1b9499905f0ff58e2419da402a048234e9783acbc4b","5fdcf34f86de8fb66d7dc7589f96ba91c4aa46671200d400e6fd6f109a483f18","66c0e7e6b02a155576df2c77ec933a70b72da726e248c494abf690923e624348","66cb1138f384a191a6d75f986064841fcfdc0cea98f7bd9c9ab9b38049917588","68a5faee4bba381cb93b5961f684a514cf0053cb92308ff9c792c2fea0b174c6","6bf6a559ffe4a93bbea6cf31ddf01a7fd9ba342ef51f27beb178e318b74acd61","70d9c62a4cffd9f23396cd5ef93fc5d11b31596b9b7d6306074abe3d5fcf09bd","79e44cff71750d299d61a678e49995b0d5935a9cda238c2574daeca3ba536927","7db9a3ff32ef5f7d1703d93831a3316cdf0b537de6a1cc03cc8fdd09b9194e89","860bd1d8ba48456ce08feaf8d343a8aaeb2fa086f2bcaa2a923fa3f7a3ff9aa3","9320d34c3376ae204b2cd176e8d4883a013934e0aef822f1aed9c536490c275d","93d24ebb82aa4420b1409c389e7857bc35bd0b668007ac8172427d5c73cc8cc5","94b85d664d777bab6c0d709416cb42938251fda9e221b79e3a2215d85df5f4f9","96bad8725a4f196a798366c25ce075d1f7543a4ec045ffc13e6a7ec095cdab04","9af313c66157a69dc69ea0059a66961692250e0dc95af9c385a48ffb770a0d16","9c5d02b89de5acd0379a51ec44a89476fb03df6145442e1c8ecd6bee2f91b176","9f836c37478f167a81200d8c8b2c920a22224564bed2c23d7aeec760965c367a","a38fb81d8376dfa2f8963b265fec07637802b0d01e2a127c19c66cb070fb24f5","a3dfe4edf10e8ed7e55b026a8bfc2c2a8704218b659cd4bffdf604fab966dc39","a4517d47b2b8af26975a406fba7d314de9696d864252e0257c6ea90238cfe27f","a468951af16155824e88bdd8326ebe5bdb371f3ec0ac04642994b98201d914f3","ac04bcd3328eb91d99dfedf6a60d9c1f15d3434e6f6daf922f0420f7d90b85c7","ae01d8512cc17079e53425635327dbf3f7ff57a42c00dec348bf79791c56444c","b222493da6e7b6199db9bd79502436cf5a27da3c1f7fa83c7e285444fc93fd03","c6014e3c80f9c1fe268ef8b0e0ef113bac672cc032f2f93866e7ddad4f3e663d","c718e99a0992127af84385378460db624103b559ab260435abcfe77a4e4ed1c1","c7897db4e95e22468bdda33d8e012ceacd0182abf001e6389d763f0def6286b9","cb8a1adce42d8b75485a5d56a9623a50bcab995b6079f1dac59fc44034dd93d9","cc99dfb62b23c9207c33d0be8a2e2af7a42e21e6ea388b380a0c948c7b88953b","d4c8d9bd5abce34b2e75edb3bf37ab0f34e49b1f915a40ae8468eb7c85bc5b46","d4cb6fbfdf874340ab5e51450753c0f817b6958a3621125ee695bbc3de866566","db327e7271e653c32040b85ae6188059c924b57d7e1e29f935523fa017cd4e82","e4f9b472e7d308d94b62c801982065661158c6ed02790d6c7ddb4337cea0f9c1","e54a315caf843c8d77e388cadc56ea9ded569935ee2d2347d7ea94992e5aa6fa","f19e181de5b3a1148bb3420b8c4b0b0ea0fce6950099724ad151d6cea5acc180","f26629539d4893c2957a16c41bb058e1e135c1f150f6a2e25ed047f64cf3f5c6","f2a7253458e34f33543551394ae4fe104b497ec2a65ac266074de64c1df82e37","f40e56b61b41be5f7dec938cfeffd660668cf4b5e72c78e7bd671d66b7bc2c79","fadc63331f4388c3dc90090448f682a7e9feafc11481391c1e94f2f907a3976e","fc67741da44c6eaa90e01eafb586bbba9b51eb5b6ed381ee6f5ae72eb3316d21"],"kind":"locked-python","license":"NOASSERTION","name":"librt","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"0.13.0"},{"advisory_scope":"security","artifact_digests":["0d252c1594ecba2ecedc444053db5d3a9b7ec1b0dd929c8f1d74dce89f86c05e","43360231720999c10e9328dc3691160e27a718e280673d444c38d7d3aaa3b98b"],"kind":"locked-python","license":"NOASSERTION","name":"linkify-it-py","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"2.1.0"},{"advisory_scope":"security","artifact_digests":["437a0e403136996430795ead76502103dcf74769b6909e12d3e2511061ea8ff8","773adf5503ee1793289689c899394a83df8122993760d9acd782e32aa798db9d","8f03047a73154f33c2733899e4bf9b5ed129e2e345caa305895a318452e4a807","9c7b2849591a35f7039dc7386a81a8e68fccb5ac2fecaa5122192c1172556b29","b4b65395c5d7b15fa24e08a13871c0617f6d156c46cee0eb920f3a5954e50adf","f0ec8327aacc7914cc16310a1a3cc14340f1140b0a761403c5a4a98b01684373","f17499155366afd1eaaeb6fd0c7b55cbd2239dcd72f2fe1f8071a969cc402fae"],"kind":"locked-python","license":"NOASSERTION","name":"litellm","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"1.92.0"},{"advisory_scope":"security","artifact_digests":["3e9b49134e8116ee40b431664dcbed9e199413efddcce1a173c734b4e0521529","8a817588c177e81efadf2efa3690bfd46000279fd32e5bfc814776b007ee5d89","938d8e033953f2ddeb8c35dc423aa289ca116bfa7a71a778f6e77460f9025803","ad3216012f6dd337be34c23ae3dfab36f0623bc62fbfb329f9a1852c9ad40304","de9af9c96892e610eefc920cca9e71179661d39d9d1d7acc1f28f357bcc8805e"],"kind":"locked-python","license":"NOASSERTION","name":"magika","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"1.0.3"},{"advisory_scope":"security","artifact_digests":["04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49","9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a"],"kind":"locked-python","license":"NOASSERTION","name":"markdown-it-py","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"4.2.0"},{"advisory_scope":"security","artifact_digests":["068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a","0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf","0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19","0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf","1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175","116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219","12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb","133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6","1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab","1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce","1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218","1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634","1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad","218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73","26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c","2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe","32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa","3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37","35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f","3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d","3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c","457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97","4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a","4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19","4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9","509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9","5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc","5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4","69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354","6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50","722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698","729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9","77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b","795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc","7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115","7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485","83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f","8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12","8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025","8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009","915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d","94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a","9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5","9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f","a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1","ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287","b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6","bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f","bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581","bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed","be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b","c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026","ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676","d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e","d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d","d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d","de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01","e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795","e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5","e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d","eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe","ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda","f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e","f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737","f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523","f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a","fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50"],"kind":"locked-python","license":"NOASSERTION","name":"markupsafe","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"3.0.3"},{"advisory_scope":"security","artifact_digests":["214c82fb2ac524472ab6a5bcab1de80f73b50443e187f401bfd77efbc7c6481d","a2bca0f039f39dbd35fb74ae1b5f998608c437463371f0ff7f49a19a17a114d0"],"kind":"locked-python","license":"NOASSERTION","name":"mdit-py-plugins","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"0.6.1"},{"advisory_scope":"security","artifact_digests":["84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8","bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"],"kind":"locked-python","license":"NOASSERTION","name":"mdurl","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"0.1.2"},{"advisory_scope":"security","artifact_digests":["46c394ed5d9641e802fc79bf3fb0666a53748b23fa8c4aa634ae9d30d46fe397","9a5ebc4c0096b42e5d7ebc2350afdc92dc511061e935ca188468094fdd032bbe"],"kind":"locked-python","license":"NOASSERTION","name":"msoffcrypto-tool","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"6.0.0"},{"advisory_scope":"security","artifact_digests":["03ede2a6ffbe8ef936b92cb4529f27f42be7f56afcdab5ab739cd5f27fb1cbf9","0458c978acd8e6ea53c81eefaddbbee9c6c5e591f41b3f5e8e194780fe026581","0b38ebffd9be37c1170d33bc0f36f4f262e0a09bc1aac1c34c7aa51a7293f0b3","0b4c48648d7649c9335cf1927a8b87fa692de3dcb15faa676c6a6f1f1aabda43","0e161ddf326db5577c3a4cc2d8648f81456e8a20d40415541587a71620d7a7d1","10ae39c9cfe6adedcdb764f5e8411d4a92b055e35573a2eaa88d3323289ef93c","128441d052254f42989ef98b7b6a6ecb1e6f708aa962c7984235316db59f50fa","12fad252f8b267cc75b66e8fc51b3079604e8d43a75428ffe193cd9e2195dfd6","14525a5f61d7d0c94b368a42cff4c9a4e7ba2d52e2672a7b23d84dc86fb02b0c","17307b22c217b4cf05033dabefe68255a534d637c6c9b0cc8382718f87be4262","1b99af4d9eec0b49927b4402bcbb58dea89d3e0db8806a4086117019939ad3dd","1d540e51b7e8e170174555edecddbd5538105443754539193e3e1061864d444d","1e3a8bb24342a8201d178c3b4984c26ba81a577c80d4d525727427460a50c22d","21f830fe223215dffd51f538e78c172ed7c7f60c9b96a2bf05c4848ad49921c3","233b398c29d3f1b9676b4b6f75c518a06fcb2ea0b925119fb2c1bc35c05e1601","25167cc263257660290fba06b9318d2026e3c910be240a146e1f66dd114af2b0","253282d70d67885a15c8a7716f3a73edf2d635793ceda8173b9ecc21f2fb8292","273d23f4b40f3dce4d6c8a821c741a86dec62cded82e1175ba3d99be128147ed","283ddac99f7ac25a4acadbf004cb5ae34480bbeb063520f70ce397b281859362","28ca5ce2fd9716631133d0e9a9b9a745ad7f60bac2bccafb56aa380fc0b6c511","2b41f5fed0ed563624f1c17630cb9941cf2309d4df00e494b551b5f3e3d67a23","2bbd113e0d4af5db41d5ebfe9ccaff89de2120578164f86a5d17d5a576d1e5b2","2e1425e2f99ec5bd36c15a01b690a1a2456209c5deed58f95469ffb46039ccbb","2e2d2ed645ea29f31c4c7ea1552fcfd7cb7ba656e1eafd4134a6620c9f5fdd9e","3758692429e4e32f1ba0df23219cd0b4fc0a52f476726fff9337d1a57676a582","38fb49540705369bab8484db0689d86c0a33a0a9f2c1b197f506b71b4b6c19b0","398c1478926eca669f2fd6a5856b6de9c0acf23a2cb59a14c0ba5844fa38077e","3ab8b9d8b75aef9df299595d5388b14530839f6422333357af1339443cff777d","3bd231490fa7217cc832528e1cd8752a96f0125ddd2b5749390f7c3ec8721b65","3d51ff4785d58d3f6c91bdbffcb5e1f7ddfda557727043aa20d20ec4f65e324a","3fccb473e87eaa1382689053e4a4618e7ba7b9b9b8d6adf2027ee474597128cd","401c5a650f3add2472d1d288c26deebc540f99e2fb83e9525007a74cd2116f1d","41f2952231456154ee479651491e94118229844dd7226541788be783be2b5108","432feb25a1cb67fe82a9680b4d65fb542e4635cb3166cd9c01560651ad60f177","439cbebd499f92e9aa6793016a8acaa161dfa749ae86d20960189f5398a19144","4885cb0e817aef5d00a2e8451d4665c1808378dc27c2705f1bf4ef8505c0d2e5","497394b3239fc6f0e13a78a3e1b61296e72bf1c5f94b4c4eb80b265c37a131cd","497bde6223c212ba11d462853cfa4f0ae6ef97465033e7dc9940cdb3ab5b48e5","4cfb48c6ea66c83bcaaf7e4dfa7ec1b6bbcf751b7db85a328902796dfde4c060","538cec1e18c067d0e6103aa9a74f9e832904c957adc260e61cd9d8cf0c3b3d37","55d97cc6dae627efa6a6e548885712d4864b81110ac76fa4e534c03819fa4a56","563fe25c678aaba333d5399408f5ec3c383ca5b663e7f774dd179a520b8144df","57b46b24b5d5ebcc978da4ec23a819a9402b4228b8a90d9c656422b4bdd8a963","5a37ca18e360377cfda1d62f5f382ff41f2b8c4ccb329ed974cc2e1643440118","5c4b9bfc148f5a91be9244d6264c53035c8a0dcd2f51f1c3c6e30e30ebaa1c84","5e01429a929600e7dab7b166062d9bb54a5eed752384c7384c968c2afab8f50f","5fa6a95dfee63893d80a34758cd0e0c118a30b8dcb46372bf75106c591b77889","619e5a1ac57986dbfec9f0b301d865dddf763696435e2962f6d9cf2fdff2bb71","6aac4f16b472d5b7dc6f66a0d49dd57b0e0902090be16594dc9ebfd3d17c47e7","6b10359683bd8806a200fd2909e7c8ca3a7b24ec1d8132e483d58e791d881048","6b83cabdc375ffaaa15edd97eb7c0c672ad788e2687004990074d7d6c9b140c8","6d3bc717b6fe763b8be3f2bee2701d3c8eb1b2a8ae9f60910f1b2860c82b6c49","7a7e590ff876a3eaf1c02a4dfe0724b6e69a9e9de6d8f556816f29c496046e59","7eee46ccb30ff48a1e35bb818cc90846c6be2b68240e42a78599166722cea709","7ff981b266af91d7b4b3793ca3382e53229088d193a85dfad6f5f4c27fc73e5d","841189848ba629c3552035a6a7f5bf3b02eb304e9fea7492ca220a8eda6b0e5c","844c5bca0b5444adb44a623fb0a1310c2f4cd41f402126bb269cd44c9b3f3e1e","84e61e3af5463c19b67ced91f6c634effb89ef8bfc5ca0267f954451ed4bb6a2","8be1802715a8e892c784c0197c2ace276ea52702a0ede98b6310c8f255a5afb3","8f333ec9c5eb1b7105e3b84b53141e66ca05a19a605368c55450b6ba208cb9ee","9004d8386d133b7e6135679424c91b0b854d2d164af6ea3f289f8f2761064609","90efbcf47dbe33dcf643a1e400d67d59abeac5db07dc3f27d6bdeae497a2198c","935434b9853c7c112eee7ac891bc4cb86455aa631269ae35442cb316790c1445","93b1818e4a6e0930454f0f2af7dfce69307ca03cdcfb3739bf4d91241967b6c1","95922cee9a778659e91db6497596435777bd25ed116701a4c034f8e46544955a","960c83bf01a95b12b08fd54324a4eb1d5b52c88932b5cba5d6e712bb3ed12eb5","97231140a50f5d447d3164f994b86a0bed7cd016e2682f8650d6a9158e14fd31","97891f3b1b3ffbded884e2916cacf3c6fc87b66bb0dde46f7357404750559f33","98655c737850c064a65e006a3df7c997cd3b220be4ec8fe26215760b9697d4d7","98bc624954ec4d2c7cb074b8eefc2b5d0ce7d482e410df446414355d158fe4ca","9c90fed18bffc0189ba814749fdcc102b536e83a9f738a9003e569acd540a733","9d624335fd4fa1c08a53f8b4be7676ebde19cd092b3895c421045ca87895b429","9f9af11306994335398293f9958071019e3ab95e9a707dc1383a35613f6abcb9","a0543217a6a017692aa6ae5cc39adb75e587af0f3a82288b1492eb73dd6cc2a4","a088b62bd733e2ad12c50dad01b7d0166c30287c166e137433d3b410add807a6","a407f13c188f804c759fc6a9f88286a565c242a76b27626594c133b82883b5c2","a90f75c956e32891a4eda3639ce6dd86e87105271f43d43442a3aedf3cddf172","af959b9beeb66c822380f222f0e0a1889331597e81f1ded7f374f3ecb0fd6c52","b0fa96985700739c4c7853a43c0b3e169360d6855780021bfc6d0f1ce7c123e7","b26684587228afed0d50cf804cc71062cc9c1cdf55051c4c6345d372947b268c","b4938326284c4f1224178a560987b6cf8b4d38458b113d9b8c1db1a836e640a2","b8c990b037d2fff2f4e33d3f21b9b531c5745b33a49a7d6dbe7a177266af44f6","ba0a9fb644d0c1a2194cf7ffb043bd852cea63a57f66fbd33959f7dae18517bf","bdbf9f3b332abd0cdb306e7c2113818ab1e922dc84b8f8fd06ec89ed2a19ab8b","bfde23ef6ed9db7eaee6c37dcec08524cb43903c60b285b172b6c094711b3961","c0abd12629b0af3cf590982c0b413b1e7395cd4ec026f30986818ab95bfaa94a","c102791b1c4f3ab36ce4101154549105a53dc828f016356b3e3bcae2e3a039d3","c3a32d23520ee37bf327d1e1a656fec76a2edd5c038bf43eddfa0572ec49c60b","c76c4bec1538375dad9d452d246ca5368ad6e1c9039dadcf007ae59c70619ea1","c9035dde0f916702850ef66460bc4239d89d08df4d02023a5926e7446724212c","cb2a55f408c3043e42b40cc8eecd575afa27b7e0b956dfb190de0f8499a57a53","ce1bbd7d780bb5a0da032e095c951f7014d6b0a205f8318308140f1a6aba159e","d54ecf9f301853f2c5e802da559604b3e95bb7a3b01a9c295c6ee591b9882de8","d62b7f64ffde3b99d06b707a280db04fb3855b55f5a06df387236051d0668f4a","da62917e6076f512daccfbbde27f46fed1c98fee202f0559adec8ee0de67f71a","df9f19c28adcb40b6aae30bbaa1478c389efd50c28d541d76760199fc1037c32","e1c5988359516095535c4301af38d8a8838534158f649c05dd1050222321bcb3","e628ef0e6859ffd8273c69412a2465c4be4a9517d07261b33334b5ec6f3c7489","e82d14e3c948952a1a85503817e038cba5905a3352de76b9a465075d072fba23","e954b24433c768ce78ab7929e84ccf3422e46deb45a4dc9f93438f8217fa2d34","eb0ce7b2a32d09892b3dd6cc44877a0d02a33241fafca5f25c8b6b62374f8b75","eb304767bca2bb92fb9c5bd33cedc95baee5bb5f6c88e63706533a1c06ad08c8","ec6652a1bee61c53a3e5776b6049172c53b6aaba34f18c9ad04f82712bac623d","f2a0a924d4c2e9afcd7ec64f9de35fcd96915149b2216e1cb2c10a56df483855","f33dc2a3abe9249ea5d8360f969ec7f4142e7ac45ee7014d8f8d5acddf178b7b","f5dd81c45b05518b9aa4da4aa74e1c93d715efa234fd3e8a179df611cc85e5f4","f99fe611c312b3c1c0ace793f92464d8cd263cc3b26b5721950d977b006b6c4d","fa263a02f4f2dd2d11a7b1bb4362aa7cb1049f84a9235d31adf63f30143469a0","fc5907494fccf3e7d3f94f95c91d6336b092b5fc83811720fae5e2765890dfba","fcee94dfbd638784645b066074b338bc9cc155d4b4bffa4adce1615c5a426c19"],"kind":"locked-python","license":"NOASSERTION","name":"multidict","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"6.7.1"},{"advisory_scope":"test","artifact_digests":["0c64e5973df366b747646fc98da921f9d6eba9716d57d1db94a83c026a08e0fb","0deb80d062b2479f2c87ae568f89845afc71d11bc41b04179e58165fd9f31e98","20175a1c0f49863946ec20b7f63255768058ac4f07d2b9ded6a6b46cfb5a9100","29752dbbf8cc53f89f6ac096d363314333045c257c9c75cbd189ca2de0455744","2a4102b03bb7481d9a91a6da8d174740c9c8c4401024684b9ca3b7cc5e49852f","2de3dcea53babc1c3237a19002bc3d228ce1833278f093b8d619e06e7cc79609","34397cdced6b90b836e38182076049fdb41424322e0b0728c946b0939ebdf9f6","4077797a273e56e8843d001e9dfe4ba10e33323d6ade647ff260e5cd97d9758c","419413398fe250aae057fd2fe50166b61077083c9b82754c341cf4fd73038f30","4b6481b228d072315b053210b01ac320e1be243dc17f9e5887ef167f23f5fae4","4dbfcf869f6b0517f70cf0030ba6ea1d6645e132337a7d5204a18d8d5636c02b","4fef51b01e638974a6e69885687e9bd40c8d1e09a6cd291cca0619625cf1f558","52b176444e2e5054dfcbcb8c75b0b719865c96247b37407184bbfca5c353f2c2","56908d7e08318d39f85b1f0c6cfd47b0cac1a130da677630dac0de3e0623e102","5a65aa591af023864fd08a97da9974e919452cfe19cb146c8a5dc692626445dc","688c3312e5dadb573a2c69c82af3a298d43ecf9e6d264e0f95df960b5f6ac19c","7488448de6007cd5177c6cea0517ac33b4c0f5ee9b5e9f2be51ce75511a85517","785b08db19c9f214dc37d65f7c165d19a30fcecb48abfa30f31b01b5acaabb58","803203d2b6ea644982c644895c2f78b28d0e208bba7b27d9b921e0ec5eb207c6","913485a03f1bcf5d279409a9d2b9ed565c151f61c09f29991e5faa14033da4c8","9bcb8aa397ff0093c824182fd76a935a9ba7ad097fcbef80ae89bf6c1731d8ec","9d56a78b646f2e3daa865bc70cd5ec5a46c50045801ca8ff17a0c43abc97e3ee","a5da6976f20cae27059ea8d0c86e7cef3de720e04c4bb9ee18e3690fdb792066","a94c5a76ab46c5e6257c7972b6c8cff0574201ca7dc05647e33e795d78680563","a95a9248b0c6fd933a442c03c3b113c3b61320086b88e2c444676d3fd1ca3330","baf593f2765fa3a6b1ef95807dbaa3d25b594f6a52adcc506a6b9cb115e1be67","bb9c2fa06887e21d6a3a868762acb82aec34e2c6fd0174064f27c93ede68ad15","bba9ad231e92a3e424b3e56b65aa17704993425bba97e302c832f9466bb85bac","c3bae4f855d965b5453784300c12ffc63a548304ac7f99e55d4dc7c898673aa3","c566c3a88b6ece59b3d70f65bedef17304f48eb52ff040a6a18214e1917b3254","cdecf62abcc4292500d7858aeae87a1f8f1150f4c4dd08fb0b336ee79b2a6df3","d52ad8d78522da1d308789df651ee5379088e77c76cb1994858d40a426b343b9","e061b58443f1736f8a37c48978d7ab581636d6ab03e3d4f99e3fa90463bb9382","e2877a02380adfcdbc69071a0f74d6e9dbbf593c0dc9d174e1f223ffd5281943","e73c07f23009962885c197ccb9b41356a30cc0e5a1d0c2ea8fd8fb1362d7f924","e8222c26daaafd9e8626dec58ae36029f82585890589576f769a650dd20fd665","edfbfca868cdd6bd8d974a60f8a3682f5565d3f5c99b327640cedd24c4264026"],"kind":"locked-python","license":"MIT","name":"mypy","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"1.20.2"},{"advisory_scope":"test","artifact_digests":["1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505","52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558"],"kind":"locked-python","license":"MIT","name":"mypy-extensions","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"1.1.0"},{"advisory_scope":"security","artifact_digests":["001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1","0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4","043191bfa8eab18c776647b62723ac9dddece59743b13f49b2016094129c2b3f","06ca2f61ec4385a07a6977c55ba998a4466c123642b4a32694d3128fce18c079","0a041d3d761dc3c35cc56ce0351506a02bcbc25f7b169f652435141a17db9096","0ab0a9c4ffb1a6d95ef519fe4247dba8eb6b18ad93999f76b7f657039acabd47","0c9136e14ed34a9e343a31c533d78a9813a69a3148332bce5e9821cb2f996e66","110f8b71aacb688ec69062bb7f6938a0f8acb01b7c1c4beb453c65b6d234584d","112b06a867b235ef466ed3508ddf0238050df9c727cafb5301ac385b899189a1","17f9ade344e7d9b464a084d69bcf18fc691cb1db67c62ed80820bf4926d78f0e","1e254a00cdf42b1e4d5b3d68d33af63268d41340d8885df2ab6470f2e1500147","1e978ec1e8bd0e0e4de6bb75de9d30cbb74db6b6a2bb727618613703ca0167dd","25c692919ac5a01f170a3bfcd62d745b24fd095c353d50812637d6fcab442e75","260a5d70215b61ab4fadf5c7baacd64821842975eea312125ed3c39a6391b063","2803abfebfc990042cd494d8ce2d5f82e9d847af6d35ec486923aa19dbad5e73","29a287e0cf63ff528da061de6b9f64a4618da591ca1046aafc54062e40ca7eab","29cb7f67d10b479ff07c17d33e39f78c07f71c40ef30d63c153d340e96cd3fb4","3213d622a0283a39a93d188f3cf72b26862df52fbb4ca3697f51705016523d41","33111801a01c12a8a1e3721f0a9232f8cfc8ae2c6b7098167e6f623c6073f402","357cc07a6d7b0b182ff02249616a03742827ebb1277546b5c7cd7f7620a45698","38efbc8de75c7a0fc1ac190162d892787f3f47b57cc291231aafee36b80982b7","4081eb135ac24158bd51cdfbef16f1c64df7063b1143f24731387137c092bec8","40fdc1ae7125e518ea98e53e69a4ebc27e1fd50510c47b7ea130cf21e5e1d42b","4cfe66903cc32a9921a6733d96b19bb6abf310397581bbad89c228f5abaf0ee8","511dbaf848decaaaf4b4ca48032619fb3138710c4bf7da7617765edad1ef96b0","55cced7c52e981362f708ad635198e97a752dfba412cc03c23bbf3bd8d5cd662","56b39e5e0622a09a25bf5baf62f4bcf0cb8a41ae6e2819cf49bbc5a74c083f91","5dbbdb29840ca3d91ee0fece42fc29278886d908280bfec0a5846c6f901a3eb0","5f9fb9157b4ce2971008323afe46053787b526ef624fea915b261468a8421a0f","6180d8b35af935aed8ece3a85e0a43f87393ae0ac87c8d2c8bd2c993f7270ef3","68a5124b13fa6cc2086764a20005d30bc0548146f7f5322f02fce212ca14317f","68bb27509ac1b9a3443094260f6326150663b06abe40b73a2f81160623da5b67","6f41ae150c4e32db4f3310cdaf64b1593a03dbabe29eec77fc9b50fe64061df6","7265a2f3d436e54ef9f2b52b5c937e6be778781bd97a590319d7348f1c1ca997","72fbe16c6fac95aedf5937fa873445cec2110be35d8a4e9433d7501fd98dae6b","7d92c3819208a60205a12a245c91ad70cb0a85336659b19b834205573ac8456e","8155154c7c691289fe18f510b5d4657c68c67989f293f0535a91360392ff6538","81a1cca95ed5bb92aa8b10dd2cdc9a0d3853a50fad926c28b5d7e8ea54389627","89cd468399cfd2504718f0ba50e410dca55a170b61a02ad92bb18c8a65186e93","8ad03c0965fb3c692200e74d458ca28c1dbb4ce96f9a479a8aa041ad5fabca02","90f9849678c75fe7afa2d348ac842c168b0a4d3d61919687216dfc547976d853","948424b06129ce883307e8cff868c31396d8dc7630a59c61d70d98dbe70f222c","9cd5ffd25db4e7ba6a375693b3fc0fc1791ec636c17db3720da19bde7180ec43","a0df0043bdb289bde1f62da130d20df23d58b45429f752bc7a8fc5325a225ecd","a2c306dea656c12c68f51f4cea133cbe78ca7435eb28c735eac1d3ebe73be6e8","a7830bab239b79cda9c08c2da014761cafb48da6150e1da17ac06283f43b6089","a7c711e21628b52034bb5ab8d1bce291f752fcc5e92accc615778acee1ff4778","aaf159caa35993cb1f56fb9b8e4610d35758e7ca005412eb1daa856a78c9c4b1","ae506e6902902557576a26ff33eda8695e7ecb3cb36c3b573a0765dee114ebdb","b507f5c4c1d508876d1819b6bf9a49d365b96320b5d4993426b33a23ca4b8261","bf162abab1c1a736333192707cef898e735a5ca00f38f27eeedf44b39d9e85eb","c1a2af6c6ef86344a6b0db6b97834208bf598db514f2b155042439b62605601a","c2d37ab77531417474168eb79d6d80b14f821a966818505d03013d0833edb7a8","c4fc99836233ea196540b17ab0983aff60ed07941751930f5f4d05bc3b3b7359","d581b735e177fdcdce6fed8e7e8880a3fb6ee4e3653a3ac6af01c6f4c03effc5","d6da64deb6b8ed903e7560180a92f2d804ee1ba5eeb849ac2748b8c1aba1f6d7","d8e8286dd7cea7895157318d1b91cdacac64c479f3cbc8dce548331728484751","ddea102b48f9e339f3948bf22040944184627a30fdf7f858667673b9c5f033c8","dfa20cc6ca228e6b155b11da03825975ce66aea520985dbbddf0f2a5a495c605","e3e5193ef5a3dc73bceee50f7fdc2c90dbb76c42df8d8fae3d1067a583df579e","e3eeb0aabd6bd5ce64faae67e9935203a6991b4bc2a485a767fbafb2c5125f45","e5805d5a22fd19c8ccff10a9561f9df94436b0545619ea579db2d3c35294bce2","e85b752a1e912b70eaad4fafbd4d1238007ab221de2009b9a2f5ae7461239895","eaf7fa2de5c0be8ae6ff8e9bea2ccd725e980541244521d8d4b5f3354a27babe","ebfb099f8dcf083deef3ac1ca4c1503f387cf76296fcb3816b66f5ecb5f54fdb","ece3d2cfe132e7d51f44a832b303895e6f2d499c5e74dfbdb06ee246147a304a","ed9749eef4cbd126da3dc1d6bcb3a57f5eb7ac6a6484146bdbf743f552dfc577","ede83e07a75dd06bc501566c1eca2afc0d61677c1472ac9ad93fdee6e638a48d","ef4aea96ce4d3b074422cb4f2f64e216bf9e213004bb58ecfdf50ea02ea8eb9a","f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda","f407cb6b8e9d6d8c626bc73c945db1706035af8fd632295547bf1c9e46d092d6","f74a575920ab21fe304421a3fc28793d82e299cae9eccb37084e9fc7f3617c20"],"kind":"locked-python","license":"NOASSERTION","name":"numpy","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"2.4.6"},{"advisory_scope":"security","artifact_digests":["08d60c810432eb83360958dea0999ac4cfb94531ea8efcbf0b7f277c2068aeb2","09e9bfd8d2cf479c7d174804fb3811c53a8e9f20a37444008606b57d6b7a826d","0bfebd8695f9863592fe744be833a258120b14a9f39da255e8aa8fade2c0ddd1","17a25e09640602e10bc8de0e6fa2b3fd68eedd84ba6d7842dc8f32f9ab87bd0b","1c6759f538fb912fc46de0a6b1758ccf7b57bc7c7ebebc23974fdac3de8db0cd","224ca51130ef7da85bea2191625181cb4f337f9cb64b471f10c1a12aa8b60077","24d0eb82c0541d3415a33425db64ae439dffccd7b4dbcb30e7c35120205c506a","2ae0ca40bcb22d6ba59c1dfd5446f49940b0f2d821fde133f10dda11f816b84e","2c889b56fe48b1018f764b0eec8df59ab654e9148aa91faa12596043500de277","30b44a6b53a7ae63c54c089a8726e5563ed302716c5b7ccc85afade40b0e7ff6","32985c896d897419ef8da6917872d80b78ad0ea26d85b23245c7366ffde76d75","3935f3b419b244a02732676fa5317a9193cc596a4c0646db07e5b421229ac9f7","4939237038ada79308dda3204ac6462df056b5672b2e25db1149cf873668b3e1","4b4ff1608417eb7a59da7b967bbb798cacfe071d2caf526a24281cd562072ed9","54ad769f17bc2d833b620851989f62054fb9ab93c969d9e1dc3c8e3d56beea21","59fda5e192b570217ec2580c96f00e9a7e12ef6866a900eb089b62c1a32545ca","5a4c988b38d261deeeaad9954e3deb091ad905c94e8bb6708654ef1d97f286b0","5a6db61f9aaa57e369905c67d852045d3c4f7126405b29d09b19dec118e9c9cb","6165343f81b56ef8f514f396989e529b61d9dc709b99421b07e9f3e698e2287d","61ac47e772e6b8ea489e1d2f441a34c5c3ac17327e7ce294cbdf535795ad4e75","6c3fe51bc6a16453d452997053454f309e8e0ed7b42d6b361ce4ac8c32913d74","6eab239876581b2b3c5a242281b6007bbdbcd1c7085d7709bb57c5929b11e6bf","78798bd5b9ad744056af8efa90e3b9ddaa53272a0848a483084a1cc0a13b2dc0","7c786fe9a5bbe360022e584c5a34cf6b54265c71bd7ec8ac3d8fec38968071f8","83ce9c80d5b521b0d77ddcbe5447c218d247929b6cc056ca5351342accfff0af","9726558e8db4a5bf7929a70ae50f63abda4daf0efe810e3bfbab95976f75fc1a","99d5095fa265a0c4152e7bb12759e14381ef5496152f1ce58f44bdf55c44beb4","a33276be12fa045805f477f22482088b66bb758ffbe89a9d21457de863a32e22","a48a113e6afea91f5608793bafa7ef2ad481fefbda87ec5069f483de61cb9fa3","ab451b59c5643c570974c43aef780703ef1d3b4965d2be07afd530615a9358d1","ab84dc6b074fa881cae55bea94cc4f68e285181ba7f32497bf7dee6b1496165b","ab87a91b3cc3382b8956095bd8f95e00cf679bb81554339be1a2ba404a1473c1","c12afb53450fa976d4c681c50a7423729a4c51c0465ed9f32b8a9cabbc472373","caf3e317d33d60c37986b452613f4ab51246d0691350c03d0cb4a898627f4a95","dc932a65ded7ce9013d120845a2514dcccb1a67bfc8deb8d37633762951904a6","e68d8dd1e7eba712948f2053a29ec86917bc70ba1358df869d9f06649ef9cf09","e824c2acf8862052246be5a44c15da1777940c60d010dd2aab897824d9c430f9","e8c11c405efc5ff6816d5983c96cdfa215bab3428961243af3ff59b228490438","efd736408cc97c79b9e6917338dfc8f06013b2274f992e96b1d9a81a71e2a2c2","f089d7b00756190aacf1f5d34bdf38c3c430ac82b4f868f8cede73380460fce7","f2479a47f8d5932d1718168a681ad6e536a9df484c83cfcf9de365e164537ace","f7119ebff1a9829e9f431a4f9d28e703023bb6b9fe7c8f724467dbfc27c94ab3","f7d60026c0bdb1380e83bfa7a0419c4577ee4b9a08880afcb6dadeb74c649fa2","f7feb014281029e628ba2d5a007407443b06e418b6fe451d1e2adcbc8eba0107"],"kind":"locked-python","license":"NOASSERTION","name":"numpy","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"2.5.1"},{"advisory_scope":"security","artifact_digests":["543c7da2a7adadf21214938bb79c83ea12b473a4b6ee4ad4bf854e7715e13d1f","599383381a0bf3dfbd932ca0ca6515acd174ed48870cbf7fee123d698c192c1c"],"kind":"locked-python","license":"NOASSERTION","name":"olefile","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"0.47"},{"advisory_scope":"security","artifact_digests":["72ad8bd748fd0c4e7b5b4733af770d11543ebb2bf2697455f99f975fcd50cc96","ad452099f4695ffd8855113f453348200d195ee9fa341a09e197d66ee7e0b2c3"],"kind":"locked-python","license":"NOASSERTION","name":"oletools","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"0.60.2"},{"advisory_scope":"security","artifact_digests":["0874edc171f470fc4dd2bbb60bc0989612ed1a8b89b365cda016630a93227f13","1b215aa662c8f983f7d6dedafe65a9be72c26e5338e0fe98b3e0422c32c85428","20c321cf187ba496e648acf6b4cf90b4d398b0d17c2a77fdaeba365b908cc1c1","2eb083321af8a236a84c7c140a7f4cecbfa2a987a18c07c78db471c20cd390ef","2fdfa9df40a0ded0028ce6f9cd863264237f3970559dea2b81456e9ac4622b94","370d211e1ceeac4cd5f45301655463ac59e27cdc74d9f7aeb2d19ff4b7a76715","445fb702ea5241ba813a3ce2febe2e9408a64f6ad2eb610924322c536165f7cd","48b3d87eb560ff6a772240506f3c78d6d27c63cafedd5c775672e1194f968cfd","49e416be0d717338b6d041b99911b716d70c397d277056450724f93bdded3fc2","54c0c4e9202c36c4ecdb1f3443f5dfbfd5ee3b54d1362c4b4c6134110e74fb32","5b51c014cf1a4fcd93c29a97eac8071fa27710dae05a4d0380bb60a66d60a62c","6872443f236a554921cda6f318c900e2d0c226792cf3534d00e5057c6926e5d2","75fbc1e1fb43a39a856c8209c544cca7817b5de7ac16b15b1bdf55d1cc67b9df","760021bca514d64a811837820d351a08a41741f16f8b4c26450da708fecf14e6","7c65a7438632d55dfbc8a02ee60bd6cf7dd9d1ba05a43d4b851452f32338e194","856032937dd3bc7a7c141909c8d7ae4fde3e3f59bddf061ae627b9a051bda95c","8ba14a38c570087f3cdb8cfba33f7a38a1e826c1e5b29e17c28ceda0cc910016","a14c2ce45312def86b77aea651f46565e45960cf5f0721bfdff449165086ab76","b3e5b58b8c89c2b20e086e890aa9527377e5c240dc3ecc1640d18e07705eeb1c","c6197a02e3f620c4dc13cff51b80672409fc1ffab3aa2593911b19fd322ff48b","c6fddce0539a4898c7bef35b052ffd37935b2190e35488eab99ce91887743ea1","d0d1f68868e2ef30ef70998ba9bbbc5c305e9b17041e3936751c1b8aa6aade06","e4f7b0e90d2d212e2c2deaa6c8291616183ab815d3ec558ea12d3ac8b26d36f4","ff050e4f6bf7f12918fa14dcb047c0b02e295f35e86d42532552be4b3d54e977"],"kind":"locked-python","license":"NOASSERTION","name":"onnxruntime","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"1.27.0"},{"advisory_scope":"security","artifact_digests":["10d34ca9c5643bce775852fddbfc172505cb1d4de1ccd101696c3ecff358765d","5df105f5f8c9b711fcb9d06d2d3888cebc82506db216484c14a4e53cdf651777"],"kind":"locked-python","license":"NOASSERTION","name":"openai","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"2.45.0"},{"advisory_scope":"security-and-test","artifact_digests":["5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e","ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661"],"kind":"locked-python","license":"Apache-2.0 OR BSD-2-Clause","name":"packaging","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"26.2"},{"advisory_scope":"test","artifact_digests":["17db5ecd524104a120e173814c90367a96a98d07c45b2e10c2f3919fff91bf5a","a00ce642f577bf7f473932318056212bc4f8bfdf53128c78bbd5af0b9b20b189"],"kind":"locked-python","license":"MPL-2.0","name":"pathspec","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"1.1.1"},{"advisory_scope":"security","artifact_digests":["025f8c809a126f45a082ffa820893e6a8d990d9d7ddb68694b5a9f0a6dbcd955","4441f7c0ab4cbda27bd4668db3b14f36261d86e5059ce06c0828602cbe1c4278"],"kind":"locked-python","license":"NOASSERTION","name":"pcodedmp","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"1.2.6"},{"advisory_scope":"security","artifact_digests":["324ca73bb39f19a438c6a9320317631507209f5c9c9e20c44768778842099a6e","9b9b72145a81759c6e9f327eb0e115a30a3fbd140fa5bd5da0d1956ec4c9f65a"],"kind":"locked-python","license":"NOASSERTION","name":"pdfid","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"1.1.3"},{"advisory_scope":"security","artifact_digests":["31e761a6a0ca04faf7353ea759bdba55652be214725111e5aac52dfa29d4bef7","fb516cdb12eb0d857d0cd85a7c57cea4d060bee4578d6cf5a14dfdf8cbf8784a"],"kind":"locked-python","license":"NOASSERTION","name":"platformdirs","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"4.10.0"},{"advisory_scope":"test","artifact_digests":["7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3","e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746"],"kind":"locked-python","license":"MIT","name":"pluggy","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"1.6.0"},{"advisory_scope":"security","artifact_digests":["0f400a23a3764cdefd741e2fc7a30300a88d0a8d5cb8e52b3e1c94066df80d58","80bdd1a6c414ef78b6d8c9496495261b27968f4c486135a8a6982e74b4056cf8"],"kind":"locked-python","license":"Apache-2.0","name":"plugin-scanner","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"2.0.274"},{"advisory_scope":"security","artifact_digests":["01c4fc7480cd0598bb4b57022df55b9ca296da7fc5a8760bd8451a7e63a7d427","06187263ddad280d05b4d8a8b3bb7d164cbebd469236544a42e6d9b28ac6a4fa","0958834041a0166d343b8d2cedcd8bcbaeb4fdbe0cf08320c5379f143c3be6e7","099aaf4b4d1a02265b92a977edf00b5c4f63b3b17ac6de39b0d637c9cac0188a","0d2c9bf8528f135dbb805ce027567e09164f7efa51a2be07458a2c0420f292d0","0fd59b5af35f74da48d905dcbad55449ba13be91823cb05a9bd590bbf5b61660","10734b5484ea113152ee25a91dccedf81631791805d2c9ccb054958e51842c94","13fef48778b5a2a756523fdb781326b028ca75e32858b04f2cdd19f394564917","178b4a2cdaac1818e2bf1c5a99b94383fa73ea5382e032a48dec07dc5668dc42","196913dea116aeb5a2ba95af4ddcb7ea85559ae07d8eee8751688310d09168c3","1b31822f4474c4036bae62de9402710051d431a606d6a0f907fec79935a071aa","1d1ad32d9d4355e2be65574fd0bfd3677e7066b009cd5b9b2dee8aa6a6393b33","1dbcf7675229b35d31abb6547d8ebc8c27a830ac3f9a794edff6254873ec7c0a","2293949b855ce597f2826452d17c2d545fb5622379c4ea6fdf525e9b8e8a2511","26a4dca084132874e639895c3135dfad5eb20bae209f62d1aeb31b03e601c3c0","2800a4a8ead6b28cccd1ec54b59346f0def7922ee1c7598e8499c733cfbb7c84","29f9309a2e42b0d273be006fdb4be2d6c39a47f6f57d8fb1cf9f81481df81b66","2d7aa89ebca5acc98cba9d1472d976e394782f587bad6661003602a619fd1821","2f22cbbac9e26a8e864c0985ff1268d5d939d53d9d9411a9824279097e03a2cb","3115559b8effafd63b142ea5ed53d63a16ea6469cbc63dce4ee194b42db5d853","32775082acd2d807ee3db715c7770d38767b817870acfa08c29e057f3c4d5b56","3430bb2bfe1331885c427745a751e774ee679fd4344f80b97bf879815fe8fa55","3b199b9b2b3d6a7edf3183ba8a9a137a22b97f7df525feb5ae1eccf026d2a9c6","40314bca9ac559716fe374094fc81c11dcc34b64fd6c585360f5775690505704","44e488ef40dbb452700b2b1f8188934121f6648f52c295055662d2191959ff82","452b5065457eb9991ec5eb38ff41d6cd4c991c9ac7c531c4d5849ae473a9a13f","45f11346f884bc47444f6e6647131055844134c3175b629f84952e2b5cd62b64","46088abff4cba581dea21ae0467a480526cb25aa5f3c269e909f800328bc3999","4bc8ff1feffc6a61c7002ffe84634c41b822e104990ae009f44a0834430070bb","4db0ba63d693afd40d249bd93f842b5f144f8fcbb83de05660373bcf30517b1d","51f96d685ab16e88cab128cd37a52c5da540809c8b879fa047731bfcb4ad35a4","54adaa85a22078d1e306304a40984dc5be99d599bf3dc0a24dc98f7daeab89ab","552ffadf6ad409844bc5919c42a0a83d88314cedddaea0e41e80a8b8fffe881f","5538d2c13d93e4698af7e092b57bc7298fd35d1d58e656ae18f23ee0d0378e03","5570dbcc97571c15f68068e529c92715a12f8d54030e272d264b377e22bd17a5","5671d09a36b06d0fd4a3da0fccbcae360e9b1570924171a15e9e0997f0249fba","583c19759d9eec1e5b69e2fbef36a7d9c326041be9746cb822d335c8cedc2979","5aaa2b923c1944ac8febd6609cb373540a5563e7cbcb0fd770f75dace2eb817b","5dbc581d2814337da56222fab8dc5f161cd798a434e49bac27930aaef798e144","6041d31504dc1779d700e1edcfb08eea334b357620b06681a4eabb57a74e574e","66ea454f095ddf5b6b14f56c064c0941c4788be11e18d2464cf643bf7203ff67","68ce1c44c7a813a7f71ea04315a8c7b330b63db99d059a797a4651bb6f69f117","6a997d0489e9668a384fcfd5061b857aa5361de73191cac204d04b889cfbbafa","6de8bd93ddde9b992cf2b2e0d796d501a19026b5b9fd87356d7d0779531a8d96","6e7b8719005dd1175be4ab1cd25e9b98659a5e0347331506ec6760d2773a7fb5","6f328175a2cde1f0ff2c4ed8ce968b9dcfb55f3a7153f39e2957ed994da13476","72d61e16dd78228b58c5d47be830ff3da7e5f139abdf0aef9d86cde1c5cf2191","74b70780220e2dd89175ca24b81b68b67c83db499ae611e7f2313cb329801c78","79aa3ff0a9b566633b642fa9caf7e21ed1c13d6feca718187873f199e1514078","7afa37062e6650640e932e4cc9297d81f9f42d9944029cc386b8247dea4da837","80168e2ebe4d3ec6599d10ad8f520304ae1cad9b6c5a95372aef1b66b7bfb53a","806719138ecd720339a12410fb9614ac9b2b2d3a5fdf8235d56981c36f4039ba","81e3a30b0bb60caa22033dd0f8a3618d1d67356212514f62c57db75cb0ef410c","85341b12b9d55bad0bded24cac341bb34289469e03a11f3f583ea1cc1db0326c","857187f381f88c8e2fa2fe56ab94879d011b883d5a2ee5a1b60a8cd2a06846d9","8a90efd5777e996e42d568db9ac740b944d691e565cbfd31b2f7832f9184b2b8","8b73ab70f1a3351fbc71f663b3e645af6dd0329100c353081cf69c37433fc6fe","8c7972d8f193740d9175f0998ab38717e6cd322d5935c5b0fef8c0d323fd9031","8e778ebd44ef4f66ed60a0416b06b489687db264a9c0b3620362f26489492913","9282fb1a3bccd038da9f768b927b24a0c753e466c086b7c4f3c6982851eefb2d","95f1e3f4760d404b13c9976c0229b2b49a3c8e2c62a9ce92efdd2b11ada75e3f","97797ebb098e670a2f92dd66f32897e30d7615b14e7f59711de23e30a9072539","a473b3440261e0c60706e732b2ed2f517857344fc21bf48fdfe211e2d98eb285","a4840ab0ae0216d952f4b53dc6d0b992bfc2bedbfe360bdd9b548bc184c08959","a592f5f3da71c8691c788c13cb6734b6d17663d2e1cb8caddf0673d01ef8847d","a6ae2198be502c10f09b2516e7b5d019816924bc3183a43ce792a7bd6625e6f4","a6ddc6ac9e25de626c1f129c1b467d7ecd33ce2237d3fd0c4e429feef0a7ee1f","acd2c8edba48e31e58a363b8cf4e5c7db3b04b3f9e371f601df30d9b0d244836","ba338430e87ceb9c8f0cf754de38a9860560261e56c00376debd628698a7364f","ba57fffe4ac99c5d30076161b5866336d97600769bad35cc68f7774b15298a4e","be1ddfcbb376e3de5d2e2db1d58d6d67463e6b4f9f040c000de8e300295465fe","c0cb9ed24c8964e172768d455a38254c2dd8a552905729ce006cad3d3dda59b1","c60462af8e6dc30c35407c7237ea908d777b22862bbee27bc4699c0d8bcdc45a","c66afea89b1e43725731d2004732a046fe6fe955d51f952c3e95a7314a284a39","c6844ba6364fb12f403928a82cfd295ab103a2b315c77c747b2dbe4a41894ea7","c80f4ba3e8f00189165999a742ee526ebeccedf6c3f7beb0c7df821e9772435a","cafca7e56c12bb02ae16d283742bef25a61122e9dab2b5b3f2ccbe589ce32164","cc49723e2f60d6b32a0f0b08a3fd6d13203c07f1cd9566cfce0f12a917c967a2","cc6fc3cc62e8501d3ed62894425040d2728ecddb1ed072737a5c70bd537aa9f0","cd416c1de191973c52ff1a12a57446bfc7642797b282d7caf2162d7d1b8aa9a0","cd645f03898405cabe694fb8bc35241e3a9c332ec85627584fe3de201452b335","cef6cea3922890dd6c9654971001fa797b526c16ab5e1e46c05fd6f877be7568","cfa21e036ce1e1db2be04ba3b85d2df1bb1702fa01932d984c5464c665228ff4","d0326e2e5e1f3163fa306c834e48e8d490e5fae607a097a40c0648109b47ba80","d310c013aad2c72f1c3f2f8dd3279d460a858c551f97aeb8c63e4693cca7b4d2","d447bb0b3054be5818458fbb171208b1d9ff11eba14e18ca18b90cbb45767370","d4dc37dec6c6cdad0b57881a5658fd14fbf53e333b1a86cf86559f190e1d9ec4","d9ee8826a7d47863a08ac44e1a5f611a462eefc3a194b492da242128bec75b42","db2b80ea58eab4f86b2beec3cc8b39e8ff9276ac20e96b7cce43c8ae84cd6b5a","dfed59d0a5aeb01e242e66ff0300bc4a265a7c05f612d30016f0b60b1017d757","e00820e192c8dbebcafb383ebbf99030895f09905e7a0eb2e0340a0bcc2bc825","e59bc9e66329185b93dab73f210f1a37f81cb40f321501db8017c9aea15dba27","e5cbfac9f61484f7e9f3597775500cd3ebe8274e9b050c38f9525c77c97520bf","f064f8d2b59177878b7615df1735cd8fe3462ed6be8c7b217d17a276489c2b7f","f156a3529f38063b6dbaf356e15602a7f95f8055b1295a438433a6386f10463d","f19bb891234d72535764d703bfed1153cc34f4214d5bd7150aee1eec9e8f4366","f7467da8a9822bf1a55336f877340c5bcbd3c482afc43a99771169f74a26dedc","f78abfa8dfc32376fd1aacf597b2f2fbbe0ea751419aee718af5d4f82537ef8c","f7eabc04151c78a9f4d5bbb5f1faf571e4defeb4b585e0fe95b60ff2dbe4d3d7","f814362777a9f841adddb200ecdf8f5cb1e5a3c4b7a86378edbd6ccb26edd702","fc299c129490f55f254cd90be0deca4764e36e9a7c08b4aa588479a3bbed3098","fc76378c62a0f04d0cd82fbb1a2cd2d7e28fcb40d5873f28a6c44e388aaa2751","fc88b26f08d634f7bc819a7852e5214f5802641ab8d9fd5326892292eee1993e","fe67a3d11cd9b4efabfa45c3d00ffba2b26811442a73a581a94b67c2b5faccf6"],"kind":"locked-python","license":"NOASSERTION","name":"propcache","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"0.5.2"},{"advisory_scope":"security","artifact_digests":["11d6b0ec246892d85215b0a13ca6e0233cf5284b68f0ac02646427f4ff88a799","230a75ddfc2de4806e56696ce9640c1cdfdb6543b7cfce98d42a4c0a0e7bdb87","24f857477359a85c0c235261b8ba905fd51b2562f4a64ca1df5473f29850cbf6","353652e4efd0bca5b5fc2656abf8307ef351f0cf938c9eba09f0e09c20a25c30","4bc97768d8fe4ad6743c8a19403e314511ed9f6d13205b687e52421c023ac1b9","74758715c53d7158fb76caf4f0cfdacc5329a4b1bb994f865d6cf302d413a1c4","b73f9489a4b8b1c9cb1f8ed951c736392592edb24b9d6819f36d2e10b171d5b4","ce115a26fe0c39a2c29973d914d327e516a6455464489fe3cd1e51a1b354f81a"],"kind":"locked-python","license":"NOASSERTION","name":"protobuf","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"7.35.1"},{"advisory_scope":"security","artifact_digests":["600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29","b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992"],"kind":"locked-python","license":"NOASSERTION","name":"pycparser","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"3.0"},{"advisory_scope":"security","artifact_digests":["45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba","c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6"],"kind":"locked-python","license":"NOASSERTION","name":"pydantic","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"2.13.4"},{"advisory_scope":"security","artifact_digests":["00c603d540afdd6b80eb39f078f33ebd46211f02f33e34a32d9f053bba711de0","0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262","041bde0a48fd37cf71cab1c9d56d3e8625a3793fef1f7dd232b3ff37e978ecda","0c563b08bca408dc7f65f700633d8442fffb2421fc47b8101377e9fd65051ff0","0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e","0ce40cd7b21210e99342afafbd4d0f76d784eb5b1d60f3bdc566be4983c6c73b","0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594","133878133d271ade3d41d1bfb2a45ec38dbdbda40bc065921c6b04e4630127e2","14d4edf427bdcf950a8a02d7cb44a08614388dd6e1bdcbf4f67504fa7887da9c","14f4c5d6db102bd796a627bbb3a17b4cf4574b9ae861d8b7c9a9661c6dd3362d","17299feefe090f2caa5b8e37222bb5f663e4935a8bfa6931d4102e5df1a9f398","184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d","18e5ceec2ab67e6d5f1a9085e5a24c9c4e2ac4545730bfe668680bca05e555f3","1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb","1d8ba486450b14f3b1d63bc521d410ec7565e52f887b9fb671791886436a42f7","2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5","23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462","2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4","29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b","3009f12e4e90b7f88b4f9adb1b0c4a3d58fe7820f3238c190047209d148026df","3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2","372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519","3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7","3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6","3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565","3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898","428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb","4c63ebc82684aa89d9a3bcbd13d515b3be44250dc68dd3bd81526c1cb31286c3","4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a","4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596","56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987","5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e","5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d","5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712","5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008","617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd","62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1","633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be","66ce7632c22d837c95301830e111ad0128a32b8207533b60896a96c4915192ea","6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292","6f2eeda33a839975441c86a4119e1383c50b47faf0cbb5176985565c6bb02c33","7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3","7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4","7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b","7bfb192b3f4b9e8a89b6277b6ce787564f62cfd272055f6e685726b111dc7826","811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac","8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7","82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d","85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4","86e1a4418c6cd97d60c95c71164158eaf7324fae7b0923264016baa993eba6fc","8c5dac79fa1614d1e06ca695109c6105923bd9c7d1d6c918d4e637b7e6b32fd3","8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b","8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914","9037063db01f09b09e237c282b6792bd4da634b5402c4e7f0c61effed7701a04","90884113d8b48f760e9587002789ddd741e76ab9f89518cd1e43b1f1a52ec44b","926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce","9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4","9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a","962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f","97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424","9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894","9bc519fbf2b7578398853d815009ae5e4d4603d12f4e3f91da8c06852d3da3e9","9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76","9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb","a0f62d0a58f4e7da165457e995725421e0064f2255d8eccebc49f41bbc23b109","aaa2a54443eff1950ba5ddc6b6ccda0d9c84a364276a62f969bdf2a390650848","ad785e92e6dc634c21555edc8bd6b64957ab844541bcb96a1366c202951ae526","af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0","b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458","b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e","bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a","c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c","c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000","c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b","c7a7bd4e39e8e4c12c39cd480356842b6a8a06e41b23a55a5e3e191718838ddf","c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4","cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd","cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28","ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9","d396ec2b979760aaf3218e76c24e65bd0aca24983298653b3a9d7a45f9e47b30","d51026d73fcfd93610abc7b27789c26b313920fcfb20e27462d74a7f8b06e983","db06ffe51636ffe9ca531fe9023dd64bdd794be8754cb5df57c5498ae5b518a7","e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c","e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3","e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02","e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89","f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76","f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7","f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4","fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c","fc010ab034c8c7452522748bf937df58020d256ccae0874463d1f4d01758af8e","fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff"],"kind":"locked-python","license":"NOASSERTION","name":"pydantic-core","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"2.46.4"},{"advisory_scope":"security-and-test","artifact_digests":["6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f","81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176"],"kind":"locked-python","license":"BSD-2-Clause","name":"pygments","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"2.20.0"},{"advisory_scope":"security","artifact_digests":["850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d","c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc"],"kind":"locked-python","license":"NOASSERTION","name":"pyparsing","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"3.3.2"},{"advisory_scope":"test","artifact_digests":["1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313","37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c"],"kind":"locked-python","license":"MIT","name":"pytest","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"9.1.1"},{"advisory_scope":"security","artifact_digests":["1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a","2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3"],"kind":"locked-python","license":"NOASSERTION","name":"python-dotenv","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"1.2.2"},{"advisory_scope":"security","artifact_digests":["9f7dd9260bec99044219159a329f64f039087f9d1a2124c9442556f2fe6f82ec","acc73e477a568dc2a25c9e130c6c68ae8daa8c204c8f7e813db47d6a7280dcf2"],"kind":"locked-python","license":"NOASSERTION","name":"python-frontmatter","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"1.3.0"},{"advisory_scope":"security","artifact_digests":["be54b7f3fa167bb83e4fcd936b887b708f4e57fe75911c02aebf53efaf8d938e","ff6d3f776f16878c894e52e107296ffc890e913c611b1a4ec6c44e2821fe2e23"],"kind":"locked-python","license":"NOASSERTION","name":"python-multipart","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"0.0.32"},{"advisory_scope":"security","artifact_digests":["00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c","02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3","0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6","10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c","16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65","1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a","2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1","34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310","37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4","41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea","44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e","4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac","4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9","501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7","5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35","5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb","5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b","5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c","64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd","652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824","66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065","6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c","79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c","7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764","7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196","8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b","850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00","8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac","8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8","8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e","9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28","93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3","96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5","9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf","a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5","a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702","b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788","b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d","ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc","c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba","c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5","d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26","d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f","ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b","eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be","ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c","f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6","fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0"],"kind":"locked-python","license":"NOASSERTION","name":"pyyaml","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"6.0.3"},{"advisory_scope":"security","artifact_digests":["381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231","44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8"],"kind":"locked-python","license":"NOASSERTION","name":"referencing","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"0.37.0"},{"advisory_scope":"security","artifact_digests":["0639b2488b775a0109f55a5a2172deebdedb4b6c5ab0d48c90b43cbf5de58d17","0911e34151a5429d0325dae538ba9851ec0b62426bdfd613060cda8f1c36ec7f","103e8f3acc3dcede88c0331c8612766bdcfc47c9250c5477f0e10e0550b9da49","1050fedf0a8a92e843971120c2f57c3a99bea86c0dfa1d63a9fac053fe54b135","13fba679fe035037e9d5286620f88bbfd105df4d5fcd975942edd282ab986775","14d27f6bd04beb01f6a25a1153d73e58c290fd45d92ba56af1bb44199fd1010d","177f930af3ad72e1045f8877540e0c43a38f7d328cf05f31963d0bd5f7ecf067","1f0d4ccf70b1d13711242de0ba78967db5c35d12ac408378c70e06295c3f6644","21150500b970b12202879dfd82e7fd809d8e853140fff84d08e57a90cf1e154e","2129e4a5e86f26926982d883dff815056f2e98220fdf630e59f961b578a26c43","234f8e0d65cf1df9becadae98648f74030ee85a8f12edcb5eb0f60a22a602197","28a0973eeffff4292f5a7ee498ab65d5e94ee8cc9cea364239251eb4a260a0f1","2b93eafd92c4128bab2f93500e8912cc9ecb3d3765f6685b902c6820d0909b6b","2bc350e1c5fa250f30ab0c3e38e5cfdffcd82cb8af224df69955cab4e3003812","2c66a8a1969cfd506d1e203c0005fd0fc3fe6efc83c945606566b6f9611d4851","3750c42d47712e362158a04d0fd80131f73a55e8c715b2885442a0ff6f9fc3fc","38a5926601aaccf379512746b86eb0ac1d29121f6c776dac6ac5b31077432f2c","396ea70e4ea1f19571940add3bad9fd3eb6a19dc610d0d01f692bc1ba0c10cb4","39f81d1fdf594446495f2f4edd8e62d8eda0f7a802c77ac596dc8448ad4cc5ca","3d8ef9df02c8083c7b4b855e3cb87c8e0ebbcfea088d98c7a886aaefdf88d837","3e23458d8903e33e7d27196d7a311523dc4e2f4137a5f34e4dbd30c8d37ff33e","3f03b92fb6ec739df042e45b06423fc717ecf0063e07ffe2897f7b2d5735e1e8","3f361215e000d68a4aff375106637b83c80be36091d83ee5107ad3b32bd73f48","41a47c2b28d9421e2509a4583a22510dc31d83212fcf38e1508a7013140f71a8","441edc66a54063f8269d1494fc8474d06605e71e8a918f4bcfd079ebda4ce042","4533af6099543db32ef26abc2b2f824781d4eebb309ab9296150fd1a0c7eb07d","4574feca202f8c470bf678aed8b5d89df04aaf8dc677f3b83d92825051301c0f","460176b2db044a292baaee6891106566739657877af89a251cded228689015a6","494b19a5805438aeb582de99f9d97603d8fd48e6f4cc74d0088bb292b4da3b70","4db009b4fc533d79af3e841d6c8538730423f82ea8508e353a3713725de7901c","538ddb143f5ca085e372def17ef3ed9d74b50ad7fc431bd85dc50a9af1a7076f","53f54993b462f3f91fea0f2076b46deb6619a5f45d70dbd1f543f789d8b900ef","58a4571b2a093f6f6ee4fd281faa8ebf645abcf575f758173ea2605c7a1e1ecb","5e792367e5f9b4ffb8cad93f1beaa91837056b94da98aa5c65a0db0c1b474927","5eab9d3f981c423afd1a61db055cfe83553c3f6455949e334db04722469dd0a2","64722a5031aeace7f6c8d5ea9a9b22d9368af0d6e8fa532585da8158549ea963","65ee5d1ac3cd541325f5ac92625b1c1505f4d171520dd931bda7952895c5321a","668ab85105361d0200e3545bec198a1acfc6b0aeb5fff8897647a826e5a171be","66d2c35587cd601c95965d5c0415058ba5cfd6ffbab7624ce198bd967102b341","6cbedeb5112f59dbd169385459b9943310bdd241c6966c19c5f6e2295055c93a","6e3448e86b05ce87d4eb50f9c680860830f3b32493660b39f43957d6263e2eba","724ee9379568658ec06362cf24325c5315cc5a67f61dfe585bfeff58300a355b","7252b48b0c60100095088fbeb281fca9a4fcf678a4e04b1c520c3f8613c952c4","732c19e5828eb287d01edb83b2eb87f283ba8e5fc3441c732709d3e8cbd14aaa","749b92640e1970e881fdf22a411d74bf9d049b154f4ef7232eeb9a90dd8be7f3","74ae61d8573ecd51b5eeee7be2218e4c56e99c14fa8fcf97cf7519611d4be92e","78712d4954234df5ca24fdadb65a2ab034213f0cdfde376c272f9fc5e09866bb","80151ca5bfc6c4524186b3e08b499e97319b2001fc265ed2d4fc12c0d5692cdf","82ab8330e7e2e416c2d42fcec67f02c242393b8681014750d4b70b3f158e1f08","8331484450b3894298bef8abecce532171ff6ac60b71f999eed10f2c01941a8a","834271b1ff2cfa1f67fcd65a48bf11d11e9ab837e21bf79ce554efb648599ae8","8679f0652a183d93da646fcec8da8228db0be40d1595da37e6d74c2dc8c4713c","87794549a3f5c1c2bdfba2380c1bf87b931e375f4133d929da44f95e396bf5fe","8e26a075fa9945b9e44a3d02cc83d776c3b76bb1ff4b133bbfa620d5650131da","91b916d495db3e1b473c7c8e68733beec4dce8e487442db61764fff94f59740e","948dfc62683a6947b9b486c4598d8f6e3ecc542478b6767b87d52be68aeb55c6","982d07727c809b42a3968785354f11c3728414e4e90af0754345b431b2c32561","9cd5b6805396157b4cf993a6940cbb8663161f29b4df2458c1c9991f099299c5","9d028d189d8f38d7ff292f22187c0df37f2317f554d2ed9a2908ada330af57c0","9dc55698737aca028848bde418d6c51d74f2a5fd44872d3c8b56b626729adb89","9e9aaef25a40d1f1e1bbb1d0eb0190c4a64a7a1750f7eb67b8399bed6f4fd2a6","a2d6d30be35ddd70ce0f8ee259a4c25f24d6d689a45a5ac440f03e6bcc5a21d1","a68b637451d64ba30ed8ae125c973fa834cc2d37dfa7f154c2b479015d477ba8","a72ecf5bfd3fc8d57927f7e3ded2487e144472f39010c3acaec3f6f3ff53f361","aa34473fbcc108fea403074f3f45091461b18b2047d136f16ffaa4c65ad46a68","b1963ec5ba4d52788fb0eac6aca6eb8040e8e318c7e47ebbdfc09440c802919c","b862572b7a5f5ed47d2ba5921e63bf8d9e3b682f859d8f11e0e5ca46f7e82173","b96341cb29a3faa5db05aff29c77d141d827414f145330e5d8846892119351c1","bb52e10e453b5493afe1f7702a2973bc10f4dd8901c0f2ed869ffaa3f8319296","bb5aab464a0c5e03a97abad5bdf54517061ebbf72340d576e99ff661a42575cc","be4223af640d0aa04c05db81d5d96ada3ead9c09187d892fd37f4f97829480be","c2cbd385d82f63bb35edb60b09b08abad3619bd0a4a492ae59e55afaf98e1b9d","c57b6ad3f7a1bdd101b2966f29dc161adf49727b1e8d3e1e89db2eda8a75c344","c622f4c638a725c39abcb2e680b1bd592663c83b672a4ed350a17f806d75618e","cae27622c094558e519abf3242cf4272db961d12c5c9a9ffb7a1b44b2627d5c6","cfcec18f7da682c4e2d82112829ce906569cb8d69fa6c26f3a50dfbed5ceb682","cfeb11990f59e59a0df26c648f0adfcbf27be77241250636f5769eb08db662be","d0834c84ae8750ae1c4cede59b0afd4d2f775be958e11b18a3eea24ed9d0d9f1","d3c75d57a00109255e60bc9c623b6ececaf7905eaab845c79f036670ed4750a2","d3e10779f60c000213a5b53f518824bd07b3dc119333b26d70c6be1c27b5c794","d50714405845c1010c871098558cfe5718fe39d2a2fab5f95c8863caeb7a82b3","da6ef4cb8d457aab0482b50120136ae94238aaa421863eaa7d599759742c72d6","dd3b6d97beb39afb412f2c79522b9e099463c31f4c49ab8347c5a2ca3531c478","dd7715817a187edd7e2a2390908757f7ba42148e59cad755fb8ee1160c628eca","e37aba1994d73b4944053ab65a15f313bd5c28c885dd7f0d494a11749d89db6e","e54e088dc64dd2766014e7cfe5f8bc45399400fd486816e494f93e3f0f55da06","e6b6a11bf898cca3ce7bfaa17b646901107f3975677fbd5097f36e5eb5641983","eac1207936555aa691ce32df1432b478f2729d54e6d93a1f4db9215bcd8eb47d","ebbf0d83ed5271991d666e54bb6c90ac2c55fb2ef3a88740c6af85dc85de2402","ec1c44cf9bd22079aac37a07cb49a29ced9050ab5bddf24e50aba298f1e34d90","ecae626449d00db8c08f8f1fc00047a32d6d7eb5402b3976f5c3fda2b80a7a4f","ee877b6d78f9dff1da94fef51ae8cf9cce0967e043fdcc864c40b85cf293c192","f3463a5f26be513a49e4d497debcf1b252a2db7b92c77d89621aa90b83d2dd38","f6222cafe00e072bb2b8f14142cd969637411fbc4dd3b1d73a90a3b817fa046f","f988a1cec68058f71a38471813fba9e87dffe855582682e8a10e40ece12567a2","fadb07dbe36a541283ff454b1a268afd54b077d917043f2e1e5615372cb5f200","fe7ff456c22725c9d9017f7a2a7df2b51af6df77314176760b22e2d05278e181"],"kind":"locked-python","license":"NOASSERTION","name":"regex","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"2026.7.10"},{"advisory_scope":"security","artifact_digests":["2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0","f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed"],"kind":"locked-python","license":"NOASSERTION","name":"requests","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"2.34.2"},{"advisory_scope":"security","artifact_digests":["07e7adb4690f68864777b1450859253bed81a99a31ac321ac1817b2313558952","817e02727f2b25b40ef56f5aa2217f400c8489f79ca8f46ea2b70dd5e14558a9"],"kind":"locked-python","license":"NOASSERTION","name":"rich","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"14.3.4"},{"advisory_scope":"security","artifact_digests":["0be972be84cfcaf46c8c6edf690ca0f154ac17babf1f6a955a51579b34ad2dc5","127565fead0a10943b282957bd5447804ff3160ad79f2ad2635e6d249e380680","127e08c0642d880cf32ca47ec2a4a77b901f7e2dd1ad9762adb13955d72ffcc9","166cf54d9f44fc6ceb53c7860258dde44a81406646de79f8ed3234fca3b6e538","168c733a7112e071bb7a66460e667edfcff06c017a3c523f7a8a8e08d0140804","1cebd1337c242e4ec2293e541f712b2da849b29f48f0c293684b71c0632625d4","1cf01971c4f2c5553b772a542e4aaf191789cd331bc2cd4ff0e6e65ba49e1e97","1e5822dfc2f0d4ab7e745eaa6d85945069329beeccef965af3f3bb26058fcab6","22bffe6042b9bcb0822bcd1955ec00e245daf17b4344e4ed8e9551b976b63e96","270b293dae9058fc9fcedab50f13cebf46fb8ed1d1d54e0521a9da5d6b211975","29dfa0533a5d4c94d4dfa1b694fcb56c9c63aad8330ffdd816fd225d0a7a162f","2a9c6f195058cb45335e8cc3802745c603d716eb96bc9625950c1aac71c0c703","2bfd04c19ddbd6640de0b51894d764bd2758854d5b75bd102d2ef10cb9c293a9","2c54a076ca4d370980ab57bc0e31df57bbe8d41340436a90ef8b1219a3cbb127","2c958bf94822e9290a40aaf2a822d4bc5c88099093e3948ad6c571eca9272e5f","2c99f7e8ccb3dd6e3e4bfeac657a7b208c9bac8075f4b078c02d7404c34107fa","30c6dc199b24a5e3e81d50da0f00858c5bbdb2617a750395687f4339c5818171","3a83ae6c67b7676b9878378547ca8e93ed77a580037bcbcd1d32f739e1e6089c","3cfe765c1da0072636ca06628261e0ea05688e160d5c8a03e0217c3854037223","421aba32367055614287a4292b6a17f1939c9452299f7a0209c117e990b646d4","425560c6fa0415f27261727bb20bd097568485e5eb0c121f1949417d1c516885","4470ce197d4090875cf6affbf1f853338387428df97c4fb7b7106317b8214698","4cf2d36a2357e4d07bb5a4f98801265327b48256867816cfd2ceb001e9754a8f","4f4bca01b63096f606e095734dd56e74e175f94cfbf24ff3d63281cec61f7bb7","501f9f04a588d6a09179368c57071301445191767c64e4b52a6aa9871f1ef5ed","536bceea4fa4acf7e1c61da2b5786304367c816c8895be71b8f537c480b0ea1f","538949e262e46caa31ac01bdb3c1e8f642622922cacbabbae6a8445d9dc33eaf","539d75de9e0d536c84ff18dfeb805398e58227001ce09231a26a08b9aed1ee0e","54f45a148e28767bf343d33a684693c70e451c6f4c0e9904709a723fafbdfc1f","55927d532399c2c646100ff7feb48eaa940ad70f42cd68e1328f3ded9f81ca24","58eadac9cd119677b60e1cf8ac4052f35949d71b8a9e5556efccbe82533cf22a","5e8d07bddee435a2ff6f1920e18feff28d0bc4533e42f4bf6927fbd073312c41","62698275682bf121181861295c9181e789030a2d516071f5b8f3c23c170cd0fc","639c8929aa0afe81be836b04de888460d6bed38b9c54cfc18da8f6bfabf5af5d","6de4744d05bd1aa1be4ed7ea1189e3979196808008113bbbf899a460966b925e","7491ee23305ac3eb59e492b6945881f5cd77a6f731061a3f25b77fd40f9e99a4","7b689145a1485c335569bd056464f3243a29af7ed3871c7be31ad624ba239bc7","7f88d653e7b3b779d71ae7454e20dcc9b6bae903f33c269db9f2be41bda3f261","8020133a74bd81b4572dd8e4be028a6b1ebcd70e6726edc3918008c08bee6ee6","83e35b57523816c8613fd0776b40cd8bb9f596b37ddd2692eb4a6bb5ab2f8c93","842e7b070435622248c7a2c44ae53fa1440e073cc3023bc919fed570884097a7","847927daf4cffbd4e90e42bc890069897101edd015f956cb8721b3473372edda","882076c00c0a608b131187055ddc5ae29f2e7eaf870d6168980420d58528a5c8","8bb68f03f395eb793220b45c097bd4d8c32944393da0fad8b999efac0868fc8c","8c3d1e9c15b9d51ca0391e13da1a25a0a4df3c58a37c9dc368e0736cf7f69df0","8c6e5a2f750cc71c3e3b11d71661f21d6f9bc6cebc6564b1466417a1ec03ec77","8d2294a31386bfa251d8c8a39472beee17db67d4f1a6eabea665d35c9a4461c3","8e65860d238379ed982fd9ba690579b5e95af2f4840f99c772816dbe573cb826","900a67df3fd1660b035a4761c4ce73c382ea6b35f90f9863c36c6fd8bf8b09bb","9250a9a0a6fd4648b3f868da8d91a4c52b5811a62df58e753d50ae4454a36f80","931908d9fc855d8f74783377822be318edb6dcb19e47169dc038f9a1bf60b06e","9826217f048f620d9a712672818bf231442c1b35d96b227a07eabd11b4bb6945","9891e594296ab9dada6551c8e7b387b2721f27a67eecd528412e8906247a7b90","9c1255b302953c86a486b81d330d5ee1d5bd937691ce271b6be0ef0e299eaab7","a0811d33247c3d6128a3001d763f2aa056bb3425204335400ac54f89eec3a0d0","a214c993455f99a89aaeadc9b21241900037adc9d97203e374d75513c5911822","a3450b693fde92133e9f51060568a4c31fcca76d5e53bbd611e689ca446517e9","a550fb4950a06dde3beb4721f5ad4b25bf4513784665b0a8522c792e2bd822a4","aca6c1ef08a82bfe327cc156da694660f599923e2e6665b6d81c9c2d0ac9ffc8","acac386b453c2516111b50985d60ce46e7fadb5ea71ae7b25f4c946935bf27cf","acc992ab27b15f852c76755eb2ab7dce86585ddadba6fa5946e58556088845b4","ae50181a047c871561212bb97f7932a2d45fb53e947bd9b57ebad85b529cbc53","af05d726809bff6b141be124d4c7ce998f9c9c7f30edb1f46c07aa103d540b41","afd70d95892096cdb26f15a00c45907b17817577aa8d1c76b2dcc2788391f9e9","b5c2dc92304aa48a4a60443b548bb12f12e119d4b72f314015e67b9e1be97fca","bc0011654b91cc4fb2ae701bec0a0ba1e552c0714247fa7af6c59e0ccfa3a4e1","bcfbcf66006befb9fd2aeaa9e01feaf881b4dc330a02ba07d2322b1c11be7b5d","c7b9a2f8f4d8e90af72571d3d495deebdd7e3c75451f5b41719aee166e940fc2","ca6546b66be9dc4738b1b043d5ebd5488c66c578c5ff0fd0e8065313fe3afb76","ccffae9a092a00deb7efd545fe5e2c33c33b88e7c054337e9a74c179347d0b7d","cdc7e35386f3847df728fbcb5e887e2d79c19e2fa1eba9e51b6621d23e3243af","d34c20167764fbcf927194d532dd7e0c56772f0a5f943fa5ef9e9afbba8fb9db","d7469697dce35be237db177d42e2a2ee26e6dcc5fc052078a6fefabd288c6edd","db08f45aecde626498fb3df07bcf6d2ec040af42e859a4f5040d79c200342911","dc319e5a1de4b6913aac94bf6a2f9e847371e0a140a43dd4991db1a09bc2d504","de3eceba0b683bcbb1ab93da016d0270df1f9ae7be716b40214c5dafac6ea45a","dfcc8b909769d19db55c7cc9541eb64b9b774b1057ffffb4f1048070475bb9f9","e4316bf32babbed84e691e352faf967ce2f0f024174a8643c37c94a1080374fc","e52655eaf81e32593abedaa4bfe33170c8cfedf3365ed9be6e11e07f148f0278","ea7bb13b7c9a29791f87a0387ba7d3ad3a6d783d827e4d3f27b40a0ff44495e2","ea964164cc9afa72d4d9b23cc28dafae93693c0a53e0b42acbff15b22c3f9ddd","ec829541c45bca16e61c7ae50c20501f213605beb75d1aba91a6ee37fbbb56a4","ecabd69db66de867690f9797f2f8fa27ba501bbc24540cbdbdc649cd15888ba6","f4d78253f6996be4901669ad25319f842f740eccf4d58e3c7f3dd39e6dde1d8f","f56f1695bc5c0871cbc33dc0130fcf503aab0c57dcc5a6700a4f49eba4f2652e","f8f23ead891a3b762f35ab3b04623da7056545b48aa60d59957e6789914545da","f90938e92afda60266da758ee7d363447f7f0138c9559f9e1811629580582d90"],"kind":"locked-python","license":"NOASSERTION","name":"rpds-py","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"2026.6.3"},{"advisory_scope":"test","artifact_digests":["00eca240af5789fec6fe7df74c088cc1f9644ed83027113468efba7c92b94075","01d65b4831c6b2a4ba8ee6faa84049d44d982b7a706e622c4094c509e51673be","01f8d5be84823c172b389e123174f781f9daf86d6c58719d603f941932195cdd","0f212c5d7d54c01bbfe6dcab02b724a39300f3e34ed7acbe995ccb320a2c58bd","16d090c0740916594157e75b80d666eab8e78083b39b3b0e1d698f4670a17b86","262ab31557a75141325e32d3357f3597645a7f084e732b6b054dde428ecd9341","2c5a913a589120ce67933d5d05fd6ddbcc2481c6a054980ee767f7414c72b4fd","3a10e74757dd65004d779b73e2f3c5210156d9980b41224d50d2ebcf1db51e67","5ef04b681d02ad4dc9620f00f83ac5c22f652d0e9a9cfe431d219b16ad5ccc41","63ea0e965e5d73c90e95b2434beeafc70820536717f561b32ab6e777cb9bdf5d","659c4e7a4212f83306045ec7c5e5a356d16d9a6ef4ae0c7a4d872914fc655d9d","6e83115d4b9377c1cbc13abf0e051f069fab0ef815ea0504a8a008cee24dd0a8","9e866eab611a5f959d36df2d10e446973a3610bc42b0c15b31dc27977d59c233","bab0905d2f29e0d9fbc3c373ed23db0095edaa3f71f1f4f519ec15134d9e85c8","d0cfc841c572283c36548f82664a54ce6565567f1b0d5b4cf2caac693d8b7500","d4b8d9a2f0f12b816b50447f6eccb9f4bb01a6b82c86b50fb3b5354b458dc6d3","e6312e41bc96791299614995ea3a977c5857c3b5662b1ecef6755b02b87cb646","e89bc93c0d3803ba870b55c29671bad9dc6d94bb1eb181b056b52eb05b52854f"],"kind":"locked-python","license":"MIT","name":"ruff","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"0.15.21"},{"advisory_scope":"security","artifact_digests":["2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2","f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"],"kind":"locked-python","license":"NOASSERTION","name":"sniffio","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"1.3.1"},{"advisory_scope":"test","artifact_digests":["25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88","a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"],"kind":"locked-python","license":"Apache-2.0","name":"sortedcontainers","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"2.4.0"},{"advisory_scope":"security","artifact_digests":["05d0213193f2fbaae60e2ecb593b4add4262ad4e46536b54abe36f11a71724e0","c7372aae11c3c3f26a42df7bd626cec2f47d03483d261d369516a615a53714c6"],"kind":"locked-python","license":"NOASSERTION","name":"starlette","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"1.3.1"},{"advisory_scope":"security","artifact_digests":["e2cfde8f79420f6deeffdeda9aaec3b6bc5abce947655d17ac662b126e48a60d","f0b0622e567335c8fabaaa659f1b33bcb6ddfe2e496071b743aa113f8774f2d3"],"kind":"locked-python","license":"NOASSERTION","name":"tabulate","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"0.10.0"},{"advisory_scope":"security","artifact_digests":["849dfee9d705eab3b2d07b33152b7bd74fb1f5056e002873cc448bce500c6374","c730cba1e3d704e8f1ca915b6a3af01451e3bca380114baacf6abf87e9dac8b6"],"kind":"locked-python","license":"NOASSERTION","name":"textual","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"7.5.0"},{"advisory_scope":"security","artifact_digests":["059c8ecf554eb5b41e6e054ba467b871b03277d267dee7244380aca4359747d4","115c4f26ffa11caac8b54eea35c2ad38c612c20a48d35dd15d70a02ac6f51f58","125bc05005e747f993a83dc67934249932d6e4209854452cd4c0b1d53fba3ba2","165cf1820ea4a354985c2490a5205d4cc74661c934aca79dd0368232fff94e0f","2b920b35805cd64585a37c3dc7ce65fba4d2d36016be01e1d7942482ca29093a","2c397ddda233208345b01bd30f2fca79ff730e55731d0108a603f9bc57f6af3b","303f7d91b4fce3baddbcde05c139091d4caa5026ac7214c1dc7ff7a71ee429ff","32ac870a806cfb260a02d0cb70426aef02e038297f8ad50df5040bb5af360791","32e0c12305105002c047b3bb1070b0dd9a73b0cb3b2856a8972b810e7a4f5881","36217497eaffc158607a3b26f065300db2aefd43b115263f3b9688ce38146173","3f277ebea5edd7b8bf03c6f9431e1d67d517530115572b2dc1d465326e8f88c7","43cee3e5400573b2046fbf092cc7a5bc30164f9e4c95ce20714da929df48737a","472527e9132952f2fbf77cd290658bacf003d4d5a3fabc18e5fbd407cbae4d9b","493af3aa28a4aaf2e3d2600a2ee717252c9bf5ab38fff94eb5a02db5ab77e5ad","4d9980f11429ed2d737c463bb1fb78cf330caa026adf002f714aced7849a687b","4e2f67d27c9626cdd25fe33d9313c5cdb3d8d82da646b68d6eb8e7e9c20e6448","51384448aa508e4df84c0f7c1dc3211c7f7b8096325660ee5fc82f3e11b381ce","5ba5fd62507a932d1241346179e3b39bc7bf7408f03c272652d93b3bedf5db24","5cb65b60b9408563676d874a3a4ee573370066f0dc4e29d84e82e989c6517424","5d48843bee149630eb735a99e1f4a85b47308d21868ea63163f6e87768d3cfed","5df5d1507bd245f1ccad4a074698240021239e455eb0bb4ced4e3d7181872154","5e6358911cab4adee6712da27d65573496a4f68cf8a2b5fca6a4ad10fc5748cf","6644c9c2b5cf3916f5a3641d7d12fdb3f006a7b3d9ff6acdaec44e29ab1ff91e","6b1615f0ff71953d19729ceb18865429c185b0a23c5353f1bbca34a394bf60f7","6c43a675ca14f6f2749ba7f12075d37456015a24b859f2517b9beb4ef30807ec","6eb4a5bfbc6426938026b1a334e898ac53541360d62d8c689870160cc80abd67","75ab9bc99fa020a4c283424590ecd7f3afd70c1c281cb3fa3192a6c3af9f9615","7bfe1849caa65d1e1d9871817170ec497bbb7984e182012e1bdce72f66608cdb","7de52e3f566d19b3b11bd37eea552c6c305ad74081f736882bd44d148ed4c48d","85b78cc3a2c3d48723ca751fa981f1fedccd54194ca0471b957364353a898b07","8f2d16e7a7c783ad81f36e457d046d1f1c8af70b22aec8a13238efe531977c41","8fe806a50664e83a6ffd56cbd1e4f5dcc6cd32a3e7538f70dc38b1a271384545","91c180fe255bd5a86d8316210d2833a1d4d33d026cd86a67812f4773743c8d26","95097e4f89b06403976e498abf61a0ee73a7497e73fb599cb211d8197a054d91","975cbd78d085d75d26b59660e262736dcaed1e35f8f142cd6291025c01d25486","a116178fa7e1b4065bff05214360373a65cac22f965be7b3f73d00a0dbfe7649","c9435714c3a84c2319499de9a300c0e604449dd0799ff246458b3bb6a7f433c1","ca8b310bd93b3772cb1b7922d915446864860f562bdfe4825c63a0aed3fb28cd","cb99cb5127449f58d0a2d5f5ccfb390d8dbdfd919c221246caaee29d8725ed51","d108bc2d470fc53c8ecd24f2c0fd2b5f98c33e87cdb6aa2e9b8c5dced703d273","e28157350f7ebf35008dd8e9e0fdb621f976e4230c881099c85e8cf07eaa50e2","eaaaef47c2406277181d2086484c317bf7fc433e2d5d03ff94f56b0dcec87471","fc1c44cd37b43fc46bae593129164f4f281e82ea116b57a85aa81bda57eafc94"],"kind":"locked-python","license":"NOASSERTION","name":"tiktoken","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"0.13.0"},{"advisory_scope":"security","artifact_digests":["120468fb4c24faf0543c835a4fabafa4deb3f20a035c9b6e83d0b553a97615d4","1974288a609c343774f1b897c8b482c791ab17b75ab5c8c2b1737565c1d82288","1bf13402aff9bc533c89cb849ec3b412dc3fbeacc9744840e423d7bf3f7dc0e3","1feeeadf865a7915adc25445dea30e9933e593c31bb96c277cee36de227c8bfa","5075b405006415ea148a992d093699c66eb01952bf59f4d5727089a98bda45a4","53b09e85775d5187941e7bab30e941b4134ab4a7dd8c68e783d231fb7ca27c51","56f3a77de629917652f876294dc9fe6bad4a0c43bc229dc72e59bb23a0f4729a","93120a930b919416da7cd10a2f606ac9919cc69cacae7980fa2140e277660948","9d10a6d957ef01896dc274e890eee27d41bd0e74ef31e60616f0fc311345184e","a26197957d8e4425dfba746315f3c425ea00cfa8367c5fbc4ec73447893dcea9","ae848657742035523fdf261773630cb819a26995fcd3d9ecae0c1daf6e5a4959","e03d6ffcbe0d56ee9c1ccd070e70a13fa750727c0277e138152acbc0252c2224","e0948bbb1ac1d7cdfc9fb6d62c596e3b7550036ad60ecd654a66ad273326324e","e3d8f40ea6268047de7046906326abed5134f27d4e8447b23763afe5808c8a96","e7bfaf995c1bdbbd21d13539decb6650967013759318627d85daeb7881af16b7","ea5a0ce170074329faaa8ea3f6400ecde604b6678192688533af80980daae71a","f836ca703b89ae07919a309f9651f7a88fd5a33d5f718ba5ad0870ec0256bad6"],"kind":"locked-python","license":"NOASSERTION","name":"tokenizers","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"0.23.1"},{"advisory_scope":"runtime","artifact_digest":"7d1a9ecba3086638211b13814ea79c90dd54dd11993564376f3aa92271f5c7a3","kind":"vendored-python","license":"MIT","name":"tomlkit","source_authority":"PyPI sdist and verified tag 8694e4d3323df68eb325bf3d5ab7caa66f8c206a","tree_digest":"7ffa9ddd26ef7cad41b596c089c5d3d984c1c09ef5eb33d8cdb5beab51aacf10","version":"0.15.0"},{"advisory_scope":"security","artifact_digests":["19829c9673638f2a0b8617da4cdcb927e831cd88bcfcb6e78d42a4d1af131520","5168118b2368f48c561afda8020fd79195b1bdb0bdf8086b88442c267a315dc2"],"kind":"locked-python","license":"NOASSERTION","name":"tqdm","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"4.68.4"},{"advisory_scope":"security-and-test","artifact_digests":["481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8","dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5"],"kind":"locked-python","license":"PSF-2.0","name":"typing-extensions","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"4.16.0"},{"advisory_scope":"security","artifact_digests":["4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7","ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464"],"kind":"locked-python","license":"NOASSERTION","name":"typing-inspection","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"0.4.2"},{"advisory_scope":"security","artifact_digests":["3603a3859af53e5a39bc7677713c78ea6589ff188d70f4fee165db88e22b242c","c53691e495c8db60e16ffc4861a35469b0ba0821fe409a8a7a0a71864d33a811"],"kind":"locked-python","license":"NOASSERTION","name":"uc-micro-py","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"2.0.0"},{"advisory_scope":"security","artifact_digests":["231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c","9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897"],"kind":"locked-python","license":"NOASSERTION","name":"urllib3","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"2.7.0"},{"advisory_scope":"test","artifact_digests":["1a46aace1911c4502acc01c437a47602839b4dff91f58a3388998450f66cb5b1","2e57f0a02736b0b08f5d40b96be52be235de0898b58d00b0397485dffc55381b","384a352d6b00df4824dcb56baa070498666795c3fd1b6d7377368649b695f864","3ec5e107bb7128cd15c274f9562b966b038f6342cb7c94239c02e4f1809e7690","52ad1a230e2a0e7dfdf1fa6a93e40a94fcf3c390ab2aa44a7bd0d31b780d02ed","5fb0d9e5e5b808d9ca3ed15356633b7e3ae00ae43f47e50e75eb72dddf98c6bc","67b4d61a16886c8f4d91f987ea813630b80d1fb57f1bd5d2466591a72bb2a7af","6c89dde2c9d3bbfde41fa92bd252a87ab016c7722a85331315151bd39a78a591","75327189c71ad829fb1fb8d1b4be02b6b26aaf98e76c2817a68d16aa15c31a1d","75c1b66084502b42adbd1c6076347e2b97866030f81ecda5aac541499e928b6f","79091c7ee68a90ff44dd876c6d4b21d3c133015612ddecf9ade931779bfb4d92","7af5f0a4319832aefd4deeff5ef01df2809b71e0bfc897bab42c2670ec2fa21b","a3b8bd731e57f1451de4ef15ade18d328a68b6cad173794eda8fafe2e912e997","b5d4a79a0da94de28e2f2890782562e391d9936b686adf1403e671c355ad1370","cb5265d4f692e30889d6ef81608041e970763c684919acdb41ed6af5c345296b","d99cb38411412134781140cc64dc7d296dbc383fa1e81ddc13ecb6863852ecf5","daba66fd25a9a82caa23949686e967cbb69fd056177e991650643186057adaef","fa4f2807129c852c2472e1fc2e1a2ba28018023a9349950cb19622fbb21156e4","fb10719142d431087f5e177d43c83f304391084a28ea52e1588542fe0f113f91"],"kind":"locked-python","license":"Apache-2.0 OR MIT","name":"uv-build","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"0.11.28"},{"advisory_scope":"security","artifact_digests":["5d38af6cd620f2ae3849fb44fd4879e0890aa1febe8d47eb355fb45d93fe6a5b","f6f4b69b657c312f516dd2d268ab9ae6f254b11e4bac504f37b2ab58b24dd0b0"],"kind":"locked-python","license":"NOASSERTION","name":"uvicorn","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"0.51.0"},{"advisory_scope":"security","artifact_digests":["0530a5fbad9c9e4ee3f2b33b148c6a64d47bbad8000ea63704fa8260f4cf728e","1cdf5192ab3e674ca26da2eada35b288d2fa49fdd0f357a19f0e7c4e7d5077c8","1f38ec5e3f18c8a10ded09742f7fb8de0108796eb673f30ce7762ce1b8550cad","297c27d8003520596236bdb2335e6b3f649480bd09e00d1e3a99144b691d2a35","37554f70528f60cad66945b885eb01f1bb514f132d92b6eeed1c90fd54ed6289","3879b88423ec7e97cd4eba2a443aa26ed4e59b45e6b76aabf13fe2f27023a142","3b7f102bf3cb1995cfeaee9321105e8f5da76fdb104cdad8986f85461a1b7b77","40631b049d5972c6755b06d0bfe8233b1bd9a8a6392d9d1c45c10b6f9e9b2733","4baa86acedf1d62115c1dc6ad1e17134476688f08c6efd8a2ab076e815665c74","512fec6815e2dd45161054592441ef76c830eddaad55c8aa30952e6fe1ed07c0","51eb9bd88391483410daad430813d982010f9c9c89512321f5b60e2cddbdddd6","535cc37b3a04f6cd2c1ef65fa1d370c9a35b6695df735fcff5427323f2cd5473","53c85520781d84a4b8b230e24a5af5b0778efdb39142b424990ff1ef7c48ba21","561577354eb94200d75aca23fbde86ee11be36b00e52a4eaf8f50fb0c86b7705","56a2d1fae65fd82197cb8c53c367310b3eabe1bbb9fb5a04d28e3e3520e4f702","6c84bae345b9147082b17371e3dd5d42775bddce91f885499017f4607fdaf39f","6cde23eeda1a25c75b2e07d39970f3374105d5eafbaab2a4482be82f272d5a5e","6e2ea3d6190a2968f4a14a23019d3b16870dd2190cd69c8180f7c632d21de68d","700e674a166ca5778255e0e1dc4e9d79ab2acc57b9171b79e65feba7184b3370","7b5b1ac819a3f946d3b2ee07f09149578ae76066d70b44df3fa990add49a82e4","93f617675b2d03af4e72a5333ef89450dfaa5321303ede6e67ba9c9d26878079","b31dc2fccbd42adc73bc4e7cdbae4fc5086cf378979e53ca5d0301838c5682c6","b76324e2dc033a0b2f435f33eb88ff9913c156ef78e153fb210e03c13da746b3","b91328c72635f6f9e0282e4a57da7470c7350ab1c9f48546c0f2866205349d21","badb4d8e58ee08dad957002027830d5c3b06aea446a6a3744483c2b3b745345c","bc5ef13bbc10b5335792360623cc378d52d7e62c2de64660616478c32cd0598e","c1955d5a1dd43198244d47664a5858082a3239766a839b2102a269aaff7a4e25","c60ebcd36f7b240b30788554b6f0782454826a0ed765d8430652621b5de674b9","daf620c2995d193449393d6c62131b3fbd40a63bf7b307a1527856ace637fe88","e047cc068570bac9866237739607d1313b9253c3051ad84738cbb095be0537b2","fe94b4564e865d968414598eea1a6de60adba0c040ba4ed05ac1300de402cd42"],"kind":"locked-python","license":"NOASSERTION","name":"uvloop","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"0.22.1"},{"advisory_scope":"security","artifact_digests":["01859b11fd9fbca670f4d5da00fbac282cfea9bd67a2125d8b2833a3b5617ea9","01ea8d66f0693b9b60a6541c8d10263091ca9a9060d242f3c1f3143f9aad2c98","054dc20fd2e3132b4c3883b4a00d72fd6e1f56fdaf89fccd12e8057d74cd74d7","094b9b70103d4e963499bdea001ee3c2697b144cd9ae6218a62c0f89ec9e31db","0a37faaed405c67e28e6be45a1fa4f206ef5a2860f27c237db9fa30704c38242","0c4997d4e4a55f0d02b6cde327322daf3a0400e5df6c6b15948994bf72497925","0cb4d80e212f116474a545c21c912b445f16bb0cef9e6a73a498164223e14e2f","0d191c054d0715c3c95c99df9b8dbf6fd096d8c1e021e8f212e1bd8bc444ccb5","0e831a271c035d89789cffc386b6aa1375f39f1cd25eb7ca0997e4970d152fc5","10d86db20695afe7997ac9e1717637d6714a8d0220458c33f3d2061f54cec427","1bc6195825b7dcd217968bb1f801a60fd4c16e8eeab5bedc7fe917d7d5995ab4","20aa0e708b920bde876a4aa82dc7dd6ebea228a63a67cda6632c2fc87b787efa","23282a321c8baf9b3a3c4afff673f9fe65eb7fdc2338d765ccad9d3d1916a5ba","2581a94056e55d7d0a31a823ea92bf73749c489ca2285bfdc0fbe6b2bb49d50c","2995c176de7692b86a2e4c58d9ec718f753150a979cb4a754e2b4ffa38e70906","2cb93af48550faf1cea04c303107c8b75833de7013e57ce27d3b8d21d8d0f58c","2d95ddc1eb6914154253d239089900813f6a767e174b8e6a50e7fdacb7e4236c","3416ff151bb6b5a8d8d11664974fbef4d9305b9b2957839ab5a270468fd8df30","3651aa7058595e9cfb75d35dd5ada2bf9f48a5b8a0f3562821d3e210c507e077","41bc1199f7523b3f82843c88cbb979180c949caef0342cf90968f178e5d49b01","43d818978d06062d9b22c4fab2ebe44cf5213d42dc8e62bda8c2760cfa2eeb33","4429f3b105524a10b72c3a819b091c495d2811d419c1e1e8df773a5a5974f831","4543579a9bdb0c9560039b4ffddbdb39545707659fbc430ce4c10f3f68d557f9","4674d49eb94706dfe666c069fc0a1b646ffcf920473492e209f6d5f60d3f0cc2","4c887eba18b7945ac73067a8b4a66f21cd46c2539b2bc68588f7be6c7eb6d26b","4e4ff8e37f99cf1da89e255e07c9c4b37c214038c4283707bdec308cb1b0ea1f","4f34e26a19f91f710c08e0183429f0d1d15df734e6bc78c31e77b9ea9c433658","53b2290c92e0506d102cd448fbc610d87079553f86caa39d67440856a8b8bba5","56d8641cf834c2836922899105bd3ce3d0dfc69291d52edf0b4d0436829b34c0","57a2d9fa4fb4c2ecae57b13dfff2c7ab53e21a2ba674fe9f05506680fcdcc0d7","63ac26eefbf4af1741247d6fb68b11c49a25b2f7413fbd318a83a12aaa9cf666","6543cf55d170003296d185c0af981f3e1311564907e1f4e08671fc7693a890a5","704fd259e332e01f9b9c178f4bce9e49027e5587cc2600eeeaf8e76e1c846201","71283b39fd17e5408eb123bd37aeecfd9d54c81fc184421943208aadb879d103","7571e4464cb6e434958f867f7f730b8ab0b75e3f8e5eac0499168486ab3c33a8","772b80df316480d894a0e3165fdd19cf77f5d17f9a787f94029465ad0e3529d1","7a2cffd17d27d2ecbb310c2b1d8174f222a5495b1a721894afa88ec11e25b898","7a7ce236284f002a156f70add88efe5c70879cccbb658be0822c54b1306fc09d","7ba0480b9a74af058f43b337e937a451e109295c420916d68ad24e3dc02f5e44","86bc13c25a8d1fcd70b51d0ce7c9b65e90de5666fcbfd3e34957cc73ee19aeb5","89d8c2394a065ca86f5d2910ff263ae67c127e1376ccc4f9fc35c71db879f80a","8f200104103feb097de4cab8fe4f5dd18a2026934c7dea98c55a2f5fd6d5a33b","8f70d8b291ef6e88d19b1f297a6905ddb978888d9272b0d05e6f53309856bcfc","8fa585ede612ee9f9e91b18bebf9ba11b9ae29a4e3a0d0cf6fca3e382133f0d5","9342472aff9b093c5acd4f6d8f70ae0937964ab56542502bcf5579782da69ae8","9649193aa27bd9ff2e80ff29bfaa93085496c7a3a377592823cc58b77ee88add","9f04b092229ad2c50126dd3c922c8822e51e605993764a33058d4a791ab42281","a0f27f01bee51861392bb6b7c4fdb290b27d1eb194e9e28788d68102a0e898d9","a204794696ffb8f9b10fba6f7cb5216d42f3b2b71860ccac6b6e42f5f10973b0","a711b51aec4370d0dcda5b6c09463206f133a5759341d7744b953a7b62e1100e","a88fc94e647bc4eec523f1caa540258eb71d14278b9daf72fa1e2658a98df0f0","ae99b14c5f21e026e0e9d96f40e07d8570ebee6cafd9d8fc318354606daa7a28","b0ef001f8c25ad0fa9529f914c1600647ecd0f542d11c19b7894768c67b6acb7","b141a4891c995a039cd89e9a49e62df1dc8a559a5d1a6e4c7106d16c12777a55","b4e77f6a55f858504069abd35d336a637555c09bca453dde1ee1e5ada8a6a1fb","b8c8358484d5fa12ef34f05b7f4168eaf1932f408725ff6d023c33ec17bd79d4","b974946a10af379d425e2eef5b62f5c6ebeaccf91d45eaad6f5b27ecd4f91aa0","b9909cc2b48468b575eefa944919e1fe8a36c5849d5c7c168f80a8c1db69398e","b9f732dc58b2dbe69e464ccf8fff7a03b0dd0be439da4c0720d3558527d3d6b4","bb7e52ecf68ba46d22df23467b87cffeb2146908aa523ebfe803019618cfda06","bc13eb17538be00c874699dc0abe4ee2bc8d50bb1166a6b9e175ef3fd7eb8f26","c0db965c5f79aa49fe672d297cf1febc5ad149b658594944f49a54a2b96270a7","c525543d91961c6955b2636b308569e84a1d1c5f5f2932041ab9ef46422f43e3","c5c19526f4e54a00f2666a6c0e9e40d582c09e865055ea7378bf0009aab857b3","c995fba777f1ea992f090f9236e9284cf7a5d1a0130dd5a3d82c598cacd76838","ca148d73dea36c9763aaa351e4d7a51780ec1584217c45276f4fe8239c768b71","d158cd89df6053823533e06fb1d73c549133bff5f0396170c0e53d9559340717","d20029a60a71a052a24c4db7673bc4de39ab89adbaccbfb5d67987c5d73f424d","d413349d565dab74297f2a63e84a097936be69bf8f3b3801f27f380e32040f44","d4a4b147f5dca2a5d325a06a832fb43f345751adfbc63204aec30e0d9ca965a2","d516b3283a758e087841aedb8031549fb41ced08f3db10aa6d2bf32dc042525b","d73a585accffa5ae39c17264c36ec3166d2fad7000c780f5ef83b2722afb9dd2","dbd6c97045dad81227c8d040173da044c1de08de64a5ea8b555da4aee1d5fa22","e0618518f282c4ebff60f5e5b1247b6d91bb8b9f4476947563a1e74acc66f3c6","e140ed30ebde76796b686e67c182cff10ea2fbab186fafd1560f74bb5a473a6e","e2ca07fa7d89195ec0865d3d285666286740bfa83d83e5cee204043a31ecc165","e53a384f76b631c3ae5334ce6a52f0baa3a911eb94a4eac7f160079868b716d5","eb283ee99e21ad6443c8cdb06ac5b34b1308c329cbdf03fa02b445363714c799","f155b3a1b2a5fc89cdc70d47ee5d54e3b75e88efa34982028a35daef9ba00379","f22943b7770483f6ea0721c6b11d022947a98eb0acae14694de034f4d0d38925","f28b2725eb8cce327b9b3ab02415c853011dc55c95832fe90de6bc56f5315f72","faea288b6f0ab1902ef08f4ca6de005dccf856c4e0c4f21b8c5fce02d90a1b08","fff610d7bb2256a317bb1e96f0d7862c7aa8076733ee5df0fd41bbe76a24a4f4"],"kind":"locked-python","license":"NOASSERTION","name":"watchfiles","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"1.2.0"},{"advisory_scope":"security","artifact_digests":["0352f5b38b40e857b6428d468fa21dbb4dd4a567d933c26d9831b4efe1b92f43","0704df094b2d5fa7f6f410925a594c2a5c9a09167731a76292e5410934208209","0b8d13ceabc5c60995f201b5211d76876e17e68706ebf5d3bc666b32eefff1a6","0c64c024ddf7a35331b21fcddb562a039c275d2c82e8c2d12939e7da23997270","187323204c3b2fc465e8fc2609e60437c521790cb9c1acb49c4c452a33e57f37","1ae4a686a662964a6671069f84f7f908cc3475e782227726b0c622c715962105","1facd189d8190af30487a55b4c3688484dd50801628a3b5b2ccd26db08e67057","2237081454846fb40403a80ba86d82e2038b9c45865ab96af0abe7d002a91045","23e545ea8ae4263e37cdfd4e22a217f519e48e432728bc461185bbf585f38a83","299468cbe42e2b9981134c7c51d99387d8a7bf562b00183b3eec53f882846dad","2bd3e12cd9afbe2baedae0b1eeade8ba64329b60fe2f9abdc966bd10fd2c2ef5","2c0e0857c30bbbc2bb5c30687508f0b7ec19aa026cd9f2ff8424d0fee42dcc07","2c1c85f61bc9d5eac57ce705d848dc2d2ce3680638300bf4e1da7d749e2cf4ce","2ed64e5a97b0b97a0b66e18bfe281317a75fbbd5afe692f939ea8d14a4292f2c","30c379d5b207d3a7f0ba4c2e4602a895b0bcc63fb5f5371a4ae7fbddb03b672b","353f3bc6e058ac1ccab4b3588e8598837a8c04cfc8351233e6d523be675d844c","35f41979c8623df9bd30d949d82010a8fda5c56ff12cd8508a5b7272b6d4b53a","36069b74671e7e667f48a7484249f84c45a825a134c8b1bdc01875d0daa10d79","39c7e7730be33b8f0cd6f0aa8e8c82f9cdd1813f159765e073b2ece65f4824b5","39e947b1f5fdab045174306e3916785bf3ed537648acc1549827c08c33b10953","3c3d2cbd1602593bad49bd86fa3fbb25407d87a3b4bf8857c0ac5ac4914e1901","45c5ea55446171949eb99fd34b771ceddd511ca21958d40d0197ced33159e5ee","4a6db7972d52bc1b66cefe2246902e256cbaebc9ba8a45eac09343d7eb6671b2","4e969170c3b08e1d8dabd990fef1fa702c4233aeaabec33f871806e444f6a0e4","520b0fd0395f075febb283c76755af724ab9fd19dffa4f3bfd18cb4e622790a3","587f83c2ce8a5d628e166384d77fa7f0ac69b9007d515ab442123e6615aa8da3","589f8842521c8307684ce0b40ce4ad70c5e0aa46484c6f1225a94ef4b8970341","5dd0e666b5931c0509cf65714686a1c5126771e663a79ac5d40da4f58b1f9502","5f5218de1ed047385ca53744caba9435d65f75d008364970a3fae95a05812cf9","63339bc8c63c86a463177775cb7c677691f5bcfac7b3b2f01b286d42acd41600","638cf57c48b4ad8ac1ff1e453f4f97db2426b690ddc111e6da96b27b4a340bc3","67b56828712f5fa7852de4c0265c28827311a657a4d275b7312ed0d1a918bee4","6852c9f653966c16109d3b6f31181fd734f7914927e3f0fa1117af7a18c9aa21","6eb604a4167f0a0d53c2243dfc667a29f0b43c3436057184e070bb82a1000fa2","70bd789afab579602968c39f21cb925466505f3edff22f0ae852bca54978a4f9","7143aa09a67e1c013be44e81a88dfe90fc6244198ab86c7edd064152cf619805","7289d899c79e763e6221c8dcb8959361cb43274418538d7c7ad16a43b01d12f9","7358ff21632b5d062707f73e859c824f1c3807e73d8ca25e71caca7c4cdcf145","75c98e3920039d0edff03b74478ada504b7ce3a1bc406db2cabfca84320f7baf","7acb811fad08e611755800d1560e395c67e11a6bd563598ea6abb319afb86938","81495f9c0085361c582efbc3207fb877174cfe03370f17d9cd70624404aa526f","82d1c2cab3c133e9d059b3a5420bed9376bd30e21c185c63dda4ddadf6ddda47","83bdabafef431247e6b11a9aab8a0893fd8e82e1ed95b32e0373625b03ffce4a","84c170c6869633536921e4474b1cce7254c0c9b0053ef5725f966cee47e718e4","856bdd638f8277f86465057bfdd4da097c73058fb0f9d2bd5baea29e2bf2d367","8613129a2533f08de24505e69a3e403cedaadae49abdb043c4d170ca71b7e4bd","8e9c4e369fc181b2d41a99e01477215cecdc8546a39f7d41a59cc0a7065a0b09","8fdf0b00d0d1f30d1f06a92cab46fe542eec3eb302a7aee7163f142d0780f216","9003a1fde1c21a322a3ca3fa0c4bda8c639da81dbc925162766086643b05ba87","97f15b6d9ea9c2eaf6ccab964a082b09bfa6634a495bb0c2e9e7ee6943f58976","98ab58a4faa72b46da0127ccc1931dcbfc0985b0778892300a092185910c4cbe","9a3f125e44c3e34d61d111652e608e0f5b85ce08c225c8d56ad0eb822fa40030","9b3b021d0ed4bc16eea9775f62c9fa71acdacba0fc790b38581754dedf29ca60","9cb074d150e4ad2a77aa8a332c2be85f3f64f2681519d2570c1225c12c9821ff","9dba74233c8c3ce368850818c98354dad2570f57231b3fd3bd00d7aa57628881","a0285df7925657ad65a65fb8dc330808bce082827538fd50ef45fa12d1fc5bca","a24d1f35aef07d794a16c853c688e74956c50239bec37b4f2de080056046419b","a3cd6c9b798218798f4bb7b2e71c38f0e744bb94ca537b13376f88019d46384d","a58532c49a851bcb481e58c1be23b315c17fe2fbbed509d75aeea12f543d2c15","a5bf9c23f197b4ec88290fd5463f33db67362a1bb10f85fc2e8e7627f0ddab97","a71b73d143991714144e159f767b698f03c4a70b8a65ae1733b650cff488045b","a9b1d7a63cba8e6b9b77e499a81eab29d31100298d090ad4507d1048c0b9cae0","ad9411eded8988b879be6038206698bf7106c85a78f642c004485bcb95be17eb","b0232ed141cec3df2af5a3959a071c51f40036336b0d37e17faf9ef52fc73e47","b22b1f4950f6ab7126623329c3b47b3b90a14c05db517f2db2a026ad6c928352","b43fcfb521ac2f34ba80b7b8ea16303e4ad82dd8af667bf40839ad3a5d37b164","b6aa3f7ad345cf3862c21f4fbf2ef5e14d911348476c2845e137c091fe3a3f0b","b8ef8b1c8d6bd029a475ac432e730fba2dfd456715d26c473e2a82291024b99c","b9f5d83f80f4d7c4bba6d97f3755ac05850c784dce0fd2ab371c4e41172f53ff","bedbc5efeb96621aa2921d2d92608246691399418cac22acba427eb11877ea1f","bef52d327d70fa75dad93ee61ea2cb1d1489aca9f35c188833563f5a3b4df0a5","c14b6634af01541e4efe2954fd8f263386f7aa6d37c01e55dd8109fd17661452","c39907f1eaf11f6277def65aa02d68f30576b693d0c1ca332aafa3caa723ac6d","c3e99757f5baafe20fc598e202ea6f5b0b265186ad38d0a17bd8beca16296955","c5149dfe490ec7e5ee5dbf624c642fb725f93a5575c7f00ab594ca9eddb8dd81","c54fe94fb2f11e11b48920c5f971e298cec73ac35db56efe57a49db63dfc95d4","c5cf88e3faa2f7931bc6baeee7599c97656a3f6ac7f831f4fccba233e141783a","cc0c6a6eef613c7da32d4fb068f82ef834b58134f6a16b54e6c1e5bf9529ab3d","cd68f0914f3b64694895bc5e9b14e8b447e41d7bf5ffaf989bb8dcb5e2dfdce7","d0f38f4c3e9b359e257c339c2cc1967ccaeedb102e57c1c986bdce4bf4f32268","d0fb4b46f121eccd539353baebd1083a8767a9a351109453d1d1caecd1ba40c2","d19c9067e1fe9490f974bffbc0e443b80a7674c5efb4980c429cc00771f07c5a","d440ff0c6c7469ad59c0a412c383c235935b43635e89425e3f6a0c36de90c31b","e22e9e3719f5131bd62da4db63c8da63eb8c91cc99e16c1cbd122f130e1ae07a","e2fb33ccb16ee40a95cc676d7b0ff451a9a2632f11a0dbc2e666326892b2e1de","e7d6014888a0632e1ed7a4095248bb3095232999447f2d83bfb1900987dd9ed9","eeab6d27f51c7e579023c971f5e6dff200deadf01faf6831beaecd32052dfaef","f881fca0a45dd6789939bd6637cd98169b92f1c3fdc78262f2cb9ec2cb1f324e","f9f4fb9ae8b802e55609685db98382d48fd3feb1397804e1e774968dea0f28c7","fd847ab82133015afe65d778e7966ab42dba16bd7ad2e5b8a7918db6539f3f94","fef2debfe7f7ebdda12176f26166f95b7af17af05ba06150fcf889032e0213e9","ff9b000064b88787ba9f7a3cb2af2b68a658ca5aad76458a46469e7124b678a0"],"kind":"locked-python","license":"NOASSERTION","name":"websockets","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"16.1"},{"advisory_scope":"security","artifact_digests":["d4142d4d56d46f449d6f00536a73625a871cba040f0bc1a2e305a04578f07d1e"],"kind":"locked-python","license":"NOASSERTION","name":"win-unicode-console","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"0.5"},{"advisory_scope":"security","artifact_digests":["146a70593b44b79d71772a8b60ee992e2b02d24ebdd3788889a5559b44812754","3844a0592952420c7a3ee0bbdef45fe0666a12c1e0292697b5697407814147ec","6b62018986ae575406680fa876006ee6fcfaff730052106dc3e88ddcac9bf088","84ebae8afa82b0b41ae6f4947859a03f491e23da1013f4e0892905fd6f523998","9fe18e0da101608a31249852f451235f2443eed5406bfe0cbf910a207114cfba","a5eb570baa7093eb7fd81b6f5592c6622e09cbc85ef09ab00f3794cffbc5c91c","ab13d236f24e906cb3ec386b5e85d4e4bd5783f30656ee4c4dc090599b69661d","b1c8b2e41bb06932db66cd9a73dc5ae41086861a89287d45878880596c335d2b","f38e19b0bd3f6af8366ac789778d0c39e359a897473b86c3ff6f9b0c255e631e","f9ea9e8e74cad2234c844d89b677a74e97d0858c05753e286b594aa6a6fa2b23"],"kind":"locked-python","license":"NOASSERTION","name":"yara-x","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"1.19.0"},{"advisory_scope":"security","artifact_digests":["0063adad533e57171b79db3943b229d40dfafeeee579767f96541f106bac5f1b","044a09d8401fcf8681977faef6d286b8ade1e2d2e9dceda175d1cfa5ca496f30","081c2bf54efe03774d0311172bc04fedf9ca01e644d4cd8c805688e527209bdc","08d3a33218e0c64393e7610284e770409a9c31c429b078bcb24096ed0a783b8f","0a6377060e7927187a42b7eb202090cbe2b34933a4eeaf90e3bd9e33432e5cae","0c3063e5c0a8e8e62fae6c2596fa01da1561e4cd1da6fec5789f5cf99a8aefd8","17076578bce0049a5ce57d14ad1bded391b68a3b213e9b81b0097b090244999a","1a97e42c8a2233f2f279ecadd9e4a037bcb5d813b78435e8eedd4db5a9e9708c","1e831894be7c2954240e49791fa4b50c05a0dc881de2552cfe3ffd8631c7f461","204e7a61ce99919c0de1bf904ab5d7aa188a129ea8f690a8f76cfb6e2844dc44","221ce1dd921ac4f603957f17d7c18c5cc0797fbb52f156941f92e04605d1d67b","2783d9226db8797636cd6896e4de81feed252d1db72265686c9558d97a4d94b9","297a2fe352ecf858b30a98f87948746ec16f001d279f84aebdbd3bd965e2f1bd","2a263e76b97bc42bdcd7c5f4953dec1f7cd62a1112fa7f869e57255229390d67","2d07d21d0bc4b17558e8de0b02fbfdf1e347d3bb3699edd00bb92e7c57925420","3065657c80a2321225e804048597ad55658a7e76b32d6f5ee4074d04c50401db","310fc687f7b2044ec54e372c8cbe923bb88f5c37bded0d3079e5791c2fc3cf50","33a29b5d00ccbf3219bb3e351d7875739c19481e030779f48cc46a7a71681a9b","34263e2fa8fb5bb63a0d97706cda38edbad62fddb58c7f12d6acbc092812aa50","36348bebb147b83818b9d7e673ea4debc75970afc6ffdc7e3975ad05ce5a58c1","374423f70754a2c96942ede36a29d37dc6b0cb8f92f8d009ddf3ed78d3da5488","3b075301a2836a0e297b1b658cb6d6135df535d62efefdd60366bd589c2c82f2","3f6d2c216318f8f32038ca3f72501ba08536f0fd18a36e858836b121b2deed9f","47a55d6cf6db2f401017a9e96e5288844e5051911fb4e0c8311a3980f5e59a7d","49016d82f032b1bd1e10b01078a7d29ae71bf468eeae0ea22df8bab691e60003","491ac9141decf49ee8030199e1ee251cdff0e131f25678817ff6aa5f837a3536","4b156914620f0b9d78dc1adb3751141daee561cfec796088abb89ed49d220f1a","4da31a5512ed1729ca8d8aacde3f7faeb8843cde3165d6bcf7f88f74f17bb8aa","4fb1ac3fc5fecd8ae7453ea237e4d22b49befa70266dfe1629924245c21a0c7f","50713f1d4d6be6375bb178bb43d140ee1acb8abe589cd723320b7925a275be1e","507cc19f0b45454e2d6dcd62ff7d062b9f77a2812404e62dbdaec05b50faa035","533ded4dceb5f1f3da7906244f4e82cf46cfd40d84c69a1faf5ac506aa65ecbe","5d699376c4ca3cba49bbfae3a05b5b70ded572937171ce1e0b8d87118e2ba294","5ec8356b8a6afcf81fc7aeeef13b1ff7a49dec00f313394bbb9e83830d32ccd7","5f3224db28173a00d7afacdee07045cc4673dfab2b15492c7ae10deddbece761","68cf6eacd6028ef1142bc4b48376b81566385ca6f9e7dde3b0fa91be08ffcb57","73e68edf6dfd5f73f9ca127d84e2a6f9213c65bdffb736bda19524c0564fcd14","7b3a85525f6e7eeabcfdd372862b21ee1915db1b498a04e8bf0e389b607ff0bd","7b54b9c67c2b06bd7b9a77253d242124b9c95d2c02def5a1144001ee547dd9d5","7d37fb7c38f2b6edab0f845c4f85148d4c44204f52bc127021bd2bc9fdbf1656","7dafe10c12ddd4d120d528c4b5599c953bd7b12845347d507b95451195bb6cad","7e7ebcdef69dec6c6451e616f32b622a6d4a2e92b445c992f7c8e5274a6bbc4c","810e19b685c8c3c5862f6a38160a1f4e4c0916c9390024ec347b6157a45a0992","822519b64cf0b474f1a0aaef1dc621438ea46bb77c94df97a5b4d213a7d8a8b1","8372a2b976cf70654b2be6619ab6068acabb35f724c0fda7b277fbf53d66a5cf","84f9670b89f34db07f81e53aee83e0b938a3412329d51c8f922488be7fcc4024","863297ddede92ee49024e9a9b11ecb59f310ca85b60d8537f56bed9bbb5b1986","86746bef442aa479107fe28132e1277237f9c24c2f00b0b0cf22b3ee0904f2bb","8ae44649b00947634ab0dab2a374a638f52923a6e67083f2c156cd5cbd1a881d","8cec2a38d70edc10e0e856ceda886af5327a017ccbde8e1de1bd44d300357543","8d027d56f1035e339d1001ac33eceab5b2ec8e42e449787bb75e289fb9a5cd1d","904065e6e85b1fa54d0d87438bd58c14c0bad97aad654ad1077fd9d87e8478ed","91e72cf093fd833483a97ee648e0c053c7c629f51ff4a0e7edd84f806b0c5617","990de4f680b1c217e77ff0d6aa0029f9eb79889c11fb3e9a3942c7eba29c1996","9ac374123c6fd7abf64d1fec93962b0bd4ee2c19751755a762a72dd96c0378f8","a1cab588b4fa14bea2e55ebea27478adfb05372f47573738e1acc4a36c0b05d2","a296ca617f2d25fbceafb962b88750d627e5984e75732c712154d058ae8d79a3","a46d1ab4ba4d32e6dc80daf8a28ce0bd83d08df52fbc32f3e288663427734535","a4f4d6cd615823bfc7fb7e9b5987c3f41666371d870d51058f77e2680fbe9630","a7624b1ca46ca5d7b864ef0d2f8efe3091454085ee1855b4e992314529972215","a9532c57211730c515341af11fef6e9b61d157487272a096d0c04da445642592","abb2759733d63a28b4956500a5dd57140f26486c92b2caedfb964ab7d9b79dbf","abb8ec0323b80161e3802da3150ef660b41d0e9be2048b76a363d93eee992c2b","afb00d7fd8e0f285ca29a44cc50df2d622ff2f7a6d933fa641577b5f9d5f3db0","b3177bc0a768ef3bacceb4f272632990b7bea352f1b2f1eee9d6d6ff16516f92","b32c37a7a337e90822c45797bf3d79d60875cfcccd3ecc80e9f453d87026c122","b6067060d9dc594899ba83e6db6c48c68d1e494a6dab158156ed86977ca7bcb1","b975866c184564c827e0877380f0dae57dcca7e52782128381b72feff6dfceb8","c4c17bad5a530912d2111825d3f05e89bab2dd376aaa8cbc77e449e6db63e576","c557165320d6244ebe3a02431b2a201a20080e02f41f0cfa0ccc47a183765da8","cb84b80d88e19ede158619b80813968713d8d008b0e2497a576e6a0557d50712","cdfcce633b4a4bb8281913c57fcafd4b5933fbc19111a5e3930bbd299d6102f1","d1dd47a22843b212baa8d74f37796815d43bd046b42a0f41e9da433386c3136b","e196952aacaf3b232e265ff02980b64d483dc0972bd49bcb061171ff22ac203a","e30dd55825dc554ec5b66a94953b8eda8745926514c5089dfcacecb9c99b5bd1","e434a45ce2e7a947f951fc5a8944c8cc080b7e59f9c50ae80fd39107cf88126d","e51b2cf5ec89a8b8470177641ed62a3ba22d74e1e898e06ad53aa77972487208","e7484b9361ed222ee1ca5b4337aa4cbdcc4618ce5aff57d9ef1582fd95893fc0","e7977781f83638a4c73e0f88425563d70173e0dfd90ac006a45c65036293ee3c","e89418f65eda18f99030386305bd44d7d504e328a7945db1ead514fbe03a0607","ec87ccc31bd21db7ad009d8572c127c1000f268517618a4cc09adba3c2a7f21c","ee8e3fb34513e8dc082b586ef4910c98335d43a6fab688cd44d4851bacfce3e8","f5f0cbb112838a4a293985b6ed73948a547dadcc1ba6d2089938e7abdedceef8","f8fdbcff8b2c7c9284e60c196f693588598ddcee31e11c18e14949ce44519d45","f9312b3c02d9b3d23840f67952913c9c8721d7f1b7db305289faefa878f364c2","f9a1e9b622ca284143aab5d885848686dcd85453bb1ca9abcdb7503e64dc0056","fecd17873a096036c1c87ab3486f1aef7f269ada7f23f7f856f93b1cc7744f14"],"kind":"locked-python","license":"NOASSERTION","name":"yarl","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"1.24.2"},{"advisory_scope":"runtime","kind":"project","license":"MIT","name":"zagrosi-forge","source_authority":"pyproject.toml","version":"0.2.0"},{"advisory_scope":"security","artifact_digests":["25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f","4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602"],"kind":"locked-python","license":"NOASSERTION","name":"zipp","source_authority":"uv.lock;registry=https://pypi.org/simple","version":"4.1.0"}],"inventory_version":"1.0","lock_digest":"30779d844bfa2df993d51bb727256c79ab3f175cd21787eecd46ec40bb14b9fd"} diff --git a/pyproject.toml b/pyproject.toml index 5e2aa1b..c64e5d6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -2,12 +2,37 @@ name = "zagrosi-forge" version = "0.2.0" description = "Zagrosi Forge Codex-native project, planning, and TDD implementation skills" -requires-python = ">=3.11" +readme = "README.md" +requires-python = ">=3.11,<3.15" license = "MIT" authors = [{ name = "Zagrosi" }] -[project.optional-dependencies] -dev = ["pytest>=8"] +[project.scripts] +zagrosi-forge = "zagrosi_forge.install:main" + +[build-system] +requires = ["uv_build==0.11.28"] +build-backend = "uv_build" + +[dependency-groups] +test = [ + "hypothesis>=6,<7", + "mypy>=1.15,<2", + "pytest>=8,<10", + "ruff>=0.14,<1", + "uv-build==0.11.28", +] +security = ["plugin-scanner==2.0.274"] + +[tool.uv.build-backend] +module-name = "zagrosi_forge" +module-root = "src" [tool.pytest.ini_options] testpaths = ["tests"] + +[tool.ruff] +extend-exclude = ["src/zagrosi_forge/_vendor"] + +[tool.mypy] +exclude = ["^src/zagrosi_forge/_vendor/"] diff --git a/src/zagrosi_forge/__init__.py b/src/zagrosi_forge/__init__.py new file mode 100644 index 0000000..213567c --- /dev/null +++ b/src/zagrosi_forge/__init__.py @@ -0,0 +1,3 @@ +"""Trusted Python package for Zagrosi Forge.""" + +__all__: list[str] = [] diff --git a/src/zagrosi_forge/_vendor/__init__.py b/src/zagrosi_forge/_vendor/__init__.py new file mode 100644 index 0000000..2d07ed0 --- /dev/null +++ b/src/zagrosi_forge/_vendor/__init__.py @@ -0,0 +1 @@ +"""Audited third-party runtime sources; do not edit manually.""" diff --git a/src/zagrosi_forge/_vendor/tomlkit-LICENSE b/src/zagrosi_forge/_vendor/tomlkit-LICENSE new file mode 100644 index 0000000..44cf2b3 --- /dev/null +++ b/src/zagrosi_forge/_vendor/tomlkit-LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2018 Sébastien Eustace + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/src/zagrosi_forge/_vendor/tomlkit/__init__.py b/src/zagrosi_forge/_vendor/tomlkit/__init__.py new file mode 100644 index 0000000..fbc7a12 --- /dev/null +++ b/src/zagrosi_forge/_vendor/tomlkit/__init__.py @@ -0,0 +1,59 @@ +from zagrosi_forge._vendor.tomlkit.api import TOMLDocument +from zagrosi_forge._vendor.tomlkit.api import aot +from zagrosi_forge._vendor.tomlkit.api import array +from zagrosi_forge._vendor.tomlkit.api import boolean +from zagrosi_forge._vendor.tomlkit.api import comment +from zagrosi_forge._vendor.tomlkit.api import date +from zagrosi_forge._vendor.tomlkit.api import datetime +from zagrosi_forge._vendor.tomlkit.api import document +from zagrosi_forge._vendor.tomlkit.api import dump +from zagrosi_forge._vendor.tomlkit.api import dumps +from zagrosi_forge._vendor.tomlkit.api import float_ +from zagrosi_forge._vendor.tomlkit.api import inline_table +from zagrosi_forge._vendor.tomlkit.api import integer +from zagrosi_forge._vendor.tomlkit.api import item +from zagrosi_forge._vendor.tomlkit.api import key +from zagrosi_forge._vendor.tomlkit.api import key_value +from zagrosi_forge._vendor.tomlkit.api import load +from zagrosi_forge._vendor.tomlkit.api import loads +from zagrosi_forge._vendor.tomlkit.api import nl +from zagrosi_forge._vendor.tomlkit.api import parse +from zagrosi_forge._vendor.tomlkit.api import register_encoder +from zagrosi_forge._vendor.tomlkit.api import string +from zagrosi_forge._vendor.tomlkit.api import table +from zagrosi_forge._vendor.tomlkit.api import time +from zagrosi_forge._vendor.tomlkit.api import unregister_encoder +from zagrosi_forge._vendor.tomlkit.api import value +from zagrosi_forge._vendor.tomlkit.api import ws + + +__version__ = "0.15.0" +__all__ = [ + "TOMLDocument", + "aot", + "array", + "boolean", + "comment", + "date", + "datetime", + "document", + "dump", + "dumps", + "float_", + "inline_table", + "integer", + "item", + "key", + "key_value", + "load", + "loads", + "nl", + "parse", + "register_encoder", + "string", + "table", + "time", + "unregister_encoder", + "value", + "ws", +] diff --git a/src/zagrosi_forge/_vendor/tomlkit/_compat.py b/src/zagrosi_forge/_vendor/tomlkit/_compat.py new file mode 100644 index 0000000..2da7099 --- /dev/null +++ b/src/zagrosi_forge/_vendor/tomlkit/_compat.py @@ -0,0 +1,20 @@ +from __future__ import annotations + +import contextlib +import sys + + +PY38 = sys.version_info >= (3, 8) + + +def decode(string: str | bytes, encodings: list[str] | None = None) -> str: + if not isinstance(string, bytes): + return string + + encodings = encodings or ["utf-8", "latin1", "ascii"] + + for encoding in encodings: + with contextlib.suppress(UnicodeEncodeError, UnicodeDecodeError): + return string.decode(encoding) + + return string.decode(encodings[0], errors="ignore") diff --git a/src/zagrosi_forge/_vendor/tomlkit/_types.py b/src/zagrosi_forge/_vendor/tomlkit/_types.py new file mode 100644 index 0000000..3585d56 --- /dev/null +++ b/src/zagrosi_forge/_vendor/tomlkit/_types.py @@ -0,0 +1,90 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING +from typing import Any +from typing import TypeVar + + +WT = TypeVar("WT", bound="WrapperType") + +__all__ = [ + "_CustomDict", + "_CustomFloat", + "_CustomInt", + "_CustomList", + "wrap_method", +] + +if TYPE_CHECKING: # pragma: no cover + # Define _CustomList and _CustomDict as a workaround for: + # https://github.com/python/mypy/issues/11427 + # + # According to this issue, the typeshed contains a "lie" + # (it adds MutableSequence to the ancestry of list and MutableMapping to + # the ancestry of dict) which completely messes with the type inference for + # Table, InlineTable, Array and Container. + # + # Importing from builtins is preferred over simple assignment, see issues: + # https://github.com/python/mypy/issues/8715 + # https://github.com/python/mypy/issues/10068 + from builtins import dict as _CustomDict + from builtins import float as _CustomFloat + from builtins import int as _CustomInt + from builtins import list as _CustomList + from typing import Callable + from typing import Concatenate + from typing import ParamSpec + from typing import Protocol + + P = ParamSpec("P") + + class WrapperType(Protocol): + def _new(self: WT, value: Any) -> WT: ... + +else: + from collections.abc import MutableMapping + from collections.abc import MutableSequence + from numbers import Integral + from numbers import Real + + class _CustomList(MutableSequence, list): + """Adds MutableSequence mixin while pretending to be a builtin list""" + + def __add__(self, other): + new_list = self.copy() + new_list.extend(other) + return new_list + + def __iadd__(self, other): + self.extend(other) + return self + + class _CustomDict(MutableMapping, dict): + """Adds MutableMapping mixin while pretending to be a builtin dict""" + + def __or__(self, other): + new_dict = self.copy() + new_dict.update(other) + return new_dict + + def __ior__(self, other): + self.update(other) + return self + + class _CustomInt(Integral, int): + """Adds Integral mixin while pretending to be a builtin int""" + + class _CustomFloat(Real, float): + """Adds Real mixin while pretending to be a builtin float""" + + +def wrap_method( + original_method: Callable[Concatenate[WT, P], Any], +) -> Callable[Concatenate[WT, P], Any]: + def wrapper(self: WT, /, *args: P.args, **kwargs: P.kwargs) -> Any: + result = original_method(self, *args, **kwargs) + if result is NotImplemented: + return result + return self._new(result) + + return wrapper diff --git a/src/zagrosi_forge/_vendor/tomlkit/_utils.py b/src/zagrosi_forge/_vendor/tomlkit/_utils.py new file mode 100644 index 0000000..6e04b03 --- /dev/null +++ b/src/zagrosi_forge/_vendor/tomlkit/_utils.py @@ -0,0 +1,162 @@ +from __future__ import annotations + +import re + +from collections.abc import Collection +from collections.abc import Mapping +from datetime import date +from datetime import datetime +from datetime import time +from datetime import timedelta +from datetime import timezone +from typing import Any + +from zagrosi_forge._vendor.tomlkit._compat import decode + + +RFC_3339_LOOSE = re.compile( + "^" + r"(?P(?P\d{4})-(?P\d{2})-(?P\d{2}))?" # Date + "(" + "(?P[Tt ])?" # Separator + r"(?P