From 653e32b1ecf810ce77d00d2b2985874b8a3191ea Mon Sep 17 00:00:00 2001 From: cusma Date: Tue, 20 Jan 2026 14:25:08 -0300 Subject: [PATCH 1/6] docs: update links; deprecate arc69; recommend arc89; add backward compatibility instructions; update ref implementation --- ARCs/arc-0020.md | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/ARCs/arc-0020.md b/ARCs/arc-0020.md index f4cffe55d..88198d94b 100644 --- a/ARCs/arc-0020.md +++ b/ARCs/arc-0020.md @@ -32,7 +32,7 @@ However, the ASA lacks in flexibility and configurability. For instance, once issued, it can't be re-configured (its unit name, decimals, maximum supply). Also, it is freely transferable (unless frozen). This prevents developers from specifying additional business logic to be checked while transferring it (think -of royalties or vesting https://en.wikipedia.org/wiki/Vesting). +of royalties or vesting ). Enforcing transfer conditions requires freezing the asset and transferring it through a clawback operation — which results in a process that is opaque to @@ -59,7 +59,7 @@ The following sections describe: ### ABI Interface The ABI interface specified here draws inspiration from the transaction -reference https://developer.algorand.org/docs/get-details/asa/#asset-functions +reference of an Algorand Standard Asset (ASA). To provide a unified and familiar interface between the Algorand Standard Asset @@ -614,7 +614,7 @@ The metadata **MUST** be immutable. A Smart ASA MUST specify the ID of its controlling Smart Contract. If the Smart ASA also conforms to any ARC that supports additional `properties` -([ARC-3](./arc-0003.md), [ARC-69](./arc-0069.md)), then it MUST include a +([ARC-3](./arc-0003.md), [ARC-89](./arc-0089.md)), then it MUST include a `arc-20` key and set the corresponding value to a map, including the ID of the controlling Smart Contract as a value for the key `application-id`. For example: @@ -631,6 +631,9 @@ controlling Smart Contract as a value for the key `application-id`. For example: } ``` +It is RECOMMENDED to the [ARC-89](./arc-0089.md) ASA Metadata Registry to declare +support for this ARC and to discover the controlling Smart Contract of a Smart ASA. + > To avoid ecosystem fragmentation this ARC does NOT propose any new method to > specify the metadata of an ASA. Instead, it only extends already > existing standards. @@ -694,6 +697,15 @@ This requires: - Associating the ID of the Smart Contract to the ASA (see [metadata](#metadata)). +Existing ASA willing to conform to this ARC MUST specify the controlling Smart Contract +ID as [ARC-2](./arc-0002.md) `AssetConfig` transaction note field, as follows: + +- The `` MUST be equal to `20`; +- The RECOMMENDED `` are MsgPack +(`m`) or JSON (`j`); +- The `` MUST specify `application-id` equal to the controlling Smart Contract +ID. + ### [ARC-18](./arc-0018.md) Assets implementing [ARC-18](./arc-0018.md) MAY also be compatible with this ARC @@ -703,7 +715,8 @@ standard. ## Reference Implementation -A reference implementation is available [here](../assets/arc-0020) +A [reference implementation](https://github.com/algorandfoundation/arc20) is maintained +by the Algorand Foundation. ## Security Considerations From 68c5720262a0a462cebc33cf35ce97ee6c56f9d2 Mon Sep 17 00:00:00 2001 From: cusma Date: Tue, 20 Jan 2026 14:25:32 -0300 Subject: [PATCH 2/6] chore: remove stale ref implementation --- assets/arc-0020/.algokit.toml | 52 - assets/arc-0020/.editorconfig | 10 - assets/arc-0020/.gitattributes | 1 - assets/arc-0020/.gitignore | 180 - assets/arc-0020/.pre-commit-config.yaml | 49 - assets/arc-0020/README.md | 45 - assets/arc-0020/poetry.lock | 2531 -- assets/arc-0020/poetry.toml | 3 - assets/arc-0020/pyproject.toml | 76 - assets/arc-0020/smart_contracts/__init__.py | 0 assets/arc-0020/smart_contracts/__main__.py | 211 - .../smart_asa/SmartAsa.approval.puya.map | 19982 ---------------- .../smart_asa/SmartAsa.approval.teal | 2109 -- .../artifacts/smart_asa/SmartAsa.arc56.json | 1114 - .../smart_asa/SmartAsa.clear.puya.map | 25 - .../artifacts/smart_asa/SmartAsa.clear.teal | 7 - .../artifacts/smart_asa/smart_asa_client.py | 2055 -- assets/arc-0020/smart_contracts/avm_types.py | 17 - assets/arc-0020/smart_contracts/errors.py | 47 - .../smart_contracts/smart_asa/config.py | 15 - .../smart_contracts/smart_asa/contract.py | 604 - .../smart_asa/deploy_config.py | 73 - assets/arc-0020/tests/__init__.py | 0 assets/arc-0020/tests/conftest.py | 306 - assets/arc-0020/tests/test_account_freeze.py | 53 - assets/arc-0020/tests/test_asset_close_out.py | 127 - assets/arc-0020/tests/test_asset_config.py | 140 - assets/arc-0020/tests/test_asset_create.py | 87 - assets/arc-0020/tests/test_asset_destroy.py | 90 - assets/arc-0020/tests/test_asset_freeze.py | 43 - assets/arc-0020/tests/test_asset_opt_in.py | 189 - assets/arc-0020/tests/test_asset_transfer.py | 680 - assets/arc-0020/tests/test_deploy.py | 33 - .../tests/test_get_account_is_frozen.py | 1 - .../arc-0020/tests/test_get_asset_config.py | 1 - .../tests/test_get_asset_is_frozen.py | 1 - .../tests/test_get_circulating_supply.py | 30 - 37 files changed, 30987 deletions(-) delete mode 100644 assets/arc-0020/.algokit.toml delete mode 100644 assets/arc-0020/.editorconfig delete mode 100644 assets/arc-0020/.gitattributes delete mode 100644 assets/arc-0020/.gitignore delete mode 100644 assets/arc-0020/.pre-commit-config.yaml delete mode 100644 assets/arc-0020/README.md delete mode 100644 assets/arc-0020/poetry.lock delete mode 100644 assets/arc-0020/poetry.toml delete mode 100644 assets/arc-0020/pyproject.toml delete mode 100644 assets/arc-0020/smart_contracts/__init__.py delete mode 100644 assets/arc-0020/smart_contracts/__main__.py delete mode 100644 assets/arc-0020/smart_contracts/artifacts/smart_asa/SmartAsa.approval.puya.map delete mode 100644 assets/arc-0020/smart_contracts/artifacts/smart_asa/SmartAsa.approval.teal delete mode 100644 assets/arc-0020/smart_contracts/artifacts/smart_asa/SmartAsa.arc56.json delete mode 100644 assets/arc-0020/smart_contracts/artifacts/smart_asa/SmartAsa.clear.puya.map delete mode 100644 assets/arc-0020/smart_contracts/artifacts/smart_asa/SmartAsa.clear.teal delete mode 100644 assets/arc-0020/smart_contracts/artifacts/smart_asa/smart_asa_client.py delete mode 100644 assets/arc-0020/smart_contracts/avm_types.py delete mode 100644 assets/arc-0020/smart_contracts/errors.py delete mode 100644 assets/arc-0020/smart_contracts/smart_asa/config.py delete mode 100644 assets/arc-0020/smart_contracts/smart_asa/contract.py delete mode 100644 assets/arc-0020/smart_contracts/smart_asa/deploy_config.py delete mode 100644 assets/arc-0020/tests/__init__.py delete mode 100644 assets/arc-0020/tests/conftest.py delete mode 100644 assets/arc-0020/tests/test_account_freeze.py delete mode 100644 assets/arc-0020/tests/test_asset_close_out.py delete mode 100644 assets/arc-0020/tests/test_asset_config.py delete mode 100644 assets/arc-0020/tests/test_asset_create.py delete mode 100644 assets/arc-0020/tests/test_asset_destroy.py delete mode 100644 assets/arc-0020/tests/test_asset_freeze.py delete mode 100644 assets/arc-0020/tests/test_asset_opt_in.py delete mode 100644 assets/arc-0020/tests/test_asset_transfer.py delete mode 100644 assets/arc-0020/tests/test_deploy.py delete mode 100644 assets/arc-0020/tests/test_get_account_is_frozen.py delete mode 100644 assets/arc-0020/tests/test_get_asset_config.py delete mode 100644 assets/arc-0020/tests/test_get_asset_is_frozen.py delete mode 100644 assets/arc-0020/tests/test_get_circulating_supply.py diff --git a/assets/arc-0020/.algokit.toml b/assets/arc-0020/.algokit.toml deleted file mode 100644 index b754f05a8..000000000 --- a/assets/arc-0020/.algokit.toml +++ /dev/null @@ -1,52 +0,0 @@ -[algokit] -min_version = "v2.0.0" - -[generate.smart-contract] -description = "Generate a new smart contract for existing project" -path = ".algokit/generators/create_contract" - -[generate.env-file] -description = "Generate a new generic or Algorand network specific .env file" -path = ".algokit/generators/create_env_file" - -[project] -type = 'contract' -name = 'arc-20' -artifacts = 'smart_contracts/artifacts' - -[project.deploy] -command = "poetry run python -m smart_contracts deploy" -environment_secrets = [ - "DEPLOYER_MNEMONIC", - "DISPENSER_MNEMONIC", -] - -[project.deploy.localnet] -environment_secrets = [] - -[project.run] -# Commands intented for use locally and in CI -build = { commands = [ - 'poetry run python -m smart_contracts build', -], description = 'Build all smart contracts in the project' } -test = { commands = [ - 'poetry run pytest', -], description = 'Run smart contract tests' } -audit = { commands = [ - 'poetry run pip-audit', -], description = 'Audit with pip-audit' } -lint = { commands = [ - 'poetry run black --check --diff .', - 'poetry run ruff check .', - 'poetry run mypy', -], description = 'Perform linting' } -audit-teal = { commands = [ - # 🚨 IMPORTANT 🚨: For strict TEAL validation, remove --exclude statements. The default starter contract is not for production. Ensure thorough testing and adherence to best practices in smart contract development. This is not a replacement for a professional audit. - 'algokit task analyze smart_contracts/artifacts --recursive --force --exclude rekey-to --exclude is-updatable --exclude missing-fee-check --exclude is-deletable --exclude can-close-asset --exclude can-close-account --exclude unprotected-deletable --exclude unprotected-updatable', -], description = 'Audit TEAL files' } - -# Commands intented for CI only, prefixed with `ci-` by convention -ci-teal-diff = { commands = [ - 'git add -N ./smart_contracts/artifacts', - 'git diff --exit-code --minimal ./smart_contracts/artifacts', -], description = 'Check TEAL files for differences' } diff --git a/assets/arc-0020/.editorconfig b/assets/arc-0020/.editorconfig deleted file mode 100644 index e2fda3443..000000000 --- a/assets/arc-0020/.editorconfig +++ /dev/null @@ -1,10 +0,0 @@ -root=true - -[*] -indent_style = space -indent_size = 2 -end_of_line = lf -insert_final_newline = true - -[*.py] -indent_size = 4 diff --git a/assets/arc-0020/.gitattributes b/assets/arc-0020/.gitattributes deleted file mode 100644 index 6313b56c5..000000000 --- a/assets/arc-0020/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -* text=auto eol=lf diff --git a/assets/arc-0020/.gitignore b/assets/arc-0020/.gitignore deleted file mode 100644 index 070829cb4..000000000 --- a/assets/arc-0020/.gitignore +++ /dev/null @@ -1,180 +0,0 @@ -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -share/python-wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.nox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -*.py,cover -.hypothesis/ -.pytest_cache/ -cover/ -coverage/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py -db.sqlite3 -db.sqlite3-journal - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -.pybuilder/ -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# IPython -profile_default/ -ipython_config.py - -# pyenv -# For a library or package, you might want to ignore these files since the code is -# intended to run in multiple environments; otherwise, check them in: -# .python-version - -# pipenv -# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. -# However, in case of collaboration, if having platform-specific dependencies or dependencies -# having no cross-platform support, pipenv may install dependencies that don't work, or not -# install all needed dependencies. -#Pipfile.lock - -# poetry -# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. -# This is especially recommended for binary packages to ensure reproducibility, and is more -# commonly ignored for libraries. -# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control -#poetry.lock - -# pdm -# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. -#pdm.lock -# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it -# in version control. -# https://pdm.fming.dev/#use-with-ide -.pdm.toml - -# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm -__pypackages__/ - -# Celery stuff -celerybeat-schedule -celerybeat.pid - -# SageMath parsed files -*.sage.py - -# Environments -.env -.venv -env/ -.env.* -!.env.*.template -!.env.template -venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ - -# pytype static type analyzer -.pytype/ - -# Ruff (linter) -.ruff_cache/ - -# Cython debug symbols -cython_debug/ - -# PyCharm -.idea -!.idea/ -.idea/* -!.idea/runConfigurations/ - -# macOS -.DS_Store - -# Received approval test files -*.received.* - -# NPM -node_modules - -# AlgoKit -debug_traces/ -.algokit/static-analysis/ # Replace with .algokit/static-analysis/tealer/ to enable snapshot checks in CI -.algokit/sources diff --git a/assets/arc-0020/.pre-commit-config.yaml b/assets/arc-0020/.pre-commit-config.yaml deleted file mode 100644 index e5c820b2e..000000000 --- a/assets/arc-0020/.pre-commit-config.yaml +++ /dev/null @@ -1,49 +0,0 @@ -repos: - - repo: local - hooks: - - - id: black - name: black - description: "Black: The uncompromising Python code formatter" - entry: poetry run black - language: system - minimum_pre_commit_version: 2.9.2 - require_serial: true - types_or: [ python, pyi ] - - - - id: ruff - name: ruff - description: "Run 'ruff' for extremely fast Python linting" - entry: poetry run ruff - language: system - types: [ python ] - args: [ "check", "--fix" ] - require_serial: false - additional_dependencies: [ ] - minimum_pre_commit_version: '0' - files: '^(smart_contracts|tests)/' - - - - id: mypy - name: mypy - description: '`mypy` will check Python types for correctness' - entry: poetry run mypy - language: system - types_or: [ python, pyi ] - require_serial: true - additional_dependencies: [ ] - minimum_pre_commit_version: '2.9.2' - files: '^(smart_contracts|tests)/' - - # # Uncomment to enable TEAL static analysis using Tealer package - # - id: tealer - # name: tealer - # description: "Run AlgoKit `Tealer` for TEAL static analysis" - # entry: algokit - # language: system - # args: [project, run, "audit-teal"] - # require_serial: false - # additional_dependencies: [] - # minimum_pre_commit_version: "0" - # files: '^.*\.teal$' diff --git a/assets/arc-0020/README.md b/assets/arc-0020/README.md deleted file mode 100644 index 469373585..000000000 --- a/assets/arc-0020/README.md +++ /dev/null @@ -1,45 +0,0 @@ -# ARC-20 Reference Implementation - -This is the reference implementation of Smart ASA based on the [ARC-20 specification](../../ARCs/arc-0020.md). - -## Deployments - -Smart ASA examples deployed on TestNet: - -| App ID | App Spec | -|--------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------| -| [749063457](https://lora.algokit.io/testnet/application/749063457) | [ARC-56](https://github.com/algorandfoundation/ARCs/blob/main/assets/arc-0020/smart_contracts/artifacts/smart_asa/SmartAsa.arc56.json) | - -1. Download the App Spec JSON file; -1. Navigate to the [Lora App Lab](https://lora.algokit.io/testnet/app-lab); -1. Create the App Interface using the existing App ID and App Spec JSON; -1. Explore the D-ASA interface. - -## Local Setup and Tests - -This reference implementation is developed with [AlgoKit](https://algorand.co/algokit). - -- Install AlgoKit -- Setup your virtual environment (managed with [Poetry](https://python-poetry.org/)) - -```shell -algokit bootstrap all -``` - -- Start your Algorand LocalNet (requires [Docker](https://www.docker.com/get-started/)) - -```shell -algokit localnet start -``` - -- Run tests (managed with PyTest) - -```shell -algokit project run test -``` - -or, for verbose results: - -```shell -poetry run pytest -s -v tests/.py -``` diff --git a/assets/arc-0020/poetry.lock b/assets/arc-0020/poetry.lock deleted file mode 100644 index 6478b264a..000000000 --- a/assets/arc-0020/poetry.lock +++ /dev/null @@ -1,2531 +0,0 @@ -# This file is automatically @generated by Poetry 2.2.1 and should not be changed by hand. - -[[package]] -name = "aiohappyeyeballs" -version = "2.6.1" -description = "Happy Eyeballs for asyncio" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8"}, - {file = "aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558"}, -] - -[[package]] -name = "aiohttp" -version = "3.13.2" -description = "Async http client/server framework (asyncio)" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "aiohttp-3.13.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2372b15a5f62ed37789a6b383ff7344fc5b9f243999b0cd9b629d8bc5f5b4155"}, - {file = "aiohttp-3.13.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e7f8659a48995edee7229522984bd1009c1213929c769c2daa80b40fe49a180c"}, - {file = "aiohttp-3.13.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:939ced4a7add92296b0ad38892ce62b98c619288a081170695c6babe4f50e636"}, - {file = "aiohttp-3.13.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6315fb6977f1d0dd41a107c527fee2ed5ab0550b7d885bc15fee20ccb17891da"}, - {file = "aiohttp-3.13.2-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6e7352512f763f760baaed2637055c49134fd1d35b37c2dedfac35bfe5cf8725"}, - {file = "aiohttp-3.13.2-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e09a0a06348a2dd73e7213353c90d709502d9786219f69b731f6caa0efeb46f5"}, - {file = "aiohttp-3.13.2-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a09a6d073fb5789456545bdee2474d14395792faa0527887f2f4ec1a486a59d3"}, - {file = "aiohttp-3.13.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b59d13c443f8e049d9e94099c7e412e34610f1f49be0f230ec656a10692a5802"}, - {file = "aiohttp-3.13.2-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:20db2d67985d71ca033443a1ba2001c4b5693fe09b0e29f6d9358a99d4d62a8a"}, - {file = "aiohttp-3.13.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:960c2fc686ba27b535f9fd2b52d87ecd7e4fd1cf877f6a5cba8afb5b4a8bd204"}, - {file = "aiohttp-3.13.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:6c00dbcf5f0d88796151e264a8eab23de2997c9303dd7c0bf622e23b24d3ce22"}, - {file = "aiohttp-3.13.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fed38a5edb7945f4d1bcabe2fcd05db4f6ec7e0e82560088b754f7e08d93772d"}, - {file = "aiohttp-3.13.2-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:b395bbca716c38bef3c764f187860e88c724b342c26275bc03e906142fc5964f"}, - {file = "aiohttp-3.13.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:204ffff2426c25dfda401ba08da85f9c59525cdc42bda26660463dd1cbcfec6f"}, - {file = "aiohttp-3.13.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:05c4dd3c48fb5f15db31f57eb35374cb0c09afdde532e7fb70a75aede0ed30f6"}, - {file = "aiohttp-3.13.2-cp310-cp310-win32.whl", hash = "sha256:e574a7d61cf10351d734bcddabbe15ede0eaa8a02070d85446875dc11189a251"}, - {file = "aiohttp-3.13.2-cp310-cp310-win_amd64.whl", hash = "sha256:364f55663085d658b8462a1c3f17b2b84a5c2e1ba858e1b79bff7b2e24ad1514"}, - {file = "aiohttp-3.13.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4647d02df098f6434bafd7f32ad14942f05a9caa06c7016fdcc816f343997dd0"}, - {file = "aiohttp-3.13.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e3403f24bcb9c3b29113611c3c16a2a447c3953ecf86b79775e7be06f7ae7ccb"}, - {file = "aiohttp-3.13.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:43dff14e35aba17e3d6d5ba628858fb8cb51e30f44724a2d2f0c75be492c55e9"}, - {file = "aiohttp-3.13.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e2a9ea08e8c58bb17655630198833109227dea914cd20be660f52215f6de5613"}, - {file = "aiohttp-3.13.2-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:53b07472f235eb80e826ad038c9d106c2f653584753f3ddab907c83f49eedead"}, - {file = "aiohttp-3.13.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e736c93e9c274fce6419af4aac199984d866e55f8a4cec9114671d0ea9688780"}, - {file = "aiohttp-3.13.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ff5e771f5dcbc81c64898c597a434f7682f2259e0cd666932a913d53d1341d1a"}, - {file = "aiohttp-3.13.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a3b6fb0c207cc661fa0bf8c66d8d9b657331ccc814f4719468af61034b478592"}, - {file = "aiohttp-3.13.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:97a0895a8e840ab3520e2288db7cace3a1981300d48babeb50e7425609e2e0ab"}, - {file = "aiohttp-3.13.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9e8f8afb552297aca127c90cb840e9a1d4bfd6a10d7d8f2d9176e1acc69bad30"}, - {file = "aiohttp-3.13.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:ed2f9c7216e53c3df02264f25d824b079cc5914f9e2deba94155190ef648ee40"}, - {file = "aiohttp-3.13.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:99c5280a329d5fa18ef30fd10c793a190d996567667908bef8a7f81f8202b948"}, - {file = "aiohttp-3.13.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:2ca6ffef405fc9c09a746cb5d019c1672cd7f402542e379afc66b370833170cf"}, - {file = "aiohttp-3.13.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:47f438b1a28e926c37632bff3c44df7d27c9b57aaf4e34b1def3c07111fdb782"}, - {file = "aiohttp-3.13.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9acda8604a57bb60544e4646a4615c1866ee6c04a8edef9b8ee6fd1d8fa2ddc8"}, - {file = "aiohttp-3.13.2-cp311-cp311-win32.whl", hash = "sha256:868e195e39b24aaa930b063c08bb0c17924899c16c672a28a65afded9c46c6ec"}, - {file = "aiohttp-3.13.2-cp311-cp311-win_amd64.whl", hash = "sha256:7fd19df530c292542636c2a9a85854fab93474396a52f1695e799186bbd7f24c"}, - {file = "aiohttp-3.13.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:b1e56bab2e12b2b9ed300218c351ee2a3d8c8fdab5b1ec6193e11a817767e47b"}, - {file = "aiohttp-3.13.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:364e25edaabd3d37b1db1f0cbcee8c73c9a3727bfa262b83e5e4cf3489a2a9dc"}, - {file = "aiohttp-3.13.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c5c94825f744694c4b8db20b71dba9a257cd2ba8e010a803042123f3a25d50d7"}, - {file = "aiohttp-3.13.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba2715d842ffa787be87cbfce150d5e88c87a98e0b62e0f5aa489169a393dbbb"}, - {file = "aiohttp-3.13.2-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:585542825c4bc662221fb257889e011a5aa00f1ae4d75d1d246a5225289183e3"}, - {file = "aiohttp-3.13.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:39d02cb6025fe1aabca329c5632f48c9532a3dabccd859e7e2f110668972331f"}, - {file = "aiohttp-3.13.2-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e67446b19e014d37342f7195f592a2a948141d15a312fe0e700c2fd2f03124f6"}, - {file = "aiohttp-3.13.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4356474ad6333e41ccefd39eae869ba15a6c5299c9c01dfdcfdd5c107be4363e"}, - {file = "aiohttp-3.13.2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:eeacf451c99b4525f700f078becff32c32ec327b10dcf31306a8a52d78166de7"}, - {file = "aiohttp-3.13.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d8a9b889aeabd7a4e9af0b7f4ab5ad94d42e7ff679aaec6d0db21e3b639ad58d"}, - {file = "aiohttp-3.13.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:fa89cb11bc71a63b69568d5b8a25c3ca25b6d54c15f907ca1c130d72f320b76b"}, - {file = "aiohttp-3.13.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8aa7c807df234f693fed0ecd507192fc97692e61fee5702cdc11155d2e5cadc8"}, - {file = "aiohttp-3.13.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:9eb3e33fdbe43f88c3c75fa608c25e7c47bbd80f48d012763cb67c47f39a7e16"}, - {file = "aiohttp-3.13.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9434bc0d80076138ea986833156c5a48c9c7a8abb0c96039ddbb4afc93184169"}, - {file = "aiohttp-3.13.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ff15c147b2ad66da1f2cbb0622313f2242d8e6e8f9b79b5206c84523a4473248"}, - {file = "aiohttp-3.13.2-cp312-cp312-win32.whl", hash = "sha256:27e569eb9d9e95dbd55c0fc3ec3a9335defbf1d8bc1d20171a49f3c4c607b93e"}, - {file = "aiohttp-3.13.2-cp312-cp312-win_amd64.whl", hash = "sha256:8709a0f05d59a71f33fd05c17fc11fcb8c30140506e13c2f5e8ee1b8964e1b45"}, - {file = "aiohttp-3.13.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7519bdc7dfc1940d201651b52bf5e03f5503bda45ad6eacf64dda98be5b2b6be"}, - {file = "aiohttp-3.13.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:088912a78b4d4f547a1f19c099d5a506df17eacec3c6f4375e2831ec1d995742"}, - {file = "aiohttp-3.13.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5276807b9de9092af38ed23ce120539ab0ac955547b38563a9ba4f5b07b95293"}, - {file = "aiohttp-3.13.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1237c1375eaef0db4dcd7c2559f42e8af7b87ea7d295b118c60c36a6e61cb811"}, - {file = "aiohttp-3.13.2-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:96581619c57419c3d7d78703d5b78c1e5e5fc0172d60f555bdebaced82ded19a"}, - {file = "aiohttp-3.13.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a2713a95b47374169409d18103366de1050fe0ea73db358fc7a7acb2880422d4"}, - {file = "aiohttp-3.13.2-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:228a1cd556b3caca590e9511a89444925da87d35219a49ab5da0c36d2d943a6a"}, - {file = "aiohttp-3.13.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ac6cde5fba8d7d8c6ac963dbb0256a9854e9fafff52fbcc58fdf819357892c3e"}, - {file = "aiohttp-3.13.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f2bef8237544f4e42878c61cef4e2839fee6346dc60f5739f876a9c50be7fcdb"}, - {file = "aiohttp-3.13.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:16f15a4eac3bc2d76c45f7ebdd48a65d41b242eb6c31c2245463b40b34584ded"}, - {file = "aiohttp-3.13.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:bb7fb776645af5cc58ab804c58d7eba545a97e047254a52ce89c157b5af6cd0b"}, - {file = "aiohttp-3.13.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:e1b4951125ec10c70802f2cb09736c895861cd39fd9dcb35107b4dc8ae6220b8"}, - {file = "aiohttp-3.13.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:550bf765101ae721ee1d37d8095f47b1f220650f85fe1af37a90ce75bab89d04"}, - {file = "aiohttp-3.13.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:fe91b87fc295973096251e2d25a811388e7d8adf3bd2b97ef6ae78bc4ac6c476"}, - {file = "aiohttp-3.13.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e0c8e31cfcc4592cb200160344b2fb6ae0f9e4effe06c644b5a125d4ae5ebe23"}, - {file = "aiohttp-3.13.2-cp313-cp313-win32.whl", hash = "sha256:0740f31a60848d6edb296a0df827473eede90c689b8f9f2a4cdde74889eb2254"}, - {file = "aiohttp-3.13.2-cp313-cp313-win_amd64.whl", hash = "sha256:a88d13e7ca367394908f8a276b89d04a3652044612b9a408a0bb22a5ed976a1a"}, - {file = "aiohttp-3.13.2-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:2475391c29230e063ef53a66669b7b691c9bfc3f1426a0f7bcdf1216bdbac38b"}, - {file = "aiohttp-3.13.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:f33c8748abef4d8717bb20e8fb1b3e07c6adacb7fd6beaae971a764cf5f30d61"}, - {file = "aiohttp-3.13.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ae32f24bbfb7dbb485a24b30b1149e2f200be94777232aeadba3eecece4d0aa4"}, - {file = "aiohttp-3.13.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d7f02042c1f009ffb70067326ef183a047425bb2ff3bc434ead4dd4a4a66a2b"}, - {file = "aiohttp-3.13.2-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:93655083005d71cd6c072cdab54c886e6570ad2c4592139c3fb967bfc19e4694"}, - {file = "aiohttp-3.13.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0db1e24b852f5f664cd728db140cf11ea0e82450471232a394b3d1a540b0f906"}, - {file = "aiohttp-3.13.2-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b009194665bcd128e23eaddef362e745601afa4641930848af4c8559e88f18f9"}, - {file = "aiohttp-3.13.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c038a8fdc8103cd51dbd986ecdce141473ffd9775a7a8057a6ed9c3653478011"}, - {file = "aiohttp-3.13.2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:66bac29b95a00db411cd758fea0e4b9bdba6d549dfe333f9a945430f5f2cc5a6"}, - {file = "aiohttp-3.13.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4ebf9cfc9ba24a74cf0718f04aac2a3bbe745902cc7c5ebc55c0f3b5777ef213"}, - {file = "aiohttp-3.13.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a4b88ebe35ce54205c7074f7302bd08a4cb83256a3e0870c72d6f68a3aaf8e49"}, - {file = "aiohttp-3.13.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:98c4fb90bb82b70a4ed79ca35f656f4281885be076f3f970ce315402b53099ae"}, - {file = "aiohttp-3.13.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:ec7534e63ae0f3759df3a1ed4fa6bc8f75082a924b590619c0dd2f76d7043caa"}, - {file = "aiohttp-3.13.2-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:5b927cf9b935a13e33644cbed6c8c4b2d0f25b713d838743f8fe7191b33829c4"}, - {file = "aiohttp-3.13.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:88d6c017966a78c5265d996c19cdb79235be5e6412268d7e2ce7dee339471b7a"}, - {file = "aiohttp-3.13.2-cp314-cp314-win32.whl", hash = "sha256:f7c183e786e299b5d6c49fb43a769f8eb8e04a2726a2bd5887b98b5cc2d67940"}, - {file = "aiohttp-3.13.2-cp314-cp314-win_amd64.whl", hash = "sha256:fe242cd381e0fb65758faf5ad96c2e460df6ee5b2de1072fe97e4127927e00b4"}, - {file = "aiohttp-3.13.2-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:f10d9c0b0188fe85398c61147bbd2a657d616c876863bfeff43376e0e3134673"}, - {file = "aiohttp-3.13.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:e7c952aefdf2460f4ae55c5e9c3e80aa72f706a6317e06020f80e96253b1accd"}, - {file = "aiohttp-3.13.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c20423ce14771d98353d2e25e83591fa75dfa90a3c1848f3d7c68243b4fbded3"}, - {file = "aiohttp-3.13.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e96eb1a34396e9430c19d8338d2ec33015e4a87ef2b4449db94c22412e25ccdf"}, - {file = "aiohttp-3.13.2-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:23fb0783bc1a33640036465019d3bba069942616a6a2353c6907d7fe1ccdaf4e"}, - {file = "aiohttp-3.13.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2e1a9bea6244a1d05a4e57c295d69e159a5c50d8ef16aa390948ee873478d9a5"}, - {file = "aiohttp-3.13.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0a3d54e822688b56e9f6b5816fb3de3a3a64660efac64e4c2dc435230ad23bad"}, - {file = "aiohttp-3.13.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7a653d872afe9f33497215745da7a943d1dc15b728a9c8da1c3ac423af35178e"}, - {file = "aiohttp-3.13.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:56d36e80d2003fa3fc0207fac644216d8532e9504a785ef9a8fd013f84a42c61"}, - {file = "aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:78cd586d8331fb8e241c2dd6b2f4061778cc69e150514b39a9e28dd050475661"}, - {file = "aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:20b10bbfbff766294fe99987f7bb3b74fdd2f1a2905f2562132641ad434dcf98"}, - {file = "aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:9ec49dff7e2b3c85cdeaa412e9d438f0ecd71676fde61ec57027dd392f00c693"}, - {file = "aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:94f05348c4406450f9d73d38efb41d669ad6cd90c7ee194810d0eefbfa875a7a"}, - {file = "aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:fa4dcb605c6f82a80c7f95713c2b11c3b8e9893b3ebd2bc9bde93165ed6107be"}, - {file = "aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cf00e5db968c3f67eccd2778574cf64d8b27d95b237770aa32400bd7a1ca4f6c"}, - {file = "aiohttp-3.13.2-cp314-cp314t-win32.whl", hash = "sha256:d23b5fe492b0805a50d3371e8a728a9134d8de5447dce4c885f5587294750734"}, - {file = "aiohttp-3.13.2-cp314-cp314t-win_amd64.whl", hash = "sha256:ff0a7b0a82a7ab905cbda74006318d1b12e37c797eb1b0d4eb3e316cf47f658f"}, - {file = "aiohttp-3.13.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7fbdf5ad6084f1940ce88933de34b62358d0f4a0b6ec097362dcd3e5a65a4989"}, - {file = "aiohttp-3.13.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7c3a50345635a02db61792c85bb86daffac05330f6473d524f1a4e3ef9d0046d"}, - {file = "aiohttp-3.13.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0e87dff73f46e969af38ab3f7cb75316a7c944e2e574ff7c933bc01b10def7f5"}, - {file = "aiohttp-3.13.2-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2adebd4577724dcae085665f294cc57c8701ddd4d26140504db622b8d566d7aa"}, - {file = "aiohttp-3.13.2-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e036a3a645fe92309ec34b918394bb377950cbb43039a97edae6c08db64b23e2"}, - {file = "aiohttp-3.13.2-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:23ad365e30108c422d0b4428cf271156dd56790f6dd50d770b8e360e6c5ab2e6"}, - {file = "aiohttp-3.13.2-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1f9b2c2d4b9d958b1f9ae0c984ec1dd6b6689e15c75045be8ccb4011426268ca"}, - {file = "aiohttp-3.13.2-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3a92cf4b9bea33e15ecbaa5c59921be0f23222608143d025c989924f7e3e0c07"}, - {file = "aiohttp-3.13.2-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:070599407f4954021509193404c4ac53153525a19531051661440644728ba9a7"}, - {file = "aiohttp-3.13.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:29562998ec66f988d49fb83c9b01694fa927186b781463f376c5845c121e4e0b"}, - {file = "aiohttp-3.13.2-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:4dd3db9d0f4ebca1d887d76f7cdbcd1116ac0d05a9221b9dad82c64a62578c4d"}, - {file = "aiohttp-3.13.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:d7bc4b7f9c4921eba72677cd9fedd2308f4a4ca3e12fab58935295ad9ea98700"}, - {file = "aiohttp-3.13.2-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:dacd50501cd017f8cccb328da0c90823511d70d24a323196826d923aad865901"}, - {file = "aiohttp-3.13.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:8b2f1414f6a1e0683f212ec80e813f4abef94c739fd090b66c9adf9d2a05feac"}, - {file = "aiohttp-3.13.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:04c3971421576ed24c191f610052bcb2f059e395bc2489dd99e397f9bc466329"}, - {file = "aiohttp-3.13.2-cp39-cp39-win32.whl", hash = "sha256:9f377d0a924e5cc94dc620bc6366fc3e889586a7f18b748901cf016c916e2084"}, - {file = "aiohttp-3.13.2-cp39-cp39-win_amd64.whl", hash = "sha256:9c705601e16c03466cb72011bd1af55d68fa65b045356d8f96c216e5f6db0fa5"}, - {file = "aiohttp-3.13.2.tar.gz", hash = "sha256:40176a52c186aefef6eb3cad2cdd30cd06e3afbe88fe8ab2af9c0b90f228daca"}, -] - -[package.dependencies] -aiohappyeyeballs = ">=2.5.0" -aiosignal = ">=1.4.0" -attrs = ">=17.3.0" -frozenlist = ">=1.1.1" -multidict = ">=4.5,<7.0" -propcache = ">=0.2.0" -yarl = ">=1.17.0,<2.0" - -[package.extras] -speedups = ["Brotli ; platform_python_implementation == \"CPython\"", "aiodns (>=3.3.0)", "backports.zstd ; platform_python_implementation == \"CPython\" and python_version < \"3.14\"", "brotlicffi ; platform_python_implementation != \"CPython\""] - -[[package]] -name = "aiosignal" -version = "1.4.0" -description = "aiosignal: a list of registered asynchronous callbacks" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e"}, - {file = "aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7"}, -] - -[package.dependencies] -frozenlist = ">=1.1.0" -typing-extensions = {version = ">=4.2", markers = "python_version < \"3.13\""} - -[[package]] -name = "algokit-client-generator" -version = "2.2.0" -description = "Algorand typed client Generator" -optional = false -python-versions = "<4.0,>=3.10" -groups = ["dev"] -files = [ - {file = "algokit_client_generator-2.2.0-py3-none-any.whl", hash = "sha256:f723aa77fb265b38e98836b13b830789c46467ba647815ff4a0a7dee3f64b74a"}, -] - -[package.dependencies] -algokit-utils = ">=4.0.1,<5.0.0" - -[[package]] -name = "algokit-utils" -version = "4.2.2" -description = "Utilities for Algorand development for use by AlgoKit" -optional = false -python-versions = "<4.0,>=3.10" -groups = ["main", "dev"] -files = [ - {file = "algokit_utils-4.2.2-py3-none-any.whl", hash = "sha256:56f1f5dd30d2bd433737e9425b97e12cde90f2b2b6b6601e25056ce5cbb892e6"}, -] - -[package.dependencies] -httpx = ">=0.23.1,<=0.28.1" -py-algorand-sdk = ">=2.11.0,<3.0.0" -typing-extensions = ">=4.6.0" - -[[package]] -name = "algorand-python" -version = "3.1.1" -description = "API for writing Algorand Python Smart contracts" -optional = false -python-versions = "<4,>=3.12.0" -groups = ["main"] -files = [ - {file = "algorand_python-3.1.1-py3-none-any.whl", hash = "sha256:502fd2b1974d02a7a566537a1aea76eeb4adfd198a195a4bf30b9296d5ebeeae"}, -] - -[[package]] -name = "anyio" -version = "4.11.0" -description = "High-level concurrency and networking framework on top of asyncio or Trio" -optional = false -python-versions = ">=3.9" -groups = ["main", "dev"] -files = [ - {file = "anyio-4.11.0-py3-none-any.whl", hash = "sha256:0287e96f4d26d4149305414d4e3bc32f0dcd0862365a4bddea19d7a1ec38c4fc"}, - {file = "anyio-4.11.0.tar.gz", hash = "sha256:82a8d0b81e318cc5ce71a5f1f8b5c4e63619620b63141ef8c995fa0db95a57c4"}, -] - -[package.dependencies] -idna = ">=2.8" -sniffio = ">=1.1" -typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} - -[package.extras] -trio = ["trio (>=0.31.0)"] - -[[package]] -name = "attrs" -version = "25.4.0" -description = "Classes Without Boilerplate" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373"}, - {file = "attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11"}, -] - -[[package]] -name = "black" -version = "25.1.0" -description = "The uncompromising code formatter." -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "black-25.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:759e7ec1e050a15f89b770cefbf91ebee8917aac5c20483bc2d80a6c3a04df32"}, - {file = "black-25.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e519ecf93120f34243e6b0054db49c00a35f84f195d5bce7e9f5cfc578fc2da"}, - {file = "black-25.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:055e59b198df7ac0b7efca5ad7ff2516bca343276c466be72eb04a3bcc1f82d7"}, - {file = "black-25.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:db8ea9917d6f8fc62abd90d944920d95e73c83a5ee3383493e35d271aca872e9"}, - {file = "black-25.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a39337598244de4bae26475f77dda852ea00a93bd4c728e09eacd827ec929df0"}, - {file = "black-25.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:96c1c7cd856bba8e20094e36e0f948718dc688dba4a9d78c3adde52b9e6c2299"}, - {file = "black-25.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bce2e264d59c91e52d8000d507eb20a9aca4a778731a08cfff7e5ac4a4bb7096"}, - {file = "black-25.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:172b1dbff09f86ce6f4eb8edf9dede08b1fce58ba194c87d7a4f1a5aa2f5b3c2"}, - {file = "black-25.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4b60580e829091e6f9238c848ea6750efed72140b91b048770b64e74fe04908b"}, - {file = "black-25.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1e2978f6df243b155ef5fa7e558a43037c3079093ed5d10fd84c43900f2d8ecc"}, - {file = "black-25.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b48735872ec535027d979e8dcb20bf4f70b5ac75a8ea99f127c106a7d7aba9f"}, - {file = "black-25.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:ea0213189960bda9cf99be5b8c8ce66bb054af5e9e861249cd23471bd7b0b3ba"}, - {file = "black-25.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8f0b18a02996a836cc9c9c78e5babec10930862827b1b724ddfe98ccf2f2fe4f"}, - {file = "black-25.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:afebb7098bfbc70037a053b91ae8437c3857482d3a690fefc03e9ff7aa9a5fd3"}, - {file = "black-25.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:030b9759066a4ee5e5aca28c3c77f9c64789cdd4de8ac1df642c40b708be6171"}, - {file = "black-25.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:a22f402b410566e2d1c950708c77ebf5ebd5d0d88a6a2e87c86d9fb48afa0d18"}, - {file = "black-25.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a1ee0a0c330f7b5130ce0caed9936a904793576ef4d2b98c40835d6a65afa6a0"}, - {file = "black-25.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3df5f1bf91d36002b0a75389ca8663510cf0531cca8aa5c1ef695b46d98655f"}, - {file = "black-25.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d9e6827d563a2c820772b32ce8a42828dc6790f095f441beef18f96aa6f8294e"}, - {file = "black-25.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:bacabb307dca5ebaf9c118d2d2f6903da0d62c9faa82bd21a33eecc319559355"}, - {file = "black-25.1.0-py3-none-any.whl", hash = "sha256:95e8176dae143ba9097f351d174fdaf0ccd29efb414b362ae3fd72bf0f710717"}, - {file = "black-25.1.0.tar.gz", hash = "sha256:33496d5cd1222ad73391352b4ae8da15253c5de89b93a80b3e2c8d9a19ec2666"}, -] - -[package.dependencies] -aiohttp = {version = ">=3.10", optional = true, markers = "extra == \"d\""} -click = ">=8.0.0" -mypy-extensions = ">=0.4.3" -packaging = ">=22.0" -pathspec = ">=0.9.0" -platformdirs = ">=2" - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.10)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -uvloop = ["uvloop (>=0.15.2)"] - -[[package]] -name = "boolean-py" -version = "5.0" -description = "Define boolean algebras, create and parse boolean expressions and create custom boolean DSL." -optional = false -python-versions = "*" -groups = ["dev"] -files = [ - {file = "boolean_py-5.0-py3-none-any.whl", hash = "sha256:ef28a70bd43115208441b53a045d1549e2f0ec6e3d08a9d142cbc41c1938e8d9"}, - {file = "boolean_py-5.0.tar.gz", hash = "sha256:60cbc4bad079753721d32649545505362c754e121570ada4658b852a3a318d95"}, -] - -[package.extras] -dev = ["build", "twine"] -docs = ["Sphinx (>=3.3.1)", "doc8 (>=0.8.1)", "sphinx-rtd-theme (>=0.5.0)", "sphinxcontrib-apidoc (>=0.3.0)"] -linting = ["black", "isort", "pycodestyle"] -testing = ["pytest (>=6,!=7.0.0)", "pytest-xdist (>=2)"] - -[[package]] -name = "cachecontrol" -version = "0.14.3" -description = "httplib2 caching for requests" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "cachecontrol-0.14.3-py3-none-any.whl", hash = "sha256:b35e44a3113f17d2a31c1e6b27b9de6d4405f84ae51baa8c1d3cc5b633010cae"}, - {file = "cachecontrol-0.14.3.tar.gz", hash = "sha256:73e7efec4b06b20d9267b441c1f733664f989fb8688391b670ca812d70795d11"}, -] - -[package.dependencies] -filelock = {version = ">=3.8.0", optional = true, markers = "extra == \"filecache\""} -msgpack = ">=0.5.2,<2.0.0" -requests = ">=2.16.0" - -[package.extras] -dev = ["CacheControl[filecache,redis]", "build", "cherrypy", "codespell[tomli]", "furo", "mypy", "pytest", "pytest-cov", "ruff", "sphinx", "sphinx-copybutton", "tox", "types-redis", "types-requests"] -filecache = ["filelock (>=3.8.0)"] -redis = ["redis (>=2.10.5)"] - -[[package]] -name = "cattrs" -version = "25.3.0" -description = "Composable complex class support for attrs and dataclasses." -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "cattrs-25.3.0-py3-none-any.whl", hash = "sha256:9896e84e0a5bf723bc7b4b68f4481785367ce07a8a02e7e9ee6eb2819bc306ff"}, - {file = "cattrs-25.3.0.tar.gz", hash = "sha256:1ac88d9e5eda10436c4517e390a4142d88638fe682c436c93db7ce4a277b884a"}, -] - -[package.dependencies] -attrs = ">=25.4.0" -typing-extensions = ">=4.14.0" - -[package.extras] -bson = ["pymongo (>=4.4.0)"] -cbor2 = ["cbor2 (>=5.4.6)"] -msgpack = ["msgpack (>=1.0.5)"] -msgspec = ["msgspec (>=0.19.0) ; implementation_name == \"cpython\""] -orjson = ["orjson (>=3.11.3) ; implementation_name == \"cpython\""] -pyyaml = ["pyyaml (>=6.0)"] -tomlkit = ["tomlkit (>=0.11.8)"] -ujson = ["ujson (>=5.10.0)"] - -[[package]] -name = "certifi" -version = "2025.10.5" -description = "Python package for providing Mozilla's CA Bundle." -optional = false -python-versions = ">=3.7" -groups = ["main", "dev"] -files = [ - {file = "certifi-2025.10.5-py3-none-any.whl", hash = "sha256:0f212c2744a9bb6de0c56639a6f68afe01ecd92d91f14ae897c4fe7bbeeef0de"}, - {file = "certifi-2025.10.5.tar.gz", hash = "sha256:47c09d31ccf2acf0be3f701ea53595ee7e0b8fa08801c6624be771df09ae7b43"}, -] - -[[package]] -name = "cffi" -version = "2.0.0" -description = "Foreign Function Interface for Python calling C code." -optional = false -python-versions = ">=3.9" -groups = ["main", "dev"] -markers = "platform_python_implementation != \"PyPy\"" -files = [ - {file = "cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44"}, - {file = "cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49"}, - {file = "cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c"}, - {file = "cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb"}, - {file = "cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0"}, - {file = "cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4"}, - {file = "cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453"}, - {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495"}, - {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5"}, - {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb"}, - {file = "cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a"}, - {file = "cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739"}, - {file = "cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe"}, - {file = "cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c"}, - {file = "cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92"}, - {file = "cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93"}, - {file = "cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5"}, - {file = "cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664"}, - {file = "cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26"}, - {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9"}, - {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414"}, - {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743"}, - {file = "cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5"}, - {file = "cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5"}, - {file = "cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d"}, - {file = "cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d"}, - {file = "cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c"}, - {file = "cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe"}, - {file = "cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062"}, - {file = "cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e"}, - {file = "cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037"}, - {file = "cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba"}, - {file = "cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94"}, - {file = "cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187"}, - {file = "cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18"}, - {file = "cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5"}, - {file = "cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6"}, - {file = "cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb"}, - {file = "cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca"}, - {file = "cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b"}, - {file = "cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b"}, - {file = "cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2"}, - {file = "cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3"}, - {file = "cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26"}, - {file = "cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c"}, - {file = "cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b"}, - {file = "cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27"}, - {file = "cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75"}, - {file = "cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91"}, - {file = "cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5"}, - {file = "cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13"}, - {file = "cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b"}, - {file = "cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c"}, - {file = "cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef"}, - {file = "cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775"}, - {file = "cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205"}, - {file = "cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1"}, - {file = "cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f"}, - {file = "cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25"}, - {file = "cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad"}, - {file = "cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9"}, - {file = "cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d"}, - {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c"}, - {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8"}, - {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc"}, - {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592"}, - {file = "cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512"}, - {file = "cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4"}, - {file = "cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e"}, - {file = "cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6"}, - {file = "cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9"}, - {file = "cffi-2.0.0-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf"}, - {file = "cffi-2.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7"}, - {file = "cffi-2.0.0-cp39-cp39-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c"}, - {file = "cffi-2.0.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165"}, - {file = "cffi-2.0.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534"}, - {file = "cffi-2.0.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f"}, - {file = "cffi-2.0.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63"}, - {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2"}, - {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65"}, - {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322"}, - {file = "cffi-2.0.0-cp39-cp39-win32.whl", hash = "sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a"}, - {file = "cffi-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9"}, - {file = "cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529"}, -] - -[package.dependencies] -pycparser = {version = "*", markers = "implementation_name != \"PyPy\""} - -[[package]] -name = "cfgv" -version = "3.4.0" -description = "Validate configuration and produce human readable error messages." -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, - {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, -] - -[[package]] -name = "charset-normalizer" -version = "3.4.4" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -optional = false -python-versions = ">=3.7" -groups = ["dev"] -files = [ - {file = "charset_normalizer-3.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-win32.whl", hash = "sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-win_arm64.whl", hash = "sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-win32.whl", hash = "sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-win32.whl", hash = "sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-win32.whl", hash = "sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-win32.whl", hash = "sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ce8a0633f41a967713a59c4139d29110c07e826d131a316b50ce11b1d79b4f84"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eaabd426fe94daf8fd157c32e571c85cb12e66692f15516a83a03264b08d06c3"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c4ef880e27901b6cc782f1b95f82da9313c0eb95c3af699103088fa0ac3ce9ac"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2aaba3b0819274cc41757a1da876f810a3e4d7b6eb25699253a4effef9e8e4af"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:778d2e08eda00f4256d7f672ca9fef386071c9202f5e4607920b86d7803387f2"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f155a433c2ec037d4e8df17d18922c3a0d9b3232a396690f17175d2946f0218d"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a8bf8d0f749c5757af2142fe7903a9df1d2e8aa3841559b2bad34b08d0e2bcf3"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:194f08cbb32dc406d6e1aea671a68be0823673db2832b38405deba2fb0d88f63"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:6aee717dcfead04c6eb1ce3bd29ac1e22663cdea57f943c87d1eab9a025438d7"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:cd4b7ca9984e5e7985c12bc60a6f173f3c958eae74f3ef6624bb6b26e2abbae4"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_riscv64.whl", hash = "sha256:b7cf1017d601aa35e6bb650b6ad28652c9cd78ee6caff19f3c28d03e1c80acbf"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:e912091979546adf63357d7e2ccff9b44f026c075aeaf25a52d0e95ad2281074"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5cb4d72eea50c8868f5288b7f7f33ed276118325c1dfd3957089f6b519e1382a"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-win32.whl", hash = "sha256:837c2ce8c5a65a2035be9b3569c684358dfbf109fd3b6969630a87535495ceaa"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:44c2a8734b333e0578090c4cd6b16f275e07aa6614ca8715e6c038e865e70576"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a9768c477b9d7bd54bc0c86dbaebdec6f03306675526c9927c0e8a04e8f94af9"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1bee1e43c28aa63cb16e5c14e582580546b08e535299b8b6158a7c9c768a1f3d"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:fd44c878ea55ba351104cb93cc85e74916eb8fa440ca7903e57575e97394f608"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0f04b14ffe5fdc8c4933862d8306109a2c51e0704acfa35d51598eb45a1e89fc"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:cd09d08005f958f370f539f186d10aec3377d55b9eeb0d796025d4886119d76e"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4fe7859a4e3e8457458e2ff592f15ccb02f3da787fcd31e0183879c3ad4692a1"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fa09f53c465e532f4d3db095e0c55b615f010ad81803d383195b6b5ca6cbf5f3"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7fa17817dc5625de8a027cb8b26d9fefa3ea28c8253929b8d6649e705d2835b6"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:5947809c8a2417be3267efc979c47d76a079758166f7d43ef5ae8e9f92751f88"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:4902828217069c3c5c71094537a8e623f5d097858ac6ca8252f7b4d10b7560f1"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:7c308f7e26e4363d79df40ca5b2be1c6ba9f02bdbccfed5abddb7859a6ce72cf"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:2c9d3c380143a1fedbff95a312aa798578371eb29da42106a29019368a475318"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cb01158d8b88ee68f15949894ccc6712278243d95f344770fa7593fa2d94410c"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-win32.whl", hash = "sha256:2677acec1a2f8ef614c6888b5b4ae4060cc184174a938ed4e8ef690e15d3e505"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:f8e160feb2aed042cd657a72acc0b481212ed28b1b9a95c0cee1621b524e1966"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-win_arm64.whl", hash = "sha256:b5d84d37db046c5ca74ee7bb47dd6cbc13f80665fdde3e8040bdd3fb015ecb50"}, - {file = "charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f"}, - {file = "charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a"}, -] - -[[package]] -name = "click" -version = "8.3.0" -description = "Composable command line interface toolkit" -optional = false -python-versions = ">=3.10" -groups = ["dev"] -files = [ - {file = "click-8.3.0-py3-none-any.whl", hash = "sha256:9b9f285302c6e3064f4330c05f05b81945b2a39544279343e6e7c5f27a9baddc"}, - {file = "click-8.3.0.tar.gz", hash = "sha256:e7b8232224eba16f4ebe410c25ced9f7875cb5f3263ffc93cc3e8da705e229c4"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -groups = ["dev"] -markers = "platform_system == \"Windows\" or sys_platform == \"win32\"" -files = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] - -[[package]] -name = "coverage" -version = "7.11.0" -description = "Code coverage measurement for Python" -optional = false -python-versions = ">=3.10" -groups = ["dev"] -files = [ - {file = "coverage-7.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eb53f1e8adeeb2e78962bade0c08bfdc461853c7969706ed901821e009b35e31"}, - {file = "coverage-7.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d9a03ec6cb9f40a5c360f138b88266fd8f58408d71e89f536b4f91d85721d075"}, - {file = "coverage-7.11.0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0d7f0616c557cbc3d1c2090334eddcbb70e1ae3a40b07222d62b3aa47f608fab"}, - {file = "coverage-7.11.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e44a86a47bbdf83b0a3ea4d7df5410d6b1a0de984fbd805fa5101f3624b9abe0"}, - {file = "coverage-7.11.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:596763d2f9a0ee7eec6e643e29660def2eef297e1de0d334c78c08706f1cb785"}, - {file = "coverage-7.11.0-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ef55537ff511b5e0a43edb4c50a7bf7ba1c3eea20b4f49b1490f1e8e0e42c591"}, - {file = "coverage-7.11.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9cbabd8f4d0d3dc571d77ae5bdbfa6afe5061e679a9d74b6797c48d143307088"}, - {file = "coverage-7.11.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e24045453384e0ae2a587d562df2a04d852672eb63051d16096d3f08aa4c7c2f"}, - {file = "coverage-7.11.0-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:7161edd3426c8d19bdccde7d49e6f27f748f3c31cc350c5de7c633fea445d866"}, - {file = "coverage-7.11.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3d4ed4de17e692ba6415b0587bc7f12bc80915031fc9db46a23ce70fc88c9841"}, - {file = "coverage-7.11.0-cp310-cp310-win32.whl", hash = "sha256:765c0bc8fe46f48e341ef737c91c715bd2a53a12792592296a095f0c237e09cf"}, - {file = "coverage-7.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:24d6f3128f1b2d20d84b24f4074475457faedc3d4613a7e66b5e769939c7d969"}, - {file = "coverage-7.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d58ecaa865c5b9fa56e35efc51d1014d4c0d22838815b9fce57a27dd9576847"}, - {file = "coverage-7.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b679e171f1c104a5668550ada700e3c4937110dbdd153b7ef9055c4f1a1ee3cc"}, - {file = "coverage-7.11.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:ca61691ba8c5b6797deb221a0d09d7470364733ea9c69425a640f1f01b7c5bf0"}, - {file = "coverage-7.11.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:aef1747ede4bd8ca9cfc04cc3011516500c6891f1b33a94add3253f6f876b7b7"}, - {file = "coverage-7.11.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a1839d08406e4cba2953dcc0ffb312252f14d7c4c96919f70167611f4dee2623"}, - {file = "coverage-7.11.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e0eb0a2dcc62478eb5b4cbb80b97bdee852d7e280b90e81f11b407d0b81c4287"}, - {file = "coverage-7.11.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bc1fbea96343b53f65d5351d8fd3b34fd415a2670d7c300b06d3e14a5af4f552"}, - {file = "coverage-7.11.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:214b622259dd0cf435f10241f1333d32caa64dbc27f8790ab693428a141723de"}, - {file = "coverage-7.11.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:258d9967520cca899695d4eb7ea38be03f06951d6ca2f21fb48b1235f791e601"}, - {file = "coverage-7.11.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:cf9e6ff4ca908ca15c157c409d608da77a56a09877b97c889b98fb2c32b6465e"}, - {file = "coverage-7.11.0-cp311-cp311-win32.whl", hash = "sha256:fcc15fc462707b0680cff6242c48625da7f9a16a28a41bb8fd7a4280920e676c"}, - {file = "coverage-7.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:865965bf955d92790f1facd64fe7ff73551bd2c1e7e6b26443934e9701ba30b9"}, - {file = "coverage-7.11.0-cp311-cp311-win_arm64.whl", hash = "sha256:5693e57a065760dcbeb292d60cc4d0231a6d4b6b6f6a3191561e1d5e8820b745"}, - {file = "coverage-7.11.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:9c49e77811cf9d024b95faf86c3f059b11c0c9be0b0d61bc598f453703bd6fd1"}, - {file = "coverage-7.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a61e37a403a778e2cda2a6a39abcc895f1d984071942a41074b5c7ee31642007"}, - {file = "coverage-7.11.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:c79cae102bb3b1801e2ef1511fb50e91ec83a1ce466b2c7c25010d884336de46"}, - {file = "coverage-7.11.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:16ce17ceb5d211f320b62df002fa7016b7442ea0fd260c11cec8ce7730954893"}, - {file = "coverage-7.11.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:80027673e9d0bd6aef86134b0771845e2da85755cf686e7c7c59566cf5a89115"}, - {file = "coverage-7.11.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4d3ffa07a08657306cd2215b0da53761c4d73cb54d9143b9303a6481ec0cd415"}, - {file = "coverage-7.11.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a3b6a5f8b2524fd6c1066bc85bfd97e78709bb5e37b5b94911a6506b65f47186"}, - {file = "coverage-7.11.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:fcc0a4aa589de34bc56e1a80a740ee0f8c47611bdfb28cd1849de60660f3799d"}, - {file = "coverage-7.11.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:dba82204769d78c3fd31b35c3d5f46e06511936c5019c39f98320e05b08f794d"}, - {file = "coverage-7.11.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:81b335f03ba67309a95210caf3eb43bd6fe75a4e22ba653ef97b4696c56c7ec2"}, - {file = "coverage-7.11.0-cp312-cp312-win32.whl", hash = "sha256:037b2d064c2f8cc8716fe4d39cb705779af3fbf1ba318dc96a1af858888c7bb5"}, - {file = "coverage-7.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:d66c0104aec3b75e5fd897e7940188ea1892ca1d0235316bf89286d6a22568c0"}, - {file = "coverage-7.11.0-cp312-cp312-win_arm64.whl", hash = "sha256:d91ebeac603812a09cf6a886ba6e464f3bbb367411904ae3790dfe28311b15ad"}, - {file = "coverage-7.11.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:cc3f49e65ea6e0d5d9bd60368684fe52a704d46f9e7fc413918f18d046ec40e1"}, - {file = "coverage-7.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f39ae2f63f37472c17b4990f794035c9890418b1b8cca75c01193f3c8d3e01be"}, - {file = "coverage-7.11.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:7db53b5cdd2917b6eaadd0b1251cf4e7d96f4a8d24e174bdbdf2f65b5ea7994d"}, - {file = "coverage-7.11.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:10ad04ac3a122048688387828b4537bc9cf60c0bf4869c1e9989c46e45690b82"}, - {file = "coverage-7.11.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4036cc9c7983a2b1f2556d574d2eb2154ac6ed55114761685657e38782b23f52"}, - {file = "coverage-7.11.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7ab934dd13b1c5e94b692b1e01bd87e4488cb746e3a50f798cb9464fd128374b"}, - {file = "coverage-7.11.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59a6e5a265f7cfc05f76e3bb53eca2e0dfe90f05e07e849930fecd6abb8f40b4"}, - {file = "coverage-7.11.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:df01d6c4c81e15a7c88337b795bb7595a8596e92310266b5072c7e301168efbd"}, - {file = "coverage-7.11.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:8c934bd088eed6174210942761e38ee81d28c46de0132ebb1801dbe36a390dcc"}, - {file = "coverage-7.11.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5a03eaf7ec24078ad64a07f02e30060aaf22b91dedf31a6b24d0d98d2bba7f48"}, - {file = "coverage-7.11.0-cp313-cp313-win32.whl", hash = "sha256:695340f698a5f56f795b2836abe6fb576e7c53d48cd155ad2f80fd24bc63a040"}, - {file = "coverage-7.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:2727d47fce3ee2bac648528e41455d1b0c46395a087a229deac75e9f88ba5a05"}, - {file = "coverage-7.11.0-cp313-cp313-win_arm64.whl", hash = "sha256:0efa742f431529699712b92ecdf22de8ff198df41e43aeaaadf69973eb93f17a"}, - {file = "coverage-7.11.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:587c38849b853b157706407e9ebdca8fd12f45869edb56defbef2daa5fb0812b"}, - {file = "coverage-7.11.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b971bdefdd75096163dd4261c74be813c4508477e39ff7b92191dea19f24cd37"}, - {file = "coverage-7.11.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:269bfe913b7d5be12ab13a95f3a76da23cf147be7fa043933320ba5625f0a8de"}, - {file = "coverage-7.11.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:dadbcce51a10c07b7c72b0ce4a25e4b6dcb0c0372846afb8e5b6307a121eb99f"}, - {file = "coverage-7.11.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9ed43fa22c6436f7957df036331f8fe4efa7af132054e1844918866cd228af6c"}, - {file = "coverage-7.11.0-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9516add7256b6713ec08359b7b05aeff8850c98d357784c7205b2e60aa2513fa"}, - {file = "coverage-7.11.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:eb92e47c92fcbcdc692f428da67db33337fa213756f7adb6a011f7b5a7a20740"}, - {file = "coverage-7.11.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:d06f4fc7acf3cabd6d74941d53329e06bab00a8fe10e4df2714f0b134bfc64ef"}, - {file = "coverage-7.11.0-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:6fbcee1a8f056af07ecd344482f711f563a9eb1c2cad192e87df00338ec3cdb0"}, - {file = "coverage-7.11.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dbbf012be5f32533a490709ad597ad8a8ff80c582a95adc8d62af664e532f9ca"}, - {file = "coverage-7.11.0-cp313-cp313t-win32.whl", hash = "sha256:cee6291bb4fed184f1c2b663606a115c743df98a537c969c3c64b49989da96c2"}, - {file = "coverage-7.11.0-cp313-cp313t-win_amd64.whl", hash = "sha256:a386c1061bf98e7ea4758e4313c0ab5ecf57af341ef0f43a0bf26c2477b5c268"}, - {file = "coverage-7.11.0-cp313-cp313t-win_arm64.whl", hash = "sha256:f9ea02ef40bb83823b2b04964459d281688fe173e20643870bb5d2edf68bc836"}, - {file = "coverage-7.11.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:c770885b28fb399aaf2a65bbd1c12bf6f307ffd112d6a76c5231a94276f0c497"}, - {file = "coverage-7.11.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a3d0e2087dba64c86a6b254f43e12d264b636a39e88c5cc0a01a7c71bcfdab7e"}, - {file = "coverage-7.11.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:73feb83bb41c32811973b8565f3705caf01d928d972b72042b44e97c71fd70d1"}, - {file = "coverage-7.11.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c6f31f281012235ad08f9a560976cc2fc9c95c17604ff3ab20120fe480169bca"}, - {file = "coverage-7.11.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e9570ad567f880ef675673992222746a124b9595506826b210fbe0ce3f0499cd"}, - {file = "coverage-7.11.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8badf70446042553a773547a61fecaa734b55dc738cacf20c56ab04b77425e43"}, - {file = "coverage-7.11.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a09c1211959903a479e389685b7feb8a17f59ec5a4ef9afde7650bd5eabc2777"}, - {file = "coverage-7.11.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:5ef83b107f50db3f9ae40f69e34b3bd9337456c5a7fe3461c7abf8b75dd666a2"}, - {file = "coverage-7.11.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:f91f927a3215b8907e214af77200250bb6aae36eca3f760f89780d13e495388d"}, - {file = "coverage-7.11.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:cdbcd376716d6b7fbfeedd687a6c4be019c5a5671b35f804ba76a4c0a778cba4"}, - {file = "coverage-7.11.0-cp314-cp314-win32.whl", hash = "sha256:bab7ec4bb501743edc63609320aaec8cd9188b396354f482f4de4d40a9d10721"}, - {file = "coverage-7.11.0-cp314-cp314-win_amd64.whl", hash = "sha256:3d4ba9a449e9364a936a27322b20d32d8b166553bfe63059bd21527e681e2fad"}, - {file = "coverage-7.11.0-cp314-cp314-win_arm64.whl", hash = "sha256:ce37f215223af94ef0f75ac68ea096f9f8e8c8ec7d6e8c346ee45c0d363f0479"}, - {file = "coverage-7.11.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:f413ce6e07e0d0dc9c433228727b619871532674b45165abafe201f200cc215f"}, - {file = "coverage-7.11.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:05791e528a18f7072bf5998ba772fe29db4da1234c45c2087866b5ba4dea710e"}, - {file = "coverage-7.11.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:cacb29f420cfeb9283b803263c3b9a068924474ff19ca126ba9103e1278dfa44"}, - {file = "coverage-7.11.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:314c24e700d7027ae3ab0d95fbf8d53544fca1f20345fd30cd219b737c6e58d3"}, - {file = "coverage-7.11.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:630d0bd7a293ad2fc8b4b94e5758c8b2536fdf36c05f1681270203e463cbfa9b"}, - {file = "coverage-7.11.0-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e89641f5175d65e2dbb44db15fe4ea48fade5d5bbb9868fdc2b4fce22f4a469d"}, - {file = "coverage-7.11.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c9f08ea03114a637dab06cedb2e914da9dc67fa52c6015c018ff43fdde25b9c2"}, - {file = "coverage-7.11.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:ce9f3bde4e9b031eaf1eb61df95c1401427029ea1bfddb8621c1161dcb0fa02e"}, - {file = "coverage-7.11.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:e4dc07e95495923d6fd4d6c27bf70769425b71c89053083843fd78f378558996"}, - {file = "coverage-7.11.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:424538266794db2861db4922b05d729ade0940ee69dcf0591ce8f69784db0e11"}, - {file = "coverage-7.11.0-cp314-cp314t-win32.whl", hash = "sha256:4c1eeb3fb8eb9e0190bebafd0462936f75717687117339f708f395fe455acc73"}, - {file = "coverage-7.11.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b56efee146c98dbf2cf5cffc61b9829d1e94442df4d7398b26892a53992d3547"}, - {file = "coverage-7.11.0-cp314-cp314t-win_arm64.whl", hash = "sha256:b5c2705afa83f49bd91962a4094b6b082f94aef7626365ab3f8f4bd159c5acf3"}, - {file = "coverage-7.11.0-py3-none-any.whl", hash = "sha256:4b7589765348d78fb4e5fb6ea35d07564e387da2fc5efff62e0222971f155f68"}, - {file = "coverage-7.11.0.tar.gz", hash = "sha256:167bd504ac1ca2af7ff3b81d245dfea0292c5032ebef9d66cc08a7d28c1b8050"}, -] - -[package.extras] -toml = ["tomli ; python_full_version <= \"3.11.0a6\""] - -[[package]] -name = "cyclonedx-python-lib" -version = "9.1.0" -description = "Python library for CycloneDX" -optional = false -python-versions = "<4.0,>=3.8" -groups = ["dev"] -files = [ - {file = "cyclonedx_python_lib-9.1.0-py3-none-any.whl", hash = "sha256:55693fca8edaecc3363b24af14e82cc6e659eb1e8353e58b587c42652ce0fb52"}, - {file = "cyclonedx_python_lib-9.1.0.tar.gz", hash = "sha256:86935f2c88a7b47a529b93c724dbd3e903bc573f6f8bd977628a7ca1b5dadea1"}, -] - -[package.dependencies] -license-expression = ">=30,<31" -packageurl-python = ">=0.11,<2" -py-serializable = ">=2.0.0,<3.0.0" -sortedcontainers = ">=2.4.0,<3.0.0" - -[package.extras] -json-validation = ["jsonschema[format] (>=4.18,<5.0)"] -validation = ["jsonschema[format] (>=4.18,<5.0)", "lxml (>=4,<6)"] -xml-validation = ["lxml (>=4,<6)"] - -[[package]] -name = "cyclopts" -version = "4.2.1" -description = "Intuitive, easy CLIs based on type hints." -optional = false -python-versions = ">=3.10" -groups = ["dev"] -files = [ - {file = "cyclopts-4.2.1-py3-none-any.whl", hash = "sha256:17a801faa814988b0307385ef8aaeb6b14b4d64473015a2d66bde9ea13f14d9c"}, - {file = "cyclopts-4.2.1.tar.gz", hash = "sha256:49bb4c35644e7a9658f706ade4cf1a9958834b2dca4425e2fafecf8a0537fac7"}, -] - -[package.dependencies] -attrs = ">=23.1.0" -docstring-parser = ">=0.15,<4.0" -rich = ">=13.6.0" -rich-rst = ">=1.3.1,<2.0.0" - -[package.extras] -debug = ["ipdb (>=0.13.9)", "line-profiler (>=3.5.1)"] -dev = ["coverage[toml] (>=5.1)", "pre-commit (>=2.16.0)", "pydantic (>=2.11.2,<3.0.0)", "pytest (>=8.2.0)", "pytest-cov (>=3.0.0)", "pytest-mock (>=3.7.0)", "pyyaml (>=6.0.1)", "toml (>=0.10.2,<1.0.0)", "trio (>=0.10.0)"] -docs = ["gitpython (>=3.1.31)", "myst-parser[linkify] (>=3.0.1,<5.0.0)", "sphinx (>=7.4.7,<8.2.0)", "sphinx-autodoc-typehints (>=1.25.2,<4.0.0)", "sphinx-copybutton (>=0.5,<1.0)", "sphinx-rtd-dark-mode (>=1.3.0,<2.0.0)", "sphinx-rtd-theme (>=3.0.0,<4.0.0)"] -toml = ["tomli (>=2.0.0) ; python_version < \"3.11\""] -trio = ["trio (>=0.10.0)"] -yaml = ["pyyaml (>=6.0.1)"] - -[[package]] -name = "defusedxml" -version = "0.7.1" -description = "XML bomb protection for Python stdlib modules" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -groups = ["dev"] -files = [ - {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, - {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, -] - -[[package]] -name = "distlib" -version = "0.4.0" -description = "Distribution utilities" -optional = false -python-versions = "*" -groups = ["dev"] -files = [ - {file = "distlib-0.4.0-py2.py3-none-any.whl", hash = "sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16"}, - {file = "distlib-0.4.0.tar.gz", hash = "sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d"}, -] - -[[package]] -name = "docstring-parser" -version = "0.17.0" -description = "Parse Python docstrings in reST, Google and Numpydoc format" -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "docstring_parser-0.17.0-py3-none-any.whl", hash = "sha256:cf2569abd23dce8099b300f9b4fa8191e9582dda731fd533daf54c4551658708"}, - {file = "docstring_parser-0.17.0.tar.gz", hash = "sha256:583de4a309722b3315439bb31d64ba3eebada841f2e2cee23b99df001434c912"}, -] - -[package.extras] -dev = ["pre-commit (>=2.16.0) ; python_version >= \"3.9\"", "pydoctor (>=25.4.0)", "pytest"] -docs = ["pydoctor (>=25.4.0)"] -test = ["pytest"] - -[[package]] -name = "docutils" -version = "0.22.2" -description = "Docutils -- Python Documentation Utilities" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "docutils-0.22.2-py3-none-any.whl", hash = "sha256:b0e98d679283fc3bb0ead8a5da7f501baa632654e7056e9c5846842213d674d8"}, - {file = "docutils-0.22.2.tar.gz", hash = "sha256:9fdb771707c8784c8f2728b67cb2c691305933d68137ef95a75db5f4dfbc213d"}, -] - -[[package]] -name = "filelock" -version = "3.20.0" -description = "A platform independent file lock." -optional = false -python-versions = ">=3.10" -groups = ["dev"] -files = [ - {file = "filelock-3.20.0-py3-none-any.whl", hash = "sha256:339b4732ffda5cd79b13f4e2711a31b0365ce445d95d243bb996273d072546a2"}, - {file = "filelock-3.20.0.tar.gz", hash = "sha256:711e943b4ec6be42e1d4e6690b48dc175c822967466bb31c0c293f34334c13f4"}, -] - -[[package]] -name = "frozenlist" -version = "1.8.0" -description = "A list-like structure which implements collections.abc.MutableSequence" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "frozenlist-1.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011"}, - {file = "frozenlist-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565"}, - {file = "frozenlist-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a88f062f072d1589b7b46e951698950e7da00442fc1cacbe17e19e025dc327ad"}, - {file = "frozenlist-1.8.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f57fb59d9f385710aa7060e89410aeb5058b99e62f4d16b08b91986b9a2140c2"}, - {file = "frozenlist-1.8.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:799345ab092bee59f01a915620b5d014698547afd011e691a208637312db9186"}, - {file = "frozenlist-1.8.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c23c3ff005322a6e16f71bf8692fcf4d5a304aaafe1e262c98c6d4adc7be863e"}, - {file = "frozenlist-1.8.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8a76ea0f0b9dfa06f254ee06053d93a600865b3274358ca48a352ce4f0798450"}, - {file = "frozenlist-1.8.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c7366fe1418a6133d5aa824ee53d406550110984de7637d65a178010f759c6ef"}, - {file = "frozenlist-1.8.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:13d23a45c4cebade99340c4165bd90eeb4a56c6d8a9d8aa49568cac19a6d0dc4"}, - {file = "frozenlist-1.8.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:e4a3408834f65da56c83528fb52ce7911484f0d1eaf7b761fc66001db1646eff"}, - {file = "frozenlist-1.8.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:42145cd2748ca39f32801dad54aeea10039da6f86e303659db90db1c4b614c8c"}, - {file = "frozenlist-1.8.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e2de870d16a7a53901e41b64ffdf26f2fbb8917b3e6ebf398098d72c5b20bd7f"}, - {file = "frozenlist-1.8.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:20e63c9493d33ee48536600d1a5c95eefc870cd71e7ab037763d1fbb89cc51e7"}, - {file = "frozenlist-1.8.0-cp310-cp310-win32.whl", hash = "sha256:adbeebaebae3526afc3c96fad434367cafbfd1b25d72369a9e5858453b1bb71a"}, - {file = "frozenlist-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:667c3777ca571e5dbeb76f331562ff98b957431df140b54c85fd4d52eea8d8f6"}, - {file = "frozenlist-1.8.0-cp310-cp310-win_arm64.whl", hash = "sha256:80f85f0a7cc86e7a54c46d99c9e1318ff01f4687c172ede30fd52d19d1da1c8e"}, - {file = "frozenlist-1.8.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84"}, - {file = "frozenlist-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9"}, - {file = "frozenlist-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93"}, - {file = "frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f"}, - {file = "frozenlist-1.8.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:957e7c38f250991e48a9a73e6423db1bb9dd14e722a10f6b8bb8e16a0f55f695"}, - {file = "frozenlist-1.8.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52"}, - {file = "frozenlist-1.8.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581"}, - {file = "frozenlist-1.8.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567"}, - {file = "frozenlist-1.8.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b6db2185db9be0a04fecf2f241c70b63b1a242e2805be291855078f2b404dd6b"}, - {file = "frozenlist-1.8.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92"}, - {file = "frozenlist-1.8.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d"}, - {file = "frozenlist-1.8.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd"}, - {file = "frozenlist-1.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967"}, - {file = "frozenlist-1.8.0-cp311-cp311-win32.whl", hash = "sha256:27c6e8077956cf73eadd514be8fb04d77fc946a7fe9f7fe167648b0b9085cc25"}, - {file = "frozenlist-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:ac913f8403b36a2c8610bbfd25b8013488533e71e62b4b4adce9c86c8cea905b"}, - {file = "frozenlist-1.8.0-cp311-cp311-win_arm64.whl", hash = "sha256:d4d3214a0f8394edfa3e303136d0575eece0745ff2b47bd2cb2e66dd92d4351a"}, - {file = "frozenlist-1.8.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1"}, - {file = "frozenlist-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b"}, - {file = "frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4"}, - {file = "frozenlist-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383"}, - {file = "frozenlist-1.8.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4"}, - {file = "frozenlist-1.8.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3462dd9475af2025c31cc61be6652dfa25cbfb56cbbf52f4ccfe029f38decaf8"}, - {file = "frozenlist-1.8.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c4c800524c9cd9bac5166cd6f55285957fcfc907db323e193f2afcd4d9abd69b"}, - {file = "frozenlist-1.8.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d6a5df73acd3399d893dafc71663ad22534b5aa4f94e8a2fabfe856c3c1b6a52"}, - {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29"}, - {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:908bd3f6439f2fef9e85031b59fd4f1297af54415fb60e4254a95f75b3cab3f3"}, - {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:294e487f9ec720bd8ffcebc99d575f7eff3568a08a253d1ee1a0378754b74143"}, - {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:74c51543498289c0c43656701be6b077f4b265868fa7f8a8859c197006efb608"}, - {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa"}, - {file = "frozenlist-1.8.0-cp312-cp312-win32.whl", hash = "sha256:433403ae80709741ce34038da08511d4a77062aa924baf411ef73d1146e74faf"}, - {file = "frozenlist-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746"}, - {file = "frozenlist-1.8.0-cp312-cp312-win_arm64.whl", hash = "sha256:fe3c58d2f5db5fbd18c2987cba06d51b0529f52bc3a6cdc33d3f4eab725104bd"}, - {file = "frozenlist-1.8.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a"}, - {file = "frozenlist-1.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7"}, - {file = "frozenlist-1.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40"}, - {file = "frozenlist-1.8.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027"}, - {file = "frozenlist-1.8.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822"}, - {file = "frozenlist-1.8.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:03ae967b4e297f58f8c774c7eabcce57fe3c2434817d4385c50661845a058121"}, - {file = "frozenlist-1.8.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f6292f1de555ffcc675941d65fffffb0a5bcd992905015f85d0592201793e0e5"}, - {file = "frozenlist-1.8.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29548f9b5b5e3460ce7378144c3010363d8035cea44bc0bf02d57f5a685e084e"}, - {file = "frozenlist-1.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11"}, - {file = "frozenlist-1.8.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:517279f58009d0b1f2e7c1b130b377a349405da3f7621ed6bfae50b10adf20c1"}, - {file = "frozenlist-1.8.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:db1e72ede2d0d7ccb213f218df6a078a9c09a7de257c2fe8fcef16d5925230b1"}, - {file = "frozenlist-1.8.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b4dec9482a65c54a5044486847b8a66bf10c9cb4926d42927ec4e8fd5db7fed8"}, - {file = "frozenlist-1.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed"}, - {file = "frozenlist-1.8.0-cp313-cp313-win32.whl", hash = "sha256:8b7b94a067d1c504ee0b16def57ad5738701e4ba10cec90529f13fa03c833496"}, - {file = "frozenlist-1.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:878be833caa6a3821caf85eb39c5ba92d28e85df26d57afb06b35b2efd937231"}, - {file = "frozenlist-1.8.0-cp313-cp313-win_arm64.whl", hash = "sha256:44389d135b3ff43ba8cc89ff7f51f5a0bb6b63d829c8300f79a2fe4fe61bcc62"}, - {file = "frozenlist-1.8.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:e25ac20a2ef37e91c1b39938b591457666a0fa835c7783c3a8f33ea42870db94"}, - {file = "frozenlist-1.8.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:07cdca25a91a4386d2e76ad992916a85038a9b97561bf7a3fd12d5d9ce31870c"}, - {file = "frozenlist-1.8.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4e0c11f2cc6717e0a741f84a527c52616140741cd812a50422f83dc31749fb52"}, - {file = "frozenlist-1.8.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51"}, - {file = "frozenlist-1.8.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65"}, - {file = "frozenlist-1.8.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3ef2d026f16a2b1866e1d86fc4e1291e1ed8a387b2c333809419a2f8b3a77b82"}, - {file = "frozenlist-1.8.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5500ef82073f599ac84d888e3a8c1f77ac831183244bfd7f11eaa0289fb30714"}, - {file = "frozenlist-1.8.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:50066c3997d0091c411a66e710f4e11752251e6d2d73d70d8d5d4c76442a199d"}, - {file = "frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506"}, - {file = "frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:eefdba20de0d938cec6a89bd4d70f346a03108a19b9df4248d3cf0d88f1b0f51"}, - {file = "frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:cf253e0e1c3ceb4aaff6df637ce033ff6535fb8c70a764a8f46aafd3d6ab798e"}, - {file = "frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:032efa2674356903cd0261c4317a561a6850f3ac864a63fc1583147fb05a79b0"}, - {file = "frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41"}, - {file = "frozenlist-1.8.0-cp313-cp313t-win32.whl", hash = "sha256:0f96534f8bfebc1a394209427d0f8a63d343c9779cda6fc25e8e121b5fd8555b"}, - {file = "frozenlist-1.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5d63a068f978fc69421fb0e6eb91a9603187527c86b7cd3f534a5b77a592b888"}, - {file = "frozenlist-1.8.0-cp313-cp313t-win_arm64.whl", hash = "sha256:bf0a7e10b077bf5fb9380ad3ae8ce20ef919a6ad93b4552896419ac7e1d8e042"}, - {file = "frozenlist-1.8.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:cee686f1f4cadeb2136007ddedd0aaf928ab95216e7691c63e50a8ec066336d0"}, - {file = "frozenlist-1.8.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:119fb2a1bd47307e899c2fac7f28e85b9a543864df47aa7ec9d3c1b4545f096f"}, - {file = "frozenlist-1.8.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c"}, - {file = "frozenlist-1.8.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2"}, - {file = "frozenlist-1.8.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8"}, - {file = "frozenlist-1.8.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686"}, - {file = "frozenlist-1.8.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:97260ff46b207a82a7567b581ab4190bd4dfa09f4db8a8b49d1a958f6aa4940e"}, - {file = "frozenlist-1.8.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:54b2077180eb7f83dd52c40b2750d0a9f175e06a42e3213ce047219de902717a"}, - {file = "frozenlist-1.8.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128"}, - {file = "frozenlist-1.8.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:33f48f51a446114bc5d251fb2954ab0164d5be02ad3382abcbfe07e2531d650f"}, - {file = "frozenlist-1.8.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:154e55ec0655291b5dd1b8731c637ecdb50975a2ae70c606d100750a540082f7"}, - {file = "frozenlist-1.8.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:4314debad13beb564b708b4a496020e5306c7333fa9a3ab90374169a20ffab30"}, - {file = "frozenlist-1.8.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7"}, - {file = "frozenlist-1.8.0-cp314-cp314-win32.whl", hash = "sha256:bac9c42ba2ac65ddc115d930c78d24ab8d4f465fd3fc473cdedfccadb9429806"}, - {file = "frozenlist-1.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0"}, - {file = "frozenlist-1.8.0-cp314-cp314-win_arm64.whl", hash = "sha256:d1eaff1d00c7751b7c6662e9c5ba6eb2c17a2306ba5e2a37f24ddf3cc953402b"}, - {file = "frozenlist-1.8.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:d3bb933317c52d7ea5004a1c442eef86f426886fba134ef8cf4226ea6ee1821d"}, - {file = "frozenlist-1.8.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8009897cdef112072f93a0efdce29cd819e717fd2f649ee3016efd3cd885a7ed"}, - {file = "frozenlist-1.8.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2c5dcbbc55383e5883246d11fd179782a9d07a986c40f49abe89ddf865913930"}, - {file = "frozenlist-1.8.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c"}, - {file = "frozenlist-1.8.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24"}, - {file = "frozenlist-1.8.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2dc43a022e555de94c3b68a4ef0b11c4f747d12c024a520c7101709a2144fb37"}, - {file = "frozenlist-1.8.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cb89a7f2de3602cfed448095bab3f178399646ab7c61454315089787df07733a"}, - {file = "frozenlist-1.8.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:33139dc858c580ea50e7e60a1b0ea003efa1fd42e6ec7fdbad78fff65fad2fd2"}, - {file = "frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef"}, - {file = "frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:28bd570e8e189d7f7b001966435f9dac6718324b5be2990ac496cf1ea9ddb7fe"}, - {file = "frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b2a095d45c5d46e5e79ba1e5b9cb787f541a8dee0433836cea4b96a2c439dcd8"}, - {file = "frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:eab8145831a0d56ec9c4139b6c3e594c7a83c2c8be25d5bcf2d86136a532287a"}, - {file = "frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e"}, - {file = "frozenlist-1.8.0-cp314-cp314t-win32.whl", hash = "sha256:342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df"}, - {file = "frozenlist-1.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd"}, - {file = "frozenlist-1.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79"}, - {file = "frozenlist-1.8.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d8b7138e5cd0647e4523d6685b0eac5d4be9a184ae9634492f25c6eb38c12a47"}, - {file = "frozenlist-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a6483e309ca809f1efd154b4d37dc6d9f61037d6c6a81c2dc7a15cb22c8c5dca"}, - {file = "frozenlist-1.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1b9290cf81e95e93fdf90548ce9d3c1211cf574b8e3f4b3b7cb0537cf2227068"}, - {file = "frozenlist-1.8.0-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:59a6a5876ca59d1b63af8cd5e7ffffb024c3dc1e9cf9301b21a2e76286505c95"}, - {file = "frozenlist-1.8.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6dc4126390929823e2d2d9dc79ab4046ed74680360fc5f38b585c12c66cdf459"}, - {file = "frozenlist-1.8.0-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:332db6b2563333c5671fecacd085141b5800cb866be16d5e3eb15a2086476675"}, - {file = "frozenlist-1.8.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9ff15928d62a0b80bb875655c39bf517938c7d589554cbd2669be42d97c2cb61"}, - {file = "frozenlist-1.8.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7bf6cdf8e07c8151fba6fe85735441240ec7f619f935a5205953d58009aef8c6"}, - {file = "frozenlist-1.8.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:48e6d3f4ec5c7273dfe83ff27c91083c6c9065af655dc2684d2c200c94308bb5"}, - {file = "frozenlist-1.8.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:1a7607e17ad33361677adcd1443edf6f5da0ce5e5377b798fba20fae194825f3"}, - {file = "frozenlist-1.8.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:5a3a935c3a4e89c733303a2d5a7c257ea44af3a56c8202df486b7f5de40f37e1"}, - {file = "frozenlist-1.8.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:940d4a017dbfed9daf46a3b086e1d2167e7012ee297fef9e1c545c4d022f5178"}, - {file = "frozenlist-1.8.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b9be22a69a014bc47e78072d0ecae716f5eb56c15238acca0f43d6eb8e4a5bda"}, - {file = "frozenlist-1.8.0-cp39-cp39-win32.whl", hash = "sha256:1aa77cb5697069af47472e39612976ed05343ff2e84a3dcf15437b232cbfd087"}, - {file = "frozenlist-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:7398c222d1d405e796970320036b1b563892b65809d9e5261487bb2c7f7b5c6a"}, - {file = "frozenlist-1.8.0-cp39-cp39-win_arm64.whl", hash = "sha256:b4f3b365f31c6cd4af24545ca0a244a53688cad8834e32f56831c4923b50a103"}, - {file = "frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d"}, - {file = "frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad"}, -] - -[[package]] -name = "h11" -version = "0.16.0" -description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -optional = false -python-versions = ">=3.8" -groups = ["main", "dev"] -files = [ - {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"}, - {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"}, -] - -[[package]] -name = "httpcore" -version = "1.0.9" -description = "A minimal low-level HTTP client." -optional = false -python-versions = ">=3.8" -groups = ["main", "dev"] -files = [ - {file = "httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55"}, - {file = "httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8"}, -] - -[package.dependencies] -certifi = "*" -h11 = ">=0.16" - -[package.extras] -asyncio = ["anyio (>=4.0,<5.0)"] -http2 = ["h2 (>=3,<5)"] -socks = ["socksio (==1.*)"] -trio = ["trio (>=0.22.0,<1.0)"] - -[[package]] -name = "httpx" -version = "0.28.1" -description = "The next generation HTTP client." -optional = false -python-versions = ">=3.8" -groups = ["main", "dev"] -files = [ - {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, - {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, -] - -[package.dependencies] -anyio = "*" -certifi = "*" -httpcore = "==1.*" -idna = "*" - -[package.extras] -brotli = ["brotli ; platform_python_implementation == \"CPython\"", "brotlicffi ; platform_python_implementation != \"CPython\""] -cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] -http2 = ["h2 (>=3,<5)"] -socks = ["socksio (==1.*)"] -zstd = ["zstandard (>=0.18.0)"] - -[[package]] -name = "identify" -version = "2.6.15" -description = "File identification library for Python" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "identify-2.6.15-py2.py3-none-any.whl", hash = "sha256:1181ef7608e00704db228516541eb83a88a9f94433a8c80bb9b5bd54b1d81757"}, - {file = "identify-2.6.15.tar.gz", hash = "sha256:e4f4864b96c6557ef2a1e1c951771838f4edc9df3a72ec7118b338801b11c7bf"}, -] - -[package.extras] -license = ["ukkonen"] - -[[package]] -name = "idna" -version = "3.11" -description = "Internationalized Domain Names in Applications (IDNA)" -optional = false -python-versions = ">=3.8" -groups = ["main", "dev"] -files = [ - {file = "idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea"}, - {file = "idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902"}, -] - -[package.extras] -all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] - -[[package]] -name = "immutabledict" -version = "4.2.2" -description = "Immutable wrapper around dictionaries (a fork of frozendict)" -optional = false -python-versions = "<4.0,>=3.8" -groups = ["dev"] -files = [ - {file = "immutabledict-4.2.2-py3-none-any.whl", hash = "sha256:97c31d098a2c850e93a958badeef765e4736ed7942ec73e439facd764a3a7217"}, - {file = "immutabledict-4.2.2.tar.gz", hash = "sha256:cb6ed3090df593148f94cb407d218ca526fd2639694afdb553dc4f50ce6feeca"}, -] - -[[package]] -name = "iniconfig" -version = "2.3.0" -description = "brain-dead simple config-ini parsing" -optional = false -python-versions = ">=3.10" -groups = ["dev"] -files = [ - {file = "iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12"}, - {file = "iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730"}, -] - -[[package]] -name = "license-expression" -version = "30.4.4" -description = "license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic." -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "license_expression-30.4.4-py3-none-any.whl", hash = "sha256:421788fdcadb41f049d2dc934ce666626265aeccefddd25e162a26f23bcbf8a4"}, - {file = "license_expression-30.4.4.tar.gz", hash = "sha256:73448f0aacd8d0808895bdc4b2c8e01a8d67646e4188f887375398c761f340fd"}, -] - -[package.dependencies] -"boolean.py" = ">=4.0" - -[package.extras] -dev = ["Sphinx (>=5.0.2)", "doc8 (>=0.11.2)", "pytest (>=7.0.1)", "pytest-xdist (>=2)", "ruff", "sphinx-autobuild", "sphinx-copybutton", "sphinx-reredirects (>=0.1.2)", "sphinx-rtd-dark-mode (>=1.3.0)", "sphinx-rtd-theme (>=1.0.0)", "sphinxcontrib-apidoc (>=0.4.0)", "twine"] - -[[package]] -name = "lsprotocol" -version = "2025.0.0" -description = "Python types for Language Server Protocol." -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "lsprotocol-2025.0.0-py3-none-any.whl", hash = "sha256:f9d78f25221f2a60eaa4a96d3b4ffae011b107537facee61d3da3313880995c7"}, - {file = "lsprotocol-2025.0.0.tar.gz", hash = "sha256:e879da2b9301e82cfc3e60d805630487ac2f7ab17492f4f5ba5aaba94fe56c29"}, -] - -[package.dependencies] -attrs = ">=21.3.0" -cattrs = "!=23.2.1" - -[[package]] -name = "markdown-it-py" -version = "4.0.0" -description = "Python port of markdown-it. Markdown parsing, done right!" -optional = false -python-versions = ">=3.10" -groups = ["dev"] -files = [ - {file = "markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147"}, - {file = "markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3"}, -] - -[package.dependencies] -mdurl = ">=0.1,<1.0" - -[package.extras] -benchmarking = ["psutil", "pytest", "pytest-benchmark"] -compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "markdown-it-pyrs", "mistletoe (>=1.0,<2.0)", "mistune (>=3.0,<4.0)", "panflute (>=2.3,<3.0)"] -linkify = ["linkify-it-py (>=1,<3)"] -plugins = ["mdit-py-plugins (>=0.5.0)"] -profiling = ["gprof2dot"] -rtd = ["ipykernel", "jupyter_sphinx", "mdit-py-plugins (>=0.5.0)", "myst-parser", "pyyaml", "sphinx", "sphinx-book-theme (>=1.0,<2.0)", "sphinx-copybutton", "sphinx-design"] -testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions", "requests"] - -[[package]] -name = "mdurl" -version = "0.1.2" -description = "Markdown URL utilities" -optional = false -python-versions = ">=3.7" -groups = ["dev"] -files = [ - {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, - {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, -] - -[[package]] -name = "msgpack" -version = "1.1.2" -description = "MessagePack serializer" -optional = false -python-versions = ">=3.9" -groups = ["main", "dev"] -files = [ - {file = "msgpack-1.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0051fffef5a37ca2cd16978ae4f0aef92f164df86823871b5162812bebecd8e2"}, - {file = "msgpack-1.1.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a605409040f2da88676e9c9e5853b3449ba8011973616189ea5ee55ddbc5bc87"}, - {file = "msgpack-1.1.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b696e83c9f1532b4af884045ba7f3aa741a63b2bc22617293a2c6a7c645f251"}, - {file = "msgpack-1.1.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:365c0bbe981a27d8932da71af63ef86acc59ed5c01ad929e09a0b88c6294e28a"}, - {file = "msgpack-1.1.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:41d1a5d875680166d3ac5c38573896453bbbea7092936d2e107214daf43b1d4f"}, - {file = "msgpack-1.1.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:354e81bcdebaab427c3df4281187edc765d5d76bfb3a7c125af9da7a27e8458f"}, - {file = "msgpack-1.1.2-cp310-cp310-win32.whl", hash = "sha256:e64c8d2f5e5d5fda7b842f55dec6133260ea8f53c4257d64494c534f306bf7a9"}, - {file = "msgpack-1.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:db6192777d943bdaaafb6ba66d44bf65aa0e9c5616fa1d2da9bb08828c6b39aa"}, - {file = "msgpack-1.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2e86a607e558d22985d856948c12a3fa7b42efad264dca8a3ebbcfa2735d786c"}, - {file = "msgpack-1.1.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:283ae72fc89da59aa004ba147e8fc2f766647b1251500182fac0350d8af299c0"}, - {file = "msgpack-1.1.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:61c8aa3bd513d87c72ed0b37b53dd5c5a0f58f2ff9f26e1555d3bd7948fb7296"}, - {file = "msgpack-1.1.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:454e29e186285d2ebe65be34629fa0e8605202c60fbc7c4c650ccd41870896ef"}, - {file = "msgpack-1.1.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7bc8813f88417599564fafa59fd6f95be417179f76b40325b500b3c98409757c"}, - {file = "msgpack-1.1.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bafca952dc13907bdfdedfc6a5f579bf4f292bdd506fadb38389afa3ac5b208e"}, - {file = "msgpack-1.1.2-cp311-cp311-win32.whl", hash = "sha256:602b6740e95ffc55bfb078172d279de3773d7b7db1f703b2f1323566b878b90e"}, - {file = "msgpack-1.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:d198d275222dc54244bf3327eb8cbe00307d220241d9cec4d306d49a44e85f68"}, - {file = "msgpack-1.1.2-cp311-cp311-win_arm64.whl", hash = "sha256:86f8136dfa5c116365a8a651a7d7484b65b13339731dd6faebb9a0242151c406"}, - {file = "msgpack-1.1.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:70a0dff9d1f8da25179ffcf880e10cf1aad55fdb63cd59c9a49a1b82290062aa"}, - {file = "msgpack-1.1.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:446abdd8b94b55c800ac34b102dffd2f6aa0ce643c55dfc017ad89347db3dbdb"}, - {file = "msgpack-1.1.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c63eea553c69ab05b6747901b97d620bb2a690633c77f23feb0c6a947a8a7b8f"}, - {file = "msgpack-1.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:372839311ccf6bdaf39b00b61288e0557916c3729529b301c52c2d88842add42"}, - {file = "msgpack-1.1.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2929af52106ca73fcb28576218476ffbb531a036c2adbcf54a3664de124303e9"}, - {file = "msgpack-1.1.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:be52a8fc79e45b0364210eef5234a7cf8d330836d0a64dfbb878efa903d84620"}, - {file = "msgpack-1.1.2-cp312-cp312-win32.whl", hash = "sha256:1fff3d825d7859ac888b0fbda39a42d59193543920eda9d9bea44d958a878029"}, - {file = "msgpack-1.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:1de460f0403172cff81169a30b9a92b260cb809c4cb7e2fc79ae8d0510c78b6b"}, - {file = "msgpack-1.1.2-cp312-cp312-win_arm64.whl", hash = "sha256:be5980f3ee0e6bd44f3a9e9dea01054f175b50c3e6cdb692bc9424c0bbb8bf69"}, - {file = "msgpack-1.1.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4efd7b5979ccb539c221a4c4e16aac1a533efc97f3b759bb5a5ac9f6d10383bf"}, - {file = "msgpack-1.1.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:42eefe2c3e2af97ed470eec850facbe1b5ad1d6eacdbadc42ec98e7dcf68b4b7"}, - {file = "msgpack-1.1.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1fdf7d83102bf09e7ce3357de96c59b627395352a4024f6e2458501f158bf999"}, - {file = "msgpack-1.1.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fac4be746328f90caa3cd4bc67e6fe36ca2bf61d5c6eb6d895b6527e3f05071e"}, - {file = "msgpack-1.1.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fffee09044073e69f2bad787071aeec727183e7580443dfeb8556cbf1978d162"}, - {file = "msgpack-1.1.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5928604de9b032bc17f5099496417f113c45bc6bc21b5c6920caf34b3c428794"}, - {file = "msgpack-1.1.2-cp313-cp313-win32.whl", hash = "sha256:a7787d353595c7c7e145e2331abf8b7ff1e6673a6b974ded96e6d4ec09f00c8c"}, - {file = "msgpack-1.1.2-cp313-cp313-win_amd64.whl", hash = "sha256:a465f0dceb8e13a487e54c07d04ae3ba131c7c5b95e2612596eafde1dccf64a9"}, - {file = "msgpack-1.1.2-cp313-cp313-win_arm64.whl", hash = "sha256:e69b39f8c0aa5ec24b57737ebee40be647035158f14ed4b40e6f150077e21a84"}, - {file = "msgpack-1.1.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:e23ce8d5f7aa6ea6d2a2b326b4ba46c985dbb204523759984430db7114f8aa00"}, - {file = "msgpack-1.1.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:6c15b7d74c939ebe620dd8e559384be806204d73b4f9356320632d783d1f7939"}, - {file = "msgpack-1.1.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99e2cb7b9031568a2a5c73aa077180f93dd2e95b4f8d3b8e14a73ae94a9e667e"}, - {file = "msgpack-1.1.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:180759d89a057eab503cf62eeec0aa61c4ea1200dee709f3a8e9397dbb3b6931"}, - {file = "msgpack-1.1.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:04fb995247a6e83830b62f0b07bf36540c213f6eac8e851166d8d86d83cbd014"}, - {file = "msgpack-1.1.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:8e22ab046fa7ede9e36eeb4cfad44d46450f37bb05d5ec482b02868f451c95e2"}, - {file = "msgpack-1.1.2-cp314-cp314-win32.whl", hash = "sha256:80a0ff7d4abf5fecb995fcf235d4064b9a9a8a40a3ab80999e6ac1e30b702717"}, - {file = "msgpack-1.1.2-cp314-cp314-win_amd64.whl", hash = "sha256:9ade919fac6a3e7260b7f64cea89df6bec59104987cbea34d34a2fa15d74310b"}, - {file = "msgpack-1.1.2-cp314-cp314-win_arm64.whl", hash = "sha256:59415c6076b1e30e563eb732e23b994a61c159cec44deaf584e5cc1dd662f2af"}, - {file = "msgpack-1.1.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:897c478140877e5307760b0ea66e0932738879e7aa68144d9b78ea4c8302a84a"}, - {file = "msgpack-1.1.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a668204fa43e6d02f89dbe79a30b0d67238d9ec4c5bd8a940fc3a004a47b721b"}, - {file = "msgpack-1.1.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5559d03930d3aa0f3aacb4c42c776af1a2ace2611871c84a75afe436695e6245"}, - {file = "msgpack-1.1.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:70c5a7a9fea7f036b716191c29047374c10721c389c21e9ffafad04df8c52c90"}, - {file = "msgpack-1.1.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:f2cb069d8b981abc72b41aea1c580ce92d57c673ec61af4c500153a626cb9e20"}, - {file = "msgpack-1.1.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d62ce1f483f355f61adb5433ebfd8868c5f078d1a52d042b0a998682b4fa8c27"}, - {file = "msgpack-1.1.2-cp314-cp314t-win32.whl", hash = "sha256:1d1418482b1ee984625d88aa9585db570180c286d942da463533b238b98b812b"}, - {file = "msgpack-1.1.2-cp314-cp314t-win_amd64.whl", hash = "sha256:5a46bf7e831d09470ad92dff02b8b1ac92175ca36b087f904a0519857c6be3ff"}, - {file = "msgpack-1.1.2-cp314-cp314t-win_arm64.whl", hash = "sha256:d99ef64f349d5ec3293688e91486c5fdb925ed03807f64d98d205d2713c60b46"}, - {file = "msgpack-1.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ea5405c46e690122a76531ab97a079e184c0daf491e588592d6a23d3e32af99e"}, - {file = "msgpack-1.1.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9fba231af7a933400238cb357ecccf8ab5d51535ea95d94fc35b7806218ff844"}, - {file = "msgpack-1.1.2-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a8f6e7d30253714751aa0b0c84ae28948e852ee7fb0524082e6716769124bc23"}, - {file = "msgpack-1.1.2-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:94fd7dc7d8cb0a54432f296f2246bc39474e017204ca6f4ff345941d4ed285a7"}, - {file = "msgpack-1.1.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:350ad5353a467d9e3b126d8d1b90fe05ad081e2e1cef5753f8c345217c37e7b8"}, - {file = "msgpack-1.1.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6bde749afe671dc44893f8d08e83bf475a1a14570d67c4bb5cec5573463c8833"}, - {file = "msgpack-1.1.2-cp39-cp39-win32.whl", hash = "sha256:ad09b984828d6b7bb52d1d1d0c9be68ad781fa004ca39216c8a1e63c0f34ba3c"}, - {file = "msgpack-1.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:67016ae8c8965124fdede9d3769528ad8284f14d635337ffa6a713a580f6c030"}, - {file = "msgpack-1.1.2.tar.gz", hash = "sha256:3b60763c1373dd60f398488069bcdc703cd08a711477b5d480eecc9f9626f47e"}, -] - -[[package]] -name = "multidict" -version = "6.7.0" -description = "multidict implementation" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "multidict-6.7.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9f474ad5acda359c8758c8accc22032c6abe6dc87a8be2440d097785e27a9349"}, - {file = "multidict-6.7.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4b7a9db5a870f780220e931d0002bbfd88fb53aceb6293251e2c839415c1b20e"}, - {file = "multidict-6.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:03ca744319864e92721195fa28c7a3b2bc7b686246b35e4078c1e4d0eb5466d3"}, - {file = "multidict-6.7.0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f0e77e3c0008bc9316e662624535b88d360c3a5d3f81e15cf12c139a75250046"}, - {file = "multidict-6.7.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:08325c9e5367aa379a3496aa9a022fe8837ff22e00b94db256d3a1378c76ab32"}, - {file = "multidict-6.7.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e2862408c99f84aa571ab462d25236ef9cb12a602ea959ba9c9009a54902fc73"}, - {file = "multidict-6.7.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4d72a9a2d885f5c208b0cb91ff2ed43636bb7e345ec839ff64708e04f69a13cc"}, - {file = "multidict-6.7.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:478cc36476687bac1514d651cbbaa94b86b0732fb6855c60c673794c7dd2da62"}, - {file = "multidict-6.7.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6843b28b0364dc605f21481c90fadb5f60d9123b442eb8a726bb74feef588a84"}, - {file = "multidict-6.7.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:23bfeee5316266e5ee2d625df2d2c602b829435fc3a235c2ba2131495706e4a0"}, - {file = "multidict-6.7.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:680878b9f3d45c31e1f730eef731f9b0bc1da456155688c6745ee84eb818e90e"}, - {file = "multidict-6.7.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:eb866162ef2f45063acc7a53a88ef6fe8bf121d45c30ea3c9cd87ce7e191a8d4"}, - {file = "multidict-6.7.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:df0e3bf7993bdbeca5ac25aa859cf40d39019e015c9c91809ba7093967f7a648"}, - {file = "multidict-6.7.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:661709cdcd919a2ece2234f9bae7174e5220c80b034585d7d8a755632d3e2111"}, - {file = "multidict-6.7.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:096f52730c3fb8ed419db2d44391932b63891b2c5ed14850a7e215c0ba9ade36"}, - {file = "multidict-6.7.0-cp310-cp310-win32.whl", hash = "sha256:afa8a2978ec65d2336305550535c9c4ff50ee527914328c8677b3973ade52b85"}, - {file = "multidict-6.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:b15b3afff74f707b9275d5ba6a91ae8f6429c3ffb29bbfd216b0b375a56f13d7"}, - {file = "multidict-6.7.0-cp310-cp310-win_arm64.whl", hash = "sha256:4b73189894398d59131a66ff157837b1fafea9974be486d036bb3d32331fdbf0"}, - {file = "multidict-6.7.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4d409aa42a94c0b3fa617708ef5276dfe81012ba6753a0370fcc9d0195d0a1fc"}, - {file = "multidict-6.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:14c9e076eede3b54c636f8ce1c9c252b5f057c62131211f0ceeec273810c9721"}, - {file = "multidict-6.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4c09703000a9d0fa3c3404b27041e574cc7f4df4c6563873246d0e11812a94b6"}, - {file = "multidict-6.7.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a265acbb7bb33a3a2d626afbe756371dce0279e7b17f4f4eda406459c2b5ff1c"}, - {file = "multidict-6.7.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:51cb455de290ae462593e5b1cb1118c5c22ea7f0d3620d9940bf695cea5a4bd7"}, - {file = "multidict-6.7.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:db99677b4457c7a5c5a949353e125ba72d62b35f74e26da141530fbb012218a7"}, - {file = "multidict-6.7.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f470f68adc395e0183b92a2f4689264d1ea4b40504a24d9882c27375e6662bb9"}, - {file = "multidict-6.7.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0db4956f82723cc1c270de9c6e799b4c341d327762ec78ef82bb962f79cc07d8"}, - {file = "multidict-6.7.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3e56d780c238f9e1ae66a22d2adf8d16f485381878250db8d496623cd38b22bd"}, - {file = "multidict-6.7.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9d14baca2ee12c1a64740d4531356ba50b82543017f3ad6de0deb943c5979abb"}, - {file = "multidict-6.7.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:295a92a76188917c7f99cda95858c822f9e4aae5824246bba9b6b44004ddd0a6"}, - {file = "multidict-6.7.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:39f1719f57adbb767ef592a50ae5ebb794220d1188f9ca93de471336401c34d2"}, - {file = "multidict-6.7.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:0a13fb8e748dfc94749f622de065dd5c1def7e0d2216dba72b1d8069a389c6ff"}, - {file = "multidict-6.7.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e3aa16de190d29a0ea1b48253c57d99a68492c8dd8948638073ab9e74dc9410b"}, - {file = "multidict-6.7.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a048ce45dcdaaf1defb76b2e684f997fb5abf74437b6cb7b22ddad934a964e34"}, - {file = "multidict-6.7.0-cp311-cp311-win32.whl", hash = "sha256:a90af66facec4cebe4181b9e62a68be65e45ac9b52b67de9eec118701856e7ff"}, - {file = "multidict-6.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:95b5ffa4349df2887518bb839409bcf22caa72d82beec453216802f475b23c81"}, - {file = "multidict-6.7.0-cp311-cp311-win_arm64.whl", hash = "sha256:329aa225b085b6f004a4955271a7ba9f1087e39dcb7e65f6284a988264a63912"}, - {file = "multidict-6.7.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:8a3862568a36d26e650a19bb5cbbba14b71789032aebc0423f8cc5f150730184"}, - {file = "multidict-6.7.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:960c60b5849b9b4f9dcc9bea6e3626143c252c74113df2c1540aebce70209b45"}, - {file = "multidict-6.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2049be98fb57a31b4ccf870bf377af2504d4ae35646a19037ec271e4c07998aa"}, - {file = "multidict-6.7.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0934f3843a1860dd465d38895c17fce1f1cb37295149ab05cd1b9a03afacb2a7"}, - {file = "multidict-6.7.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b3e34f3a1b8131ba06f1a73adab24f30934d148afcd5f5de9a73565a4404384e"}, - {file = "multidict-6.7.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:efbb54e98446892590dc2458c19c10344ee9a883a79b5cec4bc34d6656e8d546"}, - {file = "multidict-6.7.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a35c5fc61d4f51eb045061e7967cfe3123d622cd500e8868e7c0c592a09fedc4"}, - {file = "multidict-6.7.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29fe6740ebccba4175af1b9b87bf553e9c15cd5868ee967e010efcf94e4fd0f1"}, - {file = "multidict-6.7.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:123e2a72e20537add2f33a79e605f6191fba2afda4cbb876e35c1a7074298a7d"}, - {file = "multidict-6.7.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b284e319754366c1aee2267a2036248b24eeb17ecd5dc16022095e747f2f4304"}, - {file = "multidict-6.7.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:803d685de7be4303b5a657b76e2f6d1240e7e0a8aa2968ad5811fa2285553a12"}, - {file = "multidict-6.7.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c04a328260dfd5db8c39538f999f02779012268f54614902d0afc775d44e0a62"}, - {file = "multidict-6.7.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8a19cdb57cd3df4cd865849d93ee14920fb97224300c88501f16ecfa2604b4e0"}, - {file = "multidict-6.7.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9b2fd74c52accced7e75de26023b7dccee62511a600e62311b918ec5c168fc2a"}, - {file = "multidict-6.7.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3e8bfdd0e487acf992407a140d2589fe598238eaeffa3da8448d63a63cd363f8"}, - {file = "multidict-6.7.0-cp312-cp312-win32.whl", hash = "sha256:dd32a49400a2c3d52088e120ee00c1e3576cbff7e10b98467962c74fdb762ed4"}, - {file = "multidict-6.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:92abb658ef2d7ef22ac9f8bb88e8b6c3e571671534e029359b6d9e845923eb1b"}, - {file = "multidict-6.7.0-cp312-cp312-win_arm64.whl", hash = "sha256:490dab541a6a642ce1a9d61a4781656b346a55c13038f0b1244653828e3a83ec"}, - {file = "multidict-6.7.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:bee7c0588aa0076ce77c0ea5d19a68d76ad81fcd9fe8501003b9a24f9d4000f6"}, - {file = "multidict-6.7.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7ef6b61cad77091056ce0e7ce69814ef72afacb150b7ac6a3e9470def2198159"}, - {file = "multidict-6.7.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9c0359b1ec12b1d6849c59f9d319610b7f20ef990a6d454ab151aa0e3b9f78ca"}, - {file = "multidict-6.7.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:cd240939f71c64bd658f186330603aac1a9a81bf6273f523fca63673cb7378a8"}, - {file = "multidict-6.7.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a60a4d75718a5efa473ebd5ab685786ba0c67b8381f781d1be14da49f1a2dc60"}, - {file = "multidict-6.7.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:53a42d364f323275126aff81fb67c5ca1b7a04fda0546245730a55c8c5f24bc4"}, - {file = "multidict-6.7.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3b29b980d0ddbecb736735ee5bef69bb2ddca56eff603c86f3f29a1128299b4f"}, - {file = "multidict-6.7.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f8a93b1c0ed2d04b97a5e9336fd2d33371b9a6e29ab7dd6503d63407c20ffbaf"}, - {file = "multidict-6.7.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9ff96e8815eecacc6645da76c413eb3b3d34cfca256c70b16b286a687d013c32"}, - {file = "multidict-6.7.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7516c579652f6a6be0e266aec0acd0db80829ca305c3d771ed898538804c2036"}, - {file = "multidict-6.7.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:040f393368e63fb0f3330e70c26bfd336656bed925e5cbe17c9da839a6ab13ec"}, - {file = "multidict-6.7.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b3bc26a951007b1057a1c543af845f1c7e3e71cc240ed1ace7bf4484aa99196e"}, - {file = "multidict-6.7.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7b022717c748dd1992a83e219587aabe45980d88969f01b316e78683e6285f64"}, - {file = "multidict-6.7.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:9600082733859f00d79dee64effc7aef1beb26adb297416a4ad2116fd61374bd"}, - {file = "multidict-6.7.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:94218fcec4d72bc61df51c198d098ce2b378e0ccbac41ddbed5ef44092913288"}, - {file = "multidict-6.7.0-cp313-cp313-win32.whl", hash = "sha256:a37bd74c3fa9d00be2d7b8eca074dc56bd8077ddd2917a839bd989612671ed17"}, - {file = "multidict-6.7.0-cp313-cp313-win_amd64.whl", hash = "sha256:30d193c6cc6d559db42b6bcec8a5d395d34d60c9877a0b71ecd7c204fcf15390"}, - {file = "multidict-6.7.0-cp313-cp313-win_arm64.whl", hash = "sha256:ea3334cabe4d41b7ccd01e4d349828678794edbc2d3ae97fc162a3312095092e"}, - {file = "multidict-6.7.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:ad9ce259f50abd98a1ca0aa6e490b58c316a0fce0617f609723e40804add2c00"}, - {file = "multidict-6.7.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:07f5594ac6d084cbb5de2df218d78baf55ef150b91f0ff8a21cc7a2e3a5a58eb"}, - {file = "multidict-6.7.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0591b48acf279821a579282444814a2d8d0af624ae0bc600aa4d1b920b6e924b"}, - {file = "multidict-6.7.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:749a72584761531d2b9467cfbdfd29487ee21124c304c4b6cb760d8777b27f9c"}, - {file = "multidict-6.7.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b4c3d199f953acd5b446bf7c0de1fe25d94e09e79086f8dc2f48a11a129cdf1"}, - {file = "multidict-6.7.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:9fb0211dfc3b51efea2f349ec92c114d7754dd62c01f81c3e32b765b70c45c9b"}, - {file = "multidict-6.7.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a027ec240fe73a8d6281872690b988eed307cd7d91b23998ff35ff577ca688b5"}, - {file = "multidict-6.7.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1d964afecdf3a8288789df2f5751dc0a8261138c3768d9af117ed384e538fad"}, - {file = "multidict-6.7.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:caf53b15b1b7df9fbd0709aa01409000a2b4dd03a5f6f5cc548183c7c8f8b63c"}, - {file = "multidict-6.7.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:654030da3197d927f05a536a66186070e98765aa5142794c9904555d3a9d8fb5"}, - {file = "multidict-6.7.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:2090d3718829d1e484706a2f525e50c892237b2bf9b17a79b059cb98cddc2f10"}, - {file = "multidict-6.7.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2d2cfeec3f6f45651b3d408c4acec0ebf3daa9bc8a112a084206f5db5d05b754"}, - {file = "multidict-6.7.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:4ef089f985b8c194d341eb2c24ae6e7408c9a0e2e5658699c92f497437d88c3c"}, - {file = "multidict-6.7.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e93a0617cd16998784bf4414c7e40f17a35d2350e5c6f0bd900d3a8e02bd3762"}, - {file = "multidict-6.7.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f0feece2ef8ebc42ed9e2e8c78fc4aa3cf455733b507c09ef7406364c94376c6"}, - {file = "multidict-6.7.0-cp313-cp313t-win32.whl", hash = "sha256:19a1d55338ec1be74ef62440ca9e04a2f001a04d0cc49a4983dc320ff0f3212d"}, - {file = "multidict-6.7.0-cp313-cp313t-win_amd64.whl", hash = "sha256:3da4fb467498df97e986af166b12d01f05d2e04f978a9c1c680ea1988e0bc4b6"}, - {file = "multidict-6.7.0-cp313-cp313t-win_arm64.whl", hash = "sha256:b4121773c49a0776461f4a904cdf6264c88e42218aaa8407e803ca8025872792"}, - {file = "multidict-6.7.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3bab1e4aff7adaa34410f93b1f8e57c4b36b9af0426a76003f441ee1d3c7e842"}, - {file = "multidict-6.7.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:b8512bac933afc3e45fb2b18da8e59b78d4f408399a960339598374d4ae3b56b"}, - {file = "multidict-6.7.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:79dcf9e477bc65414ebfea98ffd013cb39552b5ecd62908752e0e413d6d06e38"}, - {file = "multidict-6.7.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:31bae522710064b5cbeddaf2e9f32b1abab70ac6ac91d42572502299e9953128"}, - {file = "multidict-6.7.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a0df7ff02397bb63e2fd22af2c87dfa39e8c7f12947bc524dbdc528282c7e34"}, - {file = "multidict-6.7.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7a0222514e8e4c514660e182d5156a415c13ef0aabbd71682fc714e327b95e99"}, - {file = "multidict-6.7.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2397ab4daaf2698eb51a76721e98db21ce4f52339e535725de03ea962b5a3202"}, - {file = "multidict-6.7.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8891681594162635948a636c9fe0ff21746aeb3dd5463f6e25d9bea3a8a39ca1"}, - {file = "multidict-6.7.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18706cc31dbf402a7945916dd5cddf160251b6dab8a2c5f3d6d5a55949f676b3"}, - {file = "multidict-6.7.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f844a1bbf1d207dd311a56f383f7eda2d0e134921d45751842d8235e7778965d"}, - {file = "multidict-6.7.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:d4393e3581e84e5645506923816b9cc81f5609a778c7e7534054091acc64d1c6"}, - {file = "multidict-6.7.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:fbd18dc82d7bf274b37aa48d664534330af744e03bccf696d6f4c6042e7d19e7"}, - {file = "multidict-6.7.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:b6234e14f9314731ec45c42fc4554b88133ad53a09092cc48a88e771c125dadb"}, - {file = "multidict-6.7.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:08d4379f9744d8f78d98c8673c06e202ffa88296f009c71bbafe8a6bf847d01f"}, - {file = "multidict-6.7.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:9fe04da3f79387f450fd0061d4dd2e45a72749d31bf634aecc9e27f24fdc4b3f"}, - {file = "multidict-6.7.0-cp314-cp314-win32.whl", hash = "sha256:fbafe31d191dfa7c4c51f7a6149c9fb7e914dcf9ffead27dcfd9f1ae382b3885"}, - {file = "multidict-6.7.0-cp314-cp314-win_amd64.whl", hash = "sha256:2f67396ec0310764b9222a1728ced1ab638f61aadc6226f17a71dd9324f9a99c"}, - {file = "multidict-6.7.0-cp314-cp314-win_arm64.whl", hash = "sha256:ba672b26069957ee369cfa7fc180dde1fc6f176eaf1e6beaf61fbebbd3d9c000"}, - {file = "multidict-6.7.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:c1dcc7524066fa918c6a27d61444d4ee7900ec635779058571f70d042d86ed63"}, - {file = "multidict-6.7.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:27e0b36c2d388dc7b6ced3406671b401e84ad7eb0656b8f3a2f46ed0ce483718"}, - {file = "multidict-6.7.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2a7baa46a22e77f0988e3b23d4ede5513ebec1929e34ee9495be535662c0dfe2"}, - {file = "multidict-6.7.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:7bf77f54997a9166a2f5675d1201520586439424c2511723a7312bdb4bcc034e"}, - {file = "multidict-6.7.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e011555abada53f1578d63389610ac8a5400fc70ce71156b0aa30d326f1a5064"}, - {file = "multidict-6.7.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:28b37063541b897fd6a318007373930a75ca6d6ac7c940dbe14731ffdd8d498e"}, - {file = "multidict-6.7.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:05047ada7a2fde2631a0ed706f1fd68b169a681dfe5e4cf0f8e4cb6618bbc2cd"}, - {file = "multidict-6.7.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:716133f7d1d946a4e1b91b1756b23c088881e70ff180c24e864c26192ad7534a"}, - {file = "multidict-6.7.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d1bed1b467ef657f2a0ae62844a607909ef1c6889562de5e1d505f74457d0b96"}, - {file = "multidict-6.7.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ca43bdfa5d37bd6aee89d85e1d0831fb86e25541be7e9d376ead1b28974f8e5e"}, - {file = "multidict-6.7.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:44b546bd3eb645fd26fb949e43c02a25a2e632e2ca21a35e2e132c8105dc8599"}, - {file = "multidict-6.7.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:a6ef16328011d3f468e7ebc326f24c1445f001ca1dec335b2f8e66bed3006394"}, - {file = "multidict-6.7.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:5aa873cbc8e593d361ae65c68f85faadd755c3295ea2c12040ee146802f23b38"}, - {file = "multidict-6.7.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:3d7b6ccce016e29df4b7ca819659f516f0bc7a4b3efa3bb2012ba06431b044f9"}, - {file = "multidict-6.7.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:171b73bd4ee683d307599b66793ac80981b06f069b62eea1c9e29c9241aa66b0"}, - {file = "multidict-6.7.0-cp314-cp314t-win32.whl", hash = "sha256:b2d7f80c4e1fd010b07cb26820aae86b7e73b681ee4889684fb8d2d4537aab13"}, - {file = "multidict-6.7.0-cp314-cp314t-win_amd64.whl", hash = "sha256:09929cab6fcb68122776d575e03c6cc64ee0b8fca48d17e135474b042ce515cd"}, - {file = "multidict-6.7.0-cp314-cp314t-win_arm64.whl", hash = "sha256:cc41db090ed742f32bd2d2c721861725e6109681eddf835d0a82bd3a5c382827"}, - {file = "multidict-6.7.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:363eb68a0a59bd2303216d2346e6c441ba10d36d1f9969fcb6f1ba700de7bb5c"}, - {file = "multidict-6.7.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d874eb056410ca05fed180b6642e680373688efafc7f077b2a2f61811e873a40"}, - {file = "multidict-6.7.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8b55d5497b51afdfde55925e04a022f1de14d4f4f25cdfd4f5d9b0aa96166851"}, - {file = "multidict-6.7.0-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f8e5c0031b90ca9ce555e2e8fd5c3b02a25f14989cbc310701823832c99eb687"}, - {file = "multidict-6.7.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cf41880c991716f3c7cec48e2f19ae4045fc9db5fc9cff27347ada24d710bb5"}, - {file = "multidict-6.7.0-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8cfc12a8630a29d601f48d47787bd7eb730e475e83edb5d6c5084317463373eb"}, - {file = "multidict-6.7.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3996b50c3237c4aec17459217c1e7bbdead9a22a0fcd3c365564fbd16439dde6"}, - {file = "multidict-6.7.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7f5170993a0dd3ab871c74f45c0a21a4e2c37a2f2b01b5f722a2ad9c6650469e"}, - {file = "multidict-6.7.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ec81878ddf0e98817def1e77d4f50dae5ef5b0e4fe796fae3bd674304172416e"}, - {file = "multidict-6.7.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9281bf5b34f59afbc6b1e477a372e9526b66ca446f4bf62592839c195a718b32"}, - {file = "multidict-6.7.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:68af405971779d8b37198726f2b6fe3955db846fee42db7a4286fc542203934c"}, - {file = "multidict-6.7.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3ba3ef510467abb0667421a286dc906e30eb08569365f5cdb131d7aff7c2dd84"}, - {file = "multidict-6.7.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:b61189b29081a20c7e4e0b49b44d5d44bb0dc92be3c6d06a11cc043f81bf9329"}, - {file = "multidict-6.7.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:fb287618b9c7aa3bf8d825f02d9201b2f13078a5ed3b293c8f4d953917d84d5e"}, - {file = "multidict-6.7.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:521f33e377ff64b96c4c556b81c55d0cfffb96a11c194fd0c3f1e56f3d8dd5a4"}, - {file = "multidict-6.7.0-cp39-cp39-win32.whl", hash = "sha256:ce8fdc2dca699f8dbf055a61d73eaa10482569ad20ee3c36ef9641f69afa8c91"}, - {file = "multidict-6.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:7e73299c99939f089dd9b2120a04a516b95cdf8c1cd2b18c53ebf0de80b1f18f"}, - {file = "multidict-6.7.0-cp39-cp39-win_arm64.whl", hash = "sha256:6bdce131e14b04fd34a809b6380dbfd826065c3e2fe8a50dbae659fa0c390546"}, - {file = "multidict-6.7.0-py3-none-any.whl", hash = "sha256:394fc5c42a333c9ffc3e421a4c85e08580d990e08b99f6bf35b4132114c5dcb3"}, - {file = "multidict-6.7.0.tar.gz", hash = "sha256:c6e99d9a65ca282e578dfea819cfa9c0a62b2499d8677392e09feaf305e9e6f5"}, -] - -[[package]] -name = "mypy" -version = "1.18.2" -description = "Optional static typing for Python" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "mypy-1.18.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c1eab0cf6294dafe397c261a75f96dc2c31bffe3b944faa24db5def4e2b0f77c"}, - {file = "mypy-1.18.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7a780ca61fc239e4865968ebc5240bb3bf610ef59ac398de9a7421b54e4a207e"}, - {file = "mypy-1.18.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:448acd386266989ef11662ce3c8011fd2a7b632e0ec7d61a98edd8e27472225b"}, - {file = "mypy-1.18.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f9e171c465ad3901dc652643ee4bffa8e9fef4d7d0eece23b428908c77a76a66"}, - {file = "mypy-1.18.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:592ec214750bc00741af1f80cbf96b5013d81486b7bb24cb052382c19e40b428"}, - {file = "mypy-1.18.2-cp310-cp310-win_amd64.whl", hash = "sha256:7fb95f97199ea11769ebe3638c29b550b5221e997c63b14ef93d2e971606ebed"}, - {file = "mypy-1.18.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:807d9315ab9d464125aa9fcf6d84fde6e1dc67da0b6f80e7405506b8ac72bc7f"}, - {file = "mypy-1.18.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:776bb00de1778caf4db739c6e83919c1d85a448f71979b6a0edd774ea8399341"}, - {file = "mypy-1.18.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1379451880512ffce14505493bd9fe469e0697543717298242574882cf8cdb8d"}, - {file = "mypy-1.18.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1331eb7fd110d60c24999893320967594ff84c38ac6d19e0a76c5fd809a84c86"}, - {file = "mypy-1.18.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3ca30b50a51e7ba93b00422e486cbb124f1c56a535e20eff7b2d6ab72b3b2e37"}, - {file = "mypy-1.18.2-cp311-cp311-win_amd64.whl", hash = "sha256:664dc726e67fa54e14536f6e1224bcfce1d9e5ac02426d2326e2bb4e081d1ce8"}, - {file = "mypy-1.18.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:33eca32dd124b29400c31d7cf784e795b050ace0e1f91b8dc035672725617e34"}, - {file = "mypy-1.18.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a3c47adf30d65e89b2dcd2fa32f3aeb5e94ca970d2c15fcb25e297871c8e4764"}, - {file = "mypy-1.18.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d6c838e831a062f5f29d11c9057c6009f60cb294fea33a98422688181fe2893"}, - {file = "mypy-1.18.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01199871b6110a2ce984bde85acd481232d17413868c9807e95c1b0739a58914"}, - {file = "mypy-1.18.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a2afc0fa0b0e91b4599ddfe0f91e2c26c2b5a5ab263737e998d6817874c5f7c8"}, - {file = "mypy-1.18.2-cp312-cp312-win_amd64.whl", hash = "sha256:d8068d0afe682c7c4897c0f7ce84ea77f6de953262b12d07038f4d296d547074"}, - {file = "mypy-1.18.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:07b8b0f580ca6d289e69209ec9d3911b4a26e5abfde32228a288eb79df129fcc"}, - {file = "mypy-1.18.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ed4482847168439651d3feee5833ccedbf6657e964572706a2adb1f7fa4dfe2e"}, - {file = "mypy-1.18.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c3ad2afadd1e9fea5cf99a45a822346971ede8685cc581ed9cd4d42eaf940986"}, - {file = "mypy-1.18.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a431a6f1ef14cf8c144c6b14793a23ec4eae3db28277c358136e79d7d062f62d"}, - {file = "mypy-1.18.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7ab28cc197f1dd77a67e1c6f35cd1f8e8b73ed2217e4fc005f9e6a504e46e7ba"}, - {file = "mypy-1.18.2-cp313-cp313-win_amd64.whl", hash = "sha256:0e2785a84b34a72ba55fb5daf079a1003a34c05b22238da94fcae2bbe46f3544"}, - {file = "mypy-1.18.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:62f0e1e988ad41c2a110edde6c398383a889d95b36b3e60bcf155f5164c4fdce"}, - {file = "mypy-1.18.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:8795a039bab805ff0c1dfdb8cd3344642c2b99b8e439d057aba30850b8d3423d"}, - {file = "mypy-1.18.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6ca1e64b24a700ab5ce10133f7ccd956a04715463d30498e64ea8715236f9c9c"}, - {file = "mypy-1.18.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d924eef3795cc89fecf6bedc6ed32b33ac13e8321344f6ddbf8ee89f706c05cb"}, - {file = "mypy-1.18.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:20c02215a080e3a2be3aa50506c67242df1c151eaba0dcbc1e4e557922a26075"}, - {file = "mypy-1.18.2-cp314-cp314-win_amd64.whl", hash = "sha256:749b5f83198f1ca64345603118a6f01a4e99ad4bf9d103ddc5a3200cc4614adf"}, - {file = "mypy-1.18.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:25a9c8fb67b00599f839cf472713f54249a62efd53a54b565eb61956a7e3296b"}, - {file = "mypy-1.18.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c2b9c7e284ee20e7598d6f42e13ca40b4928e6957ed6813d1ab6348aa3f47133"}, - {file = "mypy-1.18.2-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d6985ed057513e344e43a26cc1cd815c7a94602fb6a3130a34798625bc2f07b6"}, - {file = "mypy-1.18.2-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22f27105f1525ec024b5c630c0b9f36d5c1cc4d447d61fe51ff4bd60633f47ac"}, - {file = "mypy-1.18.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:030c52d0ea8144e721e49b1f68391e39553d7451f0c3f8a7565b59e19fcb608b"}, - {file = "mypy-1.18.2-cp39-cp39-win_amd64.whl", hash = "sha256:aa5e07ac1a60a253445797e42b8b2963c9675563a94f11291ab40718b016a7a0"}, - {file = "mypy-1.18.2-py3-none-any.whl", hash = "sha256:22a1748707dd62b58d2ae53562ffc4d7f8bcc727e8ac7cbc69c053ddc874d47e"}, - {file = "mypy-1.18.2.tar.gz", hash = "sha256:06a398102a5f203d7477b2923dda3634c36727fa5c237d8f859ef90c42a9924b"}, -] - -[package.dependencies] -mypy_extensions = ">=1.0.0" -pathspec = ">=0.9.0" -typing_extensions = ">=4.6.0" - -[package.extras] -dmypy = ["psutil (>=4.0)"] -faster-cache = ["orjson"] -install-types = ["pip"] -mypyc = ["setuptools (>=50)"] -reports = ["lxml"] - -[[package]] -name = "mypy-extensions" -version = "1.1.0" -description = "Type system extensions for programs checked with the mypy type checker." -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505"}, - {file = "mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558"}, -] - -[[package]] -name = "networkx" -version = "3.5" -description = "Python package for creating and manipulating graphs and networks" -optional = false -python-versions = ">=3.11" -groups = ["dev"] -files = [ - {file = "networkx-3.5-py3-none-any.whl", hash = "sha256:0030d386a9a06dee3565298b4a734b68589749a544acbb6c412dc9e2489ec6ec"}, - {file = "networkx-3.5.tar.gz", hash = "sha256:d4c6f9cf81f52d69230866796b82afbccdec3db7ae4fbd1b65ea750feed50037"}, -] - -[package.extras] -default = ["matplotlib (>=3.8)", "numpy (>=1.25)", "pandas (>=2.0)", "scipy (>=1.11.2)"] -developer = ["mypy (>=1.15)", "pre-commit (>=4.1)"] -doc = ["intersphinx-registry", "myst-nb (>=1.1)", "numpydoc (>=1.8.0)", "pillow (>=10)", "pydata-sphinx-theme (>=0.16)", "sphinx (>=8.0)", "sphinx-gallery (>=0.18)", "texext (>=0.6.7)"] -example = ["cairocffi (>=1.7)", "contextily (>=1.6)", "igraph (>=0.11)", "momepy (>=0.7.2)", "osmnx (>=2.0.0)", "scikit-learn (>=1.5)", "seaborn (>=0.13)"] -extra = ["lxml (>=4.6)", "pydot (>=3.0.1)", "pygraphviz (>=1.14)", "sympy (>=1.10)"] -test = ["pytest (>=7.2)", "pytest-cov (>=4.0)", "pytest-xdist (>=3.0)"] -test-extras = ["pytest-mpl", "pytest-randomly"] - -[[package]] -name = "nodeenv" -version = "1.9.1" -description = "Node.js virtual environment builder" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -groups = ["dev"] -files = [ - {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, - {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, -] - -[[package]] -name = "packageurl-python" -version = "0.17.5" -description = "A purl aka. Package URL parser and builder" -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "packageurl_python-0.17.5-py3-none-any.whl", hash = "sha256:f0e55452ab37b5c192c443de1458e3f3b4d8ac27f747df6e8c48adeab081d321"}, - {file = "packageurl_python-0.17.5.tar.gz", hash = "sha256:a7be3f3ba70d705f738ace9bf6124f31920245a49fa69d4b416da7037dd2de61"}, -] - -[package.extras] -build = ["setuptools", "wheel"] -lint = ["black", "isort", "mypy"] -sqlalchemy = ["sqlalchemy (>=2.0.0)"] -test = ["pytest"] - -[[package]] -name = "packaging" -version = "24.2" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, - {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, -] - -[[package]] -name = "pathspec" -version = "0.12.1" -description = "Utility library for gitignore style pattern matching of file paths." -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, - {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, -] - -[[package]] -name = "pip" -version = "25.3" -description = "The PyPA recommended tool for installing Python packages." -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "pip-25.3-py3-none-any.whl", hash = "sha256:9655943313a94722b7774661c21049070f6bbb0a1516bf02f7c8d5d9201514cd"}, - {file = "pip-25.3.tar.gz", hash = "sha256:8d0538dbbd7babbd207f261ed969c65de439f6bc9e5dbd3b3b9a77f25d95f343"}, -] - -[[package]] -name = "pip-api" -version = "0.0.34" -description = "An unofficial, importable pip API" -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "pip_api-0.0.34-py3-none-any.whl", hash = "sha256:8b2d7d7c37f2447373aa2cf8b1f60a2f2b27a84e1e9e0294a3f6ef10eb3ba6bb"}, - {file = "pip_api-0.0.34.tar.gz", hash = "sha256:9b75e958f14c5a2614bae415f2adf7eeb54d50a2cfbe7e24fd4826471bac3625"}, -] - -[package.dependencies] -pip = "*" - -[[package]] -name = "pip-audit" -version = "2.9.0" -description = "A tool for scanning Python environments for known vulnerabilities" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "pip_audit-2.9.0-py3-none-any.whl", hash = "sha256:348b16e60895749a0839875d7cc27ebd692e1584ebe5d5cb145941c8e25a80bd"}, - {file = "pip_audit-2.9.0.tar.gz", hash = "sha256:0b998410b58339d7a231e5aa004326a294e4c7c6295289cdc9d5e1ef07b1f44d"}, -] - -[package.dependencies] -CacheControl = {version = ">=0.13.0", extras = ["filecache"]} -cyclonedx-python-lib = ">=5,<10" -packaging = ">=23.0.0" -pip-api = ">=0.0.28" -pip-requirements-parser = ">=32.0.0" -platformdirs = ">=4.2.0" -requests = ">=2.31.0" -rich = ">=12.4" -toml = ">=0.10" - -[package.extras] -dev = ["build", "pip-audit[doc,lint,test]"] -doc = ["pdoc"] -lint = ["interrogate (>=1.6,<2.0)", "mypy", "ruff (>=0.9,<1.0)", "types-requests", "types-toml"] -test = ["coverage[toml] (>=7.0,!=7.3.3,<8.0)", "pretend", "pytest", "pytest-cov"] - -[[package]] -name = "pip-requirements-parser" -version = "32.0.1" -description = "pip requirements parser - a mostly correct pip requirements parsing library because it uses pip's own code." -optional = false -python-versions = ">=3.6.0" -groups = ["dev"] -files = [ - {file = "pip-requirements-parser-32.0.1.tar.gz", hash = "sha256:b4fa3a7a0be38243123cf9d1f3518da10c51bdb165a2b2985566247f9155a7d3"}, - {file = "pip_requirements_parser-32.0.1-py3-none-any.whl", hash = "sha256:4659bc2a667783e7a15d190f6fccf8b2486685b6dba4c19c3876314769c57526"}, -] - -[package.dependencies] -packaging = "*" -pyparsing = "*" - -[package.extras] -docs = ["Sphinx (>=3.3.1)", "doc8 (>=0.8.1)", "sphinx-rtd-theme (>=0.5.0)"] -testing = ["aboutcode-toolkit (>=6.0.0)", "black", "pytest (>=6,!=7.0.0)", "pytest-xdist (>=2)"] - -[[package]] -name = "platformdirs" -version = "4.5.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." -optional = false -python-versions = ">=3.10" -groups = ["dev"] -files = [ - {file = "platformdirs-4.5.0-py3-none-any.whl", hash = "sha256:e578a81bb873cbb89a41fcc904c7ef523cc18284b7e3b3ccf06aca1403b7ebd3"}, - {file = "platformdirs-4.5.0.tar.gz", hash = "sha256:70ddccdd7c99fc5942e9fc25636a8b34d04c24b335100223152c2803e4063312"}, -] - -[package.extras] -docs = ["furo (>=2025.9.25)", "proselint (>=0.14)", "sphinx (>=8.2.3)", "sphinx-autodoc-typehints (>=3.2)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.4.2)", "pytest-cov (>=7)", "pytest-mock (>=3.15.1)"] -type = ["mypy (>=1.18.2)"] - -[[package]] -name = "pluggy" -version = "1.6.0" -description = "plugin and hook calling mechanisms for python" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746"}, - {file = "pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3"}, -] - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["coverage", "pytest", "pytest-benchmark"] - -[[package]] -name = "pre-commit" -version = "4.3.0" -description = "A framework for managing and maintaining multi-language pre-commit hooks." -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "pre_commit-4.3.0-py2.py3-none-any.whl", hash = "sha256:2b0747ad7e6e967169136edffee14c16e148a778a54e4f967921aa1ebf2308d8"}, - {file = "pre_commit-4.3.0.tar.gz", hash = "sha256:499fe450cc9d42e9d58e606262795ecb64dd05438943c62b66f6a8673da30b16"}, -] - -[package.dependencies] -cfgv = ">=2.0.0" -identify = ">=1.0.0" -nodeenv = ">=0.11.1" -pyyaml = ">=5.1" -virtualenv = ">=20.10.0" - -[[package]] -name = "propcache" -version = "0.4.1" -description = "Accelerated property cache" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "propcache-0.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7c2d1fa3201efaf55d730400d945b5b3ab6e672e100ba0f9a409d950ab25d7db"}, - {file = "propcache-0.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1eb2994229cc8ce7fe9b3db88f5465f5fd8651672840b2e426b88cdb1a30aac8"}, - {file = "propcache-0.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:66c1f011f45a3b33d7bcb22daed4b29c0c9e2224758b6be00686731e1b46f925"}, - {file = "propcache-0.4.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9a52009f2adffe195d0b605c25ec929d26b36ef986ba85244891dee3b294df21"}, - {file = "propcache-0.4.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5d4e2366a9c7b837555cf02fb9be2e3167d333aff716332ef1b7c3a142ec40c5"}, - {file = "propcache-0.4.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:9d2b6caef873b4f09e26ea7e33d65f42b944837563a47a94719cc3544319a0db"}, - {file = "propcache-0.4.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2b16ec437a8c8a965ecf95739448dd938b5c7f56e67ea009f4300d8df05f32b7"}, - {file = "propcache-0.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:296f4c8ed03ca7476813fe666c9ea97869a8d7aec972618671b33a38a5182ef4"}, - {file = "propcache-0.4.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:1f0978529a418ebd1f49dad413a2b68af33f85d5c5ca5c6ca2a3bed375a7ac60"}, - {file = "propcache-0.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fd138803047fb4c062b1c1dd95462f5209456bfab55c734458f15d11da288f8f"}, - {file = "propcache-0.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8c9b3cbe4584636d72ff556d9036e0c9317fa27b3ac1f0f558e7e84d1c9c5900"}, - {file = "propcache-0.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f93243fdc5657247533273ac4f86ae106cc6445a0efacb9a1bfe982fcfefd90c"}, - {file = "propcache-0.4.1-cp310-cp310-win32.whl", hash = "sha256:a0ee98db9c5f80785b266eb805016e36058ac72c51a064040f2bc43b61101cdb"}, - {file = "propcache-0.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:1cdb7988c4e5ac7f6d175a28a9aa0c94cb6f2ebe52756a3c0cda98d2809a9e37"}, - {file = "propcache-0.4.1-cp310-cp310-win_arm64.whl", hash = "sha256:d82ad62b19645419fe79dd63b3f9253e15b30e955c0170e5cebc350c1844e581"}, - {file = "propcache-0.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:60a8fda9644b7dfd5dece8c61d8a85e271cb958075bfc4e01083c148b61a7caf"}, - {file = "propcache-0.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c30b53e7e6bda1d547cabb47c825f3843a0a1a42b0496087bb58d8fedf9f41b5"}, - {file = "propcache-0.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6918ecbd897443087a3b7cd978d56546a812517dcaaca51b49526720571fa93e"}, - {file = "propcache-0.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3d902a36df4e5989763425a8ab9e98cd8ad5c52c823b34ee7ef307fd50582566"}, - {file = "propcache-0.4.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a9695397f85973bb40427dedddf70d8dc4a44b22f1650dd4af9eedf443d45165"}, - {file = "propcache-0.4.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2bb07ffd7eaad486576430c89f9b215f9e4be68c4866a96e97db9e97fead85dc"}, - {file = "propcache-0.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fd6f30fdcf9ae2a70abd34da54f18da086160e4d7d9251f81f3da0ff84fc5a48"}, - {file = "propcache-0.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:fc38cba02d1acba4e2869eef1a57a43dfbd3d49a59bf90dda7444ec2be6a5570"}, - {file = "propcache-0.4.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:67fad6162281e80e882fb3ec355398cf72864a54069d060321f6cd0ade95fe85"}, - {file = "propcache-0.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f10207adf04d08bec185bae14d9606a1444715bc99180f9331c9c02093e1959e"}, - {file = "propcache-0.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e9b0d8d0845bbc4cfcdcbcdbf5086886bc8157aa963c31c777ceff7846c77757"}, - {file = "propcache-0.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:981333cb2f4c1896a12f4ab92a9cc8f09ea664e9b7dbdc4eff74627af3a11c0f"}, - {file = "propcache-0.4.1-cp311-cp311-win32.whl", hash = "sha256:f1d2f90aeec838a52f1c1a32fe9a619fefd5e411721a9117fbf82aea638fe8a1"}, - {file = "propcache-0.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:364426a62660f3f699949ac8c621aad6977be7126c5807ce48c0aeb8e7333ea6"}, - {file = "propcache-0.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:e53f3a38d3510c11953f3e6a33f205c6d1b001129f972805ca9b42fc308bc239"}, - {file = "propcache-0.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e153e9cd40cc8945138822807139367f256f89c6810c2634a4f6902b52d3b4e2"}, - {file = "propcache-0.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cd547953428f7abb73c5ad82cbb32109566204260d98e41e5dfdc682eb7f8403"}, - {file = "propcache-0.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f048da1b4f243fc44f205dfd320933a951b8d89e0afd4c7cacc762a8b9165207"}, - {file = "propcache-0.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ec17c65562a827bba85e3872ead335f95405ea1674860d96483a02f5c698fa72"}, - {file = "propcache-0.4.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:405aac25c6394ef275dee4c709be43745d36674b223ba4eb7144bf4d691b7367"}, - {file = "propcache-0.4.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0013cb6f8dde4b2a2f66903b8ba740bdfe378c943c4377a200551ceb27f379e4"}, - {file = "propcache-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:15932ab57837c3368b024473a525e25d316d8353016e7cc0e5ba9eb343fbb1cf"}, - {file = "propcache-0.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:031dce78b9dc099f4c29785d9cf5577a3faf9ebf74ecbd3c856a7b92768c3df3"}, - {file = "propcache-0.4.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ab08df6c9a035bee56e31af99be621526bd237bea9f32def431c656b29e41778"}, - {file = "propcache-0.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4d7af63f9f93fe593afbf104c21b3b15868efb2c21d07d8732c0c4287e66b6a6"}, - {file = "propcache-0.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cfc27c945f422e8b5071b6e93169679e4eb5bf73bbcbf1ba3ae3a83d2f78ebd9"}, - {file = "propcache-0.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:35c3277624a080cc6ec6f847cbbbb5b49affa3598c4535a0a4682a697aaa5c75"}, - {file = "propcache-0.4.1-cp312-cp312-win32.whl", hash = "sha256:671538c2262dadb5ba6395e26c1731e1d52534bfe9ae56d0b5573ce539266aa8"}, - {file = "propcache-0.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:cb2d222e72399fcf5890d1d5cc1060857b9b236adff2792ff48ca2dfd46c81db"}, - {file = "propcache-0.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:204483131fb222bdaaeeea9f9e6c6ed0cac32731f75dfc1d4a567fc1926477c1"}, - {file = "propcache-0.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:43eedf29202c08550aac1d14e0ee619b0430aaef78f85864c1a892294fbc28cf"}, - {file = "propcache-0.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d62cdfcfd89ccb8de04e0eda998535c406bf5e060ffd56be6c586cbcc05b3311"}, - {file = "propcache-0.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cae65ad55793da34db5f54e4029b89d3b9b9490d8abe1b4c7ab5d4b8ec7ebf74"}, - {file = "propcache-0.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:333ddb9031d2704a301ee3e506dc46b1fe5f294ec198ed6435ad5b6a085facfe"}, - {file = "propcache-0.4.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:fd0858c20f078a32cf55f7e81473d96dcf3b93fd2ccdb3d40fdf54b8573df3af"}, - {file = "propcache-0.4.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:678ae89ebc632c5c204c794f8dab2837c5f159aeb59e6ed0539500400577298c"}, - {file = "propcache-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d472aeb4fbf9865e0c6d622d7f4d54a4e101a89715d8904282bb5f9a2f476c3f"}, - {file = "propcache-0.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4d3df5fa7e36b3225954fba85589da77a0fe6a53e3976de39caf04a0db4c36f1"}, - {file = "propcache-0.4.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:ee17f18d2498f2673e432faaa71698032b0127ebf23ae5974eeaf806c279df24"}, - {file = "propcache-0.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:580e97762b950f993ae618e167e7be9256b8353c2dcd8b99ec100eb50f5286aa"}, - {file = "propcache-0.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:501d20b891688eb8e7aa903021f0b72d5a55db40ffaab27edefd1027caaafa61"}, - {file = "propcache-0.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a0bd56e5b100aef69bd8562b74b46254e7c8812918d3baa700c8a8009b0af66"}, - {file = "propcache-0.4.1-cp313-cp313-win32.whl", hash = "sha256:bcc9aaa5d80322bc2fb24bb7accb4a30f81e90ab8d6ba187aec0744bc302ad81"}, - {file = "propcache-0.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:381914df18634f5494334d201e98245c0596067504b9372d8cf93f4bb23e025e"}, - {file = "propcache-0.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:8873eb4460fd55333ea49b7d189749ecf6e55bf85080f11b1c4530ed3034cba1"}, - {file = "propcache-0.4.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:92d1935ee1f8d7442da9c0c4fa7ac20d07e94064184811b685f5c4fada64553b"}, - {file = "propcache-0.4.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:473c61b39e1460d386479b9b2f337da492042447c9b685f28be4f74d3529e566"}, - {file = "propcache-0.4.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c0ef0aaafc66fbd87842a3fe3902fd889825646bc21149eafe47be6072725835"}, - {file = "propcache-0.4.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f95393b4d66bfae908c3ca8d169d5f79cd65636ae15b5e7a4f6e67af675adb0e"}, - {file = "propcache-0.4.1-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c07fda85708bc48578467e85099645167a955ba093be0a2dcba962195676e859"}, - {file = "propcache-0.4.1-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:af223b406d6d000830c6f65f1e6431783fc3f713ba3e6cc8c024d5ee96170a4b"}, - {file = "propcache-0.4.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a78372c932c90ee474559c5ddfffd718238e8673c340dc21fe45c5b8b54559a0"}, - {file = "propcache-0.4.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:564d9f0d4d9509e1a870c920a89b2fec951b44bf5ba7d537a9e7c1ccec2c18af"}, - {file = "propcache-0.4.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:17612831fda0138059cc5546f4d12a2aacfb9e47068c06af35c400ba58ba7393"}, - {file = "propcache-0.4.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:41a89040cb10bd345b3c1a873b2bf36413d48da1def52f268a055f7398514874"}, - {file = "propcache-0.4.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e35b88984e7fa64aacecea39236cee32dd9bd8c55f57ba8a75cf2399553f9bd7"}, - {file = "propcache-0.4.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6f8b465489f927b0df505cbe26ffbeed4d6d8a2bbc61ce90eb074ff129ef0ab1"}, - {file = "propcache-0.4.1-cp313-cp313t-win32.whl", hash = "sha256:2ad890caa1d928c7c2965b48f3a3815c853180831d0e5503d35cf00c472f4717"}, - {file = "propcache-0.4.1-cp313-cp313t-win_amd64.whl", hash = "sha256:f7ee0e597f495cf415bcbd3da3caa3bd7e816b74d0d52b8145954c5e6fd3ff37"}, - {file = "propcache-0.4.1-cp313-cp313t-win_arm64.whl", hash = "sha256:929d7cbe1f01bb7baffb33dc14eb5691c95831450a26354cd210a8155170c93a"}, - {file = "propcache-0.4.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3f7124c9d820ba5548d431afb4632301acf965db49e666aa21c305cbe8c6de12"}, - {file = "propcache-0.4.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:c0d4b719b7da33599dfe3b22d3db1ef789210a0597bc650b7cee9c77c2be8c5c"}, - {file = "propcache-0.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:9f302f4783709a78240ebc311b793f123328716a60911d667e0c036bc5dcbded"}, - {file = "propcache-0.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c80ee5802e3fb9ea37938e7eecc307fb984837091d5fd262bb37238b1ae97641"}, - {file = "propcache-0.4.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ed5a841e8bb29a55fb8159ed526b26adc5bdd7e8bd7bf793ce647cb08656cdf4"}, - {file = "propcache-0.4.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:55c72fd6ea2da4c318e74ffdf93c4fe4e926051133657459131a95c846d16d44"}, - {file = "propcache-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8326e144341460402713f91df60ade3c999d601e7eb5ff8f6f7862d54de0610d"}, - {file = "propcache-0.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:060b16ae65bc098da7f6d25bf359f1f31f688384858204fe5d652979e0015e5b"}, - {file = "propcache-0.4.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:89eb3fa9524f7bec9de6e83cf3faed9d79bffa560672c118a96a171a6f55831e"}, - {file = "propcache-0.4.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:dee69d7015dc235f526fe80a9c90d65eb0039103fe565776250881731f06349f"}, - {file = "propcache-0.4.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:5558992a00dfd54ccbc64a32726a3357ec93825a418a401f5cc67df0ac5d9e49"}, - {file = "propcache-0.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c9b822a577f560fbd9554812526831712c1436d2c046cedee4c3796d3543b144"}, - {file = "propcache-0.4.1-cp314-cp314-win32.whl", hash = "sha256:ab4c29b49d560fe48b696cdcb127dd36e0bc2472548f3bf56cc5cb3da2b2984f"}, - {file = "propcache-0.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:5a103c3eb905fcea0ab98be99c3a9a5ab2de60228aa5aceedc614c0281cf6153"}, - {file = "propcache-0.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:74c1fb26515153e482e00177a1ad654721bf9207da8a494a0c05e797ad27b992"}, - {file = "propcache-0.4.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:824e908bce90fb2743bd6b59db36eb4f45cd350a39637c9f73b1c1ea66f5b75f"}, - {file = "propcache-0.4.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:c2b5e7db5328427c57c8e8831abda175421b709672f6cfc3d630c3b7e2146393"}, - {file = "propcache-0.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6f6ff873ed40292cd4969ef5310179afd5db59fdf055897e282485043fc80ad0"}, - {file = "propcache-0.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:49a2dc67c154db2c1463013594c458881a069fcf98940e61a0569016a583020a"}, - {file = "propcache-0.4.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:005f08e6a0529984491e37d8dbc3dd86f84bd78a8ceb5fa9a021f4c48d4984be"}, - {file = "propcache-0.4.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5c3310452e0d31390da9035c348633b43d7e7feb2e37be252be6da45abd1abcc"}, - {file = "propcache-0.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c3c70630930447f9ef1caac7728c8ad1c56bc5015338b20fed0d08ea2480b3a"}, - {file = "propcache-0.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8e57061305815dfc910a3634dcf584f08168a8836e6999983569f51a8544cd89"}, - {file = "propcache-0.4.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:521a463429ef54143092c11a77e04056dd00636f72e8c45b70aaa3140d639726"}, - {file = "propcache-0.4.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:120c964da3fdc75e3731aa392527136d4ad35868cc556fd09bb6d09172d9a367"}, - {file = "propcache-0.4.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:d8f353eb14ee3441ee844ade4277d560cdd68288838673273b978e3d6d2c8f36"}, - {file = "propcache-0.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ab2943be7c652f09638800905ee1bab2c544e537edb57d527997a24c13dc1455"}, - {file = "propcache-0.4.1-cp314-cp314t-win32.whl", hash = "sha256:05674a162469f31358c30bcaa8883cb7829fa3110bf9c0991fe27d7896c42d85"}, - {file = "propcache-0.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:990f6b3e2a27d683cb7602ed6c86f15ee6b43b1194736f9baaeb93d0016633b1"}, - {file = "propcache-0.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ecef2343af4cc68e05131e45024ba34f6095821988a9d0a02aa7c73fcc448aa9"}, - {file = "propcache-0.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3d233076ccf9e450c8b3bc6720af226b898ef5d051a2d145f7d765e6e9f9bcff"}, - {file = "propcache-0.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:357f5bb5c377a82e105e44bd3d52ba22b616f7b9773714bff93573988ef0a5fb"}, - {file = "propcache-0.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cbc3b6dfc728105b2a57c06791eb07a94229202ea75c59db644d7d496b698cac"}, - {file = "propcache-0.4.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:182b51b421f0501952d938dc0b0eb45246a5b5153c50d42b495ad5fb7517c888"}, - {file = "propcache-0.4.1-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4b536b39c5199b96fc6245eb5fb796c497381d3942f169e44e8e392b29c9ebcc"}, - {file = "propcache-0.4.1-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:db65d2af507bbfbdcedb254a11149f894169d90488dd3e7190f7cdcb2d6cd57a"}, - {file = "propcache-0.4.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fd2dbc472da1f772a4dae4fa24be938a6c544671a912e30529984dd80400cd88"}, - {file = "propcache-0.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:daede9cd44e0f8bdd9e6cc9a607fc81feb80fae7a5fc6cecaff0e0bb32e42d00"}, - {file = "propcache-0.4.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:71b749281b816793678ae7f3d0d84bd36e694953822eaad408d682efc5ca18e0"}, - {file = "propcache-0.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:0002004213ee1f36cfb3f9a42b5066100c44276b9b72b4e1504cddd3d692e86e"}, - {file = "propcache-0.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:fe49d0a85038f36ba9e3ffafa1103e61170b28e95b16622e11be0a0ea07c6781"}, - {file = "propcache-0.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:99d43339c83aaf4d32bda60928231848eee470c6bda8d02599cc4cebe872d183"}, - {file = "propcache-0.4.1-cp39-cp39-win32.whl", hash = "sha256:a129e76735bc792794d5177069691c3217898b9f5cee2b2661471e52ffe13f19"}, - {file = "propcache-0.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:948dab269721ae9a87fd16c514a0a2c2a1bdb23a9a61b969b0f9d9ee2968546f"}, - {file = "propcache-0.4.1-cp39-cp39-win_arm64.whl", hash = "sha256:5fd37c406dd6dc85aa743e214cef35dc54bbdd1419baac4f6ae5e5b1a2976938"}, - {file = "propcache-0.4.1-py3-none-any.whl", hash = "sha256:af2a6052aeb6cf17d3e46ee169099044fd8224cbaf75c76a2ef596e8163e2237"}, - {file = "propcache-0.4.1.tar.gz", hash = "sha256:f48107a8c637e80362555f37ecf49abe20370e557cc4ab374f04ec4423c97c3d"}, -] - -[[package]] -name = "puyapy" -version = "5.4.0" -description = "An optimising compiler for Algorand Python" -optional = false -python-versions = "<4,>=3.12.0" -groups = ["dev"] -files = [ - {file = "puyapy-5.4.0-py3-none-any.whl", hash = "sha256:0028066723a62c90411b35a1f65a63a01ac737b073f779066ed9a2909cad9a47"}, -] - -[package.dependencies] -attrs = ">=25.3.0,<26" -cattrs = ">=25,<26" -colorama = {version = ">=0.4.6,<0.5", markers = "sys_platform == \"win32\""} -cyclopts = ">=3.23.1" -docstring-parser = ">=0.14.1" -immutabledict = ">=4.2.0,<5" -mypy-extensions = ">=1.0.0,<2" -networkx = ">=3.4.2,<4" -packaging = ">=24.0,<25.0" -pathspec = ">=0.9" -pycryptodomex = ">=3.6.0,<4" -pygls = ">=2.0.0a2" -structlog = ">=25.2.0,<26" -typing-extensions = ">=4.11.0,<5" - -[[package]] -name = "py-algorand-sdk" -version = "2.11.1" -description = "Algorand SDK in Python" -optional = false -python-versions = ">=3.10" -groups = ["main", "dev"] -files = [ - {file = "py_algorand_sdk-2.11.1-py3-none-any.whl", hash = "sha256:40c8db5e65420ade023c78dda1fff44f5af4666c4b12c8a0e976a6c33fb819b6"}, - {file = "py_algorand_sdk-2.11.1.tar.gz", hash = "sha256:ccca589b00f7939e6bfdf5a5ace261a4b26c9b4baf02b376c46fb61aa182c800"}, -] - -[package.dependencies] -msgpack = ">=1.0.0,<2" -pycryptodomex = ">=3.6.0,<4" -pynacl = ">=1.4.0,<2" - -[[package]] -name = "py-serializable" -version = "2.1.0" -description = "Library for serializing and deserializing Python Objects to and from JSON and XML." -optional = false -python-versions = "<4.0,>=3.8" -groups = ["dev"] -files = [ - {file = "py_serializable-2.1.0-py3-none-any.whl", hash = "sha256:b56d5d686b5a03ba4f4db5e769dc32336e142fc3bd4d68a8c25579ebb0a67304"}, - {file = "py_serializable-2.1.0.tar.gz", hash = "sha256:9d5db56154a867a9b897c0163b33a793c804c80cee984116d02d49e4578fc103"}, -] - -[package.dependencies] -defusedxml = ">=0.7.1,<0.8.0" - -[[package]] -name = "pycparser" -version = "2.23" -description = "C parser in Python" -optional = false -python-versions = ">=3.8" -groups = ["main", "dev"] -markers = "platform_python_implementation != \"PyPy\" and implementation_name != \"PyPy\"" -files = [ - {file = "pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934"}, - {file = "pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2"}, -] - -[[package]] -name = "pycryptodomex" -version = "3.23.0" -description = "Cryptographic library for Python" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -groups = ["main", "dev"] -files = [ - {file = "pycryptodomex-3.23.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:add243d204e125f189819db65eed55e6b4713f70a7e9576c043178656529cec7"}, - {file = "pycryptodomex-3.23.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:1c6d919fc8429e5cb228ba8c0d4d03d202a560b421c14867a65f6042990adc8e"}, - {file = "pycryptodomex-3.23.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:1c3a65ad441746b250d781910d26b7ed0a396733c6f2dbc3327bd7051ec8a541"}, - {file = "pycryptodomex-3.23.0-cp27-cp27m-win32.whl", hash = "sha256:47f6d318fe864d02d5e59a20a18834819596c4ed1d3c917801b22b92b3ffa648"}, - {file = "pycryptodomex-3.23.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:d9825410197a97685d6a1fa2a86196430b01877d64458a20e95d4fd00d739a08"}, - {file = "pycryptodomex-3.23.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:267a3038f87a8565bd834317dbf053a02055915acf353bf42ededb9edaf72010"}, - {file = "pycryptodomex-3.23.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:7b37e08e3871efe2187bc1fd9320cc81d87caf19816c648f24443483005ff886"}, - {file = "pycryptodomex-3.23.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:91979028227543010d7b2ba2471cf1d1e398b3f183cb105ac584df0c36dac28d"}, - {file = "pycryptodomex-3.23.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b8962204c47464d5c1c4038abeadd4514a133b28748bcd9fa5b6d62e3cec6fa"}, - {file = "pycryptodomex-3.23.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a33986a0066860f7fcf7c7bd2bc804fa90e434183645595ae7b33d01f3c91ed8"}, - {file = "pycryptodomex-3.23.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7947ab8d589e3178da3d7cdeabe14f841b391e17046954f2fbcd941705762b5"}, - {file = "pycryptodomex-3.23.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c25e30a20e1b426e1f0fa00131c516f16e474204eee1139d1603e132acffc314"}, - {file = "pycryptodomex-3.23.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:da4fa650cef02db88c2b98acc5434461e027dce0ae8c22dd5a69013eaf510006"}, - {file = "pycryptodomex-3.23.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:58b851b9effd0d072d4ca2e4542bf2a4abcf13c82a29fd2c93ce27ee2a2e9462"}, - {file = "pycryptodomex-3.23.0-cp313-cp313t-win32.whl", hash = "sha256:a9d446e844f08299236780f2efa9898c818fe7e02f17263866b8550c7d5fb328"}, - {file = "pycryptodomex-3.23.0-cp313-cp313t-win_amd64.whl", hash = "sha256:bc65bdd9fc8de7a35a74cab1c898cab391a4add33a8fe740bda00f5976ca4708"}, - {file = "pycryptodomex-3.23.0-cp313-cp313t-win_arm64.whl", hash = "sha256:c885da45e70139464f082018ac527fdaad26f1657a99ee13eecdce0f0ca24ab4"}, - {file = "pycryptodomex-3.23.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:06698f957fe1ab229a99ba2defeeae1c09af185baa909a31a5d1f9d42b1aaed6"}, - {file = "pycryptodomex-3.23.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b2c2537863eccef2d41061e82a881dcabb04944c5c06c5aa7110b577cc487545"}, - {file = "pycryptodomex-3.23.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:43c446e2ba8df8889e0e16f02211c25b4934898384c1ec1ec04d7889c0333587"}, - {file = "pycryptodomex-3.23.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f489c4765093fb60e2edafdf223397bc716491b2b69fe74367b70d6999257a5c"}, - {file = "pycryptodomex-3.23.0-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bdc69d0d3d989a1029df0eed67cc5e8e5d968f3724f4519bd03e0ec68df7543c"}, - {file = "pycryptodomex-3.23.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:6bbcb1dd0f646484939e142462d9e532482bc74475cecf9c4903d4e1cd21f003"}, - {file = "pycryptodomex-3.23.0-cp37-abi3-musllinux_1_2_i686.whl", hash = "sha256:8a4fcd42ccb04c31268d1efeecfccfd1249612b4de6374205376b8f280321744"}, - {file = "pycryptodomex-3.23.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:55ccbe27f049743a4caf4f4221b166560d3438d0b1e5ab929e07ae1702a4d6fd"}, - {file = "pycryptodomex-3.23.0-cp37-abi3-win32.whl", hash = "sha256:189afbc87f0b9f158386bf051f720e20fa6145975f1e76369303d0f31d1a8d7c"}, - {file = "pycryptodomex-3.23.0-cp37-abi3-win_amd64.whl", hash = "sha256:52e5ca58c3a0b0bd5e100a9fbc8015059b05cffc6c66ce9d98b4b45e023443b9"}, - {file = "pycryptodomex-3.23.0-cp37-abi3-win_arm64.whl", hash = "sha256:02d87b80778c171445d67e23d1caef279bf4b25c3597050ccd2e13970b57fd51"}, - {file = "pycryptodomex-3.23.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:febec69c0291efd056c65691b6d9a339f8b4bc43c6635b8699471248fe897fea"}, - {file = "pycryptodomex-3.23.0-pp27-pypy_73-win32.whl", hash = "sha256:c84b239a1f4ec62e9c789aafe0543f0594f0acd90c8d9e15bcece3efe55eca66"}, - {file = "pycryptodomex-3.23.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ebfff755c360d674306e5891c564a274a47953562b42fb74a5c25b8fc1fb1cb5"}, - {file = "pycryptodomex-3.23.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eca54f4bb349d45afc17e3011ed4264ef1cc9e266699874cdd1349c504e64798"}, - {file = "pycryptodomex-3.23.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2596e643d4365e14d0879dc5aafe6355616c61c2176009270f3048f6d9a61f"}, - {file = "pycryptodomex-3.23.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fdfac7cda115bca3a5abb2f9e43bc2fb66c2b65ab074913643803ca7083a79ea"}, - {file = "pycryptodomex-3.23.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:14c37aaece158d0ace436f76a7bb19093db3b4deade9797abfc39ec6cd6cc2fe"}, - {file = "pycryptodomex-3.23.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7de1e40a41a5d7f1ac42b6569b10bcdded34339950945948529067d8426d2785"}, - {file = "pycryptodomex-3.23.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bffc92138d75664b6d543984db7893a628559b9e78658563b0395e2a5fb47ed9"}, - {file = "pycryptodomex-3.23.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df027262368334552db2c0ce39706b3fb32022d1dce34673d0f9422df004b96a"}, - {file = "pycryptodomex-3.23.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e79f1aaff5a3a374e92eb462fa9e598585452135012e2945f96874ca6eeb1ff"}, - {file = "pycryptodomex-3.23.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:27e13c80ac9a0a1d050ef0a7e0a18cc04c8850101ec891815b6c5a0375e8a245"}, - {file = "pycryptodomex-3.23.0.tar.gz", hash = "sha256:71909758f010c82bc99b0abf4ea12012c98962fbf0583c2164f8b84533c2e4da"}, -] - -[[package]] -name = "pygls" -version = "2.0.0" -description = "A pythonic generic language server (pronounced like 'pie glass')" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "pygls-2.0.0-py3-none-any.whl", hash = "sha256:b4e54bba806f76781017ded8fd07463b98670f959042c44170cd362088b200cc"}, - {file = "pygls-2.0.0.tar.gz", hash = "sha256:99accd03de1ca76fe1e7e317f0968ebccf7b9955afed6e2e3e188606a20b4f07"}, -] - -[package.dependencies] -attrs = ">=24.3.0" -cattrs = ">=23.1.2" -lsprotocol = "2025.0.0" - -[package.extras] -ws = ["websockets (>=13.0)"] - -[[package]] -name = "pygments" -version = "2.19.2" -description = "Pygments is a syntax highlighting package written in Python." -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b"}, - {file = "pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887"}, -] - -[package.extras] -windows-terminal = ["colorama (>=0.4.6)"] - -[[package]] -name = "pynacl" -version = "1.6.0" -description = "Python binding to the Networking and Cryptography (NaCl) library" -optional = false -python-versions = ">=3.8" -groups = ["main", "dev"] -files = [ - {file = "pynacl-1.6.0-cp314-cp314t-macosx_10_10_universal2.whl", hash = "sha256:f46386c24a65383a9081d68e9c2de909b1834ec74ff3013271f1bca9c2d233eb"}, - {file = "pynacl-1.6.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:dea103a1afcbc333bc0e992e64233d360d393d1e63d0bc88554f572365664348"}, - {file = "pynacl-1.6.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:04f20784083014e265ad58c1b2dd562c3e35864b5394a14ab54f5d150ee9e53e"}, - {file = "pynacl-1.6.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bbcc4452a1eb10cd5217318c822fde4be279c9de8567f78bad24c773c21254f8"}, - {file = "pynacl-1.6.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:51fed9fe1bec9e7ff9af31cd0abba179d0e984a2960c77e8e5292c7e9b7f7b5d"}, - {file = "pynacl-1.6.0-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:10d755cf2a455d8c0f8c767a43d68f24d163b8fe93ccfaabfa7bafd26be58d73"}, - {file = "pynacl-1.6.0-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:536703b8f90e911294831a7fbcd0c062b837f3ccaa923d92a6254e11178aaf42"}, - {file = "pynacl-1.6.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6b08eab48c9669d515a344fb0ef27e2cbde847721e34bba94a343baa0f33f1f4"}, - {file = "pynacl-1.6.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5789f016e08e5606803161ba24de01b5a345d24590a80323379fc4408832d290"}, - {file = "pynacl-1.6.0-cp314-cp314t-win32.whl", hash = "sha256:4853c154dc16ea12f8f3ee4b7e763331876316cc3a9f06aeedf39bcdca8f9995"}, - {file = "pynacl-1.6.0-cp314-cp314t-win_amd64.whl", hash = "sha256:347dcddce0b4d83ed3f32fd00379c83c425abee5a9d2cd0a2c84871334eaff64"}, - {file = "pynacl-1.6.0-cp314-cp314t-win_arm64.whl", hash = "sha256:2d6cd56ce4998cb66a6c112fda7b1fdce5266c9f05044fa72972613bef376d15"}, - {file = "pynacl-1.6.0-cp38-abi3-macosx_10_10_universal2.whl", hash = "sha256:f4b3824920e206b4f52abd7de621ea7a44fd3cb5c8daceb7c3612345dfc54f2e"}, - {file = "pynacl-1.6.0-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:16dd347cdc8ae0b0f6187a2608c0af1c8b7ecbbe6b4a06bff8253c192f696990"}, - {file = "pynacl-1.6.0-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:16c60daceee88d04f8d41d0a4004a7ed8d9a5126b997efd2933e08e93a3bd850"}, - {file = "pynacl-1.6.0-cp38-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:25720bad35dfac34a2bcdd61d9e08d6bfc6041bebc7751d9c9f2446cf1e77d64"}, - {file = "pynacl-1.6.0-cp38-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8bfaa0a28a1ab718bad6239979a5a57a8d1506d0caf2fba17e524dbb409441cf"}, - {file = "pynacl-1.6.0-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:ef214b90556bb46a485b7da8258e59204c244b1b5b576fb71848819b468c44a7"}, - {file = "pynacl-1.6.0-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:49c336dd80ea54780bcff6a03ee1a476be1612423010472e60af83452aa0f442"}, - {file = "pynacl-1.6.0-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:f3482abf0f9815e7246d461fab597aa179b7524628a4bc36f86a7dc418d2608d"}, - {file = "pynacl-1.6.0-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:140373378e34a1f6977e573033d1dd1de88d2a5d90ec6958c9485b2fd9f3eb90"}, - {file = "pynacl-1.6.0-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:6b393bc5e5a0eb86bb85b533deb2d2c815666665f840a09e0aa3362bb6088736"}, - {file = "pynacl-1.6.0-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:4a25cfede801f01e54179b8ff9514bd7b5944da560b7040939732d1804d25419"}, - {file = "pynacl-1.6.0-cp38-abi3-win32.whl", hash = "sha256:dcdeb41c22ff3c66eef5e63049abf7639e0db4edee57ba70531fc1b6b133185d"}, - {file = "pynacl-1.6.0-cp38-abi3-win_amd64.whl", hash = "sha256:cf831615cc16ba324240de79d925eacae8265b7691412ac6b24221db157f6bd1"}, - {file = "pynacl-1.6.0-cp38-abi3-win_arm64.whl", hash = "sha256:84709cea8f888e618c21ed9a0efdb1a59cc63141c403db8bf56c469b71ad56f2"}, - {file = "pynacl-1.6.0.tar.gz", hash = "sha256:cb36deafe6e2bce3b286e5d1f3e1c246e0ccdb8808ddb4550bb2792f2df298f2"}, -] - -[package.dependencies] -cffi = [ - {version = ">=1.4.1", markers = "platform_python_implementation != \"PyPy\" and python_version < \"3.14\""}, - {version = ">=2.0.0", markers = "platform_python_implementation != \"PyPy\" and python_version >= \"3.14\""}, -] - -[package.extras] -docs = ["sphinx (<7)", "sphinx_rtd_theme"] -tests = ["hypothesis (>=3.27.0)", "pytest (>=7.4.0)", "pytest-cov (>=2.10.1)", "pytest-xdist (>=3.5.0)"] - -[[package]] -name = "pyparsing" -version = "3.2.5" -description = "pyparsing - Classes and methods to define and execute parsing grammars" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "pyparsing-3.2.5-py3-none-any.whl", hash = "sha256:e38a4f02064cf41fe6593d328d0512495ad1f3d8a91c4f73fc401b3079a59a5e"}, - {file = "pyparsing-3.2.5.tar.gz", hash = "sha256:2df8d5b7b2802ef88e8d016a2eb9c7aeaa923529cd251ed0fe4608275d4105b6"}, -] - -[package.extras] -diagrams = ["jinja2", "railroad-diagrams"] - -[[package]] -name = "pytest" -version = "8.4.2" -description = "pytest: simple powerful testing with Python" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e79"}, - {file = "pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01"}, -] - -[package.dependencies] -colorama = {version = ">=0.4", markers = "sys_platform == \"win32\""} -iniconfig = ">=1" -packaging = ">=20" -pluggy = ">=1.5,<2" -pygments = ">=2.7.2" - -[package.extras] -dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "requests", "setuptools", "xmlschema"] - -[[package]] -name = "pytest-cov" -version = "7.0.0" -description = "Pytest plugin for measuring coverage." -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "pytest_cov-7.0.0-py3-none-any.whl", hash = "sha256:3b8e9558b16cc1479da72058bdecf8073661c7f57f7d3c5f22a1c23507f2d861"}, - {file = "pytest_cov-7.0.0.tar.gz", hash = "sha256:33c97eda2e049a0c5298e91f519302a1334c26ac65c1a483d6206fd458361af1"}, -] - -[package.dependencies] -coverage = {version = ">=7.10.6", extras = ["toml"]} -pluggy = ">=1.2" -pytest = ">=7" - -[package.extras] -testing = ["process-tests", "pytest-xdist", "virtualenv"] - -[[package]] -name = "pytest-sugar" -version = "1.1.1" -description = "pytest-sugar is a plugin for pytest that changes the default look and feel of pytest (e.g. progressbar, show tests that fail instantly)." -optional = false -python-versions = "*" -groups = ["dev"] -files = [ - {file = "pytest-sugar-1.1.1.tar.gz", hash = "sha256:73b8b65163ebf10f9f671efab9eed3d56f20d2ca68bda83fa64740a92c08f65d"}, - {file = "pytest_sugar-1.1.1-py3-none-any.whl", hash = "sha256:2f8319b907548d5b9d03a171515c1d43d2e38e32bd8182a1781eb20b43344cc8"}, -] - -[package.dependencies] -pytest = ">=6.2.0" -termcolor = ">=2.1.0" - -[package.extras] -dev = ["black", "flake8", "pre-commit"] - -[[package]] -name = "python-dotenv" -version = "1.2.1" -description = "Read key-value pairs from a .env file and set them as environment variables" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "python_dotenv-1.2.1-py3-none-any.whl", hash = "sha256:b81ee9561e9ca4004139c6cbba3a238c32b03e4894671e181b671e8cb8425d61"}, - {file = "python_dotenv-1.2.1.tar.gz", hash = "sha256:42667e897e16ab0d66954af0e60a9caa94f0fd4ecf3aaf6d2d260eec1aa36ad6"}, -] - -[package.extras] -cli = ["click (>=5.0)"] - -[[package]] -name = "pyyaml" -version = "6.0.3" -description = "YAML parser and emitter for Python" -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b"}, - {file = "pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956"}, - {file = "pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8"}, - {file = "pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198"}, - {file = "pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b"}, - {file = "pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0"}, - {file = "pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69"}, - {file = "pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e"}, - {file = "pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c"}, - {file = "pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e"}, - {file = "pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824"}, - {file = "pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c"}, - {file = "pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00"}, - {file = "pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d"}, - {file = "pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a"}, - {file = "pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4"}, - {file = "pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b"}, - {file = "pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf"}, - {file = "pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196"}, - {file = "pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0"}, - {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28"}, - {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c"}, - {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc"}, - {file = "pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e"}, - {file = "pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea"}, - {file = "pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5"}, - {file = "pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b"}, - {file = "pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd"}, - {file = "pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8"}, - {file = "pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1"}, - {file = "pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c"}, - {file = "pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5"}, - {file = "pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6"}, - {file = "pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6"}, - {file = "pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be"}, - {file = "pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26"}, - {file = "pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c"}, - {file = "pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb"}, - {file = "pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac"}, - {file = "pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310"}, - {file = "pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7"}, - {file = "pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788"}, - {file = "pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5"}, - {file = "pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764"}, - {file = "pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35"}, - {file = "pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac"}, - {file = "pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3"}, - {file = "pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3"}, - {file = "pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba"}, - {file = "pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c"}, - {file = "pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702"}, - {file = "pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c"}, - {file = "pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065"}, - {file = "pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65"}, - {file = "pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9"}, - {file = "pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b"}, - {file = "pyyaml-6.0.3-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:b865addae83924361678b652338317d1bd7e79b1f4596f96b96c77a5a34b34da"}, - {file = "pyyaml-6.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c3355370a2c156cffb25e876646f149d5d68f5e0a3ce86a5084dd0b64a994917"}, - {file = "pyyaml-6.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3c5677e12444c15717b902a5798264fa7909e41153cdf9ef7ad571b704a63dd9"}, - {file = "pyyaml-6.0.3-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5ed875a24292240029e4483f9d4a4b8a1ae08843b9c54f43fcc11e404532a8a5"}, - {file = "pyyaml-6.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0150219816b6a1fa26fb4699fb7daa9caf09eb1999f3b70fb6e786805e80375a"}, - {file = "pyyaml-6.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fa160448684b4e94d80416c0fa4aac48967a969efe22931448d853ada8baf926"}, - {file = "pyyaml-6.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:27c0abcb4a5dac13684a37f76e701e054692a9b2d3064b70f5e4eb54810553d7"}, - {file = "pyyaml-6.0.3-cp39-cp39-win32.whl", hash = "sha256:1ebe39cb5fc479422b83de611d14e2c0d3bb2a18bbcb01f229ab3cfbd8fee7a0"}, - {file = "pyyaml-6.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:2e71d11abed7344e42a8849600193d15b6def118602c4c176f748e4583246007"}, - {file = "pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f"}, -] - -[[package]] -name = "requests" -version = "2.32.5" -description = "Python HTTP for Humans." -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6"}, - {file = "requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf"}, -] - -[package.dependencies] -certifi = ">=2017.4.17" -charset_normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<3" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - -[[package]] -name = "rich" -version = "14.2.0" -description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" -optional = false -python-versions = ">=3.8.0" -groups = ["dev"] -files = [ - {file = "rich-14.2.0-py3-none-any.whl", hash = "sha256:76bc51fe2e57d2b1be1f96c524b890b816e334ab4c1e45888799bfaab0021edd"}, - {file = "rich-14.2.0.tar.gz", hash = "sha256:73ff50c7c0c1c77c8243079283f4edb376f0f6442433aecb8ce7e6d0b92d1fe4"}, -] - -[package.dependencies] -markdown-it-py = ">=2.2.0" -pygments = ">=2.13.0,<3.0.0" - -[package.extras] -jupyter = ["ipywidgets (>=7.5.1,<9)"] - -[[package]] -name = "rich-rst" -version = "1.3.2" -description = "A beautiful reStructuredText renderer for rich" -optional = false -python-versions = "*" -groups = ["dev"] -files = [ - {file = "rich_rst-1.3.2-py3-none-any.whl", hash = "sha256:a99b4907cbe118cf9d18b0b44de272efa61f15117c61e39ebdc431baf5df722a"}, - {file = "rich_rst-1.3.2.tar.gz", hash = "sha256:a1196fdddf1e364b02ec68a05e8ff8f6914fee10fbca2e6b6735f166bb0da8d4"}, -] - -[package.dependencies] -docutils = "*" -rich = ">=12.0.0" - -[package.extras] -docs = ["sphinx"] - -[[package]] -name = "ruff" -version = "0.14.3" -description = "An extremely fast Python linter and code formatter, written in Rust." -optional = false -python-versions = ">=3.7" -groups = ["dev"] -files = [ - {file = "ruff-0.14.3-py3-none-linux_armv6l.whl", hash = "sha256:876b21e6c824f519446715c1342b8e60f97f93264012de9d8d10314f8a79c371"}, - {file = "ruff-0.14.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b6fd8c79b457bedd2abf2702b9b472147cd860ed7855c73a5247fa55c9117654"}, - {file = "ruff-0.14.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:71ff6edca490c308f083156938c0c1a66907151263c4abdcb588602c6e696a14"}, - {file = "ruff-0.14.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:786ee3ce6139772ff9272aaf43296d975c0217ee1b97538a98171bf0d21f87ed"}, - {file = "ruff-0.14.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cd6291d0061811c52b8e392f946889916757610d45d004e41140d81fb6cd5ddc"}, - {file = "ruff-0.14.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a497ec0c3d2c88561b6d90f9c29f5ae68221ac00d471f306fa21fa4264ce5fcd"}, - {file = "ruff-0.14.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:e231e1be58fc568950a04fbe6887c8e4b85310e7889727e2b81db205c45059eb"}, - {file = "ruff-0.14.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:469e35872a09c0e45fecf48dd960bfbce056b5db2d5e6b50eca329b4f853ae20"}, - {file = "ruff-0.14.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d6bc90307c469cb9d28b7cfad90aaa600b10d67c6e22026869f585e1e8a2db0"}, - {file = "ruff-0.14.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2f8a0bbcffcfd895df39c9a4ecd59bb80dca03dc43f7fb63e647ed176b741e"}, - {file = "ruff-0.14.3-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:678fdd7c7d2d94851597c23ee6336d25f9930b460b55f8598e011b57c74fd8c5"}, - {file = "ruff-0.14.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:1ec1ac071e7e37e0221d2f2dbaf90897a988c531a8592a6a5959f0603a1ecf5e"}, - {file = "ruff-0.14.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:afcdc4b5335ef440d19e7df9e8ae2ad9f749352190e96d481dc501b753f0733e"}, - {file = "ruff-0.14.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:7bfc42f81862749a7136267a343990f865e71fe2f99cf8d2958f684d23ce3dfa"}, - {file = "ruff-0.14.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:a65e448cfd7e9c59fae8cf37f9221585d3354febaad9a07f29158af1528e165f"}, - {file = "ruff-0.14.3-py3-none-win32.whl", hash = "sha256:f3d91857d023ba93e14ed2d462ab62c3428f9bbf2b4fbac50a03ca66d31991f7"}, - {file = "ruff-0.14.3-py3-none-win_amd64.whl", hash = "sha256:d7b7006ac0756306db212fd37116cce2bd307e1e109375e1c6c106002df0ae5f"}, - {file = "ruff-0.14.3-py3-none-win_arm64.whl", hash = "sha256:26eb477ede6d399d898791d01961e16b86f02bc2486d0d1a7a9bb2379d055dc1"}, - {file = "ruff-0.14.3.tar.gz", hash = "sha256:4ff876d2ab2b161b6de0aa1f5bd714e8e9b4033dc122ee006925fbacc4f62153"}, -] - -[[package]] -name = "sniffio" -version = "1.3.1" -description = "Sniff out which async library your code is running under" -optional = false -python-versions = ">=3.7" -groups = ["main", "dev"] -files = [ - {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, - {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, -] - -[[package]] -name = "sortedcontainers" -version = "2.4.0" -description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" -optional = false -python-versions = "*" -groups = ["dev"] -files = [ - {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, - {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, -] - -[[package]] -name = "structlog" -version = "25.5.0" -description = "Structured Logging for Python" -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "structlog-25.5.0-py3-none-any.whl", hash = "sha256:a8453e9b9e636ec59bd9e79bbd4a72f025981b3ba0f5837aebf48f02f37a7f9f"}, - {file = "structlog-25.5.0.tar.gz", hash = "sha256:098522a3bebed9153d4570c6d0288abf80a031dfdb2048d59a49e9dc2190fc98"}, -] - -[[package]] -name = "termcolor" -version = "3.2.0" -description = "ANSI color formatting for output in terminal" -optional = false -python-versions = ">=3.10" -groups = ["dev"] -files = [ - {file = "termcolor-3.2.0-py3-none-any.whl", hash = "sha256:a10343879eba4da819353c55cb8049b0933890c2ebf9ad5d3ecd2bb32ea96ea6"}, - {file = "termcolor-3.2.0.tar.gz", hash = "sha256:610e6456feec42c4bcd28934a8c87a06c3fa28b01561d46aa09a9881b8622c58"}, -] - -[package.extras] -tests = ["pytest", "pytest-cov"] - -[[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -groups = ["dev"] -files = [ - {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, - {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, -] - -[[package]] -name = "typing-extensions" -version = "4.15.0" -description = "Backported and Experimental Type Hints for Python 3.9+" -optional = false -python-versions = ">=3.9" -groups = ["main", "dev"] -files = [ - {file = "typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"}, - {file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"}, -] - -[[package]] -name = "urllib3" -version = "2.5.0" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc"}, - {file = "urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760"}, -] - -[package.extras] -brotli = ["brotli (>=1.0.9) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\""] -h2 = ["h2 (>=4,<5)"] -socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] -zstd = ["zstandard (>=0.18.0)"] - -[[package]] -name = "virtualenv" -version = "20.35.4" -description = "Virtual Python Environment builder" -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "virtualenv-20.35.4-py3-none-any.whl", hash = "sha256:c21c9cede36c9753eeade68ba7d523529f228a403463376cf821eaae2b650f1b"}, - {file = "virtualenv-20.35.4.tar.gz", hash = "sha256:643d3914d73d3eeb0c552cbb12d7e82adf0e504dbf86a3182f8771a153a1971c"}, -] - -[package.dependencies] -distlib = ">=0.3.7,<1" -filelock = ">=3.12.2,<4" -platformdirs = ">=3.9.1,<5" - -[package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] -test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8) ; platform_python_implementation == \"PyPy\" or platform_python_implementation == \"GraalVM\" or platform_python_implementation == \"CPython\" and sys_platform == \"win32\" and python_version >= \"3.13\"", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10) ; platform_python_implementation == \"CPython\""] - -[[package]] -name = "yarl" -version = "1.22.0" -description = "Yet another URL library" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "yarl-1.22.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c7bd6683587567e5a49ee6e336e0612bec8329be1b7d4c8af5687dcdeb67ee1e"}, - {file = "yarl-1.22.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5cdac20da754f3a723cceea5b3448e1a2074866406adeb4ef35b469d089adb8f"}, - {file = "yarl-1.22.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07a524d84df0c10f41e3ee918846e1974aba4ec017f990dc735aad487a0bdfdf"}, - {file = "yarl-1.22.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e1b329cb8146d7b736677a2440e422eadd775d1806a81db2d4cded80a48efc1a"}, - {file = "yarl-1.22.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:75976c6945d85dbb9ee6308cd7ff7b1fb9409380c82d6119bd778d8fcfe2931c"}, - {file = "yarl-1.22.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:80ddf7a5f8c86cb3eb4bc9028b07bbbf1f08a96c5c0bc1244be5e8fefcb94147"}, - {file = "yarl-1.22.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d332fc2e3c94dad927f2112395772a4e4fedbcf8f80efc21ed7cdfae4d574fdb"}, - {file = "yarl-1.22.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0cf71bf877efeac18b38d3930594c0948c82b64547c1cf420ba48722fe5509f6"}, - {file = "yarl-1.22.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:663e1cadaddae26be034a6ab6072449a8426ddb03d500f43daf952b74553bba0"}, - {file = "yarl-1.22.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:6dcbb0829c671f305be48a7227918cfcd11276c2d637a8033a99a02b67bf9eda"}, - {file = "yarl-1.22.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f0d97c18dfd9a9af4490631905a3f131a8e4c9e80a39353919e2cfed8f00aedc"}, - {file = "yarl-1.22.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:437840083abe022c978470b942ff832c3940b2ad3734d424b7eaffcd07f76737"}, - {file = "yarl-1.22.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a899cbd98dce6f5d8de1aad31cb712ec0a530abc0a86bd6edaa47c1090138467"}, - {file = "yarl-1.22.0-cp310-cp310-win32.whl", hash = "sha256:595697f68bd1f0c1c159fcb97b661fc9c3f5db46498043555d04805430e79bea"}, - {file = "yarl-1.22.0-cp310-cp310-win_amd64.whl", hash = "sha256:cb95a9b1adaa48e41815a55ae740cfda005758104049a640a398120bf02515ca"}, - {file = "yarl-1.22.0-cp310-cp310-win_arm64.whl", hash = "sha256:b85b982afde6df99ecc996990d4ad7ccbdbb70e2a4ba4de0aecde5922ba98a0b"}, - {file = "yarl-1.22.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1ab72135b1f2db3fed3997d7e7dc1b80573c67138023852b6efb336a5eae6511"}, - {file = "yarl-1.22.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:669930400e375570189492dc8d8341301578e8493aec04aebc20d4717f899dd6"}, - {file = "yarl-1.22.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:792a2af6d58177ef7c19cbf0097aba92ca1b9cb3ffdd9c7470e156c8f9b5e028"}, - {file = "yarl-1.22.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ea66b1c11c9150f1372f69afb6b8116f2dd7286f38e14ea71a44eee9ec51b9d"}, - {file = "yarl-1.22.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3e2daa88dc91870215961e96a039ec73e4937da13cf77ce17f9cad0c18df3503"}, - {file = "yarl-1.22.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ba440ae430c00eee41509353628600212112cd5018d5def7e9b05ea7ac34eb65"}, - {file = "yarl-1.22.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e6438cc8f23a9c1478633d216b16104a586b9761db62bfacb6425bac0a36679e"}, - {file = "yarl-1.22.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c52a6e78aef5cf47a98ef8e934755abf53953379b7d53e68b15ff4420e6683d"}, - {file = "yarl-1.22.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3b06bcadaac49c70f4c88af4ffcfbe3dc155aab3163e75777818092478bcbbe7"}, - {file = "yarl-1.22.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:6944b2dc72c4d7f7052683487e3677456050ff77fcf5e6204e98caf785ad1967"}, - {file = "yarl-1.22.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:d5372ca1df0f91a86b047d1277c2aaf1edb32d78bbcefffc81b40ffd18f027ed"}, - {file = "yarl-1.22.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:51af598701f5299012b8416486b40fceef8c26fc87dc6d7d1f6fc30609ea0aa6"}, - {file = "yarl-1.22.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b266bd01fedeffeeac01a79ae181719ff848a5a13ce10075adbefc8f1daee70e"}, - {file = "yarl-1.22.0-cp311-cp311-win32.whl", hash = "sha256:a9b1ba5610a4e20f655258d5a1fdc7ebe3d837bb0e45b581398b99eb98b1f5ca"}, - {file = "yarl-1.22.0-cp311-cp311-win_amd64.whl", hash = "sha256:078278b9b0b11568937d9509b589ee83ef98ed6d561dfe2020e24a9fd08eaa2b"}, - {file = "yarl-1.22.0-cp311-cp311-win_arm64.whl", hash = "sha256:b6a6f620cfe13ccec221fa312139135166e47ae169f8253f72a0abc0dae94376"}, - {file = "yarl-1.22.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e340382d1afa5d32b892b3ff062436d592ec3d692aeea3bef3a5cfe11bbf8c6f"}, - {file = "yarl-1.22.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f1e09112a2c31ffe8d80be1b0988fa6a18c5d5cad92a9ffbb1c04c91bfe52ad2"}, - {file = "yarl-1.22.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:939fe60db294c786f6b7c2d2e121576628468f65453d86b0fe36cb52f987bd74"}, - {file = "yarl-1.22.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e1651bf8e0398574646744c1885a41198eba53dc8a9312b954073f845c90a8df"}, - {file = "yarl-1.22.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b8a0588521a26bf92a57a1705b77b8b59044cdceccac7151bd8d229e66b8dedb"}, - {file = "yarl-1.22.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:42188e6a615c1a75bcaa6e150c3fe8f3e8680471a6b10150c5f7e83f47cc34d2"}, - {file = "yarl-1.22.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f6d2cb59377d99718913ad9a151030d6f83ef420a2b8f521d94609ecc106ee82"}, - {file = "yarl-1.22.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50678a3b71c751d58d7908edc96d332af328839eea883bb554a43f539101277a"}, - {file = "yarl-1.22.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1e8fbaa7cec507aa24ea27a01456e8dd4b6fab829059b69844bd348f2d467124"}, - {file = "yarl-1.22.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:433885ab5431bc3d3d4f2f9bd15bfa1614c522b0f1405d62c4f926ccd69d04fa"}, - {file = "yarl-1.22.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:b790b39c7e9a4192dc2e201a282109ed2985a1ddbd5ac08dc56d0e121400a8f7"}, - {file = "yarl-1.22.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:31f0b53913220599446872d757257be5898019c85e7971599065bc55065dc99d"}, - {file = "yarl-1.22.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a49370e8f711daec68d09b821a34e1167792ee2d24d405cbc2387be4f158b520"}, - {file = "yarl-1.22.0-cp312-cp312-win32.whl", hash = "sha256:70dfd4f241c04bd9239d53b17f11e6ab672b9f1420364af63e8531198e3f5fe8"}, - {file = "yarl-1.22.0-cp312-cp312-win_amd64.whl", hash = "sha256:8884d8b332a5e9b88e23f60bb166890009429391864c685e17bd73a9eda9105c"}, - {file = "yarl-1.22.0-cp312-cp312-win_arm64.whl", hash = "sha256:ea70f61a47f3cc93bdf8b2f368ed359ef02a01ca6393916bc8ff877427181e74"}, - {file = "yarl-1.22.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8dee9c25c74997f6a750cd317b8ca63545169c098faee42c84aa5e506c819b53"}, - {file = "yarl-1.22.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01e73b85a5434f89fc4fe27dcda2aff08ddf35e4d47bbbea3bdcd25321af538a"}, - {file = "yarl-1.22.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:22965c2af250d20c873cdbee8ff958fb809940aeb2e74ba5f20aaf6b7ac8c70c"}, - {file = "yarl-1.22.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4f15793aa49793ec8d1c708ab7f9eded1aa72edc5174cae703651555ed1b601"}, - {file = "yarl-1.22.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5542339dcf2747135c5c85f68680353d5cb9ffd741c0f2e8d832d054d41f35a"}, - {file = "yarl-1.22.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5c401e05ad47a75869c3ab3e35137f8468b846770587e70d71e11de797d113df"}, - {file = "yarl-1.22.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:243dda95d901c733f5b59214d28b0120893d91777cb8aa043e6ef059d3cddfe2"}, - {file = "yarl-1.22.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bec03d0d388060058f5d291a813f21c011041938a441c593374da6077fe21b1b"}, - {file = "yarl-1.22.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b0748275abb8c1e1e09301ee3cf90c8a99678a4e92e4373705f2a2570d581273"}, - {file = "yarl-1.22.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:47fdb18187e2a4e18fda2c25c05d8251a9e4a521edaed757fef033e7d8498d9a"}, - {file = "yarl-1.22.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c7044802eec4524fde550afc28edda0dd5784c4c45f0be151a2d3ba017daca7d"}, - {file = "yarl-1.22.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:139718f35149ff544caba20fce6e8a2f71f1e39b92c700d8438a0b1d2a631a02"}, - {file = "yarl-1.22.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e1b51bebd221006d3d2f95fbe124b22b247136647ae5dcc8c7acafba66e5ee67"}, - {file = "yarl-1.22.0-cp313-cp313-win32.whl", hash = "sha256:d3e32536234a95f513bd374e93d717cf6b2231a791758de6c509e3653f234c95"}, - {file = "yarl-1.22.0-cp313-cp313-win_amd64.whl", hash = "sha256:47743b82b76d89a1d20b83e60d5c20314cbd5ba2befc9cda8f28300c4a08ed4d"}, - {file = "yarl-1.22.0-cp313-cp313-win_arm64.whl", hash = "sha256:5d0fcda9608875f7d052eff120c7a5da474a6796fe4d83e152e0e4d42f6d1a9b"}, - {file = "yarl-1.22.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:719ae08b6972befcba4310e49edb1161a88cdd331e3a694b84466bd938a6ab10"}, - {file = "yarl-1.22.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:47d8a5c446df1c4db9d21b49619ffdba90e77c89ec6e283f453856c74b50b9e3"}, - {file = "yarl-1.22.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cfebc0ac8333520d2d0423cbbe43ae43c8838862ddb898f5ca68565e395516e9"}, - {file = "yarl-1.22.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4398557cbf484207df000309235979c79c4356518fd5c99158c7d38203c4da4f"}, - {file = "yarl-1.22.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2ca6fd72a8cd803be290d42f2dec5cdcd5299eeb93c2d929bf060ad9efaf5de0"}, - {file = "yarl-1.22.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ca1f59c4e1ab6e72f0a23c13fca5430f889634166be85dbf1013683e49e3278e"}, - {file = "yarl-1.22.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6c5010a52015e7c70f86eb967db0f37f3c8bd503a695a49f8d45700144667708"}, - {file = "yarl-1.22.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d7672ecf7557476642c88497c2f8d8542f8e36596e928e9bcba0e42e1e7d71f"}, - {file = "yarl-1.22.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:3b7c88eeef021579d600e50363e0b6ee4f7f6f728cd3486b9d0f3ee7b946398d"}, - {file = "yarl-1.22.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f4afb5c34f2c6fecdcc182dfcfc6af6cccf1aa923eed4d6a12e9d96904e1a0d8"}, - {file = "yarl-1.22.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:59c189e3e99a59cf8d83cbb31d4db02d66cda5a1a4374e8a012b51255341abf5"}, - {file = "yarl-1.22.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:5a3bf7f62a289fa90f1990422dc8dff5a458469ea71d1624585ec3a4c8d6960f"}, - {file = "yarl-1.22.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:de6b9a04c606978fdfe72666fa216ffcf2d1a9f6a381058d4378f8d7b1e5de62"}, - {file = "yarl-1.22.0-cp313-cp313t-win32.whl", hash = "sha256:1834bb90991cc2999f10f97f5f01317f99b143284766d197e43cd5b45eb18d03"}, - {file = "yarl-1.22.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ff86011bd159a9d2dfc89c34cfd8aff12875980e3bd6a39ff097887520e60249"}, - {file = "yarl-1.22.0-cp313-cp313t-win_arm64.whl", hash = "sha256:7861058d0582b847bc4e3a4a4c46828a410bca738673f35a29ba3ca5db0b473b"}, - {file = "yarl-1.22.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:34b36c2c57124530884d89d50ed2c1478697ad7473efd59cfd479945c95650e4"}, - {file = "yarl-1.22.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:0dd9a702591ca2e543631c2a017e4a547e38a5c0f29eece37d9097e04a7ac683"}, - {file = "yarl-1.22.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:594fcab1032e2d2cc3321bb2e51271e7cd2b516c7d9aee780ece81b07ff8244b"}, - {file = "yarl-1.22.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f3d7a87a78d46a2e3d5b72587ac14b4c16952dd0887dbb051451eceac774411e"}, - {file = "yarl-1.22.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:852863707010316c973162e703bddabec35e8757e67fcb8ad58829de1ebc8590"}, - {file = "yarl-1.22.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:131a085a53bfe839a477c0845acf21efc77457ba2bcf5899618136d64f3303a2"}, - {file = "yarl-1.22.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:078a8aefd263f4d4f923a9677b942b445a2be970ca24548a8102689a3a8ab8da"}, - {file = "yarl-1.22.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bca03b91c323036913993ff5c738d0842fc9c60c4648e5c8d98331526df89784"}, - {file = "yarl-1.22.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:68986a61557d37bb90d3051a45b91fa3d5c516d177dfc6dd6f2f436a07ff2b6b"}, - {file = "yarl-1.22.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:4792b262d585ff0dff6bcb787f8492e40698443ec982a3568c2096433660c694"}, - {file = "yarl-1.22.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:ebd4549b108d732dba1d4ace67614b9545b21ece30937a63a65dd34efa19732d"}, - {file = "yarl-1.22.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:f87ac53513d22240c7d59203f25cc3beac1e574c6cd681bbfd321987b69f95fd"}, - {file = "yarl-1.22.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:22b029f2881599e2f1b06f8f1db2ee63bd309e2293ba2d566e008ba12778b8da"}, - {file = "yarl-1.22.0-cp314-cp314-win32.whl", hash = "sha256:6a635ea45ba4ea8238463b4f7d0e721bad669f80878b7bfd1f89266e2ae63da2"}, - {file = "yarl-1.22.0-cp314-cp314-win_amd64.whl", hash = "sha256:0d6e6885777af0f110b0e5d7e5dda8b704efed3894da26220b7f3d887b839a79"}, - {file = "yarl-1.22.0-cp314-cp314-win_arm64.whl", hash = "sha256:8218f4e98d3c10d683584cb40f0424f4b9fd6e95610232dd75e13743b070ee33"}, - {file = "yarl-1.22.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:45c2842ff0e0d1b35a6bf1cd6c690939dacb617a70827f715232b2e0494d55d1"}, - {file = "yarl-1.22.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:d947071e6ebcf2e2bee8fce76e10faca8f7a14808ca36a910263acaacef08eca"}, - {file = "yarl-1.22.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:334b8721303e61b00019474cc103bdac3d7b1f65e91f0bfedeec2d56dfe74b53"}, - {file = "yarl-1.22.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1e7ce67c34138a058fd092f67d07a72b8e31ff0c9236e751957465a24b28910c"}, - {file = "yarl-1.22.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d77e1b2c6d04711478cb1c4ab90db07f1609ccf06a287d5607fcd90dc9863acf"}, - {file = "yarl-1.22.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c4647674b6150d2cae088fc07de2738a84b8bcedebef29802cf0b0a82ab6face"}, - {file = "yarl-1.22.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:efb07073be061c8f79d03d04139a80ba33cbd390ca8f0297aae9cce6411e4c6b"}, - {file = "yarl-1.22.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e51ac5435758ba97ad69617e13233da53908beccc6cfcd6c34bbed8dcbede486"}, - {file = "yarl-1.22.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:33e32a0dd0c8205efa8e83d04fc9f19313772b78522d1bdc7d9aed706bfd6138"}, - {file = "yarl-1.22.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:bf4a21e58b9cde0e401e683ebd00f6ed30a06d14e93f7c8fd059f8b6e8f87b6a"}, - {file = "yarl-1.22.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:e4b582bab49ac33c8deb97e058cd67c2c50dac0dd134874106d9c774fd272529"}, - {file = "yarl-1.22.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:0b5bcc1a9c4839e7e30b7b30dd47fe5e7e44fb7054ec29b5bb8d526aa1041093"}, - {file = "yarl-1.22.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c0232bce2170103ec23c454e54a57008a9a72b5d1c3105dc2496750da8cfa47c"}, - {file = "yarl-1.22.0-cp314-cp314t-win32.whl", hash = "sha256:8009b3173bcd637be650922ac455946197d858b3630b6d8787aa9e5c4564533e"}, - {file = "yarl-1.22.0-cp314-cp314t-win_amd64.whl", hash = "sha256:9fb17ea16e972c63d25d4a97f016d235c78dd2344820eb35bc034bc32012ee27"}, - {file = "yarl-1.22.0-cp314-cp314t-win_arm64.whl", hash = "sha256:9f6d73c1436b934e3f01df1e1b21ff765cd1d28c77dfb9ace207f746d4610ee1"}, - {file = "yarl-1.22.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3aa27acb6de7a23785d81557577491f6c38a5209a254d1191519d07d8fe51748"}, - {file = "yarl-1.22.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:af74f05666a5e531289cb1cc9c883d1de2088b8e5b4de48004e5ca8a830ac859"}, - {file = "yarl-1.22.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:62441e55958977b8167b2709c164c91a6363e25da322d87ae6dd9c6019ceecf9"}, - {file = "yarl-1.22.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b580e71cac3f8113d3135888770903eaf2f507e9421e5697d6ee6d8cd1c7f054"}, - {file = "yarl-1.22.0-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e81fda2fb4a07eda1a2252b216aa0df23ebcd4d584894e9612e80999a78fd95b"}, - {file = "yarl-1.22.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:99b6fc1d55782461b78221e95fc357b47ad98b041e8e20f47c1411d0aacddc60"}, - {file = "yarl-1.22.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:088e4e08f033db4be2ccd1f34cf29fe994772fb54cfe004bbf54db320af56890"}, - {file = "yarl-1.22.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e4e1f6f0b4da23e61188676e3ed027ef0baa833a2e633c29ff8530800edccba"}, - {file = "yarl-1.22.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:84fc3ec96fce86ce5aa305eb4aa9358279d1aa644b71fab7b8ed33fe3ba1a7ca"}, - {file = "yarl-1.22.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:5dbeefd6ca588b33576a01b0ad58aa934bc1b41ef89dee505bf2932b22ddffba"}, - {file = "yarl-1.22.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:14291620375b1060613f4aab9ebf21850058b6b1b438f386cc814813d901c60b"}, - {file = "yarl-1.22.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:a4fcfc8eb2c34148c118dfa02e6427ca278bfd0f3df7c5f99e33d2c0e81eae3e"}, - {file = "yarl-1.22.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:029866bde8d7b0878b9c160e72305bbf0a7342bcd20b9999381704ae03308dc8"}, - {file = "yarl-1.22.0-cp39-cp39-win32.whl", hash = "sha256:4dcc74149ccc8bba31ce1944acee24813e93cfdee2acda3c172df844948ddf7b"}, - {file = "yarl-1.22.0-cp39-cp39-win_amd64.whl", hash = "sha256:10619d9fdee46d20edc49d3479e2f8269d0779f1b031e6f7c2aa1c76be04b7ed"}, - {file = "yarl-1.22.0-cp39-cp39-win_arm64.whl", hash = "sha256:dd7afd3f8b0bfb4e0d9fc3c31bfe8a4ec7debe124cfd90619305def3c8ca8cd2"}, - {file = "yarl-1.22.0-py3-none-any.whl", hash = "sha256:1380560bdba02b6b6c90de54133c81c9f2a453dee9912fe58c1dcced1edb7cff"}, - {file = "yarl-1.22.0.tar.gz", hash = "sha256:bebf8557577d4401ba8bd9ff33906f1376c877aa78d1fe216ad01b4d6745af71"}, -] - -[package.dependencies] -idna = ">=2.0" -multidict = ">=4.0" -propcache = ">=0.2.1" - -[metadata] -lock-version = "2.1" -python-versions = "^3.12" -content-hash = "b0fd66db77d6c2c93aaece79873ed3e344b91555a4015db86a8d3f8beee664a9" diff --git a/assets/arc-0020/poetry.toml b/assets/arc-0020/poetry.toml deleted file mode 100644 index 5fcef8cd4..000000000 --- a/assets/arc-0020/poetry.toml +++ /dev/null @@ -1,3 +0,0 @@ -[virtualenvs] -in-project = true -prefer-active-python = true diff --git a/assets/arc-0020/pyproject.toml b/assets/arc-0020/pyproject.toml deleted file mode 100644 index 033d8d04e..000000000 --- a/assets/arc-0020/pyproject.toml +++ /dev/null @@ -1,76 +0,0 @@ -[tool.poetry] -package-mode = false -name = "arc-20" -version = "0.1.0" -description = "Smart ASA reference implementation" -license = "MIT" -authors = ["cusma "] -maintainers = ["cusma "] -readme = ["README.md"] -documentation = "https://arc.algorand.foundation/ARCs/arc-0020" -# repository = ... -keywords = ["algorand", "blockchain", "tokenization"] - -[tool.poetry.dependencies] -python = "^3.12" -algokit-utils = "^4.2.2" -python-dotenv = "^1.2.1" -algorand-python = "^3.1.1" - -[tool.poetry.group.dev.dependencies] -algokit-client-generator = "^2.2.0" -black = {extras = ["d"], version = "25.1.0"} -ruff = "^0.14.3" -mypy = "^1.18.2" -pytest = "^8.4.2" -pytest-cov = "^7.0.0" -pytest-sugar = "^1.1.1" -pip-audit = "^2.9.0" -pre-commit = "^4.3.0" -puyapy = "^5.4.0" - -[build-system] -requires = ["poetry-core"] -build-backend = "poetry.core.masonry.api" - -[tool.ruff] -line-length = 120 -select = ["E", "F", "ANN", "UP", "N", "C4", "B", "A", "YTT", "W", "FBT", "Q", "RUF", "I"] -ignore = [ - "ANN101", # no type for self - "ANN102", # no type for cls -] -unfixable = ["B", "RUF"] - -[tool.ruff.flake8-annotations] -allow-star-arg-any = true -suppress-none-returning = true - -[tool.pytest.ini_options] -pythonpath = ["smart_contracts", "tests"] - -[tool.mypy] -files = "smart_contracts/" -python_version = "3.12" -disallow_any_generics = true -disallow_subclassing_any = true -disallow_untyped_calls = true -disallow_untyped_defs = true -disallow_incomplete_defs = true -check_untyped_defs = true -disallow_untyped_decorators = true -warn_redundant_casts = true -warn_unused_ignores = true -warn_return_any = true -strict_equality = true -extra_checks = true -disallow_any_unimported = true -disallow_any_expr = true -disallow_any_decorated = true -disallow_any_explicit = true -untyped_calls_exclude = ["algosdk"] -# Remove if you prefer to use mypy's default behavior against -# untyped algosdk types -[[tool.mypy.overrides]] -module = "tests.*" -disallow_any_expr = false diff --git a/assets/arc-0020/smart_contracts/__init__.py b/assets/arc-0020/smart_contracts/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/assets/arc-0020/smart_contracts/__main__.py b/assets/arc-0020/smart_contracts/__main__.py deleted file mode 100644 index e3a6a2ecc..000000000 --- a/assets/arc-0020/smart_contracts/__main__.py +++ /dev/null @@ -1,211 +0,0 @@ -import dataclasses -import importlib -import logging -import subprocess -import sys -from collections.abc import Callable -from pathlib import Path -from shutil import rmtree - -from algokit_utils.config import config -from dotenv import load_dotenv - -# Set up logging and load environment variables. -logging.basicConfig( - level=logging.DEBUG, format="%(asctime)s %(levelname)-10s: %(message)s" -) -logger = logging.getLogger(__name__) -logger.info("Loading .env") -load_dotenv() - -# Set trace_all to True to capture all transactions, defaults to capturing traces only on failure -# Learn more about using AlgoKit AVM Debugger to debug your TEAL source codes and inspect various kinds of -# Algorand transactions in atomic groups -> https://github.com/algorandfoundation/algokit-avm-vscode-debugger -config.configure(debug=True, trace_all=False, logger=logger) - -# Determine the root path based on this file's location. -root_path = Path(__file__).parent - -# ----------------------- Contract Configuration ----------------------- # - - -@dataclasses.dataclass -class SmartContract: - path: Path - name: str - deploy: Callable[[], None] | None = None - - -def import_contract(folder: Path) -> Path: - """Imports the contract from a folder if it exists.""" - contract_path = folder / "contract.py" - if contract_path.exists(): - return contract_path - else: - raise Exception(f"Contract not found in {folder}") - - -def import_deploy_if_exists(folder: Path) -> Callable[[], None] | None: - """Imports the deploy function from a folder if it exists.""" - try: - module_name = f"{folder.parent.name}.{folder.name}.deploy_config" - deploy_module = importlib.import_module(module_name) - return deploy_module.deploy # type: ignore[no-any-return, misc] - except ImportError: - return None - - -def has_contract_file(directory: Path) -> bool: - """Checks whether the directory contains a contract.py file.""" - return (directory / "contract.py").exists() - - -# Use the current directory (root_path) as the base for contract folders and exclude -# folders that start with '_' (internal helpers). -contracts: list[SmartContract] = [ - SmartContract( - path=import_contract(folder), - name=folder.name, - deploy=import_deploy_if_exists(folder), - ) - for folder in root_path.iterdir() - if folder.is_dir() and has_contract_file(folder) and not folder.name.startswith("_") -] - -# -------------------------- Build Logic -------------------------- # - -deployment_extension = "py" - - -def _get_output_path(output_dir: Path, deployment_extension: str) -> Path: - """Constructs the output path for the generated client file.""" - return output_dir / Path( - "{contract_name}" - + ("_client" if deployment_extension == "py" else "Client") - + f".{deployment_extension}" - ) - - -def build(output_dir: Path, contract_path: Path) -> Path: - """ - Builds the contract by exporting (compiling) its source and generating a client. - If the output directory already exists, it is cleared. - """ - output_dir = output_dir.resolve() - if output_dir.exists(): - rmtree(output_dir) - output_dir.mkdir(exist_ok=True, parents=True) - logger.info(f"Exporting {contract_path} to {output_dir}") - - build_result = subprocess.run( - [ - "algokit", - "--no-color", - "compile", - "python", - str(contract_path.resolve()), - f"--out-dir={output_dir}", - "--no-output-arc32", - "--output-arc56", - "--output-source-map", - ], - stdout=subprocess.PIPE, - stderr=subprocess.STDOUT, - text=True, - ) - if build_result.returncode: - raise Exception(f"Could not build contract:\n{build_result.stdout}") - - # Look for arc56.json files and generate the client based on them. - app_spec_file_names: list[str] = [ - file.name for file in output_dir.glob("*.arc56.json") - ] - - client_file: str | None = None - if not app_spec_file_names: - logger.warning( - "No '*.arc56.json' file found (likely a logic signature being compiled). Skipping client generation." - ) - else: - for file_name in app_spec_file_names: - client_file = file_name - print(file_name) - generate_result = subprocess.run( - [ - "algokit", - "generate", - "client", - str(output_dir), - "--output", - str(_get_output_path(output_dir, deployment_extension)), - ], - stdout=subprocess.PIPE, - stderr=subprocess.STDOUT, - text=True, - ) - if generate_result.returncode: - if "No such command" in generate_result.stdout: - raise Exception( - "Could not generate typed client, requires AlgoKit 2.0.0 or later. Please update AlgoKit" - ) - else: - raise Exception( - f"Could not generate typed client:\n{generate_result.stdout}" - ) - if client_file: - return output_dir / client_file - return output_dir - - -# --------------------------- Main Logic --------------------------- # - - -def main(action: str, contract_name: str | None = None) -> None: - """Main entry point to build and/or deploy smart contracts.""" - artifact_path = root_path / "artifacts" - # Filter contracts based on an optional specific contract name. - filtered_contracts = [ - contract - for contract in contracts - if contract_name is None or contract.name == contract_name - ] - - match action: - case "build": - for contract in filtered_contracts: - logger.info(f"Building app at {contract.path}") - build(artifact_path / contract.name, contract.path) - case "deploy": - for contract in filtered_contracts: - output_dir = artifact_path / contract.name - app_spec_file_name = next( - ( - file.name - for file in output_dir.iterdir() - if file.is_file() and file.suffixes == [".arc56", ".json"] - ), - None, - ) - if app_spec_file_name is None: - raise Exception("Could not deploy app, .arc56.json file not found") - if contract.deploy: - logger.info(f"Deploying app {contract.name}") - contract.deploy() - case "all": - for contract in filtered_contracts: - logger.info(f"Building app at {contract.path}") - build(artifact_path / contract.name, contract.path) - if contract.deploy: - logger.info(f"Deploying {contract.name}") - contract.deploy() - case _: - logger.error(f"Unknown action: {action}") - - -if __name__ == "__main__": - if len(sys.argv) > 2: - main(sys.argv[1], sys.argv[2]) - elif len(sys.argv) > 1: - main(sys.argv[1]) - else: - main("all") diff --git a/assets/arc-0020/smart_contracts/artifacts/smart_asa/SmartAsa.approval.puya.map b/assets/arc-0020/smart_contracts/artifacts/smart_asa/SmartAsa.approval.puya.map deleted file mode 100644 index bd4e3512f..000000000 --- a/assets/arc-0020/smart_contracts/artifacts/smart_asa/SmartAsa.approval.puya.map +++ /dev/null @@ -1,19982 +0,0 @@ -{ - "version": 3, - "sources": [ - "../../smart_asa/contract.py" - ], - "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCe;;AAA6B;AAA7B;AAAP;AACO;;AAAuB;;AAAvB;AAAP;AACO;;AAAA;AAAP;AACO;;AAAsB;;AAAtB;AAAP;AAIA;;AAAa;AAAb;AACA;;AAAgB;AAAhB;AACA;;AAAsB;AAAtB;AACA;;AAAiB;;AAAjB;AACA;;AAAY;;AAAZ;AACA;;AAAW;;AAAX;AACA;;AAAqB;;AAArB;AACA;;AAAoB;;AAApB;AACA;AAAoB;;AAApB;AACA;;AAAmB;;AAAnB;AACA;AAAqB;;AAArB;AAEA;AAAoB;AAApB;AACA;;AAAqB;AAArB;AAnCR;;AAAA;;;AAAA;;;;;;;;;;;;AAAA;;;AAAA;;;;;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;AAAA;AAsbK;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAjLA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;;;;;;;;;;;;AArDA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAmCU;;AAAc;;AAAd;AAAP;AACW;AAAA;AAAA;AAAA;AAAJ;AAAP;AA/EI;AAOoC;;AA/HlC;;AACd;;AAAA;;;AACyB;;AAAA;AAAI;;AAAJ;AAHR;;;;;;;;;;;;AAGC;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;;AAAN;AAAA;;;;;AACG;;AAAA;AAAO;;;AAAP;;AAAA;AA2HK;;;;;;;;;;;;;;;;;AAAA;AAAA;AACI;;AACA;;;;;;;;;;;;AAHG;;;;;;;;;;;;;;;;;;;;AADD;;;;;;;;;;AADK;;;AADN;;;AADH;;;;AAFV;;;;AACQ;;;AADR;AAkFJ;AAlFI;;AAkFJ;AACa;;AAAA;AAAb;;AAAA;AAAA;AACgB;;AAAA;AAAhB;;AAAA;AAAA;AACsB;;AAAA;AAAA;AAAtB;;AAAA;AAAA;AACiB;;AAAA;;;AAAjB;;AAAA;AAAA;AACY;;AAAA;;;AAAZ;;AAAA;AAAA;AACW;;AAAA;;;AAAX;;AAAA;AAAA;AACqB;;AAAA;;;AAArB;;AAAA;AAAA;AACA;;AAAA;;AAAA;AACA;AAAA;;AAAA;AACA;;AAAA;;AAAA;AACA;AAAA;;AAAA;AACmB;AAAA;AAAA;AAAA;AAAZ;AAnDV;;AAAA;AAAA;AAAA;AAAA;AAAA;AAqDA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAYG;;AAAA;;;AAIO;AAAA;;AAAiC;AAAA;AAAA;AAAA;AAAjC;AAAA;;AAAA;AAAP;AACO;;AAAA;;AAA0B;;AAA1B;AAAP;AACO;;AAAA;;AAAkC;;AAAlC;AAAP;AAEI;;AAAA;;AAAA;AADJ;AAII;AAAA;;AAAkC;;AAAlC;AADJ;AAGO;;AAAqB;AAArB;AAAP;AACO;;AAAA;;AAAA;;AAAA;;AAAP;AAK0B;;AAA1B;AAAA;;AAAA;AACoB;;AAApB;;AAAkC;AAAlC;AAII;AAAA;;AAAA;AAAA;AAAA;;;AAAqC;;AAAd;;AAAA;;AAAA;AAAvB;;;AAEoB;;AAApB;;AAAkC;AAAlC;AAtCP;AAAA;AAwCA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAkCG;AAAA;;;AACO;;AAAc;AAAA;;AAAA;AAAA;AAAd;AAAP;AACmB;AAAA;AAAA;AAAA;AAAhB;AAAX;;;AACmB;AAAA;AAAA;AAAA;AAAqB;;AAArB;AAAP;AACc;AAAA;;AAAA;AAAA;AAAf;;AAAA;AAAX;;;AACmB;AAAA;;AAAA;AAAA;AAAoB;;AAApB;AAAP;AACgB;AAAA;AAAA;AAAA;AAAjB;;AAAA;AAAX;;;AACmB;AAAA;AAAA;AAAA;AAAsB;;AAAtB;AAAP;AACY;;AAAA;;;AAAT;AAAA;;AAAA;AAAA;;AAAA;AAAP;AAGa;AAAb;;AAAA;AAAA;AACgB;;AAAA;AAAhB;;AAAA;AAAA;AACsB;;AAAA;AAAA;AAAtB;;AAAA;AAAA;AACiB;;AAAA;;;AAAjB;;AAAA;AAAA;AACY;;AAAA;;;AAAZ;;AAAA;AAAA;AACW;;AAAA;;;AAAX;;AAAA;AAAA;AACqB;;AAAA;;;AAArB;;AAAA;AAAA;AACA;;AAAA;;AAAA;AACA;AAAA;;AAAA;AACA;;AAAA;;AAAA;AACA;AAAA;;AAAA;AAvDH;AAAA;AAyDA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAkBG;AAAA;;;AACmB;;AAAhB;AAAX;;;AAE4D;;AAAA;AA1T7C;;AAAc;AAAA;AAAA;AAAA;AAAd;AAAP;AAEyB;;AAAlB;;AAAA;AAAA;;AAAA;AAAP;AAEiD;AAAA;AAAA;AAAA;AAA9B;;;AAAf;;AAAA;AACG;AAAA;;AAAA;AAAA;AADH;AADJ;AAMI;AAAA;AAAA;AAAA;AAA6C;AAAA;AAAA;AAAA;AAA7C;AADJ;AAGW;AAAA;;AAAA;AAAA;AAAJ;AAAP;AACG;AAAA;AAAA;AAAA;AAAqB;AAAA;AAAA;AAAA;AAArB;AAAX;;;AACuB;AAAA;AAAA;;AAAA;AAAA;AAAJ;AAAP;AA6Ta;;AAAA;AAFjB;;AAAA;AAAA;;AAAA;;AAAA;;;AAnCH;AAAA;AAuBQ;AAAkB;;AAAlB;AAAb;;;AA1Se;;AAAc;AAAA;AAAA;AAAA;AAAd;AAAA;;AAAA;AAAP;AAGI;;AAAA;AAAA;AAAA;AAAA;AAA2C;AAAA;AAAA;AAAA;AAA3C;AADJ;AAGW;AAAA;;AAAA;AAAA;AAAJ;AAAP;AACwB;AAAA;AAAA;AAAA;AAArB;AAAX;;;AACuB;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAJ;AAAP;AAEuB;AAAA;AAAA;AAAA;AAAhB;AAAP;;;;AAmSC;;AAAc;AAAA;AAAA;AAAA;AAAd;AAAb;;;AA3RY;;AAAA;AAAA;AAAA;AAAA;AAA2C;AAAA;AAAA;AAAA;AAA3C;AAAA;;AAAA;AADJ;AAII;;AAAA;AAAA;AAAA;AAAA;AAAA;AADJ;;;;AAQO;;AAAA;;AAAA;AAAA;;AAAA;AAAP;AAGI;AAAA;AAAA;AAAA;AAAA;AAA2C;AAAA;AAAA;AAAA;AAA3C;AAAA;;AAAA;AADJ;AAII;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AADJ;AAGW;AAAA;;AAAA;AAAA;AAAJ;AAAP;AACW;AAAA;AAAA;;AAAA;AAAA;AAAJ;AAAP;AACW;AAAA;;AAAA;AAAA;AAAJ;AAAP;;;;AAwRH;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAUG;AAAA;;;AACO;;AAAc;AAAA;;AAAA;AAAA;AAAd;AAAP;AAGqB;AAAA;AAArB;;AAAA;AAAA;AAdH;AAAA;AAgBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAaG;;AAAA;;;AAEI;;AAAA;AAAA;AAAA;AAAA;AAA6C;AAAA;AAAA;AAAA;AAA7C;AADJ;AAGO;;AAAc;AAAA;;AAAA;AAAA;AAAd;AAAP;AAGsC;AAAA;AAAtC;;AAAA;AAAA;AApBH;AAAA;AAsBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AA1TgC;;AAAkB;AAAlB;AACT;AAAA;;AAAA;;AAAA;AAAA;AACb;;AAAqB;;AAArB;AAAP;AAE8B;;AAA1B;AAAA;AAAA;AAAA;AAAA;;AAAA;AADJ;AAII;;AAAA;;AAAA;AADJ;AAOI;AAAA;;AAAA;;AAAA;AADJ;AAGO;AAAA;;AAA4B;;AAA5B;AAAP;AACO;AAAA;;AAAA;AAAP;AAEI;;AAAoC;;AAApC;AADJ;AAoToB;;AAC5B;;;AA7SqC;;AAAkB;AAAlB;AACT;AAAA;;AAAA;;AAAA;AAAA;AAEhB;;AAAA;;AAAA;AAAA;;AAAA;AADJ;AAGyB;AAAA;AAAA;AAAA;AAAlB;;AAAA;AAAP;AA2SQ;;AAAA;AADhB;;;AAIoB;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAuC;AAAA;AAAA;AAAA;AAAvC;AADJ;AAzSG;AAAA;;AAAA;AAAA;AAAJ;AAAP;AAC+B;;AAApB;AAAA;;AAAA;AAAA;AAAJ;AAAP;AACW;AAAA;;AAAA;AAAA;AAAJ;AAAP;AA+SyC;;AAApB;;AAAA;AAAA;;AAAA;;AAAA;AACA;;AAHjB;;AAAA;;;AAvBP;AAAA;AA8BA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASG;AAAA;;;AACO;;AAAc;AAAA;;AAAA;AAAA;AAAd;AAAP;AApRA;AAGW;;;;;;AAHX;;;;AACQ;;;AADR;AAwRA;;AAAa;AAAb;AACA;;AAAgB;AAAhB;AACA;;AAAsB;AAAtB;AACA;;AAAiB;;AAAjB;AACA;;AAAY;;AAAZ;AACA;;AAAW;;AAAX;AACA;;AAAqB;;AAArB;AACA;;AAAoB;;AAApB;AACA;AAAoB;;AAApB;AACA;;AAAmB;;AAAnB;AACA;AAAqB;;AAArB;AACA;AAAoB;AAApB;AACA;;AAAqB;AAArB;AA1BH;AAAA;AA4BA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYG;;;AAIsB;AAAA;;AAAA;AAAA;AAAZ;AACe;AAAA;;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AACgB;AAAA;;AAAA;AAAA;AAAV;;AAAA;AAAA;;AAAA;AACO;AAAA;;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;;;AAAA;AAAA;AACO;AAAA;;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;;;AAAA;AAAA;AACW;AAAA;;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAC4B;AAAA;;AAAA;AAAA;AAAlB;AAAA;AAAA;AAAA;;;AAAA;AAAA;AACY;AAAA;;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACD;AAAA;;AAAA;AAAA;AACE;AAAA;AAAA;AAAA;AAXxB;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;;;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAfV;;AAAA;AAAA;AAAA;AAAA;AAAA;AA6BA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYG;;;AAGiB;AAAA;;AAAA;AAAA;AAAV;;AAAA;AAAA;;AAAA;AAfV;;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAeG;AAAA;;;AAGiB;AAAA;;AAAA;AAAA;AAAV;;AAAA;AAAA;;AAAA;AAlBV;;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYG;AAAA;;;AAGmB;;;AAAZ;AAfV;;AAAA;AAAA;AAAA;AAAA;AAAA;AA/fA;;;AAEyC;;AAAnB;;AAAA;;AAAA;AAAZ;;AAAA;AAAA;AAAP;AAEH;;;AAEU;AAAA;AAAA;AAAA;AAAP;AAAA;AACO;;AAAA;AAAP;;AA4HH;;;AASG;AAMW;;;;;;;;;;;;;;;;;;;;AANX;;;;AACQ;;;AADR;", - "op_pc_offset": 0, - "pc_events": { - "1": { - "subroutine": "algopy.arc4.ARC4Contract.approval_program", - "params": {}, - "block": "main", - "stack_in": [], - "op": "intcblock 0 1 8 32 18446744073709551615" - }, - "17": { - "op": "bytecblock \"smart_asa_id\" \"reserve_addr\" \"clawback_addr\" \"account_smart_asa_id\" \"account_frozen\" \"freeze_addr\" \"global_frozen\" \"manager_addr\" \"total\" \"default_frozen\" \"decimals\" \"unit_name\" \"name\" \"url\" \"metadata_hash\" 0x151f7c75 0x00" - }, - "204": { - "op": "txn ApplicationID", - "defined_out": [ - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0" - ] - }, - "206": { - "op": "bnz main_after_if_else@2", - "stack_out": [] - }, - "209": { - "op": "txn GlobalNumByteSlice", - "defined_out": [ - "tmp%0#1" - ], - "stack_out": [ - "tmp%0#1" - ] - }, - "211": { - "op": "intc_2 // 8", - "defined_out": [ - "8", - "tmp%0#1" - ], - "stack_out": [ - "tmp%0#1", - "8" - ] - }, - "212": { - "op": "==", - "defined_out": [ - "tmp%1#2" - ], - "stack_out": [ - "tmp%1#2" - ] - }, - "213": { - "error": "Wrong Global Bytes allocation", - "op": "assert // Wrong Global Bytes allocation", - "stack_out": [] - }, - "214": { - "op": "txn GlobalNumUint", - "defined_out": [ - "tmp%2#1" - ], - "stack_out": [ - "tmp%2#1" - ] - }, - "216": { - "op": "pushint 5 // 5", - "defined_out": [ - "5", - "tmp%2#1" - ], - "stack_out": [ - "tmp%2#1", - "5" - ] - }, - "218": { - "op": "==", - "defined_out": [ - "tmp%3#1" - ], - "stack_out": [ - "tmp%3#1" - ] - }, - "219": { - "error": "Wrong Global UInts allocation", - "op": "assert // Wrong Global UInts allocation", - "stack_out": [] - }, - "220": { - "op": "txn LocalNumByteSlice", - "defined_out": [ - "tmp%4#1" - ], - "stack_out": [ - "tmp%4#1" - ] - }, - "222": { - "op": "!", - "defined_out": [ - "tmp%5#1" - ], - "stack_out": [ - "tmp%5#1" - ] - }, - "223": { - "error": "Wrong Local Bytes allocation", - "op": "assert // Wrong Local Bytes allocation", - "stack_out": [] - }, - "224": { - "op": "txn LocalNumUint", - "defined_out": [ - "tmp%6#1" - ], - "stack_out": [ - "tmp%6#1" - ] - }, - "226": { - "op": "pushint 2 // 2", - "defined_out": [ - "2", - "tmp%6#1" - ], - "stack_out": [ - "tmp%6#1", - "2" - ] - }, - "228": { - "op": "==", - "defined_out": [ - "tmp%7#0" - ], - "stack_out": [ - "tmp%7#0" - ] - }, - "229": { - "error": "Wrong Local UInts allocation", - "op": "assert // Wrong Local UInts allocation", - "stack_out": [] - }, - "230": { - "op": "bytec 8 // \"total\"", - "defined_out": [ - "\"total\"" - ], - "stack_out": [ - "\"total\"" - ] - }, - "232": { - "op": "intc_0 // 0", - "defined_out": [ - "\"total\"", - "0" - ], - "stack_out": [ - "\"total\"", - "0" - ] - }, - "233": { - "op": "app_global_put", - "stack_out": [] - }, - "234": { - "op": "bytec 10 // \"decimals\"", - "defined_out": [ - "\"decimals\"" - ], - "stack_out": [ - "\"decimals\"" - ] - }, - "236": { - "op": "intc_0 // 0", - "stack_out": [ - "\"decimals\"", - "0" - ] - }, - "237": { - "op": "app_global_put", - "stack_out": [] - }, - "238": { - "op": "bytec 9 // \"default_frozen\"", - "defined_out": [ - "\"default_frozen\"" - ], - "stack_out": [ - "\"default_frozen\"" - ] - }, - "240": { - "op": "intc_0 // 0", - "stack_out": [ - "\"default_frozen\"", - "0" - ] - }, - "241": { - "op": "app_global_put", - "stack_out": [] - }, - "242": { - "op": "bytec 11 // \"unit_name\"", - "defined_out": [ - "\"unit_name\"" - ], - "stack_out": [ - "\"unit_name\"" - ] - }, - "244": { - "op": "pushbytes \"\"", - "defined_out": [ - "\"\"", - "\"unit_name\"" - ], - "stack_out": [ - "\"unit_name\"", - "\"\"" - ] - }, - "246": { - "op": "app_global_put", - "stack_out": [] - }, - "247": { - "op": "bytec 12 // \"name\"", - "defined_out": [ - "\"name\"" - ], - "stack_out": [ - "\"name\"" - ] - }, - "249": { - "op": "pushbytes \"\"", - "stack_out": [ - "\"name\"", - "\"\"" - ] - }, - "251": { - "op": "app_global_put", - "stack_out": [] - }, - "252": { - "op": "bytec 13 // \"url\"", - "defined_out": [ - "\"url\"" - ], - "stack_out": [ - "\"url\"" - ] - }, - "254": { - "op": "pushbytes \"\"", - "stack_out": [ - "\"url\"", - "\"\"" - ] - }, - "256": { - "op": "app_global_put", - "stack_out": [] - }, - "257": { - "op": "bytec 14 // \"metadata_hash\"", - "defined_out": [ - "\"metadata_hash\"" - ], - "stack_out": [ - "\"metadata_hash\"" - ] - }, - "259": { - "op": "pushbytes 0x", - "defined_out": [ - "\"metadata_hash\"", - "0x" - ], - "stack_out": [ - "\"metadata_hash\"", - "0x" - ] - }, - "261": { - "op": "app_global_put", - "stack_out": [] - }, - "262": { - "op": "bytec 7 // \"manager_addr\"", - "defined_out": [ - "\"manager_addr\"" - ], - "stack_out": [ - "\"manager_addr\"" - ] - }, - "264": { - "op": "global ZeroAddress", - "defined_out": [ - "\"manager_addr\"", - "tmp%8#1" - ], - "stack_out": [ - "\"manager_addr\"", - "tmp%8#1" - ] - }, - "266": { - "op": "app_global_put", - "stack_out": [] - }, - "267": { - "op": "bytec_1 // \"reserve_addr\"", - "defined_out": [ - "\"reserve_addr\"" - ], - "stack_out": [ - "\"reserve_addr\"" - ] - }, - "268": { - "op": "global ZeroAddress", - "defined_out": [ - "\"reserve_addr\"", - "tmp%9#1" - ], - "stack_out": [ - "\"reserve_addr\"", - "tmp%9#1" - ] - }, - "270": { - "op": "app_global_put", - "stack_out": [] - }, - "271": { - "op": "bytec 5 // \"freeze_addr\"", - "defined_out": [ - "\"freeze_addr\"" - ], - "stack_out": [ - "\"freeze_addr\"" - ] - }, - "273": { - "op": "global ZeroAddress", - "defined_out": [ - "\"freeze_addr\"", - "tmp%10#1" - ], - "stack_out": [ - "\"freeze_addr\"", - "tmp%10#1" - ] - }, - "275": { - "op": "app_global_put", - "stack_out": [] - }, - "276": { - "op": "bytec_2 // \"clawback_addr\"", - "defined_out": [ - "\"clawback_addr\"" - ], - "stack_out": [ - "\"clawback_addr\"" - ] - }, - "277": { - "op": "global ZeroAddress", - "defined_out": [ - "\"clawback_addr\"", - "tmp%11#1" - ], - "stack_out": [ - "\"clawback_addr\"", - "tmp%11#1" - ] - }, - "279": { - "op": "app_global_put", - "stack_out": [] - }, - "280": { - "op": "bytec_0 // \"smart_asa_id\"", - "defined_out": [ - "\"smart_asa_id\"" - ], - "stack_out": [ - "\"smart_asa_id\"" - ] - }, - "281": { - "op": "intc_0 // 0", - "stack_out": [ - "\"smart_asa_id\"", - "0" - ] - }, - "282": { - "op": "app_global_put", - "stack_out": [] - }, - "283": { - "op": "bytec 6 // \"global_frozen\"", - "defined_out": [ - "\"global_frozen\"" - ], - "stack_out": [ - "\"global_frozen\"" - ] - }, - "285": { - "op": "intc_0 // 0", - "stack_out": [ - "\"global_frozen\"", - "0" - ] - }, - "286": { - "op": "app_global_put", - "stack_out": [] - }, - "287": { - "block": "main_after_if_else@2", - "stack_in": [], - "op": "txn NumAppArgs", - "defined_out": [ - "tmp%0#1" - ], - "stack_out": [ - "tmp%0#1" - ] - }, - "289": { - "op": "bz main___algopy_default_create@22", - "stack_out": [] - }, - "292": { - "op": "pushbytess 0x48641645 0x3a045bdc // method \"asset_opt_in(uint64,axfer)void\", method \"asset_close_out(uint64,address)void\"", - "defined_out": [ - "Method(asset_close_out(uint64,address)void)", - "Method(asset_opt_in(uint64,axfer)void)" - ], - "stack_out": [ - "Method(asset_opt_in(uint64,axfer)void)", - "Method(asset_close_out(uint64,address)void)" - ] - }, - "304": { - "op": "txna ApplicationArgs 0", - "defined_out": [ - "Method(asset_close_out(uint64,address)void)", - "Method(asset_opt_in(uint64,axfer)void)", - "tmp%2#0" - ], - "stack_out": [ - "Method(asset_opt_in(uint64,axfer)void)", - "Method(asset_close_out(uint64,address)void)", - "tmp%2#0" - ] - }, - "307": { - "op": "match main_asset_opt_in_route@5 main_asset_close_out_route@6", - "stack_out": [] - }, - "313": { - "block": "main_switch_case_next@7", - "stack_in": [], - "op": "txn OnCompletion", - "defined_out": [ - "tmp%13#0" - ], - "stack_out": [ - "tmp%13#0" - ] - }, - "315": { - "op": "!", - "defined_out": [ - "tmp%14#0" - ], - "stack_out": [ - "tmp%14#0" - ] - }, - "316": { - "error": "OnCompletion must be NoOp", - "op": "assert // OnCompletion must be NoOp", - "stack_out": [] - }, - "317": { - "op": "txn ApplicationID", - "defined_out": [ - "tmp%15#0" - ], - "stack_out": [ - "tmp%15#0" - ] - }, - "319": { - "op": "assert", - "stack_out": [] - }, - "320": { - "op": "pushbytess 0xe7ecd5a8 0xf8819feb 0x7eacb775 0xa133d581 0xff53adef 0xed64452f 0x2e9b9038 0x979b9972 0x48a63cc9 0x46ad0d52 // method \"asset_create(uint64,uint32,bool,string,string,string,byte[],address,address,address,address)uint64\", method \"asset_config(uint64,uint64,uint32,bool,string,string,string,byte[],address,address,address,address)void\", method \"asset_transfer(uint64,uint64,address,address)void\", method \"asset_freeze(uint64,bool)void\", method \"account_freeze(uint64,address,bool)void\", method \"asset_destroy(uint64)void\", method \"get_asset_config(uint64)(uint64,uint32,bool,string,string,string,byte[],address,address,address,address)\", method \"get_asset_is_frozen(uint64)bool\", method \"get_account_is_frozen(uint64,address)bool\", method \"get_circulating_supply(uint64)uint64\"", - "defined_out": [ - "Method(account_freeze(uint64,address,bool)void)", - "Method(asset_config(uint64,uint64,uint32,bool,string,string,string,byte[],address,address,address,address)void)", - "Method(asset_create(uint64,uint32,bool,string,string,string,byte[],address,address,address,address)uint64)", - "Method(asset_destroy(uint64)void)", - "Method(asset_freeze(uint64,bool)void)", - "Method(asset_transfer(uint64,uint64,address,address)void)", - "Method(get_account_is_frozen(uint64,address)bool)", - "Method(get_asset_config(uint64)(uint64,uint32,bool,string,string,string,byte[],address,address,address,address))", - "Method(get_asset_is_frozen(uint64)bool)", - "Method(get_circulating_supply(uint64)uint64)" - ], - "stack_out": [ - "Method(asset_create(uint64,uint32,bool,string,string,string,byte[],address,address,address,address)uint64)", - "Method(asset_config(uint64,uint64,uint32,bool,string,string,string,byte[],address,address,address,address)void)", - "Method(asset_transfer(uint64,uint64,address,address)void)", - "Method(asset_freeze(uint64,bool)void)", - "Method(account_freeze(uint64,address,bool)void)", - "Method(asset_destroy(uint64)void)", - "Method(get_asset_config(uint64)(uint64,uint32,bool,string,string,string,byte[],address,address,address,address))", - "Method(get_asset_is_frozen(uint64)bool)", - "Method(get_account_is_frozen(uint64,address)bool)", - "Method(get_circulating_supply(uint64)uint64)" - ] - }, - "372": { - "op": "txna ApplicationArgs 0", - "defined_out": [ - "Method(account_freeze(uint64,address,bool)void)", - "Method(asset_config(uint64,uint64,uint32,bool,string,string,string,byte[],address,address,address,address)void)", - "Method(asset_create(uint64,uint32,bool,string,string,string,byte[],address,address,address,address)uint64)", - "Method(asset_destroy(uint64)void)", - "Method(asset_freeze(uint64,bool)void)", - "Method(asset_transfer(uint64,uint64,address,address)void)", - "Method(get_account_is_frozen(uint64,address)bool)", - "Method(get_asset_config(uint64)(uint64,uint32,bool,string,string,string,byte[],address,address,address,address))", - "Method(get_asset_is_frozen(uint64)bool)", - "Method(get_circulating_supply(uint64)uint64)", - "tmp%17#0" - ], - "stack_out": [ - "Method(asset_create(uint64,uint32,bool,string,string,string,byte[],address,address,address,address)uint64)", - "Method(asset_config(uint64,uint64,uint32,bool,string,string,string,byte[],address,address,address,address)void)", - "Method(asset_transfer(uint64,uint64,address,address)void)", - "Method(asset_freeze(uint64,bool)void)", - "Method(account_freeze(uint64,address,bool)void)", - "Method(asset_destroy(uint64)void)", - "Method(get_asset_config(uint64)(uint64,uint32,bool,string,string,string,byte[],address,address,address,address))", - "Method(get_asset_is_frozen(uint64)bool)", - "Method(get_account_is_frozen(uint64,address)bool)", - "Method(get_circulating_supply(uint64)uint64)", - "tmp%17#0" - ] - }, - "375": { - "op": "match asset_create asset_config asset_transfer asset_freeze account_freeze asset_destroy get_asset_config get_asset_is_frozen get_account_is_frozen get_circulating_supply", - "stack_out": [] - }, - "397": { - "op": "err" - }, - "398": { - "block": "main_asset_close_out_route@6", - "stack_in": [], - "op": "txn OnCompletion", - "defined_out": [ - "tmp%8#0" - ], - "stack_out": [ - "tmp%8#0" - ] - }, - "400": { - "op": "pushint 2 // CloseOut", - "defined_out": [ - "CloseOut", - "tmp%8#0" - ], - "stack_out": [ - "tmp%8#0", - "CloseOut" - ] - }, - "402": { - "op": "==", - "defined_out": [ - "tmp%9#0" - ], - "stack_out": [ - "tmp%9#0" - ] - }, - "403": { - "op": "txn ApplicationID", - "defined_out": [ - "tmp%10#0", - "tmp%9#0" - ], - "stack_out": [ - "tmp%9#0", - "tmp%10#0" - ] - }, - "405": { - "op": "&&", - "defined_out": [ - "tmp%12#0" - ], - "stack_out": [ - "tmp%12#0" - ] - }, - "406": { - "error": "OnCompletion must be CloseOut && can only call when not creating", - "op": "assert // OnCompletion must be CloseOut && can only call when not creating", - "stack_out": [] - }, - "407": { - "op": "b asset_close_out" - }, - "410": { - "block": "main_asset_opt_in_route@5", - "stack_in": [], - "op": "txn OnCompletion", - "defined_out": [ - "tmp%3#0" - ], - "stack_out": [ - "tmp%3#0" - ] - }, - "412": { - "op": "intc_1 // OptIn", - "defined_out": [ - "OptIn", - "tmp%3#0" - ], - "stack_out": [ - "tmp%3#0", - "OptIn" - ] - }, - "413": { - "op": "==", - "defined_out": [ - "tmp%4#0" - ], - "stack_out": [ - "tmp%4#0" - ] - }, - "414": { - "op": "txn ApplicationID", - "defined_out": [ - "tmp%4#0", - "tmp%5#0" - ], - "stack_out": [ - "tmp%4#0", - "tmp%5#0" - ] - }, - "416": { - "op": "&&", - "defined_out": [ - "tmp%7#0" - ], - "stack_out": [ - "tmp%7#0" - ] - }, - "417": { - "error": "OnCompletion must be OptIn && can only call when not creating", - "op": "assert // OnCompletion must be OptIn && can only call when not creating", - "stack_out": [] - }, - "418": { - "op": "b asset_opt_in" - }, - "421": { - "block": "main___algopy_default_create@22", - "stack_in": [], - "op": "txn OnCompletion", - "defined_out": [ - "tmp%18#0" - ], - "stack_out": [ - "tmp%18#0" - ] - }, - "423": { - "op": "!", - "defined_out": [ - "tmp%19#0" - ], - "stack_out": [ - "tmp%19#0" - ] - }, - "424": { - "op": "txn ApplicationID", - "defined_out": [ - "tmp%19#0", - "tmp%20#0" - ], - "stack_out": [ - "tmp%19#0", - "tmp%20#0" - ] - }, - "426": { - "op": "!", - "defined_out": [ - "tmp%19#0", - "tmp%21#0" - ], - "stack_out": [ - "tmp%19#0", - "tmp%21#0" - ] - }, - "427": { - "op": "&&", - "defined_out": [ - "tmp%22#0" - ], - "stack_out": [ - "tmp%22#0" - ] - }, - "428": { - "error": "OnCompletion must be NoOp && can only call when creating", - "op": "assert // OnCompletion must be NoOp && can only call when creating", - "stack_out": [] - }, - "429": { - "op": "intc_1 // 1", - "defined_out": [ - "1" - ], - "stack_out": [ - "1" - ] - }, - "430": { - "op": "return", - "stack_out": [] - }, - "431": { - "subroutine": "smart_contracts.smart_asa.contract.SmartAsa.asset_create[routing]", - "params": {}, - "block": "asset_create", - "stack_in": [], - "op": "txna ApplicationArgs 1" - }, - "434": { - "op": "dup", - "defined_out": [ - "total#0" - ], - "stack_out": [ - "total#0", - "total#0" - ] - }, - "435": { - "op": "len", - "defined_out": [ - "len%0#0", - "total#0" - ], - "stack_out": [ - "total#0", - "len%0#0" - ] - }, - "436": { - "op": "intc_2 // 8", - "defined_out": [ - "8", - "len%0#0", - "total#0" - ], - "stack_out": [ - "total#0", - "len%0#0", - "8" - ] - }, - "437": { - "op": "==", - "defined_out": [ - "eq%0#0", - "total#0" - ], - "stack_out": [ - "total#0", - "eq%0#0" - ] - }, - "438": { - "error": "invalid number of bytes for arc4.uint64", - "op": "assert // invalid number of bytes for arc4.uint64", - "stack_out": [ - "total#0" - ] - }, - "439": { - "op": "txna ApplicationArgs 2" - }, - "442": { - "op": "dup", - "defined_out": [ - "decimals#0", - "total#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "decimals#0" - ] - }, - "443": { - "op": "len", - "defined_out": [ - "decimals#0", - "len%1#0", - "total#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "len%1#0" - ] - }, - "444": { - "op": "pushint 4 // 4", - "defined_out": [ - "4", - "decimals#0", - "len%1#0", - "total#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "len%1#0", - "4" - ] - }, - "446": { - "op": "==", - "defined_out": [ - "decimals#0", - "eq%1#0", - "total#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "eq%1#0" - ] - }, - "447": { - "error": "invalid number of bytes for arc4.uint32", - "op": "assert // invalid number of bytes for arc4.uint32", - "stack_out": [ - "total#0", - "decimals#0" - ] - }, - "448": { - "op": "txna ApplicationArgs 3" - }, - "451": { - "op": "dup", - "defined_out": [ - "decimals#0", - "default_frozen#0", - "total#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "default_frozen#0" - ] - }, - "452": { - "op": "len", - "defined_out": [ - "decimals#0", - "default_frozen#0", - "len%2#0", - "total#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "len%2#0" - ] - }, - "453": { - "op": "intc_1 // 1", - "defined_out": [ - "1", - "decimals#0", - "default_frozen#0", - "len%2#0", - "total#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "len%2#0", - "1" - ] - }, - "454": { - "op": "==", - "defined_out": [ - "decimals#0", - "default_frozen#0", - "eq%2#0", - "total#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "eq%2#0" - ] - }, - "455": { - "error": "invalid number of bytes for arc4.bool", - "op": "assert // invalid number of bytes for arc4.bool", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0" - ] - }, - "456": { - "op": "txna ApplicationArgs 4" - }, - "459": { - "op": "dupn 2", - "defined_out": [ - "decimals#0", - "default_frozen#0", - "total#0", - "unit_name#0", - "unit_name#0 (copy)" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "unit_name#0", - "unit_name#0 (copy)" - ] - }, - "461": { - "op": "intc_0 // 0", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "unit_name#0", - "unit_name#0 (copy)", - "0" - ] - }, - "462": { - "error": "invalid array length header", - "op": "extract_uint16 // on error: invalid array length header", - "defined_out": [ - "aggregate%array_length%0#0", - "decimals#0", - "default_frozen#0", - "total#0", - "unit_name#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "unit_name#0", - "aggregate%array_length%0#0" - ] - }, - "463": { - "op": "pushint 2 // 2", - "defined_out": [ - "2", - "aggregate%array_length%0#0", - "decimals#0", - "default_frozen#0", - "total#0", - "unit_name#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "unit_name#0", - "aggregate%array_length%0#0", - "2" - ] - }, - "465": { - "op": "+", - "defined_out": [ - "add%0#0", - "decimals#0", - "default_frozen#0", - "total#0", - "unit_name#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "unit_name#0", - "add%0#0" - ] - }, - "466": { - "op": "swap", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "add%0#0", - "unit_name#0" - ] - }, - "467": { - "op": "len", - "defined_out": [ - "add%0#0", - "decimals#0", - "default_frozen#0", - "len%3#0", - "total#0", - "unit_name#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "add%0#0", - "len%3#0" - ] - }, - "468": { - "op": "==", - "defined_out": [ - "decimals#0", - "default_frozen#0", - "eq%3#0", - "total#0", - "unit_name#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "eq%3#0" - ] - }, - "469": { - "error": "invalid number of bytes for arc4.dynamic_array", - "op": "assert // invalid number of bytes for arc4.dynamic_array", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0" - ] - }, - "470": { - "op": "txna ApplicationArgs 5" - }, - "473": { - "op": "dupn 2", - "defined_out": [ - "decimals#0", - "default_frozen#0", - "name#0", - "name#0 (copy)", - "total#0", - "unit_name#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "name#0", - "name#0 (copy)" - ] - }, - "475": { - "op": "intc_0 // 0", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "name#0", - "name#0 (copy)", - "0" - ] - }, - "476": { - "error": "invalid array length header", - "op": "extract_uint16 // on error: invalid array length header", - "defined_out": [ - "aggregate%array_length%1#0", - "decimals#0", - "default_frozen#0", - "name#0", - "total#0", - "unit_name#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "name#0", - "aggregate%array_length%1#0" - ] - }, - "477": { - "op": "pushint 2 // 2", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "name#0", - "aggregate%array_length%1#0", - "2" - ] - }, - "479": { - "op": "+", - "defined_out": [ - "add%1#0", - "decimals#0", - "default_frozen#0", - "name#0", - "total#0", - "unit_name#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "name#0", - "add%1#0" - ] - }, - "480": { - "op": "swap", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "add%1#0", - "name#0" - ] - }, - "481": { - "op": "len", - "defined_out": [ - "add%1#0", - "decimals#0", - "default_frozen#0", - "len%4#0", - "name#0", - "total#0", - "unit_name#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "add%1#0", - "len%4#0" - ] - }, - "482": { - "op": "==", - "defined_out": [ - "decimals#0", - "default_frozen#0", - "eq%4#0", - "name#0", - "total#0", - "unit_name#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "eq%4#0" - ] - }, - "483": { - "error": "invalid number of bytes for arc4.dynamic_array", - "op": "assert // invalid number of bytes for arc4.dynamic_array", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0" - ] - }, - "484": { - "op": "txna ApplicationArgs 6" - }, - "487": { - "op": "dupn 2", - "defined_out": [ - "decimals#0", - "default_frozen#0", - "name#0", - "total#0", - "unit_name#0", - "url#0", - "url#0 (copy)" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "url#0", - "url#0 (copy)" - ] - }, - "489": { - "op": "intc_0 // 0", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "url#0", - "url#0 (copy)", - "0" - ] - }, - "490": { - "error": "invalid array length header", - "op": "extract_uint16 // on error: invalid array length header", - "defined_out": [ - "aggregate%array_length%2#0", - "decimals#0", - "default_frozen#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "url#0", - "aggregate%array_length%2#0" - ] - }, - "491": { - "op": "pushint 2 // 2", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "url#0", - "aggregate%array_length%2#0", - "2" - ] - }, - "493": { - "op": "+", - "defined_out": [ - "add%2#0", - "decimals#0", - "default_frozen#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "url#0", - "add%2#0" - ] - }, - "494": { - "op": "swap", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "add%2#0", - "url#0" - ] - }, - "495": { - "op": "len", - "defined_out": [ - "add%2#0", - "decimals#0", - "default_frozen#0", - "len%5#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "add%2#0", - "len%5#0" - ] - }, - "496": { - "op": "==", - "defined_out": [ - "decimals#0", - "default_frozen#0", - "eq%5#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "eq%5#0" - ] - }, - "497": { - "error": "invalid number of bytes for arc4.dynamic_array", - "op": "assert // invalid number of bytes for arc4.dynamic_array", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0" - ] - }, - "498": { - "op": "txna ApplicationArgs 7" - }, - "501": { - "op": "dupn 2", - "defined_out": [ - "decimals#0", - "default_frozen#0", - "metadata_hash#0", - "metadata_hash#0 (copy)", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "metadata_hash#0", - "metadata_hash#0 (copy)" - ] - }, - "503": { - "op": "intc_0 // 0", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "metadata_hash#0", - "metadata_hash#0 (copy)", - "0" - ] - }, - "504": { - "error": "invalid array length header", - "op": "extract_uint16 // on error: invalid array length header", - "defined_out": [ - "aggregate%array_length%3#0", - "decimals#0", - "default_frozen#0", - "metadata_hash#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "metadata_hash#0", - "aggregate%array_length%3#0" - ] - }, - "505": { - "op": "pushint 2 // 2", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "metadata_hash#0", - "aggregate%array_length%3#0", - "2" - ] - }, - "507": { - "op": "+", - "defined_out": [ - "add%3#0", - "decimals#0", - "default_frozen#0", - "metadata_hash#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "metadata_hash#0", - "add%3#0" - ] - }, - "508": { - "op": "swap", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "add%3#0", - "metadata_hash#0" - ] - }, - "509": { - "op": "len", - "defined_out": [ - "add%3#0", - "decimals#0", - "default_frozen#0", - "len%6#0", - "metadata_hash#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "add%3#0", - "len%6#0" - ] - }, - "510": { - "op": "==", - "defined_out": [ - "decimals#0", - "default_frozen#0", - "eq%6#0", - "metadata_hash#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "eq%6#0" - ] - }, - "511": { - "error": "invalid number of bytes for arc4.dynamic_array", - "op": "assert // invalid number of bytes for arc4.dynamic_array", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0" - ] - }, - "512": { - "op": "txna ApplicationArgs 8" - }, - "515": { - "op": "dup", - "defined_out": [ - "decimals#0", - "default_frozen#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "manager_addr#0" - ] - }, - "516": { - "op": "len", - "defined_out": [ - "decimals#0", - "default_frozen#0", - "len%7#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "len%7#0" - ] - }, - "517": { - "op": "intc_3 // 32", - "defined_out": [ - "32", - "decimals#0", - "default_frozen#0", - "len%7#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "len%7#0", - "32" - ] - }, - "518": { - "op": "==", - "defined_out": [ - "decimals#0", - "default_frozen#0", - "eq%7#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "eq%7#0" - ] - }, - "519": { - "error": "invalid number of bytes for arc4.static_array", - "op": "assert // invalid number of bytes for arc4.static_array", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0" - ] - }, - "520": { - "op": "txna ApplicationArgs 9" - }, - "523": { - "op": "dup", - "defined_out": [ - "decimals#0", - "default_frozen#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "reserve_addr#0" - ] - }, - "524": { - "op": "len", - "defined_out": [ - "decimals#0", - "default_frozen#0", - "len%8#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "len%8#0" - ] - }, - "525": { - "op": "intc_3 // 32", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "len%8#0", - "32" - ] - }, - "526": { - "op": "==", - "defined_out": [ - "decimals#0", - "default_frozen#0", - "eq%8#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "eq%8#0" - ] - }, - "527": { - "error": "invalid number of bytes for arc4.static_array", - "op": "assert // invalid number of bytes for arc4.static_array", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0" - ] - }, - "528": { - "op": "txna ApplicationArgs 10" - }, - "531": { - "op": "dup", - "defined_out": [ - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "freeze_addr#0" - ] - }, - "532": { - "op": "len", - "defined_out": [ - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "len%9#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "len%9#0" - ] - }, - "533": { - "op": "intc_3 // 32", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "len%9#0", - "32" - ] - }, - "534": { - "op": "==", - "defined_out": [ - "decimals#0", - "default_frozen#0", - "eq%9#0", - "freeze_addr#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "eq%9#0" - ] - }, - "535": { - "error": "invalid number of bytes for arc4.static_array", - "op": "assert // invalid number of bytes for arc4.static_array", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0" - ] - }, - "536": { - "op": "txna ApplicationArgs 11" - }, - "539": { - "op": "dup", - "defined_out": [ - "clawback_addr#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "clawback_addr#0" - ] - }, - "540": { - "op": "len", - "defined_out": [ - "clawback_addr#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "len%10#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "len%10#0" - ] - }, - "541": { - "op": "intc_3 // 32", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "len%10#0", - "32" - ] - }, - "542": { - "op": "==", - "defined_out": [ - "clawback_addr#0", - "decimals#0", - "default_frozen#0", - "eq%10#0", - "freeze_addr#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "eq%10#0" - ] - }, - "543": { - "error": "invalid number of bytes for arc4.static_array", - "op": "assert // invalid number of bytes for arc4.static_array", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0" - ] - }, - "544": { - "op": "txn Sender", - "defined_out": [ - "clawback_addr#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "tmp%0#1", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "tmp%0#1" - ] - }, - "546": { - "op": "global CreatorAddress", - "defined_out": [ - "clawback_addr#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "tmp%0#1", - "tmp%1#1", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "tmp%0#1", - "tmp%1#1" - ] - }, - "548": { - "op": "==", - "defined_out": [ - "clawback_addr#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "tmp%2#1", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "tmp%2#1" - ] - }, - "549": { - "error": "Unauthorized", - "op": "assert // Unauthorized", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0" - ] - }, - "550": { - "op": "intc_0 // 0", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "0" - ] - }, - "551": { - "op": "bytec_0 // \"smart_asa_id\"", - "defined_out": [ - "\"smart_asa_id\"", - "0", - "clawback_addr#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "0", - "\"smart_asa_id\"" - ] - }, - "552": { - "op": "app_global_get_ex", - "defined_out": [ - "clawback_addr#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "manager_addr#0", - "maybe_exists%0#0", - "maybe_value%0#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "maybe_value%0#0", - "maybe_exists%0#0" - ] - }, - "553": { - "error": "check self.smart_asa_id exists", - "op": "assert // check self.smart_asa_id exists", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "maybe_value%0#0" - ] - }, - "554": { - "op": "!", - "defined_out": [ - "clawback_addr#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "tmp%3#1", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "tmp%3#1" - ] - }, - "555": { - "error": "Controlled ASA already created", - "op": "assert // Controlled ASA already created", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0" - ] - }, - "556": { - "op": "itxn_begin" - }, - "557": { - "op": "global CurrentApplicationID" - }, - "559": { - "op": "pushbytes 0x", - "defined_out": [ - "acc#0", - "clawback_addr#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "manager_addr#0", - "metadata_hash#0", - "n#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0" - ] - }, - "561": { - "block": "asset_create_while_top@2", - "stack_in": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0" - ], - "op": "dig 1", - "defined_out": [ - "n#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "n#0" - ] - }, - "563": { - "op": "bz asset_create_after_while@4", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0" - ] - }, - "566": { - "op": "dig 1", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "n#0" - ] - }, - "568": { - "op": "dup", - "defined_out": [ - "n#0", - "n#0 (copy)" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "n#0", - "n#0 (copy)" - ] - }, - "569": { - "op": "pushint 10 // 10", - "defined_out": [ - "10", - "n#0", - "n#0 (copy)" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "n#0", - "n#0 (copy)", - "10" - ] - }, - "571": { - "op": "%", - "defined_out": [ - "n#0", - "tmp%1#3" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "n#0", - "tmp%1#3" - ] - }, - "572": { - "op": "pushbytes 0x30313233343536373839", - "defined_out": [ - "0x30313233343536373839", - "n#0", - "tmp%1#3" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "n#0", - "tmp%1#3", - "0x30313233343536373839" - ] - }, - "584": { - "op": "swap", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "n#0", - "0x30313233343536373839", - "tmp%1#3" - ] - }, - "585": { - "op": "intc_1 // 1", - "defined_out": [ - "0x30313233343536373839", - "1", - "n#0", - "tmp%1#3" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "n#0", - "0x30313233343536373839", - "tmp%1#3", - "1" - ] - }, - "586": { - "op": "extract3", - "defined_out": [ - "extract%0#0", - "n#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "n#0", - "extract%0#0" - ] - }, - "587": { - "op": "dig 2", - "defined_out": [ - "acc#0", - "extract%0#0", - "n#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "n#0", - "extract%0#0", - "acc#0" - ] - }, - "589": { - "op": "concat", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "n#0", - "acc#0" - ] - }, - "590": { - "op": "bury 2", - "defined_out": [ - "acc#0", - "n#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "n#0" - ] - }, - "592": { - "op": "pushint 10 // 10", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "n#0", - "10" - ] - }, - "594": { - "op": "/", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "n#0" - ] - }, - "595": { - "op": "bury 2", - "defined_out": [ - "acc#0", - "n#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0" - ] - }, - "597": { - "op": "b asset_create_while_top@2" - }, - "600": { - "block": "asset_create_after_while@4", - "stack_in": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0" - ], - "op": "dupn 2", - "defined_out": [ - "acc#0", - "acc#0 (copy)" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "acc#0", - "acc#0 (copy)" - ] - }, - "602": { - "op": "len", - "defined_out": [ - "acc#0", - "tmp%4#2" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "acc#0", - "tmp%4#2" - ] - }, - "603": { - "op": "pushbytes 0x30", - "defined_out": [ - "0x30", - "acc#0", - "tmp%4#2" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "acc#0", - "tmp%4#2", - "0x30" - ] - }, - "606": { - "op": "cover 2", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "0x30", - "acc#0", - "tmp%4#2" - ] - }, - "608": { - "op": "select", - "defined_out": [ - "acc#0", - "select%0#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "select%0#0" - ] - }, - "609": { - "op": "pushbytes 0x616c676f72616e643a2f2f6170702f", - "defined_out": [ - "0x616c676f72616e643a2f2f6170702f", - "acc#0", - "select%0#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "select%0#0", - "0x616c676f72616e643a2f2f6170702f" - ] - }, - "626": { - "op": "swap", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "0x616c676f72616e643a2f2f6170702f", - "select%0#0" - ] - }, - "627": { - "op": "concat", - "defined_out": [ - "acc#0", - "inner_txn_params%0%%param_ConfigAssetURL_idx_0#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "inner_txn_params%0%%param_ConfigAssetURL_idx_0#0" - ] - }, - "628": { - "op": "global CurrentApplicationAddress", - "defined_out": [ - "acc#0", - "inner_txn_params%0%%param_ConfigAssetManager_idx_0#0", - "inner_txn_params%0%%param_ConfigAssetURL_idx_0#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "inner_txn_params%0%%param_ConfigAssetURL_idx_0#0", - "inner_txn_params%0%%param_ConfigAssetManager_idx_0#0" - ] - }, - "630": { - "op": "dupn 3", - "defined_out": [ - "acc#0", - "inner_txn_params%0%%param_ConfigAssetClawback_idx_0#0", - "inner_txn_params%0%%param_ConfigAssetFreeze_idx_0#0", - "inner_txn_params%0%%param_ConfigAssetManager_idx_0#0", - "inner_txn_params%0%%param_ConfigAssetReserve_idx_0#0", - "inner_txn_params%0%%param_ConfigAssetURL_idx_0#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "inner_txn_params%0%%param_ConfigAssetURL_idx_0#0", - "inner_txn_params%0%%param_ConfigAssetManager_idx_0#0", - "inner_txn_params%0%%param_ConfigAssetReserve_idx_0#0", - "inner_txn_params%0%%param_ConfigAssetFreeze_idx_0#0", - "inner_txn_params%0%%param_ConfigAssetClawback_idx_0#0" - ] - }, - "632": { - "op": "itxn_field ConfigAssetClawback", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "inner_txn_params%0%%param_ConfigAssetURL_idx_0#0", - "inner_txn_params%0%%param_ConfigAssetManager_idx_0#0", - "inner_txn_params%0%%param_ConfigAssetReserve_idx_0#0", - "inner_txn_params%0%%param_ConfigAssetFreeze_idx_0#0" - ] - }, - "634": { - "op": "itxn_field ConfigAssetFreeze", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "inner_txn_params%0%%param_ConfigAssetURL_idx_0#0", - "inner_txn_params%0%%param_ConfigAssetManager_idx_0#0", - "inner_txn_params%0%%param_ConfigAssetReserve_idx_0#0" - ] - }, - "636": { - "op": "itxn_field ConfigAssetReserve", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "inner_txn_params%0%%param_ConfigAssetURL_idx_0#0", - "inner_txn_params%0%%param_ConfigAssetManager_idx_0#0" - ] - }, - "638": { - "op": "itxn_field ConfigAssetManager", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "inner_txn_params%0%%param_ConfigAssetURL_idx_0#0" - ] - }, - "640": { - "op": "itxn_field ConfigAssetURL", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0" - ] - }, - "642": { - "op": "pushbytes \"ARC-20 Smart ASA\"", - "defined_out": [ - "\"ARC-20 Smart ASA\"", - "acc#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "\"ARC-20 Smart ASA\"" - ] - }, - "660": { - "op": "itxn_field ConfigAssetName", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0" - ] - }, - "662": { - "op": "pushbytes \"ARC-20\"", - "defined_out": [ - "\"ARC-20\"", - "acc#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "\"ARC-20\"" - ] - }, - "670": { - "op": "itxn_field ConfigAssetUnitName", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0" - ] - }, - "672": { - "op": "intc_1 // 1", - "defined_out": [ - "1", - "acc#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "1" - ] - }, - "673": { - "op": "itxn_field ConfigAssetDefaultFrozen", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0" - ] - }, - "675": { - "op": "intc_0 // 0", - "defined_out": [ - "0", - "acc#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "0" - ] - }, - "676": { - "op": "itxn_field ConfigAssetDecimals", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0" - ] - }, - "678": { - "op": "intc 4 // 18446744073709551615", - "defined_out": [ - "18446744073709551615", - "acc#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "18446744073709551615" - ] - }, - "680": { - "op": "itxn_field ConfigAssetTotal", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0" - ] - }, - "682": { - "op": "pushint 3 // acfg", - "defined_out": [ - "acc#0", - "acfg" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "acfg" - ] - }, - "684": { - "op": "itxn_field TypeEnum", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0" - ] - }, - "686": { - "op": "intc_0 // 0", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "0" - ] - }, - "687": { - "op": "itxn_field Fee", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0" - ] - }, - "689": { - "op": "itxn_submit" - }, - "690": { - "op": "bytec_0 // \"smart_asa_id\"", - "defined_out": [ - "\"smart_asa_id\"", - "acc#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "\"smart_asa_id\"" - ] - }, - "691": { - "op": "itxn CreatedAssetID", - "defined_out": [ - "\"smart_asa_id\"", - "acc#0", - "tmp%2#2" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "\"smart_asa_id\"", - "tmp%2#2" - ] - }, - "693": { - "op": "app_global_put", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0" - ] - }, - "694": { - "op": "dig 12", - "defined_out": [ - "acc#0", - "total#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "total#0" - ] - }, - "696": { - "op": "btoi", - "defined_out": [ - "acc#0", - "tmp%5#1", - "total#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "tmp%5#1" - ] - }, - "697": { - "op": "bytec 8 // \"total\"", - "defined_out": [ - "\"total\"", - "acc#0", - "tmp%5#1", - "total#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "tmp%5#1", - "\"total\"" - ] - }, - "699": { - "op": "swap", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "\"total\"", - "tmp%5#1" - ] - }, - "700": { - "op": "app_global_put", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0" - ] - }, - "701": { - "op": "dig 11", - "defined_out": [ - "acc#0", - "decimals#0", - "total#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "decimals#0" - ] - }, - "703": { - "op": "btoi", - "defined_out": [ - "acc#0", - "decimals#0", - "tmp%6#1", - "total#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "tmp%6#1" - ] - }, - "704": { - "op": "bytec 10 // \"decimals\"", - "defined_out": [ - "\"decimals\"", - "acc#0", - "decimals#0", - "tmp%6#1", - "total#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "tmp%6#1", - "\"decimals\"" - ] - }, - "706": { - "op": "swap", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "\"decimals\"", - "tmp%6#1" - ] - }, - "707": { - "op": "app_global_put", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0" - ] - }, - "708": { - "op": "dig 10", - "defined_out": [ - "acc#0", - "decimals#0", - "default_frozen#0", - "total#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "default_frozen#0" - ] - }, - "710": { - "op": "intc_0 // 0", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "default_frozen#0", - "0" - ] - }, - "711": { - "op": "getbit", - "defined_out": [ - "acc#0", - "aggregate%get_bit%0#0", - "decimals#0", - "default_frozen#0", - "total#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "aggregate%get_bit%0#0" - ] - }, - "712": { - "op": "bytec 9 // \"default_frozen\"", - "defined_out": [ - "\"default_frozen\"", - "acc#0", - "aggregate%get_bit%0#0", - "decimals#0", - "default_frozen#0", - "total#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "aggregate%get_bit%0#0", - "\"default_frozen\"" - ] - }, - "714": { - "op": "swap", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "\"default_frozen\"", - "aggregate%get_bit%0#0" - ] - }, - "715": { - "op": "app_global_put", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0" - ] - }, - "716": { - "op": "dig 9", - "defined_out": [ - "acc#0", - "decimals#0", - "default_frozen#0", - "total#0", - "unit_name#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "unit_name#0" - ] - }, - "718": { - "op": "extract 2 0", - "defined_out": [ - "acc#0", - "decimals#0", - "default_frozen#0", - "tmp%8#1", - "total#0", - "unit_name#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "tmp%8#1" - ] - }, - "721": { - "op": "bytec 11 // \"unit_name\"", - "defined_out": [ - "\"unit_name\"", - "acc#0", - "decimals#0", - "default_frozen#0", - "tmp%8#1", - "total#0", - "unit_name#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "tmp%8#1", - "\"unit_name\"" - ] - }, - "723": { - "op": "swap", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "\"unit_name\"", - "tmp%8#1" - ] - }, - "724": { - "op": "app_global_put", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0" - ] - }, - "725": { - "op": "dig 8", - "defined_out": [ - "acc#0", - "decimals#0", - "default_frozen#0", - "name#0", - "total#0", - "unit_name#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "name#0" - ] - }, - "727": { - "op": "extract 2 0", - "defined_out": [ - "acc#0", - "decimals#0", - "default_frozen#0", - "name#0", - "tmp%9#1", - "total#0", - "unit_name#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "tmp%9#1" - ] - }, - "730": { - "op": "bytec 12 // \"name\"", - "defined_out": [ - "\"name\"", - "acc#0", - "decimals#0", - "default_frozen#0", - "name#0", - "tmp%9#1", - "total#0", - "unit_name#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "tmp%9#1", - "\"name\"" - ] - }, - "732": { - "op": "swap", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "\"name\"", - "tmp%9#1" - ] - }, - "733": { - "op": "app_global_put", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0" - ] - }, - "734": { - "op": "dig 7", - "defined_out": [ - "acc#0", - "decimals#0", - "default_frozen#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "url#0" - ] - }, - "736": { - "op": "extract 2 0", - "defined_out": [ - "acc#0", - "decimals#0", - "default_frozen#0", - "name#0", - "tmp%10#1", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "tmp%10#1" - ] - }, - "739": { - "op": "bytec 13 // \"url\"", - "defined_out": [ - "\"url\"", - "acc#0", - "decimals#0", - "default_frozen#0", - "name#0", - "tmp%10#1", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "tmp%10#1", - "\"url\"" - ] - }, - "741": { - "op": "swap", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "\"url\"", - "tmp%10#1" - ] - }, - "742": { - "op": "app_global_put", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0" - ] - }, - "743": { - "op": "dig 6", - "defined_out": [ - "acc#0", - "decimals#0", - "default_frozen#0", - "metadata_hash#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "metadata_hash#0" - ] - }, - "745": { - "op": "extract 2 0", - "defined_out": [ - "acc#0", - "decimals#0", - "default_frozen#0", - "metadata_hash#0", - "name#0", - "tmp%11#1", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "tmp%11#1" - ] - }, - "748": { - "op": "bytec 14 // \"metadata_hash\"", - "defined_out": [ - "\"metadata_hash\"", - "acc#0", - "decimals#0", - "default_frozen#0", - "metadata_hash#0", - "name#0", - "tmp%11#1", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "tmp%11#1", - "\"metadata_hash\"" - ] - }, - "750": { - "op": "swap", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "\"metadata_hash\"", - "tmp%11#1" - ] - }, - "751": { - "op": "app_global_put", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0" - ] - }, - "752": { - "op": "bytec 7 // \"manager_addr\"", - "defined_out": [ - "\"manager_addr\"", - "acc#0", - "decimals#0", - "default_frozen#0", - "metadata_hash#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "\"manager_addr\"" - ] - }, - "754": { - "op": "dig 6", - "defined_out": [ - "\"manager_addr\"", - "acc#0", - "decimals#0", - "default_frozen#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "\"manager_addr\"", - "manager_addr#0" - ] - }, - "756": { - "op": "app_global_put", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0" - ] - }, - "757": { - "op": "bytec_1 // \"reserve_addr\"", - "defined_out": [ - "\"reserve_addr\"", - "acc#0", - "decimals#0", - "default_frozen#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "\"reserve_addr\"" - ] - }, - "758": { - "op": "dig 5", - "defined_out": [ - "\"reserve_addr\"", - "acc#0", - "decimals#0", - "default_frozen#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "\"reserve_addr\"", - "reserve_addr#0" - ] - }, - "760": { - "op": "app_global_put", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0" - ] - }, - "761": { - "op": "bytec 5 // \"freeze_addr\"", - "defined_out": [ - "\"freeze_addr\"", - "acc#0", - "decimals#0", - "default_frozen#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "\"freeze_addr\"" - ] - }, - "763": { - "op": "dig 4", - "defined_out": [ - "\"freeze_addr\"", - "acc#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "\"freeze_addr\"", - "freeze_addr#0" - ] - }, - "765": { - "op": "app_global_put", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0" - ] - }, - "766": { - "op": "bytec_2 // \"clawback_addr\"", - "defined_out": [ - "\"clawback_addr\"", - "acc#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "\"clawback_addr\"" - ] - }, - "767": { - "op": "dig 3", - "defined_out": [ - "\"clawback_addr\"", - "acc#0", - "clawback_addr#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "\"clawback_addr\"", - "clawback_addr#0" - ] - }, - "769": { - "op": "app_global_put", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0" - ] - }, - "770": { - "op": "intc_0 // 0", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "0" - ] - }, - "771": { - "op": "bytec_0 // \"smart_asa_id\"", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "0", - "\"smart_asa_id\"" - ] - }, - "772": { - "op": "app_global_get_ex", - "defined_out": [ - "acc#0", - "clawback_addr#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "manager_addr#0", - "maybe_exists%1#0", - "maybe_value%1#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "maybe_value%1#0", - "maybe_exists%1#0" - ] - }, - "773": { - "error": "check self.smart_asa_id exists", - "op": "assert // check self.smart_asa_id exists", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "maybe_value%1#0" - ] - }, - "774": { - "op": "itob", - "defined_out": [ - "acc#0", - "aggregate%val_as_bytes%0#0", - "clawback_addr#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "aggregate%val_as_bytes%0#0" - ] - }, - "775": { - "op": "bytec 15 // 0x151f7c75", - "defined_out": [ - "0x151f7c75", - "acc#0", - "aggregate%val_as_bytes%0#0", - "clawback_addr#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "aggregate%val_as_bytes%0#0", - "0x151f7c75" - ] - }, - "777": { - "op": "swap", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "0x151f7c75", - "aggregate%val_as_bytes%0#0" - ] - }, - "778": { - "op": "concat", - "defined_out": [ - "acc#0", - "clawback_addr#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "tmp%12#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "tmp%12#0" - ] - }, - "779": { - "op": "log", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0" - ] - }, - "780": { - "op": "intc_1 // 1", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0", - "1" - ] - }, - "781": { - "op": "return", - "stack_out": [ - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "n#0", - "acc#0" - ] - }, - "782": { - "subroutine": "smart_contracts.smart_asa.contract.SmartAsa.asset_opt_in[routing]", - "params": {}, - "block": "asset_opt_in", - "stack_in": [], - "op": "txna ApplicationArgs 1", - "defined_out": [ - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0" - ] - }, - "785": { - "op": "dup", - "defined_out": [ - "tmp%0#0", - "tmp%0#0 (copy)" - ], - "stack_out": [ - "tmp%0#0", - "tmp%0#0 (copy)" - ] - }, - "786": { - "op": "len", - "defined_out": [ - "len%0#0", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "len%0#0" - ] - }, - "787": { - "op": "intc_2 // 8", - "defined_out": [ - "8", - "len%0#0", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "len%0#0", - "8" - ] - }, - "788": { - "op": "==", - "defined_out": [ - "eq%0#0", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "eq%0#0" - ] - }, - "789": { - "error": "invalid number of bytes for arc4.uint64", - "op": "assert // invalid number of bytes for arc4.uint64", - "stack_out": [ - "tmp%0#0" - ] - }, - "790": { - "op": "btoi", - "defined_out": [ - "asset#0" - ], - "stack_out": [ - "asset#0" - ] - }, - "791": { - "op": "dup", - "defined_out": [ - "asset#0" - ], - "stack_out": [ - "asset#0", - "asset#0" - ] - }, - "792": { - "op": "txn GroupIndex", - "defined_out": [ - "asset#0", - "tmp%2#0" - ], - "stack_out": [ - "asset#0", - "asset#0", - "tmp%2#0" - ] - }, - "794": { - "op": "intc_1 // 1", - "defined_out": [ - "1", - "asset#0", - "tmp%2#0" - ], - "stack_out": [ - "asset#0", - "asset#0", - "tmp%2#0", - "1" - ] - }, - "795": { - "op": "-", - "defined_out": [ - "asset#0", - "ctrl_asa_opt_in#0" - ], - "stack_out": [ - "asset#0", - "asset#0", - "ctrl_asa_opt_in#0" - ] - }, - "796": { - "op": "dup", - "defined_out": [ - "asset#0", - "ctrl_asa_opt_in#0", - "ctrl_asa_opt_in#0 (copy)" - ], - "stack_out": [ - "asset#0", - "asset#0", - "ctrl_asa_opt_in#0", - "ctrl_asa_opt_in#0 (copy)" - ] - }, - "797": { - "op": "gtxns TypeEnum", - "defined_out": [ - "asset#0", - "ctrl_asa_opt_in#0", - "gtxn_type%0#0" - ], - "stack_out": [ - "asset#0", - "asset#0", - "ctrl_asa_opt_in#0", - "gtxn_type%0#0" - ] - }, - "799": { - "op": "pushint 4 // axfer", - "defined_out": [ - "asset#0", - "axfer", - "ctrl_asa_opt_in#0", - "gtxn_type%0#0" - ], - "stack_out": [ - "asset#0", - "asset#0", - "ctrl_asa_opt_in#0", - "gtxn_type%0#0", - "axfer" - ] - }, - "801": { - "op": "==", - "defined_out": [ - "asset#0", - "ctrl_asa_opt_in#0", - "gtxn_type_matches%0#0" - ], - "stack_out": [ - "asset#0", - "asset#0", - "ctrl_asa_opt_in#0", - "gtxn_type_matches%0#0" - ] - }, - "802": { - "error": "transaction type is axfer", - "op": "assert // transaction type is axfer", - "stack_out": [ - "asset#0", - "asset#0", - "ctrl_asa_opt_in#0" - ] - }, - "803": { - "op": "dig 1", - "defined_out": [ - "asset#0", - "asset#0 (copy)", - "ctrl_asa_opt_in#0" - ], - "stack_out": [ - "asset#0", - "asset#0", - "ctrl_asa_opt_in#0", - "asset#0 (copy)" - ] - }, - "805": { - "callsub": "smart_contracts.smart_asa.contract.SmartAsa.assert_common_preconditions", - "op": "callsub assert_common_preconditions", - "stack_out": [ - "asset#0", - "asset#0", - "ctrl_asa_opt_in#0" - ] - }, - "808": { - "op": "dup", - "stack_out": [ - "asset#0", - "asset#0", - "ctrl_asa_opt_in#0", - "ctrl_asa_opt_in#0 (copy)" - ] - }, - "809": { - "op": "gtxns XferAsset", - "stack_out": [ - "asset#0", - "asset#0", - "ctrl_asa_opt_in#0", - "tmp%2#0" - ] - }, - "811": { - "op": "intc_0 // 0", - "stack_out": [ - "asset#0", - "asset#0", - "ctrl_asa_opt_in#0", - "tmp%2#0", - "0" - ] - }, - "812": { - "op": "bytec_0 // \"smart_asa_id\"", - "defined_out": [ - "\"smart_asa_id\"", - "0", - "asset#0", - "ctrl_asa_opt_in#0", - "tmp%2#0" - ], - "stack_out": [ - "asset#0", - "asset#0", - "ctrl_asa_opt_in#0", - "tmp%2#0", - "0", - "\"smart_asa_id\"" - ] - }, - "813": { - "op": "app_global_get_ex", - "defined_out": [ - "asset#0", - "ctrl_asa_opt_in#0", - "maybe_exists%0#0", - "maybe_value%0#0", - "tmp%2#0" - ], - "stack_out": [ - "asset#0", - "asset#0", - "ctrl_asa_opt_in#0", - "tmp%2#0", - "maybe_value%0#0", - "maybe_exists%0#0" - ] - }, - "814": { - "error": "check self.smart_asa_id exists", - "op": "assert // check self.smart_asa_id exists", - "stack_out": [ - "asset#0", - "asset#0", - "ctrl_asa_opt_in#0", - "tmp%2#0", - "maybe_value%0#0" - ] - }, - "815": { - "op": "swap", - "stack_out": [ - "asset#0", - "asset#0", - "ctrl_asa_opt_in#0", - "maybe_value%0#0", - "tmp%2#0" - ] - }, - "816": { - "op": "dig 1", - "defined_out": [ - "asset#0", - "ctrl_asa_opt_in#0", - "maybe_value%0#0", - "maybe_value%0#0 (copy)", - "tmp%2#0" - ], - "stack_out": [ - "asset#0", - "asset#0", - "ctrl_asa_opt_in#0", - "maybe_value%0#0", - "tmp%2#0", - "maybe_value%0#0 (copy)" - ] - }, - "818": { - "op": "==", - "defined_out": [ - "asset#0", - "ctrl_asa_opt_in#0", - "maybe_value%0#0", - "tmp%3#0" - ], - "stack_out": [ - "asset#0", - "asset#0", - "ctrl_asa_opt_in#0", - "maybe_value%0#0", - "tmp%3#0" - ] - }, - "819": { - "error": "Wrong ASA Opt In ID", - "op": "assert // Wrong ASA Opt In ID", - "stack_out": [ - "asset#0", - "asset#0", - "ctrl_asa_opt_in#0", - "maybe_value%0#0" - ] - }, - "820": { - "op": "dig 1", - "stack_out": [ - "asset#0", - "asset#0", - "ctrl_asa_opt_in#0", - "maybe_value%0#0", - "ctrl_asa_opt_in#0 (copy)" - ] - }, - "822": { - "op": "gtxns Sender", - "defined_out": [ - "asset#0", - "ctrl_asa_opt_in#0", - "maybe_value%0#0", - "tmp%4#0" - ], - "stack_out": [ - "asset#0", - "asset#0", - "ctrl_asa_opt_in#0", - "maybe_value%0#0", - "tmp%4#0" - ] - }, - "824": { - "op": "txn Sender", - "defined_out": [ - "asset#0", - "ctrl_asa_opt_in#0", - "maybe_value%0#0", - "tmp%4#0", - "tmp%5#0" - ], - "stack_out": [ - "asset#0", - "asset#0", - "ctrl_asa_opt_in#0", - "maybe_value%0#0", - "tmp%4#0", - "tmp%5#0" - ] - }, - "826": { - "op": "==", - "defined_out": [ - "asset#0", - "ctrl_asa_opt_in#0", - "maybe_value%0#0", - "tmp%6#0" - ], - "stack_out": [ - "asset#0", - "asset#0", - "ctrl_asa_opt_in#0", - "maybe_value%0#0", - "tmp%6#0" - ] - }, - "827": { - "error": "Wrong ASA Opt In Sender", - "op": "assert // Wrong ASA Opt In Sender", - "stack_out": [ - "asset#0", - "asset#0", - "ctrl_asa_opt_in#0", - "maybe_value%0#0" - ] - }, - "828": { - "op": "dig 1", - "stack_out": [ - "asset#0", - "asset#0", - "ctrl_asa_opt_in#0", - "maybe_value%0#0", - "ctrl_asa_opt_in#0 (copy)" - ] - }, - "830": { - "op": "gtxns AssetReceiver", - "defined_out": [ - "asset#0", - "ctrl_asa_opt_in#0", - "maybe_value%0#0", - "tmp%7#0" - ], - "stack_out": [ - "asset#0", - "asset#0", - "ctrl_asa_opt_in#0", - "maybe_value%0#0", - "tmp%7#0" - ] - }, - "832": { - "op": "txn Sender", - "defined_out": [ - "asset#0", - "ctrl_asa_opt_in#0", - "maybe_value%0#0", - "tmp%7#0", - "tmp%8#0" - ], - "stack_out": [ - "asset#0", - "asset#0", - "ctrl_asa_opt_in#0", - "maybe_value%0#0", - "tmp%7#0", - "tmp%8#0" - ] - }, - "834": { - "op": "==", - "defined_out": [ - "asset#0", - "ctrl_asa_opt_in#0", - "maybe_value%0#0", - "tmp%9#0" - ], - "stack_out": [ - "asset#0", - "asset#0", - "ctrl_asa_opt_in#0", - "maybe_value%0#0", - "tmp%9#0" - ] - }, - "835": { - "error": "Wrong ASA Opt In Receiver", - "op": "assert // Wrong ASA Opt In Receiver", - "stack_out": [ - "asset#0", - "asset#0", - "ctrl_asa_opt_in#0", - "maybe_value%0#0" - ] - }, - "836": { - "op": "dig 1", - "stack_out": [ - "asset#0", - "asset#0", - "ctrl_asa_opt_in#0", - "maybe_value%0#0", - "ctrl_asa_opt_in#0 (copy)" - ] - }, - "838": { - "op": "gtxns AssetAmount", - "defined_out": [ - "asset#0", - "ctrl_asa_opt_in#0", - "maybe_value%0#0", - "tmp%10#0" - ], - "stack_out": [ - "asset#0", - "asset#0", - "ctrl_asa_opt_in#0", - "maybe_value%0#0", - "tmp%10#0" - ] - }, - "840": { - "op": "!", - "defined_out": [ - "asset#0", - "ctrl_asa_opt_in#0", - "maybe_value%0#0", - "tmp%11#0" - ], - "stack_out": [ - "asset#0", - "asset#0", - "ctrl_asa_opt_in#0", - "maybe_value%0#0", - "tmp%11#0" - ] - }, - "841": { - "error": "Wrong ASA Opt In Amount", - "op": "assert // Wrong ASA Opt In Amount", - "stack_out": [ - "asset#0", - "asset#0", - "ctrl_asa_opt_in#0", - "maybe_value%0#0" - ] - }, - "842": { - "op": "swap", - "stack_out": [ - "asset#0", - "asset#0", - "maybe_value%0#0", - "ctrl_asa_opt_in#0" - ] - }, - "843": { - "op": "gtxns AssetCloseTo", - "defined_out": [ - "asset#0", - "maybe_value%0#0", - "tmp%12#0" - ], - "stack_out": [ - "asset#0", - "asset#0", - "maybe_value%0#0", - "tmp%12#0" - ] - }, - "845": { - "op": "global ZeroAddress", - "defined_out": [ - "asset#0", - "maybe_value%0#0", - "tmp%12#0", - "tmp%13#0" - ], - "stack_out": [ - "asset#0", - "asset#0", - "maybe_value%0#0", - "tmp%12#0", - "tmp%13#0" - ] - }, - "847": { - "op": "==", - "defined_out": [ - "asset#0", - "maybe_value%0#0", - "tmp%14#0" - ], - "stack_out": [ - "asset#0", - "asset#0", - "maybe_value%0#0", - "tmp%14#0" - ] - }, - "848": { - "error": "Forbidden Close Out on Opt In", - "op": "assert // Forbidden Close Out on Opt In", - "stack_out": [ - "asset#0", - "asset#0", - "maybe_value%0#0" - ] - }, - "849": { - "op": "txn OnCompletion", - "defined_out": [ - "asset#0", - "maybe_value%0#0", - "tmp%15#0" - ], - "stack_out": [ - "asset#0", - "asset#0", - "maybe_value%0#0", - "tmp%15#0" - ] - }, - "851": { - "op": "intc_1 // OptIn", - "defined_out": [ - "OptIn", - "asset#0", - "maybe_value%0#0", - "tmp%15#0" - ], - "stack_out": [ - "asset#0", - "asset#0", - "maybe_value%0#0", - "tmp%15#0", - "OptIn" - ] - }, - "852": { - "op": "==", - "defined_out": [ - "asset#0", - "maybe_value%0#0", - "tmp%16#0" - ], - "stack_out": [ - "asset#0", - "asset#0", - "maybe_value%0#0", - "tmp%16#0" - ] - }, - "853": { - "error": "Wrong On Complete Action", - "op": "assert // Wrong On Complete Action", - "stack_out": [ - "asset#0", - "asset#0", - "maybe_value%0#0" - ] - }, - "854": { - "op": "txn Sender", - "defined_out": [ - "asset#0", - "maybe_value%0#0", - "tmp%17#0" - ], - "stack_out": [ - "asset#0", - "asset#0", - "maybe_value%0#0", - "tmp%17#0" - ] - }, - "856": { - "op": "uncover 2", - "stack_out": [ - "asset#0", - "maybe_value%0#0", - "tmp%17#0", - "asset#0" - ] - }, - "858": { - "op": "asset_holding_get AssetBalance", - "defined_out": [ - "asset#0", - "maybe_value%0#0", - "tmp%18#0", - "tmp%19#0" - ], - "stack_out": [ - "asset#0", - "maybe_value%0#0", - "tmp%18#0", - "tmp%19#0" - ] - }, - "860": { - "op": "bury 1", - "stack_out": [ - "asset#0", - "maybe_value%0#0", - "tmp%19#0" - ] - }, - "862": { - "error": "Missing Controlled ASA", - "op": "assert // Missing Controlled ASA", - "stack_out": [ - "asset#0", - "maybe_value%0#0" - ] - }, - "863": { - "op": "txn Sender", - "defined_out": [ - "asset#0", - "maybe_value%0#0", - "tmp%20#0" - ], - "stack_out": [ - "asset#0", - "maybe_value%0#0", - "tmp%20#0" - ] - }, - "865": { - "op": "bytec_3 // \"account_smart_asa_id\"", - "defined_out": [ - "\"account_smart_asa_id\"", - "asset#0", - "maybe_value%0#0", - "tmp%20#0" - ], - "stack_out": [ - "asset#0", - "maybe_value%0#0", - "tmp%20#0", - "\"account_smart_asa_id\"" - ] - }, - "866": { - "op": "uncover 2", - "stack_out": [ - "asset#0", - "tmp%20#0", - "\"account_smart_asa_id\"", - "maybe_value%0#0" - ] - }, - "868": { - "op": "app_local_put", - "stack_out": [ - "asset#0" - ] - }, - "869": { - "op": "txn Sender", - "defined_out": [ - "asset#0", - "tmp%21#0" - ], - "stack_out": [ - "asset#0", - "tmp%21#0" - ] - }, - "871": { - "op": "bytec 4 // \"account_frozen\"", - "defined_out": [ - "\"account_frozen\"", - "asset#0", - "tmp%21#0" - ], - "stack_out": [ - "asset#0", - "tmp%21#0", - "\"account_frozen\"" - ] - }, - "873": { - "op": "intc_0 // 0", - "stack_out": [ - "asset#0", - "tmp%21#0", - "\"account_frozen\"", - "0" - ] - }, - "874": { - "op": "app_local_put", - "stack_out": [ - "asset#0" - ] - }, - "875": { - "op": "intc_0 // 0", - "stack_out": [ - "asset#0", - "0" - ] - }, - "876": { - "op": "bytec 9 // \"default_frozen\"", - "defined_out": [ - "\"default_frozen\"", - "0", - "asset#0" - ], - "stack_out": [ - "asset#0", - "0", - "\"default_frozen\"" - ] - }, - "878": { - "op": "app_global_get_ex", - "defined_out": [ - "asset#0", - "maybe_exists%2#0", - "maybe_value%2#0" - ], - "stack_out": [ - "asset#0", - "maybe_value%2#0", - "maybe_exists%2#0" - ] - }, - "879": { - "error": "check self.default_frozen exists", - "op": "assert // check self.default_frozen exists", - "stack_out": [ - "asset#0", - "maybe_value%2#0" - ] - }, - "880": { - "op": "bnz asset_opt_in_if_body@3", - "stack_out": [ - "asset#0" - ] - }, - "883": { - "op": "txn Sender", - "defined_out": [ - "asset#0", - "tmp%22#0" - ], - "stack_out": [ - "asset#0", - "tmp%22#0" - ] - }, - "885": { - "op": "dig 1", - "stack_out": [ - "asset#0", - "tmp%22#0", - "asset#0" - ] - }, - "887": { - "op": "asset_holding_get AssetBalance", - "defined_out": [ - "asset#0", - "check%0#0", - "value%0#0" - ], - "stack_out": [ - "asset#0", - "value%0#0", - "check%0#0" - ] - }, - "889": { - "error": "account opted into asset", - "op": "assert // account opted into asset", - "stack_out": [ - "asset#0", - "value%0#0" - ] - }, - "890": { - "op": "bz asset_opt_in_after_if_else@4", - "stack_out": [ - "asset#0" - ] - }, - "893": { - "block": "asset_opt_in_if_body@3", - "stack_in": [ - "asset#0" - ], - "op": "txn Sender", - "defined_out": [ - "tmp%24#0" - ], - "stack_out": [ - "asset#0", - "tmp%24#0" - ] - }, - "895": { - "op": "bytec 4 // \"account_frozen\"", - "defined_out": [ - "\"account_frozen\"", - "tmp%24#0" - ], - "stack_out": [ - "asset#0", - "tmp%24#0", - "\"account_frozen\"" - ] - }, - "897": { - "op": "intc_1 // 1", - "defined_out": [ - "\"account_frozen\"", - "1", - "tmp%24#0" - ], - "stack_out": [ - "asset#0", - "tmp%24#0", - "\"account_frozen\"", - "1" - ] - }, - "898": { - "op": "app_local_put", - "stack_out": [ - "asset#0" - ] - }, - "899": { - "block": "asset_opt_in_after_if_else@4", - "stack_in": [ - "asset#0" - ], - "op": "intc_1 // 1", - "defined_out": [ - "1" - ], - "stack_out": [ - "asset#0", - "1" - ] - }, - "900": { - "op": "return", - "stack_out": [ - "asset#0" - ] - }, - "901": { - "subroutine": "smart_contracts.smart_asa.contract.SmartAsa.asset_config[routing]", - "params": {}, - "block": "asset_config", - "stack_in": [], - "op": "txna ApplicationArgs 1", - "defined_out": [ - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0" - ] - }, - "904": { - "op": "dup", - "defined_out": [ - "tmp%0#0", - "tmp%0#0 (copy)" - ], - "stack_out": [ - "tmp%0#0", - "tmp%0#0 (copy)" - ] - }, - "905": { - "op": "len", - "defined_out": [ - "len%0#0", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "len%0#0" - ] - }, - "906": { - "op": "intc_2 // 8", - "defined_out": [ - "8", - "len%0#0", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "len%0#0", - "8" - ] - }, - "907": { - "op": "==", - "defined_out": [ - "eq%0#0", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "eq%0#0" - ] - }, - "908": { - "error": "invalid number of bytes for arc4.uint64", - "op": "assert // invalid number of bytes for arc4.uint64", - "stack_out": [ - "tmp%0#0" - ] - }, - "909": { - "op": "btoi", - "defined_out": [ - "config_asset#0" - ], - "stack_out": [ - "config_asset#0" - ] - }, - "910": { - "op": "dup", - "defined_out": [ - "config_asset#0" - ], - "stack_out": [ - "config_asset#0", - "config_asset#0" - ] - }, - "911": { - "op": "txna ApplicationArgs 2" - }, - "914": { - "op": "dup", - "defined_out": [ - "config_asset#0", - "total#0" - ], - "stack_out": [ - "config_asset#0", - "config_asset#0", - "total#0", - "total#0" - ] - }, - "915": { - "op": "cover 2", - "defined_out": [ - "config_asset#0", - "total#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "config_asset#0", - "total#0" - ] - }, - "917": { - "op": "len", - "defined_out": [ - "config_asset#0", - "len%1#0", - "total#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "config_asset#0", - "len%1#0" - ] - }, - "918": { - "op": "intc_2 // 8", - "stack_out": [ - "config_asset#0", - "total#0", - "config_asset#0", - "len%1#0", - "8" - ] - }, - "919": { - "op": "==", - "defined_out": [ - "config_asset#0", - "eq%1#0", - "total#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "config_asset#0", - "eq%1#0" - ] - }, - "920": { - "error": "invalid number of bytes for arc4.uint64", - "op": "assert // invalid number of bytes for arc4.uint64", - "stack_out": [ - "config_asset#0", - "total#0", - "config_asset#0" - ] - }, - "921": { - "op": "txna ApplicationArgs 3" - }, - "924": { - "op": "dup", - "defined_out": [ - "config_asset#0", - "decimals#0", - "total#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "config_asset#0", - "decimals#0", - "decimals#0" - ] - }, - "925": { - "op": "cover 2", - "defined_out": [ - "config_asset#0", - "decimals#0", - "total#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "config_asset#0", - "decimals#0" - ] - }, - "927": { - "op": "len", - "defined_out": [ - "config_asset#0", - "decimals#0", - "len%2#0", - "total#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "config_asset#0", - "len%2#0" - ] - }, - "928": { - "op": "pushint 4 // 4", - "defined_out": [ - "4", - "config_asset#0", - "decimals#0", - "len%2#0", - "total#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "config_asset#0", - "len%2#0", - "4" - ] - }, - "930": { - "op": "==", - "defined_out": [ - "config_asset#0", - "decimals#0", - "eq%2#0", - "total#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "config_asset#0", - "eq%2#0" - ] - }, - "931": { - "error": "invalid number of bytes for arc4.uint32", - "op": "assert // invalid number of bytes for arc4.uint32", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "config_asset#0" - ] - }, - "932": { - "op": "txna ApplicationArgs 4" - }, - "935": { - "op": "dup", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "total#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "config_asset#0", - "default_frozen#0", - "default_frozen#0" - ] - }, - "936": { - "op": "cover 2", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "total#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "config_asset#0", - "default_frozen#0" - ] - }, - "938": { - "op": "len", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "len%3#0", - "total#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "config_asset#0", - "len%3#0" - ] - }, - "939": { - "op": "intc_1 // 1", - "defined_out": [ - "1", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "len%3#0", - "total#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "config_asset#0", - "len%3#0", - "1" - ] - }, - "940": { - "op": "==", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "eq%3#0", - "total#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "config_asset#0", - "eq%3#0" - ] - }, - "941": { - "error": "invalid number of bytes for arc4.bool", - "op": "assert // invalid number of bytes for arc4.bool", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "config_asset#0" - ] - }, - "942": { - "op": "txna ApplicationArgs 5" - }, - "945": { - "op": "dup", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "total#0", - "unit_name#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "config_asset#0", - "unit_name#0", - "unit_name#0" - ] - }, - "946": { - "op": "cover 2", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "config_asset#0", - "unit_name#0" - ] - }, - "948": { - "op": "dup", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "total#0", - "unit_name#0", - "unit_name#0 (copy)" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "config_asset#0", - "unit_name#0", - "unit_name#0 (copy)" - ] - }, - "949": { - "op": "intc_0 // 0", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "config_asset#0", - "unit_name#0", - "unit_name#0 (copy)", - "0" - ] - }, - "950": { - "error": "invalid array length header", - "op": "extract_uint16 // on error: invalid array length header", - "defined_out": [ - "aggregate%array_length%0#0", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "total#0", - "unit_name#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "config_asset#0", - "unit_name#0", - "aggregate%array_length%0#0" - ] - }, - "951": { - "op": "pushint 2 // 2", - "defined_out": [ - "2", - "aggregate%array_length%0#0", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "total#0", - "unit_name#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "config_asset#0", - "unit_name#0", - "aggregate%array_length%0#0", - "2" - ] - }, - "953": { - "op": "+", - "defined_out": [ - "add%0#0", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "total#0", - "unit_name#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "config_asset#0", - "unit_name#0", - "add%0#0" - ] - }, - "954": { - "op": "swap", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "config_asset#0", - "add%0#0", - "unit_name#0" - ] - }, - "955": { - "op": "len", - "defined_out": [ - "add%0#0", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "len%4#0", - "total#0", - "unit_name#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "config_asset#0", - "add%0#0", - "len%4#0" - ] - }, - "956": { - "op": "==", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "eq%4#0", - "total#0", - "unit_name#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "config_asset#0", - "eq%4#0" - ] - }, - "957": { - "error": "invalid number of bytes for arc4.dynamic_array", - "op": "assert // invalid number of bytes for arc4.dynamic_array", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "config_asset#0" - ] - }, - "958": { - "op": "txna ApplicationArgs 6" - }, - "961": { - "op": "dup", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "name#0", - "total#0", - "unit_name#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "config_asset#0", - "name#0", - "name#0" - ] - }, - "962": { - "op": "cover 2", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "config_asset#0", - "name#0" - ] - }, - "964": { - "op": "dup", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "name#0", - "name#0 (copy)", - "total#0", - "unit_name#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "config_asset#0", - "name#0", - "name#0 (copy)" - ] - }, - "965": { - "op": "intc_0 // 0", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "config_asset#0", - "name#0", - "name#0 (copy)", - "0" - ] - }, - "966": { - "error": "invalid array length header", - "op": "extract_uint16 // on error: invalid array length header", - "defined_out": [ - "aggregate%array_length%1#0", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "name#0", - "total#0", - "unit_name#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "config_asset#0", - "name#0", - "aggregate%array_length%1#0" - ] - }, - "967": { - "op": "pushint 2 // 2", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "config_asset#0", - "name#0", - "aggregate%array_length%1#0", - "2" - ] - }, - "969": { - "op": "+", - "defined_out": [ - "add%1#0", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "name#0", - "total#0", - "unit_name#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "config_asset#0", - "name#0", - "add%1#0" - ] - }, - "970": { - "op": "swap", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "config_asset#0", - "add%1#0", - "name#0" - ] - }, - "971": { - "op": "len", - "defined_out": [ - "add%1#0", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "len%5#0", - "name#0", - "total#0", - "unit_name#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "config_asset#0", - "add%1#0", - "len%5#0" - ] - }, - "972": { - "op": "==", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "eq%5#0", - "name#0", - "total#0", - "unit_name#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "config_asset#0", - "eq%5#0" - ] - }, - "973": { - "error": "invalid number of bytes for arc4.dynamic_array", - "op": "assert // invalid number of bytes for arc4.dynamic_array", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "config_asset#0" - ] - }, - "974": { - "op": "txna ApplicationArgs 7" - }, - "977": { - "op": "dup", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "config_asset#0", - "url#0", - "url#0" - ] - }, - "978": { - "op": "cover 2", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "config_asset#0", - "url#0" - ] - }, - "980": { - "op": "dup", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "name#0", - "total#0", - "unit_name#0", - "url#0", - "url#0 (copy)" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "config_asset#0", - "url#0", - "url#0 (copy)" - ] - }, - "981": { - "op": "intc_0 // 0", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "config_asset#0", - "url#0", - "url#0 (copy)", - "0" - ] - }, - "982": { - "error": "invalid array length header", - "op": "extract_uint16 // on error: invalid array length header", - "defined_out": [ - "aggregate%array_length%2#0", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "config_asset#0", - "url#0", - "aggregate%array_length%2#0" - ] - }, - "983": { - "op": "pushint 2 // 2", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "config_asset#0", - "url#0", - "aggregate%array_length%2#0", - "2" - ] - }, - "985": { - "op": "+", - "defined_out": [ - "add%2#0", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "config_asset#0", - "url#0", - "add%2#0" - ] - }, - "986": { - "op": "swap", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "config_asset#0", - "add%2#0", - "url#0" - ] - }, - "987": { - "op": "len", - "defined_out": [ - "add%2#0", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "len%6#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "config_asset#0", - "add%2#0", - "len%6#0" - ] - }, - "988": { - "op": "==", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "eq%6#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "config_asset#0", - "eq%6#0" - ] - }, - "989": { - "error": "invalid number of bytes for arc4.dynamic_array", - "op": "assert // invalid number of bytes for arc4.dynamic_array", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "config_asset#0" - ] - }, - "990": { - "op": "txna ApplicationArgs 8" - }, - "993": { - "op": "dup", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "metadata_hash#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "config_asset#0", - "metadata_hash#0", - "metadata_hash#0" - ] - }, - "994": { - "op": "cover 2", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "metadata_hash#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "config_asset#0", - "metadata_hash#0" - ] - }, - "996": { - "op": "dup", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "metadata_hash#0", - "metadata_hash#0 (copy)", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "config_asset#0", - "metadata_hash#0", - "metadata_hash#0 (copy)" - ] - }, - "997": { - "op": "intc_0 // 0", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "config_asset#0", - "metadata_hash#0", - "metadata_hash#0 (copy)", - "0" - ] - }, - "998": { - "error": "invalid array length header", - "op": "extract_uint16 // on error: invalid array length header", - "defined_out": [ - "aggregate%array_length%3#0", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "metadata_hash#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "config_asset#0", - "metadata_hash#0", - "aggregate%array_length%3#0" - ] - }, - "999": { - "op": "pushint 2 // 2", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "config_asset#0", - "metadata_hash#0", - "aggregate%array_length%3#0", - "2" - ] - }, - "1001": { - "op": "+", - "defined_out": [ - "add%3#0", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "metadata_hash#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "config_asset#0", - "metadata_hash#0", - "add%3#0" - ] - }, - "1002": { - "op": "swap", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "config_asset#0", - "add%3#0", - "metadata_hash#0" - ] - }, - "1003": { - "op": "len", - "defined_out": [ - "add%3#0", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "len%7#0", - "metadata_hash#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "config_asset#0", - "add%3#0", - "len%7#0" - ] - }, - "1004": { - "op": "==", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "eq%7#0", - "metadata_hash#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "config_asset#0", - "eq%7#0" - ] - }, - "1005": { - "error": "invalid number of bytes for arc4.dynamic_array", - "op": "assert // invalid number of bytes for arc4.dynamic_array", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "config_asset#0" - ] - }, - "1006": { - "op": "txna ApplicationArgs 9" - }, - "1009": { - "op": "dup", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "config_asset#0", - "manager_addr#0", - "manager_addr#0" - ] - }, - "1010": { - "op": "cover 2", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "config_asset#0", - "manager_addr#0" - ] - }, - "1012": { - "op": "len", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "len%8#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "config_asset#0", - "len%8#0" - ] - }, - "1013": { - "op": "intc_3 // 32", - "defined_out": [ - "32", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "len%8#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "config_asset#0", - "len%8#0", - "32" - ] - }, - "1014": { - "op": "==", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "eq%8#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "config_asset#0", - "eq%8#0" - ] - }, - "1015": { - "error": "invalid number of bytes for arc4.static_array", - "op": "assert // invalid number of bytes for arc4.static_array", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "config_asset#0" - ] - }, - "1016": { - "op": "txna ApplicationArgs 10" - }, - "1019": { - "op": "dup", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "config_asset#0", - "reserve_addr#0", - "reserve_addr#0" - ] - }, - "1020": { - "op": "cover 2", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "config_asset#0", - "reserve_addr#0" - ] - }, - "1022": { - "op": "dup", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "reserve_addr#0 (copy)", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "config_asset#0", - "reserve_addr#0", - "reserve_addr#0 (copy)" - ] - }, - "1023": { - "op": "len", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "len%9#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "config_asset#0", - "reserve_addr#0", - "len%9#0" - ] - }, - "1024": { - "op": "intc_3 // 32", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "config_asset#0", - "reserve_addr#0", - "len%9#0", - "32" - ] - }, - "1025": { - "op": "==", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "eq%9#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "config_asset#0", - "reserve_addr#0", - "eq%9#0" - ] - }, - "1026": { - "error": "invalid number of bytes for arc4.static_array", - "op": "assert // invalid number of bytes for arc4.static_array", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "config_asset#0", - "reserve_addr#0" - ] - }, - "1027": { - "op": "txna ApplicationArgs 11" - }, - "1030": { - "op": "dup", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "config_asset#0", - "reserve_addr#0", - "freeze_addr#0", - "freeze_addr#0" - ] - }, - "1031": { - "op": "cover 3", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "config_asset#0", - "reserve_addr#0", - "freeze_addr#0" - ] - }, - "1033": { - "op": "len", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "len%10#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "config_asset#0", - "reserve_addr#0", - "len%10#0" - ] - }, - "1034": { - "op": "intc_3 // 32", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "config_asset#0", - "reserve_addr#0", - "len%10#0", - "32" - ] - }, - "1035": { - "op": "==", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "eq%10#0", - "freeze_addr#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "config_asset#0", - "reserve_addr#0", - "eq%10#0" - ] - }, - "1036": { - "error": "invalid number of bytes for arc4.static_array", - "op": "assert // invalid number of bytes for arc4.static_array", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "config_asset#0", - "reserve_addr#0" - ] - }, - "1037": { - "op": "txna ApplicationArgs 12" - }, - "1040": { - "op": "dup", - "defined_out": [ - "clawback_addr#0", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "config_asset#0", - "reserve_addr#0", - "clawback_addr#0", - "clawback_addr#0" - ] - }, - "1041": { - "op": "cover 3", - "defined_out": [ - "clawback_addr#0", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "config_asset#0", - "reserve_addr#0", - "clawback_addr#0" - ] - }, - "1043": { - "op": "len", - "defined_out": [ - "clawback_addr#0", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "len%11#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "config_asset#0", - "reserve_addr#0", - "len%11#0" - ] - }, - "1044": { - "op": "intc_3 // 32", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "config_asset#0", - "reserve_addr#0", - "len%11#0", - "32" - ] - }, - "1045": { - "op": "==", - "defined_out": [ - "clawback_addr#0", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "eq%11#0", - "freeze_addr#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "config_asset#0", - "reserve_addr#0", - "eq%11#0" - ] - }, - "1046": { - "error": "invalid number of bytes for arc4.static_array", - "op": "assert // invalid number of bytes for arc4.static_array", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "config_asset#0", - "reserve_addr#0" - ] - }, - "1047": { - "op": "swap", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "reserve_addr#0", - "config_asset#0" - ] - }, - "1048": { - "callsub": "smart_contracts.smart_asa.contract.SmartAsa.assert_common_preconditions", - "op": "callsub assert_common_preconditions", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "reserve_addr#0" - ] - }, - "1051": { - "op": "txn Sender", - "defined_out": [ - "clawback_addr#0", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "tmp%0#1", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "reserve_addr#0", - "tmp%0#1" - ] - }, - "1053": { - "op": "intc_0 // 0", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "reserve_addr#0", - "tmp%0#1", - "0" - ] - }, - "1054": { - "op": "bytec 7 // \"manager_addr\"", - "defined_out": [ - "\"manager_addr\"", - "0", - "clawback_addr#0", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "tmp%0#1", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "reserve_addr#0", - "tmp%0#1", - "0", - "\"manager_addr\"" - ] - }, - "1056": { - "op": "app_global_get_ex", - "defined_out": [ - "clawback_addr#0", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "manager_addr#0", - "maybe_exists%0#0", - "maybe_value%0#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "tmp%0#1", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "reserve_addr#0", - "tmp%0#1", - "maybe_value%0#0", - "maybe_exists%0#0" - ] - }, - "1057": { - "error": "check self.manager_addr exists", - "op": "assert // check self.manager_addr exists", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "reserve_addr#0", - "tmp%0#1", - "maybe_value%0#0" - ] - }, - "1058": { - "op": "==", - "defined_out": [ - "clawback_addr#0", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "tmp%1#1", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "reserve_addr#0", - "tmp%1#1" - ] - }, - "1059": { - "error": "Unauthorized Manager", - "op": "assert // Unauthorized Manager", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "reserve_addr#0" - ] - }, - "1060": { - "op": "intc_0 // 0", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "reserve_addr#0", - "0" - ] - }, - "1061": { - "op": "bytec_1 // \"reserve_addr\"", - "defined_out": [ - "\"reserve_addr\"", - "0", - "clawback_addr#0", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "reserve_addr#0", - "0", - "\"reserve_addr\"" - ] - }, - "1062": { - "op": "app_global_get_ex", - "defined_out": [ - "clawback_addr#0", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "manager_addr#0", - "maybe_exists%1#0", - "maybe_value%1#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "reserve_addr#0", - "maybe_value%1#0", - "maybe_exists%1#0" - ] - }, - "1063": { - "error": "check self.reserve_addr exists", - "op": "assert // check self.reserve_addr exists", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "reserve_addr#0", - "maybe_value%1#0" - ] - }, - "1064": { - "op": "!=", - "defined_out": [ - "clawback_addr#0", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "tmp%2#1", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "tmp%2#1" - ] - }, - "1065": { - "op": "bz asset_config_after_if_else@3", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0" - ] - }, - "1068": { - "op": "intc_0 // 0", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "0" - ] - }, - "1069": { - "op": "bytec_1 // \"reserve_addr\"", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "0", - "\"reserve_addr\"" - ] - }, - "1070": { - "op": "app_global_get_ex", - "defined_out": [ - "clawback_addr#0", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "manager_addr#0", - "maybe_exists%2#0", - "maybe_value%2#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "maybe_value%2#0", - "maybe_exists%2#0" - ] - }, - "1071": { - "error": "check self.reserve_addr exists", - "op": "assert // check self.reserve_addr exists", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "maybe_value%2#0" - ] - }, - "1072": { - "op": "global ZeroAddress", - "defined_out": [ - "clawback_addr#0", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "manager_addr#0", - "maybe_value%2#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "tmp%3#1", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "maybe_value%2#0", - "tmp%3#1" - ] - }, - "1074": { - "op": "!=", - "defined_out": [ - "clawback_addr#0", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "tmp%4#1", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "tmp%4#1" - ] - }, - "1075": { - "error": "Reserve Address has been deleted", - "op": "assert // Reserve Address has been deleted", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0" - ] - }, - "1076": { - "block": "asset_config_after_if_else@3", - "stack_in": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0" - ], - "op": "intc_0 // 0", - "defined_out": [ - "0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "0" - ] - }, - "1077": { - "op": "bytec 5 // \"freeze_addr\"", - "defined_out": [ - "\"freeze_addr\"", - "0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "0", - "\"freeze_addr\"" - ] - }, - "1079": { - "op": "app_global_get_ex", - "defined_out": [ - "maybe_exists%3#0", - "maybe_value%3#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "maybe_value%3#0", - "maybe_exists%3#0" - ] - }, - "1080": { - "error": "check self.freeze_addr exists", - "op": "assert // check self.freeze_addr exists", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "maybe_value%3#0" - ] - }, - "1081": { - "op": "dig 2", - "defined_out": [ - "freeze_addr#0", - "maybe_value%3#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "maybe_value%3#0", - "freeze_addr#0" - ] - }, - "1083": { - "op": "!=", - "defined_out": [ - "freeze_addr#0", - "tmp%5#1" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "tmp%5#1" - ] - }, - "1084": { - "op": "bz asset_config_after_if_else@5", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0" - ] - }, - "1087": { - "op": "intc_0 // 0", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "0" - ] - }, - "1088": { - "op": "bytec 5 // \"freeze_addr\"", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "0", - "\"freeze_addr\"" - ] - }, - "1090": { - "op": "app_global_get_ex", - "defined_out": [ - "freeze_addr#0", - "maybe_exists%4#0", - "maybe_value%4#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "maybe_value%4#0", - "maybe_exists%4#0" - ] - }, - "1091": { - "error": "check self.freeze_addr exists", - "op": "assert // check self.freeze_addr exists", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "maybe_value%4#0" - ] - }, - "1092": { - "op": "global ZeroAddress", - "defined_out": [ - "freeze_addr#0", - "maybe_value%4#0", - "tmp%6#1" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "maybe_value%4#0", - "tmp%6#1" - ] - }, - "1094": { - "op": "!=", - "defined_out": [ - "freeze_addr#0", - "tmp%7#1" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "tmp%7#1" - ] - }, - "1095": { - "error": "Freeze Address has been deleted", - "op": "assert // Freeze Address has been deleted", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0" - ] - }, - "1096": { - "block": "asset_config_after_if_else@5", - "stack_in": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0" - ], - "op": "intc_0 // 0", - "defined_out": [ - "0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "0" - ] - }, - "1097": { - "op": "bytec_2 // \"clawback_addr\"", - "defined_out": [ - "\"clawback_addr\"", - "0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "0", - "\"clawback_addr\"" - ] - }, - "1098": { - "op": "app_global_get_ex", - "defined_out": [ - "maybe_exists%5#0", - "maybe_value%5#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "maybe_value%5#0", - "maybe_exists%5#0" - ] - }, - "1099": { - "error": "check self.clawback_addr exists", - "op": "assert // check self.clawback_addr exists", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "maybe_value%5#0" - ] - }, - "1100": { - "op": "dig 1", - "defined_out": [ - "clawback_addr#0", - "maybe_value%5#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "maybe_value%5#0", - "clawback_addr#0" - ] - }, - "1102": { - "op": "!=", - "defined_out": [ - "clawback_addr#0", - "tmp%8#1" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "tmp%8#1" - ] - }, - "1103": { - "op": "bz asset_config_after_if_else@7", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0" - ] - }, - "1106": { - "op": "intc_0 // 0", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "0" - ] - }, - "1107": { - "op": "bytec_2 // \"clawback_addr\"", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "0", - "\"clawback_addr\"" - ] - }, - "1108": { - "op": "app_global_get_ex", - "defined_out": [ - "clawback_addr#0", - "maybe_exists%6#0", - "maybe_value%6#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "maybe_value%6#0", - "maybe_exists%6#0" - ] - }, - "1109": { - "error": "check self.clawback_addr exists", - "op": "assert // check self.clawback_addr exists", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "maybe_value%6#0" - ] - }, - "1110": { - "op": "global ZeroAddress", - "defined_out": [ - "clawback_addr#0", - "maybe_value%6#0", - "tmp%9#1" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "maybe_value%6#0", - "tmp%9#1" - ] - }, - "1112": { - "op": "!=", - "defined_out": [ - "clawback_addr#0", - "tmp%10#1" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "tmp%10#1" - ] - }, - "1113": { - "error": "Clawback Address has been deleted", - "op": "assert // Clawback Address has been deleted", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0" - ] - }, - "1114": { - "block": "asset_config_after_if_else@7", - "stack_in": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0" - ], - "op": "dig 11", - "defined_out": [ - "config_asset#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "config_asset#0" - ] - }, - "1116": { - "callsub": "smart_contracts.smart_asa.contract.SmartAsa.circulating_supply", - "op": "callsub circulating_supply", - "defined_out": [ - "config_asset#0", - "tmp%11#1" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "tmp%11#1" - ] - }, - "1119": { - "op": "itob", - "defined_out": [ - "config_asset#0", - "tmp%12#1" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "tmp%12#1" - ] - }, - "1120": { - "op": "dig 11", - "defined_out": [ - "config_asset#0", - "tmp%12#1", - "total#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "tmp%12#1", - "total#0" - ] - }, - "1122": { - "op": "dup" - }, - "1123": { - "op": "uncover 2", - "defined_out": [ - "config_asset#0", - "tmp%12#1", - "total#0", - "total#0 (copy)" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "total#0", - "total#0 (copy)", - "tmp%12#1" - ] - }, - "1125": { - "op": "b>=", - "defined_out": [ - "config_asset#0", - "tmp%13#0", - "total#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "total#0", - "tmp%13#0" - ] - }, - "1126": { - "error": "Invalid Total, must be >= circulating supply", - "op": "assert // Invalid Total, must be >= circulating supply", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "total#0" - ] - }, - "1127": { - "op": "btoi", - "defined_out": [ - "config_asset#0", - "tmp%14#0", - "total#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "tmp%14#0" - ] - }, - "1128": { - "op": "bytec 8 // \"total\"", - "defined_out": [ - "\"total\"", - "config_asset#0", - "tmp%14#0", - "total#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "tmp%14#0", - "\"total\"" - ] - }, - "1130": { - "op": "swap", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "\"total\"", - "tmp%14#0" - ] - }, - "1131": { - "op": "app_global_put", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0" - ] - }, - "1132": { - "op": "dig 9", - "defined_out": [ - "config_asset#0", - "decimals#0", - "total#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "decimals#0" - ] - }, - "1134": { - "op": "btoi", - "defined_out": [ - "config_asset#0", - "decimals#0", - "tmp%15#0", - "total#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "tmp%15#0" - ] - }, - "1135": { - "op": "bytec 10 // \"decimals\"", - "defined_out": [ - "\"decimals\"", - "config_asset#0", - "decimals#0", - "tmp%15#0", - "total#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "tmp%15#0", - "\"decimals\"" - ] - }, - "1137": { - "op": "swap", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "\"decimals\"", - "tmp%15#0" - ] - }, - "1138": { - "op": "app_global_put", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0" - ] - }, - "1139": { - "op": "dig 8", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "total#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "default_frozen#0" - ] - }, - "1141": { - "op": "intc_0 // 0", - "defined_out": [ - "0", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "total#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "default_frozen#0", - "0" - ] - }, - "1142": { - "op": "getbit", - "defined_out": [ - "aggregate%get_bit%0#0", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "total#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "aggregate%get_bit%0#0" - ] - }, - "1143": { - "op": "bytec 9 // \"default_frozen\"", - "defined_out": [ - "\"default_frozen\"", - "aggregate%get_bit%0#0", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "total#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "aggregate%get_bit%0#0", - "\"default_frozen\"" - ] - }, - "1145": { - "op": "swap", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "\"default_frozen\"", - "aggregate%get_bit%0#0" - ] - }, - "1146": { - "op": "app_global_put", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0" - ] - }, - "1147": { - "op": "dig 7", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "total#0", - "unit_name#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "unit_name#0" - ] - }, - "1149": { - "op": "extract 2 0", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "tmp%17#0", - "total#0", - "unit_name#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "tmp%17#0" - ] - }, - "1152": { - "op": "bytec 11 // \"unit_name\"", - "defined_out": [ - "\"unit_name\"", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "tmp%17#0", - "total#0", - "unit_name#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "tmp%17#0", - "\"unit_name\"" - ] - }, - "1154": { - "op": "swap", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "\"unit_name\"", - "tmp%17#0" - ] - }, - "1155": { - "op": "app_global_put", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0" - ] - }, - "1156": { - "op": "dig 6", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "name#0", - "total#0", - "unit_name#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "name#0" - ] - }, - "1158": { - "op": "extract 2 0", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "name#0", - "tmp%18#0", - "total#0", - "unit_name#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "tmp%18#0" - ] - }, - "1161": { - "op": "bytec 12 // \"name\"", - "defined_out": [ - "\"name\"", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "name#0", - "tmp%18#0", - "total#0", - "unit_name#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "tmp%18#0", - "\"name\"" - ] - }, - "1163": { - "op": "swap", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "\"name\"", - "tmp%18#0" - ] - }, - "1164": { - "op": "app_global_put", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0" - ] - }, - "1165": { - "op": "dig 5", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "url#0" - ] - }, - "1167": { - "op": "extract 2 0", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "name#0", - "tmp%19#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "tmp%19#0" - ] - }, - "1170": { - "op": "bytec 13 // \"url\"", - "defined_out": [ - "\"url\"", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "name#0", - "tmp%19#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "tmp%19#0", - "\"url\"" - ] - }, - "1172": { - "op": "swap", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "\"url\"", - "tmp%19#0" - ] - }, - "1173": { - "op": "app_global_put", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0" - ] - }, - "1174": { - "op": "dig 4", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "metadata_hash#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "metadata_hash#0" - ] - }, - "1176": { - "op": "extract 2 0", - "defined_out": [ - "config_asset#0", - "decimals#0", - "default_frozen#0", - "metadata_hash#0", - "name#0", - "tmp%20#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "tmp%20#0" - ] - }, - "1179": { - "op": "bytec 14 // \"metadata_hash\"", - "defined_out": [ - "\"metadata_hash\"", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "metadata_hash#0", - "name#0", - "tmp%20#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "tmp%20#0", - "\"metadata_hash\"" - ] - }, - "1181": { - "op": "swap", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "\"metadata_hash\"", - "tmp%20#0" - ] - }, - "1182": { - "op": "app_global_put", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0" - ] - }, - "1183": { - "op": "bytec 7 // \"manager_addr\"", - "defined_out": [ - "\"manager_addr\"", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "metadata_hash#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "\"manager_addr\"" - ] - }, - "1185": { - "op": "dig 4", - "defined_out": [ - "\"manager_addr\"", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "\"manager_addr\"", - "manager_addr#0" - ] - }, - "1187": { - "op": "app_global_put", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0" - ] - }, - "1188": { - "op": "bytec_1 // \"reserve_addr\"", - "defined_out": [ - "\"reserve_addr\"", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "\"reserve_addr\"" - ] - }, - "1189": { - "op": "dig 3", - "defined_out": [ - "\"reserve_addr\"", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "\"reserve_addr\"", - "reserve_addr#0" - ] - }, - "1191": { - "op": "app_global_put", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0" - ] - }, - "1192": { - "op": "bytec 5 // \"freeze_addr\"", - "defined_out": [ - "\"freeze_addr\"", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "\"freeze_addr\"" - ] - }, - "1194": { - "op": "dig 2", - "defined_out": [ - "\"freeze_addr\"", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "\"freeze_addr\"", - "freeze_addr#0" - ] - }, - "1196": { - "op": "app_global_put", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0" - ] - }, - "1197": { - "op": "bytec_2 // \"clawback_addr\"", - "defined_out": [ - "\"clawback_addr\"", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "\"clawback_addr\"" - ] - }, - "1198": { - "op": "dig 1", - "defined_out": [ - "\"clawback_addr\"", - "clawback_addr#0", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "\"clawback_addr\"", - "clawback_addr#0" - ] - }, - "1200": { - "op": "app_global_put", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0" - ] - }, - "1201": { - "op": "intc_1 // 1", - "defined_out": [ - "1", - "clawback_addr#0", - "config_asset#0", - "decimals#0", - "default_frozen#0", - "freeze_addr#0", - "manager_addr#0", - "metadata_hash#0", - "name#0", - "reserve_addr#0", - "total#0", - "unit_name#0", - "url#0" - ], - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0", - "1" - ] - }, - "1202": { - "op": "return", - "stack_out": [ - "config_asset#0", - "total#0", - "decimals#0", - "default_frozen#0", - "unit_name#0", - "name#0", - "url#0", - "metadata_hash#0", - "manager_addr#0", - "reserve_addr#0", - "freeze_addr#0", - "clawback_addr#0" - ] - }, - "1203": { - "subroutine": "smart_contracts.smart_asa.contract.SmartAsa.asset_transfer[routing]", - "params": {}, - "block": "asset_transfer", - "stack_in": [], - "op": "txna ApplicationArgs 1", - "defined_out": [ - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0" - ] - }, - "1206": { - "op": "dup", - "defined_out": [ - "tmp%0#0", - "tmp%0#0 (copy)" - ], - "stack_out": [ - "tmp%0#0", - "tmp%0#0 (copy)" - ] - }, - "1207": { - "op": "len", - "defined_out": [ - "len%0#0", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "len%0#0" - ] - }, - "1208": { - "op": "intc_2 // 8", - "defined_out": [ - "8", - "len%0#0", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "len%0#0", - "8" - ] - }, - "1209": { - "op": "==", - "defined_out": [ - "eq%0#0", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "eq%0#0" - ] - }, - "1210": { - "error": "invalid number of bytes for arc4.uint64", - "op": "assert // invalid number of bytes for arc4.uint64", - "stack_out": [ - "tmp%0#0" - ] - }, - "1211": { - "op": "btoi", - "defined_out": [ - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0" - ] - }, - "1212": { - "op": "dup", - "defined_out": [ - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "xfer_asset#0" - ] - }, - "1213": { - "op": "txna ApplicationArgs 2" - }, - "1216": { - "op": "dup", - "defined_out": [ - "asset_amount#0", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "xfer_asset#0", - "asset_amount#0", - "asset_amount#0" - ] - }, - "1217": { - "op": "cover 2", - "defined_out": [ - "asset_amount#0", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "xfer_asset#0", - "asset_amount#0" - ] - }, - "1219": { - "op": "len", - "defined_out": [ - "asset_amount#0", - "len%1#0", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "xfer_asset#0", - "len%1#0" - ] - }, - "1220": { - "op": "intc_2 // 8", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "xfer_asset#0", - "len%1#0", - "8" - ] - }, - "1221": { - "op": "==", - "defined_out": [ - "asset_amount#0", - "eq%1#0", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "xfer_asset#0", - "eq%1#0" - ] - }, - "1222": { - "error": "invalid number of bytes for arc4.uint64", - "op": "assert // invalid number of bytes for arc4.uint64", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "xfer_asset#0" - ] - }, - "1223": { - "op": "txna ApplicationArgs 3" - }, - "1226": { - "op": "dup", - "defined_out": [ - "asset_amount#0", - "asset_sender#0", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "xfer_asset#0", - "asset_sender#0", - "asset_sender#0" - ] - }, - "1227": { - "op": "cover 2", - "defined_out": [ - "asset_amount#0", - "asset_sender#0", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "xfer_asset#0", - "asset_sender#0" - ] - }, - "1229": { - "op": "dup", - "defined_out": [ - "asset_amount#0", - "asset_sender#0", - "asset_sender#0 (copy)", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "xfer_asset#0", - "asset_sender#0", - "asset_sender#0 (copy)" - ] - }, - "1230": { - "op": "len", - "defined_out": [ - "asset_amount#0", - "asset_sender#0", - "len%2#0", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "xfer_asset#0", - "asset_sender#0", - "len%2#0" - ] - }, - "1231": { - "op": "intc_3 // 32", - "defined_out": [ - "32", - "asset_amount#0", - "asset_sender#0", - "len%2#0", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "xfer_asset#0", - "asset_sender#0", - "len%2#0", - "32" - ] - }, - "1232": { - "op": "==", - "defined_out": [ - "asset_amount#0", - "asset_sender#0", - "eq%2#0", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "xfer_asset#0", - "asset_sender#0", - "eq%2#0" - ] - }, - "1233": { - "error": "invalid number of bytes for arc4.static_array", - "op": "assert // invalid number of bytes for arc4.static_array", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "xfer_asset#0", - "asset_sender#0" - ] - }, - "1234": { - "op": "txna ApplicationArgs 4" - }, - "1237": { - "op": "dup", - "defined_out": [ - "asset_amount#0", - "asset_receiver#0", - "asset_sender#0", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "xfer_asset#0", - "asset_sender#0", - "asset_receiver#0", - "asset_receiver#0" - ] - }, - "1238": { - "op": "cover 3", - "defined_out": [ - "asset_amount#0", - "asset_receiver#0", - "asset_sender#0", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "xfer_asset#0", - "asset_sender#0", - "asset_receiver#0" - ] - }, - "1240": { - "op": "len", - "defined_out": [ - "asset_amount#0", - "asset_receiver#0", - "asset_sender#0", - "len%3#0", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "xfer_asset#0", - "asset_sender#0", - "len%3#0" - ] - }, - "1241": { - "op": "intc_3 // 32", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "xfer_asset#0", - "asset_sender#0", - "len%3#0", - "32" - ] - }, - "1242": { - "op": "==", - "defined_out": [ - "asset_amount#0", - "asset_receiver#0", - "asset_sender#0", - "eq%3#0", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "xfer_asset#0", - "asset_sender#0", - "eq%3#0" - ] - }, - "1243": { - "error": "invalid number of bytes for arc4.static_array", - "op": "assert // invalid number of bytes for arc4.static_array", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "xfer_asset#0", - "asset_sender#0" - ] - }, - "1244": { - "op": "swap", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "xfer_asset#0" - ] - }, - "1245": { - "callsub": "smart_contracts.smart_asa.contract.SmartAsa.assert_common_preconditions", - "op": "callsub assert_common_preconditions", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0" - ] - }, - "1248": { - "op": "global CurrentApplicationAddress", - "defined_out": [ - "asset_amount#0", - "asset_receiver#0", - "asset_sender#0", - "tmp%0#1", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "tmp%0#1" - ] - }, - "1250": { - "op": "==", - "defined_out": [ - "asset_amount#0", - "asset_receiver#0", - "asset_sender#0", - "tmp%1#1", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "tmp%1#1" - ] - }, - "1251": { - "op": "bz asset_transfer_else_body@3", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0" - ] - }, - "1254": { - "op": "dig 2", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_amount#0" - ] - }, - "1256": { - "op": "btoi", - "defined_out": [ - "asset_amount#0", - "asset_amount#1", - "asset_receiver#0", - "asset_sender#0", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_amount#1" - ] - }, - "1257": { - "op": "txn Sender", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_amount#1", - "tmp%0#1" - ] - }, - "1259": { - "op": "intc_0 // 0", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_amount#1", - "tmp%0#1", - "0" - ] - }, - "1260": { - "op": "bytec_1 // \"reserve_addr\"", - "defined_out": [ - "\"reserve_addr\"", - "0", - "asset_amount#0", - "asset_amount#1", - "asset_receiver#0", - "asset_sender#0", - "tmp%0#1", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_amount#1", - "tmp%0#1", - "0", - "\"reserve_addr\"" - ] - }, - "1261": { - "op": "app_global_get_ex", - "defined_out": [ - "asset_amount#0", - "asset_amount#1", - "asset_receiver#0", - "asset_sender#0", - "maybe_exists%0#0", - "maybe_value%0#0", - "tmp%0#1", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_amount#1", - "tmp%0#1", - "maybe_value%0#0", - "maybe_exists%0#0" - ] - }, - "1262": { - "error": "check self.reserve_addr exists", - "op": "assert // check self.reserve_addr exists", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_amount#1", - "tmp%0#1", - "maybe_value%0#0" - ] - }, - "1263": { - "op": "==", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_amount#1", - "tmp%1#1" - ] - }, - "1264": { - "error": "Unauthorized Reserve", - "op": "assert // Unauthorized Reserve", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_amount#1" - ] - }, - "1265": { - "op": "global CurrentApplicationAddress", - "defined_out": [ - "asset_amount#0", - "asset_amount#1", - "asset_receiver#0", - "asset_sender#0", - "tmp%2#4", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_amount#1", - "tmp%2#4" - ] - }, - "1267": { - "op": "dig 2", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_amount#1", - "tmp%2#4", - "asset_receiver#0" - ] - }, - "1269": { - "op": "dup" - }, - "1270": { - "op": "uncover 2", - "defined_out": [ - "asset_amount#0", - "asset_amount#1", - "asset_receiver#0", - "asset_receiver#0 (copy)", - "asset_sender#0", - "tmp%2#4", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_amount#1", - "asset_receiver#0", - "asset_receiver#0 (copy)", - "tmp%2#4" - ] - }, - "1272": { - "op": "!=", - "defined_out": [ - "asset_amount#0", - "asset_amount#1", - "asset_receiver#0", - "asset_sender#0", - "tmp%3#2", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_amount#1", - "asset_receiver#0", - "tmp%3#2" - ] - }, - "1273": { - "error": "Forbidden self minting", - "op": "assert // Forbidden self minting", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_amount#1", - "asset_receiver#0" - ] - }, - "1274": { - "op": "intc_0 // 0", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_amount#1", - "asset_receiver#0", - "0" - ] - }, - "1275": { - "op": "bytec_0 // \"smart_asa_id\"", - "defined_out": [ - "\"smart_asa_id\"", - "0", - "asset_amount#0", - "asset_amount#1", - "asset_receiver#0", - "asset_sender#0", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_amount#1", - "asset_receiver#0", - "0", - "\"smart_asa_id\"" - ] - }, - "1276": { - "op": "app_global_get_ex", - "defined_out": [ - "asset_amount#0", - "asset_amount#1", - "asset_receiver#0", - "asset_sender#0", - "maybe_exists%1#0", - "maybe_value%1#0", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_amount#1", - "asset_receiver#0", - "maybe_value%1#0", - "maybe_exists%1#0" - ] - }, - "1277": { - "error": "check self.smart_asa_id exists", - "op": "assert // check self.smart_asa_id exists", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_amount#1", - "asset_receiver#0", - "maybe_value%1#0" - ] - }, - "1278": { - "callsub": "smart_contracts.smart_asa.contract.SmartAsa.circulating_supply", - "op": "callsub circulating_supply", - "defined_out": [ - "asset_amount#0", - "asset_amount#1", - "asset_receiver#0", - "asset_sender#0", - "tmp%4#4", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_amount#1", - "asset_receiver#0", - "tmp%4#4" - ] - }, - "1281": { - "op": "uncover 2", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_receiver#0", - "tmp%4#4", - "asset_amount#1" - ] - }, - "1283": { - "op": "+", - "defined_out": [ - "asset_amount#0", - "asset_receiver#0", - "asset_sender#0", - "tmp%5#4", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_receiver#0", - "tmp%5#4" - ] - }, - "1284": { - "op": "intc_0 // 0", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_receiver#0", - "tmp%5#4", - "0" - ] - }, - "1285": { - "op": "bytec 8 // \"total\"", - "defined_out": [ - "\"total\"", - "0", - "asset_amount#0", - "asset_receiver#0", - "asset_sender#0", - "tmp%5#4", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_receiver#0", - "tmp%5#4", - "0", - "\"total\"" - ] - }, - "1287": { - "op": "app_global_get_ex", - "defined_out": [ - "asset_amount#0", - "asset_receiver#0", - "asset_sender#0", - "maybe_exists%2#0", - "maybe_value%2#0", - "tmp%5#4", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_receiver#0", - "tmp%5#4", - "maybe_value%2#0", - "maybe_exists%2#0" - ] - }, - "1288": { - "error": "check self.total exists", - "op": "assert // check self.total exists", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_receiver#0", - "tmp%5#4", - "maybe_value%2#0" - ] - }, - "1289": { - "op": "<=", - "defined_out": [ - "asset_amount#0", - "asset_receiver#0", - "asset_sender#0", - "tmp%6#1", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_receiver#0", - "tmp%6#1" - ] - }, - "1290": { - "error": "Forbidden over minting", - "op": "assert // Forbidden over minting", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_receiver#0" - ] - }, - "1291": { - "op": "intc_0 // 0", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_receiver#0", - "0" - ] - }, - "1292": { - "op": "bytec_3 // \"account_smart_asa_id\"", - "defined_out": [ - "\"account_smart_asa_id\"", - "0", - "asset_amount#0", - "asset_receiver#0", - "asset_sender#0", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_receiver#0", - "0", - "\"account_smart_asa_id\"" - ] - }, - "1293": { - "op": "app_local_get_ex", - "defined_out": [ - "asset_amount#0", - "asset_receiver#0", - "asset_sender#0", - "maybe_exists%3#2", - "maybe_value%3#2", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%3#2", - "maybe_exists%3#2" - ] - }, - "1294": { - "error": "check self.account_smart_asa_id exists for account", - "op": "assert // check self.account_smart_asa_id exists for account", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%3#2" - ] - }, - "1295": { - "op": "intc_0 // 0", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%3#2", - "0" - ] - }, - "1296": { - "op": "bytec_0 // \"smart_asa_id\"", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%3#2", - "0", - "\"smart_asa_id\"" - ] - }, - "1297": { - "op": "app_global_get_ex", - "defined_out": [ - "asset_amount#0", - "asset_receiver#0", - "asset_sender#0", - "maybe_exists%4#0", - "maybe_value%3#2", - "maybe_value%4#0", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%3#2", - "maybe_value%4#0", - "maybe_exists%4#0" - ] - }, - "1298": { - "error": "check self.smart_asa_id exists", - "op": "assert // check self.smart_asa_id exists", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%3#2", - "maybe_value%4#0" - ] - }, - "1299": { - "op": "==", - "defined_out": [ - "asset_amount#0", - "asset_receiver#0", - "asset_sender#0", - "tmp%7#1", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "tmp%7#1" - ] - }, - "1300": { - "error": "Invalid Controlled ASA ID", - "op": "assert // Invalid Controlled ASA ID", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0" - ] - }, - "1301": { - "op": "intc_0 // 0", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "0" - ] - }, - "1302": { - "op": "bytec 6 // \"global_frozen\"", - "defined_out": [ - "\"global_frozen\"", - "0", - "asset_amount#0", - "asset_receiver#0", - "asset_sender#0", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "0", - "\"global_frozen\"" - ] - }, - "1304": { - "op": "app_global_get_ex", - "defined_out": [ - "asset_amount#0", - "asset_receiver#0", - "asset_sender#0", - "maybe_exists%5#0", - "maybe_value%5#0", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%5#0", - "maybe_exists%5#0" - ] - }, - "1305": { - "error": "check self.global_frozen exists", - "op": "assert // check self.global_frozen exists", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%5#0" - ] - }, - "1306": { - "op": "!", - "defined_out": [ - "asset_amount#0", - "asset_receiver#0", - "asset_sender#0", - "tmp%8#0", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "tmp%8#0" - ] - }, - "1307": { - "error": "Smart ASA is global frozen", - "op": "assert // Smart ASA is global frozen", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0" - ] - }, - "1308": { - "op": "intc_0 // 0", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "0" - ] - }, - "1309": { - "op": "bytec_1 // \"reserve_addr\"", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "0", - "\"reserve_addr\"" - ] - }, - "1310": { - "op": "app_global_get_ex", - "defined_out": [ - "asset_amount#0", - "asset_receiver#0", - "asset_sender#0", - "maybe_exists%6#0", - "maybe_value%6#2", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%6#2", - "maybe_exists%6#0" - ] - }, - "1311": { - "error": "check self.reserve_addr exists", - "op": "assert // check self.reserve_addr exists", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%6#2" - ] - }, - "1312": { - "op": "intc_0 // 0", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%6#2", - "0" - ] - }, - "1313": { - "op": "bytec_2 // \"clawback_addr\"", - "defined_out": [ - "\"clawback_addr\"", - "0", - "asset_amount#0", - "asset_receiver#0", - "asset_sender#0", - "maybe_value%6#2", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%6#2", - "0", - "\"clawback_addr\"" - ] - }, - "1314": { - "op": "app_global_get_ex", - "defined_out": [ - "asset_amount#0", - "asset_receiver#0", - "asset_sender#0", - "maybe_exists%7#0", - "maybe_value%6#2", - "maybe_value%7#0", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%6#2", - "maybe_value%7#0", - "maybe_exists%7#0" - ] - }, - "1315": { - "error": "check self.clawback_addr exists", - "op": "assert // check self.clawback_addr exists", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%6#2", - "maybe_value%7#0" - ] - }, - "1316": { - "op": "!=", - "defined_out": [ - "asset_amount#0", - "asset_receiver#0", - "asset_sender#0", - "tmp%9#0", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "tmp%9#0" - ] - }, - "1317": { - "op": "bz asset_transfer_after_if_else@10", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0" - ] - }, - "1320": { - "op": "dup", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_receiver#0" - ] - }, - "1321": { - "op": "intc_0 // 0", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_receiver#0", - "0" - ] - }, - "1322": { - "op": "bytec 4 // \"account_frozen\"", - "defined_out": [ - "\"account_frozen\"", - "0", - "asset_amount#0", - "asset_receiver#0", - "asset_sender#0", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_receiver#0", - "0", - "\"account_frozen\"" - ] - }, - "1324": { - "op": "app_local_get_ex", - "defined_out": [ - "asset_amount#0", - "asset_receiver#0", - "asset_sender#0", - "maybe_exists%8#0", - "maybe_value%8#0", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%8#0", - "maybe_exists%8#0" - ] - }, - "1325": { - "error": "check self.account_frozen exists for account", - "op": "assert // check self.account_frozen exists for account", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%8#0" - ] - }, - "1326": { - "op": "!", - "defined_out": [ - "asset_amount#0", - "asset_receiver#0", - "asset_sender#0", - "tmp%10#0", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "tmp%10#0" - ] - }, - "1327": { - "error": "Receiver account is frozen", - "op": "assert // Receiver account is frozen", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0" - ] - }, - "1328": { - "block": "asset_transfer_after_if_else@10", - "stack_in": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0" - ], - "op": "dig 2", - "defined_out": [ - "asset_amount#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_amount#0" - ] - }, - "1330": { - "op": "btoi", - "defined_out": [ - "asset_amount#0", - "tmp%7#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "tmp%7#0" - ] - }, - "1331": { - "op": "dig 4", - "defined_out": [ - "asset_amount#0", - "tmp%7#0", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "tmp%7#0", - "xfer_asset#0" - ] - }, - "1333": { - "op": "swap", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "xfer_asset#0", - "tmp%7#0" - ] - }, - "1334": { - "op": "dig 3", - "defined_out": [ - "asset_amount#0", - "asset_sender#0", - "tmp%7#0", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "xfer_asset#0", - "tmp%7#0", - "asset_sender#0" - ] - }, - "1336": { - "op": "dig 3", - "defined_out": [ - "asset_amount#0", - "asset_receiver#0", - "asset_sender#0", - "tmp%7#0", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "xfer_asset#0", - "tmp%7#0", - "asset_sender#0", - "asset_receiver#0" - ] - }, - "1338": { - "callsub": "smart_contracts.smart_asa.contract.SmartAsa.inner_asset_transfer", - "op": "callsub inner_asset_transfer", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0" - ] - }, - "1341": { - "op": "intc_1 // 1", - "defined_out": [ - "1", - "asset_amount#0", - "asset_receiver#0", - "asset_sender#0", - "xfer_asset#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "1" - ] - }, - "1342": { - "op": "return", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0" - ] - }, - "1343": { - "block": "asset_transfer_else_body@3", - "stack_in": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0" - ], - "op": "dup" - }, - "1344": { - "op": "global CurrentApplicationAddress", - "defined_out": [ - "asset_receiver#0", - "tmp%3#1" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_receiver#0", - "tmp%3#1" - ] - }, - "1346": { - "op": "==", - "defined_out": [ - "asset_receiver#0", - "tmp%4#1" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "tmp%4#1" - ] - }, - "1347": { - "op": "bz asset_transfer_else_body@5", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0" - ] - }, - "1350": { - "op": "txn Sender", - "defined_out": [ - "asset_receiver#0", - "tmp%0#1" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "tmp%0#1" - ] - }, - "1352": { - "op": "intc_0 // 0", - "defined_out": [ - "0", - "asset_receiver#0", - "tmp%0#1" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "tmp%0#1", - "0" - ] - }, - "1353": { - "op": "bytec_1 // \"reserve_addr\"", - "defined_out": [ - "\"reserve_addr\"", - "0", - "asset_receiver#0", - "tmp%0#1" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "tmp%0#1", - "0", - "\"reserve_addr\"" - ] - }, - "1354": { - "op": "app_global_get_ex", - "defined_out": [ - "asset_receiver#0", - "maybe_exists%0#0", - "maybe_value%0#0", - "tmp%0#1" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "tmp%0#1", - "maybe_value%0#0", - "maybe_exists%0#0" - ] - }, - "1355": { - "error": "check self.reserve_addr exists", - "op": "assert // check self.reserve_addr exists", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "tmp%0#1", - "maybe_value%0#0" - ] - }, - "1356": { - "op": "swap", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%0#0", - "tmp%0#1" - ] - }, - "1357": { - "op": "dig 1", - "defined_out": [ - "asset_receiver#0", - "maybe_value%0#0", - "maybe_value%0#0 (copy)", - "tmp%0#1" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%0#0", - "tmp%0#1", - "maybe_value%0#0 (copy)" - ] - }, - "1359": { - "op": "==", - "defined_out": [ - "asset_receiver#0", - "maybe_value%0#0", - "tmp%1#1" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%0#0", - "tmp%1#1" - ] - }, - "1360": { - "error": "Unauthorized Reserve", - "op": "assert // Unauthorized Reserve", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%0#0" - ] - }, - "1361": { - "op": "dig 2", - "defined_out": [ - "asset_receiver#0", - "asset_sender#0", - "maybe_value%0#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%0#0", - "asset_sender#0" - ] - }, - "1363": { - "op": "intc_0 // 0", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%0#0", - "asset_sender#0", - "0" - ] - }, - "1364": { - "op": "bytec_3 // \"account_smart_asa_id\"", - "defined_out": [ - "\"account_smart_asa_id\"", - "0", - "asset_receiver#0", - "asset_sender#0", - "maybe_value%0#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%0#0", - "asset_sender#0", - "0", - "\"account_smart_asa_id\"" - ] - }, - "1365": { - "op": "app_local_get_ex", - "defined_out": [ - "asset_receiver#0", - "asset_sender#0", - "maybe_exists%1#0", - "maybe_value%0#0", - "maybe_value%1#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%0#0", - "maybe_value%1#0", - "maybe_exists%1#0" - ] - }, - "1366": { - "error": "check self.account_smart_asa_id exists for account", - "op": "assert // check self.account_smart_asa_id exists for account", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%0#0", - "maybe_value%1#0" - ] - }, - "1367": { - "op": "intc_0 // 0", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%0#0", - "maybe_value%1#0", - "0" - ] - }, - "1368": { - "op": "bytec_0 // \"smart_asa_id\"", - "defined_out": [ - "\"smart_asa_id\"", - "0", - "asset_receiver#0", - "asset_sender#0", - "maybe_value%0#0", - "maybe_value%1#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%0#0", - "maybe_value%1#0", - "0", - "\"smart_asa_id\"" - ] - }, - "1369": { - "op": "app_global_get_ex", - "defined_out": [ - "asset_receiver#0", - "asset_sender#0", - "maybe_exists%2#0", - "maybe_value%0#0", - "maybe_value%1#0", - "maybe_value%2#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%0#0", - "maybe_value%1#0", - "maybe_value%2#0", - "maybe_exists%2#0" - ] - }, - "1370": { - "error": "check self.smart_asa_id exists", - "op": "assert // check self.smart_asa_id exists", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%0#0", - "maybe_value%1#0", - "maybe_value%2#0" - ] - }, - "1371": { - "op": "==", - "defined_out": [ - "asset_receiver#0", - "asset_sender#0", - "maybe_value%0#0", - "tmp%2#2" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%0#0", - "tmp%2#2" - ] - }, - "1372": { - "error": "Invalid Controlled ASA ID", - "op": "assert // Invalid Controlled ASA ID", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%0#0" - ] - }, - "1373": { - "op": "intc_0 // 0", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%0#0", - "0" - ] - }, - "1374": { - "op": "bytec 6 // \"global_frozen\"", - "defined_out": [ - "\"global_frozen\"", - "0", - "asset_receiver#0", - "asset_sender#0", - "maybe_value%0#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%0#0", - "0", - "\"global_frozen\"" - ] - }, - "1376": { - "op": "app_global_get_ex", - "defined_out": [ - "asset_receiver#0", - "asset_sender#0", - "maybe_exists%3#2", - "maybe_value%0#0", - "maybe_value%3#2" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%0#0", - "maybe_value%3#2", - "maybe_exists%3#2" - ] - }, - "1377": { - "error": "check self.global_frozen exists", - "op": "assert // check self.global_frozen exists", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%0#0", - "maybe_value%3#2" - ] - }, - "1378": { - "op": "!", - "defined_out": [ - "asset_receiver#0", - "asset_sender#0", - "maybe_value%0#0", - "tmp%3#2" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%0#0", - "tmp%3#2" - ] - }, - "1379": { - "error": "Smart ASA is global frozen", - "op": "assert // Smart ASA is global frozen", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%0#0" - ] - }, - "1380": { - "op": "intc_0 // 0", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%0#0", - "0" - ] - }, - "1381": { - "op": "bytec_2 // \"clawback_addr\"", - "defined_out": [ - "\"clawback_addr\"", - "0", - "asset_receiver#0", - "asset_sender#0", - "maybe_value%0#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%0#0", - "0", - "\"clawback_addr\"" - ] - }, - "1382": { - "op": "app_global_get_ex", - "defined_out": [ - "asset_receiver#0", - "asset_sender#0", - "maybe_exists%5#0", - "maybe_value%0#0", - "maybe_value%5#1" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%0#0", - "maybe_value%5#1", - "maybe_exists%5#0" - ] - }, - "1383": { - "error": "check self.clawback_addr exists", - "op": "assert // check self.clawback_addr exists", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%0#0", - "maybe_value%5#1" - ] - }, - "1384": { - "op": "!=", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "tmp%4#1" - ] - }, - "1385": { - "op": "bz asset_transfer_after_if_else@10", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0" - ] - }, - "1388": { - "op": "dig 1", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0" - ] - }, - "1390": { - "op": "dup", - "defined_out": [ - "asset_receiver#0", - "asset_sender#0", - "asset_sender#0 (copy)" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "asset_sender#0 (copy)" - ] - }, - "1391": { - "op": "intc_0 // 0", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "asset_sender#0 (copy)", - "0" - ] - }, - "1392": { - "op": "bytec 4 // \"account_frozen\"", - "defined_out": [ - "\"account_frozen\"", - "0", - "asset_receiver#0", - "asset_sender#0", - "asset_sender#0 (copy)" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "asset_sender#0 (copy)", - "0", - "\"account_frozen\"" - ] - }, - "1394": { - "op": "app_local_get_ex", - "defined_out": [ - "asset_receiver#0", - "asset_sender#0", - "maybe_exists%6#0", - "maybe_value%6#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "maybe_value%6#0", - "maybe_exists%6#0" - ] - }, - "1395": { - "error": "check self.account_frozen exists for account", - "op": "assert // check self.account_frozen exists for account", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "maybe_value%6#0" - ] - }, - "1396": { - "op": "!", - "defined_out": [ - "asset_receiver#0", - "asset_sender#0", - "tmp%5#2" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "tmp%5#2" - ] - }, - "1397": { - "error": "Sender account is frozen", - "op": "assert // Sender account is frozen", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0" - ] - }, - "1398": { - "op": "intc_0 // 0", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "0" - ] - }, - "1399": { - "op": "bytec_1 // \"reserve_addr\"", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "0", - "\"reserve_addr\"" - ] - }, - "1400": { - "op": "app_global_get_ex", - "defined_out": [ - "asset_receiver#0", - "asset_sender#0", - "maybe_exists%7#0", - "maybe_value%7#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "maybe_value%7#0", - "maybe_exists%7#0" - ] - }, - "1401": { - "error": "check self.reserve_addr exists", - "op": "assert // check self.reserve_addr exists", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "maybe_value%7#0" - ] - }, - "1402": { - "op": "==", - "defined_out": [ - "asset_receiver#0", - "asset_sender#0", - "tmp%6#1" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "tmp%6#1" - ] - }, - "1403": { - "error": "Forbidden clawback burning", - "op": "assert // Forbidden clawback burning", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0" - ] - }, - "1404": { - "op": "b asset_transfer_after_if_else@10" - }, - "1407": { - "block": "asset_transfer_else_body@5", - "stack_in": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0" - ], - "op": "txn Sender", - "defined_out": [ - "tmp%5#1" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "tmp%5#1" - ] - }, - "1409": { - "op": "intc_0 // 0", - "defined_out": [ - "0", - "tmp%5#1" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "tmp%5#1", - "0" - ] - }, - "1410": { - "op": "bytec_2 // \"clawback_addr\"", - "defined_out": [ - "\"clawback_addr\"", - "0", - "tmp%5#1" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "tmp%5#1", - "0", - "\"clawback_addr\"" - ] - }, - "1411": { - "op": "app_global_get_ex", - "defined_out": [ - "maybe_exists%0#0", - "maybe_value%0#0", - "tmp%5#1" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "tmp%5#1", - "maybe_value%0#0", - "maybe_exists%0#0" - ] - }, - "1412": { - "error": "check self.clawback_addr exists", - "op": "assert // check self.clawback_addr exists", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "tmp%5#1", - "maybe_value%0#0" - ] - }, - "1413": { - "op": "==", - "defined_out": [ - "tmp%6#1" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "tmp%6#1" - ] - }, - "1414": { - "op": "bz asset_transfer_else_body@7", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0" - ] - }, - "1417": { - "op": "dig 1", - "defined_out": [ - "asset_sender#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0" - ] - }, - "1419": { - "op": "intc_0 // 0", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "0" - ] - }, - "1420": { - "op": "bytec_3 // \"account_smart_asa_id\"", - "defined_out": [ - "\"account_smart_asa_id\"", - "0", - "asset_sender#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "0", - "\"account_smart_asa_id\"" - ] - }, - "1421": { - "op": "app_local_get_ex", - "defined_out": [ - "asset_sender#0", - "maybe_exists%0#0", - "maybe_value%0#1" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%0#1", - "maybe_exists%0#0" - ] - }, - "1422": { - "error": "check self.account_smart_asa_id exists for account", - "op": "assert // check self.account_smart_asa_id exists for account", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%0#1" - ] - }, - "1423": { - "op": "intc_0 // 0", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%0#1", - "0" - ] - }, - "1424": { - "op": "bytec_0 // \"smart_asa_id\"", - "defined_out": [ - "\"smart_asa_id\"", - "0", - "asset_sender#0", - "maybe_value%0#1" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%0#1", - "0", - "\"smart_asa_id\"" - ] - }, - "1425": { - "op": "app_global_get_ex", - "defined_out": [ - "asset_sender#0", - "maybe_exists%1#0", - "maybe_value%0#1", - "maybe_value%1#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%0#1", - "maybe_value%1#0", - "maybe_exists%1#0" - ] - }, - "1426": { - "error": "check self.smart_asa_id exists", - "op": "assert // check self.smart_asa_id exists", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%0#1", - "maybe_value%1#0" - ] - }, - "1427": { - "op": "swap", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%1#0", - "maybe_value%0#1" - ] - }, - "1428": { - "op": "dig 1", - "defined_out": [ - "asset_sender#0", - "maybe_value%0#1", - "maybe_value%1#0", - "maybe_value%1#0 (copy)" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%1#0", - "maybe_value%0#1", - "maybe_value%1#0 (copy)" - ] - }, - "1430": { - "op": "==", - "defined_out": [ - "asset_sender#0", - "maybe_value%1#0", - "tmp%0#3" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%1#0", - "tmp%0#3" - ] - }, - "1431": { - "error": "Invalid Controlled ASA ID", - "op": "assert // Invalid Controlled ASA ID", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%1#0" - ] - }, - "1432": { - "op": "dig 1", - "defined_out": [ - "asset_receiver#0", - "asset_sender#0", - "maybe_value%1#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%1#0", - "asset_receiver#0" - ] - }, - "1434": { - "op": "intc_0 // 0", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%1#0", - "asset_receiver#0", - "0" - ] - }, - "1435": { - "op": "bytec_3 // \"account_smart_asa_id\"", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%1#0", - "asset_receiver#0", - "0", - "\"account_smart_asa_id\"" - ] - }, - "1436": { - "op": "app_local_get_ex", - "defined_out": [ - "asset_receiver#0", - "asset_sender#0", - "maybe_exists%2#0", - "maybe_value%1#0", - "maybe_value%2#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%1#0", - "maybe_value%2#0", - "maybe_exists%2#0" - ] - }, - "1437": { - "error": "check self.account_smart_asa_id exists for account", - "op": "assert // check self.account_smart_asa_id exists for account", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%1#0", - "maybe_value%2#0" - ] - }, - "1438": { - "op": "==", - "defined_out": [ - "asset_receiver#0", - "asset_sender#0", - "tmp%1#1" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "tmp%1#1" - ] - }, - "1439": { - "error": "Invalid Controlled ASA ID", - "op": "assert // Invalid Controlled ASA ID", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0" - ] - }, - "1440": { - "op": "b asset_transfer_after_if_else@10" - }, - "1443": { - "block": "asset_transfer_else_body@7", - "stack_in": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0" - ], - "op": "txn Sender", - "defined_out": [ - "tmp%0#1" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "tmp%0#1" - ] - }, - "1445": { - "op": "dig 2", - "defined_out": [ - "asset_sender#0", - "tmp%0#1" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "tmp%0#1", - "asset_sender#0" - ] - }, - "1447": { - "op": "dup", - "defined_out": [ - "asset_sender#0", - "asset_sender#0 (copy)", - "tmp%0#1" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "tmp%0#1", - "asset_sender#0 (copy)", - "asset_sender#0 (copy)" - ] - }, - "1448": { - "op": "cover 2", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "tmp%0#1", - "asset_sender#0 (copy)" - ] - }, - "1450": { - "op": "==", - "defined_out": [ - "asset_sender#0", - "tmp%1#1" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "tmp%1#1" - ] - }, - "1451": { - "error": "Unauthorized Clawback", - "op": "assert // Unauthorized Clawback", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0" - ] - }, - "1452": { - "op": "dup", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "asset_sender#0 (copy)" - ] - }, - "1453": { - "op": "intc_0 // 0", - "defined_out": [ - "0", - "asset_sender#0", - "asset_sender#0 (copy)" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "asset_sender#0 (copy)", - "0" - ] - }, - "1454": { - "op": "bytec_3 // \"account_smart_asa_id\"", - "defined_out": [ - "\"account_smart_asa_id\"", - "0", - "asset_sender#0", - "asset_sender#0 (copy)" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "asset_sender#0 (copy)", - "0", - "\"account_smart_asa_id\"" - ] - }, - "1455": { - "op": "app_local_get_ex", - "defined_out": [ - "asset_sender#0", - "maybe_exists%0#0", - "maybe_value%0#1" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "maybe_value%0#1", - "maybe_exists%0#0" - ] - }, - "1456": { - "error": "check self.account_smart_asa_id exists for account", - "op": "assert // check self.account_smart_asa_id exists for account", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "maybe_value%0#1" - ] - }, - "1457": { - "op": "intc_0 // 0", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "maybe_value%0#1", - "0" - ] - }, - "1458": { - "op": "bytec_0 // \"smart_asa_id\"", - "defined_out": [ - "\"smart_asa_id\"", - "0", - "asset_sender#0", - "maybe_value%0#1" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "maybe_value%0#1", - "0", - "\"smart_asa_id\"" - ] - }, - "1459": { - "op": "app_global_get_ex", - "defined_out": [ - "asset_sender#0", - "maybe_exists%1#0", - "maybe_value%0#1", - "maybe_value%1#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "maybe_value%0#1", - "maybe_value%1#0", - "maybe_exists%1#0" - ] - }, - "1460": { - "error": "check self.smart_asa_id exists", - "op": "assert // check self.smart_asa_id exists", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "maybe_value%0#1", - "maybe_value%1#0" - ] - }, - "1461": { - "op": "swap", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "maybe_value%1#0", - "maybe_value%0#1" - ] - }, - "1462": { - "op": "dig 1", - "defined_out": [ - "asset_sender#0", - "maybe_value%0#1", - "maybe_value%1#0", - "maybe_value%1#0 (copy)" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "maybe_value%1#0", - "maybe_value%0#1", - "maybe_value%1#0 (copy)" - ] - }, - "1464": { - "op": "==", - "defined_out": [ - "asset_sender#0", - "maybe_value%1#0", - "tmp%2#2" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "maybe_value%1#0", - "tmp%2#2" - ] - }, - "1465": { - "error": "Invalid Controlled ASA ID", - "op": "assert // Invalid Controlled ASA ID", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "maybe_value%1#0" - ] - }, - "1466": { - "op": "dig 2", - "defined_out": [ - "asset_receiver#0", - "asset_sender#0", - "maybe_value%1#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "maybe_value%1#0", - "asset_receiver#0" - ] - }, - "1468": { - "op": "dup", - "defined_out": [ - "asset_receiver#0", - "asset_receiver#0 (copy)", - "asset_sender#0", - "maybe_value%1#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "maybe_value%1#0", - "asset_receiver#0 (copy)", - "asset_receiver#0 (copy)" - ] - }, - "1469": { - "op": "cover 2", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%1#0", - "asset_receiver#0 (copy)" - ] - }, - "1471": { - "op": "intc_0 // 0", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%1#0", - "asset_receiver#0 (copy)", - "0" - ] - }, - "1472": { - "op": "bytec_3 // \"account_smart_asa_id\"", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%1#0", - "asset_receiver#0 (copy)", - "0", - "\"account_smart_asa_id\"" - ] - }, - "1473": { - "op": "app_local_get_ex", - "defined_out": [ - "asset_receiver#0", - "asset_sender#0", - "maybe_exists%2#0", - "maybe_value%1#0", - "maybe_value%2#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%1#0", - "maybe_value%2#0", - "maybe_exists%2#0" - ] - }, - "1474": { - "error": "check self.account_smart_asa_id exists for account", - "op": "assert // check self.account_smart_asa_id exists for account", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%1#0", - "maybe_value%2#0" - ] - }, - "1475": { - "op": "==", - "defined_out": [ - "asset_receiver#0", - "asset_sender#0", - "tmp%3#2" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "asset_receiver#0", - "tmp%3#2" - ] - }, - "1476": { - "error": "Invalid Controlled ASA ID", - "op": "assert // Invalid Controlled ASA ID", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "asset_receiver#0" - ] - }, - "1477": { - "op": "intc_0 // 0", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "asset_receiver#0", - "0" - ] - }, - "1478": { - "op": "bytec 6 // \"global_frozen\"", - "defined_out": [ - "\"global_frozen\"", - "0", - "asset_receiver#0", - "asset_sender#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "asset_receiver#0", - "0", - "\"global_frozen\"" - ] - }, - "1480": { - "op": "app_global_get_ex", - "defined_out": [ - "asset_receiver#0", - "asset_sender#0", - "maybe_exists%4#0", - "maybe_value%4#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%4#0", - "maybe_exists%4#0" - ] - }, - "1481": { - "error": "check self.global_frozen exists", - "op": "assert // check self.global_frozen exists", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%4#0" - ] - }, - "1482": { - "op": "!", - "defined_out": [ - "asset_receiver#0", - "asset_sender#0", - "tmp%4#1" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "asset_receiver#0", - "tmp%4#1" - ] - }, - "1483": { - "error": "Smart ASA is global frozen", - "op": "assert // Smart ASA is global frozen", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_sender#0", - "asset_receiver#0" - ] - }, - "1484": { - "op": "swap", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_receiver#0", - "asset_sender#0" - ] - }, - "1485": { - "op": "intc_0 // 0", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_receiver#0", - "asset_sender#0", - "0" - ] - }, - "1486": { - "op": "bytec 4 // \"account_frozen\"", - "defined_out": [ - "\"account_frozen\"", - "0", - "asset_receiver#0", - "asset_sender#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_receiver#0", - "asset_sender#0", - "0", - "\"account_frozen\"" - ] - }, - "1488": { - "op": "app_local_get_ex", - "defined_out": [ - "asset_receiver#0", - "asset_sender#0", - "maybe_exists%5#0", - "maybe_value%5#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_receiver#0", - "maybe_value%5#0", - "maybe_exists%5#0" - ] - }, - "1489": { - "error": "check self.account_frozen exists for account", - "op": "assert // check self.account_frozen exists for account", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_receiver#0", - "maybe_value%5#0" - ] - }, - "1490": { - "op": "!", - "defined_out": [ - "asset_receiver#0", - "asset_sender#0", - "tmp%5#2" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_receiver#0", - "tmp%5#2" - ] - }, - "1491": { - "error": "Sender account is frozen", - "op": "assert // Sender account is frozen", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_receiver#0" - ] - }, - "1492": { - "op": "intc_0 // 0", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_receiver#0", - "0" - ] - }, - "1493": { - "op": "bytec 4 // \"account_frozen\"", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "asset_receiver#0", - "0", - "\"account_frozen\"" - ] - }, - "1495": { - "op": "app_local_get_ex", - "defined_out": [ - "asset_receiver#0", - "asset_sender#0", - "maybe_exists%6#0", - "maybe_value%6#0" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%6#0", - "maybe_exists%6#0" - ] - }, - "1496": { - "error": "check self.account_frozen exists for account", - "op": "assert // check self.account_frozen exists for account", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "maybe_value%6#0" - ] - }, - "1497": { - "op": "!", - "defined_out": [ - "asset_receiver#0", - "asset_sender#0", - "tmp%6#1" - ], - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0", - "tmp%6#1" - ] - }, - "1498": { - "error": "Receiver account is frozen", - "op": "assert // Receiver account is frozen", - "stack_out": [ - "xfer_asset#0", - "asset_amount#0", - "asset_sender#0", - "asset_receiver#0" - ] - }, - "1499": { - "op": "b asset_transfer_after_if_else@10" - }, - "1502": { - "subroutine": "smart_contracts.smart_asa.contract.SmartAsa.asset_freeze[routing]", - "params": {}, - "block": "asset_freeze", - "stack_in": [], - "op": "txna ApplicationArgs 1", - "defined_out": [ - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0" - ] - }, - "1505": { - "op": "dup", - "defined_out": [ - "tmp%0#0", - "tmp%0#0 (copy)" - ], - "stack_out": [ - "tmp%0#0", - "tmp%0#0 (copy)" - ] - }, - "1506": { - "op": "len", - "defined_out": [ - "len%0#0", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "len%0#0" - ] - }, - "1507": { - "op": "intc_2 // 8", - "defined_out": [ - "8", - "len%0#0", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "len%0#0", - "8" - ] - }, - "1508": { - "op": "==", - "defined_out": [ - "eq%0#0", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "eq%0#0" - ] - }, - "1509": { - "error": "invalid number of bytes for arc4.uint64", - "op": "assert // invalid number of bytes for arc4.uint64", - "stack_out": [ - "tmp%0#0" - ] - }, - "1510": { - "op": "btoi", - "defined_out": [ - "freeze_asset#0" - ], - "stack_out": [ - "freeze_asset#0" - ] - }, - "1511": { - "op": "txna ApplicationArgs 2", - "defined_out": [ - "asset_frozen#0", - "freeze_asset#0" - ], - "stack_out": [ - "freeze_asset#0", - "asset_frozen#0" - ] - }, - "1514": { - "op": "dup", - "defined_out": [ - "asset_frozen#0", - "asset_frozen#0 (copy)", - "freeze_asset#0" - ], - "stack_out": [ - "freeze_asset#0", - "asset_frozen#0", - "asset_frozen#0 (copy)" - ] - }, - "1515": { - "op": "len", - "defined_out": [ - "asset_frozen#0", - "freeze_asset#0", - "len%1#0" - ], - "stack_out": [ - "freeze_asset#0", - "asset_frozen#0", - "len%1#0" - ] - }, - "1516": { - "op": "intc_1 // 1", - "defined_out": [ - "1", - "asset_frozen#0", - "freeze_asset#0", - "len%1#0" - ], - "stack_out": [ - "freeze_asset#0", - "asset_frozen#0", - "len%1#0", - "1" - ] - }, - "1517": { - "op": "==", - "defined_out": [ - "asset_frozen#0", - "eq%1#0", - "freeze_asset#0" - ], - "stack_out": [ - "freeze_asset#0", - "asset_frozen#0", - "eq%1#0" - ] - }, - "1518": { - "error": "invalid number of bytes for arc4.bool", - "op": "assert // invalid number of bytes for arc4.bool", - "stack_out": [ - "freeze_asset#0", - "asset_frozen#0" - ] - }, - "1519": { - "op": "swap", - "stack_out": [ - "asset_frozen#0", - "freeze_asset#0" - ] - }, - "1520": { - "callsub": "smart_contracts.smart_asa.contract.SmartAsa.assert_common_preconditions", - "op": "callsub assert_common_preconditions", - "stack_out": [ - "asset_frozen#0" - ] - }, - "1523": { - "op": "txn Sender", - "defined_out": [ - "asset_frozen#0", - "tmp%0#1" - ], - "stack_out": [ - "asset_frozen#0", - "tmp%0#1" - ] - }, - "1525": { - "op": "intc_0 // 0", - "defined_out": [ - "0", - "asset_frozen#0", - "tmp%0#1" - ], - "stack_out": [ - "asset_frozen#0", - "tmp%0#1", - "0" - ] - }, - "1526": { - "op": "bytec 5 // \"freeze_addr\"", - "defined_out": [ - "\"freeze_addr\"", - "0", - "asset_frozen#0", - "tmp%0#1" - ], - "stack_out": [ - "asset_frozen#0", - "tmp%0#1", - "0", - "\"freeze_addr\"" - ] - }, - "1528": { - "op": "app_global_get_ex", - "defined_out": [ - "asset_frozen#0", - "maybe_exists%0#0", - "maybe_value%0#0", - "tmp%0#1" - ], - "stack_out": [ - "asset_frozen#0", - "tmp%0#1", - "maybe_value%0#0", - "maybe_exists%0#0" - ] - }, - "1529": { - "error": "check self.freeze_addr exists", - "op": "assert // check self.freeze_addr exists", - "stack_out": [ - "asset_frozen#0", - "tmp%0#1", - "maybe_value%0#0" - ] - }, - "1530": { - "op": "==", - "defined_out": [ - "asset_frozen#0", - "tmp%1#1" - ], - "stack_out": [ - "asset_frozen#0", - "tmp%1#1" - ] - }, - "1531": { - "error": "Unauthorized Freeze", - "op": "assert // Unauthorized Freeze", - "stack_out": [ - "asset_frozen#0" - ] - }, - "1532": { - "op": "intc_0 // 0", - "stack_out": [ - "asset_frozen#0", - "0" - ] - }, - "1533": { - "op": "getbit", - "defined_out": [ - "aggregate%get_bit%0#0" - ], - "stack_out": [ - "aggregate%get_bit%0#0" - ] - }, - "1534": { - "op": "bytec 6 // \"global_frozen\"", - "defined_out": [ - "\"global_frozen\"", - "aggregate%get_bit%0#0" - ], - "stack_out": [ - "aggregate%get_bit%0#0", - "\"global_frozen\"" - ] - }, - "1536": { - "op": "swap", - "stack_out": [ - "\"global_frozen\"", - "aggregate%get_bit%0#0" - ] - }, - "1537": { - "op": "app_global_put", - "stack_out": [] - }, - "1538": { - "op": "intc_1 // 1", - "stack_out": [ - "1" - ] - }, - "1539": { - "op": "return", - "stack_out": [] - }, - "1540": { - "subroutine": "smart_contracts.smart_asa.contract.SmartAsa.account_freeze[routing]", - "params": {}, - "block": "account_freeze", - "stack_in": [], - "op": "txna ApplicationArgs 1", - "defined_out": [ - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0" - ] - }, - "1543": { - "op": "dup", - "defined_out": [ - "tmp%0#0", - "tmp%0#0 (copy)" - ], - "stack_out": [ - "tmp%0#0", - "tmp%0#0 (copy)" - ] - }, - "1544": { - "op": "len", - "defined_out": [ - "len%0#0", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "len%0#0" - ] - }, - "1545": { - "op": "intc_2 // 8", - "defined_out": [ - "8", - "len%0#0", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "len%0#0", - "8" - ] - }, - "1546": { - "op": "==", - "defined_out": [ - "eq%0#0", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "eq%0#0" - ] - }, - "1547": { - "error": "invalid number of bytes for arc4.uint64", - "op": "assert // invalid number of bytes for arc4.uint64", - "stack_out": [ - "tmp%0#0" - ] - }, - "1548": { - "op": "btoi", - "defined_out": [ - "freeze_asset#0" - ], - "stack_out": [ - "freeze_asset#0" - ] - }, - "1549": { - "op": "txna ApplicationArgs 2", - "defined_out": [ - "freeze_account#0", - "freeze_asset#0" - ], - "stack_out": [ - "freeze_asset#0", - "freeze_account#0" - ] - }, - "1552": { - "op": "dup", - "defined_out": [ - "freeze_account#0", - "freeze_account#0 (copy)", - "freeze_asset#0" - ], - "stack_out": [ - "freeze_asset#0", - "freeze_account#0", - "freeze_account#0 (copy)" - ] - }, - "1553": { - "op": "len", - "defined_out": [ - "freeze_account#0", - "freeze_asset#0", - "len%1#0" - ], - "stack_out": [ - "freeze_asset#0", - "freeze_account#0", - "len%1#0" - ] - }, - "1554": { - "op": "intc_3 // 32", - "defined_out": [ - "32", - "freeze_account#0", - "freeze_asset#0", - "len%1#0" - ], - "stack_out": [ - "freeze_asset#0", - "freeze_account#0", - "len%1#0", - "32" - ] - }, - "1555": { - "op": "==", - "defined_out": [ - "eq%1#0", - "freeze_account#0", - "freeze_asset#0" - ], - "stack_out": [ - "freeze_asset#0", - "freeze_account#0", - "eq%1#0" - ] - }, - "1556": { - "error": "invalid number of bytes for arc4.static_array", - "op": "assert // invalid number of bytes for arc4.static_array", - "stack_out": [ - "freeze_asset#0", - "freeze_account#0" - ] - }, - "1557": { - "op": "txna ApplicationArgs 3", - "defined_out": [ - "asset_frozen#0", - "freeze_account#0", - "freeze_asset#0" - ], - "stack_out": [ - "freeze_asset#0", - "freeze_account#0", - "asset_frozen#0" - ] - }, - "1560": { - "op": "dup", - "defined_out": [ - "asset_frozen#0", - "asset_frozen#0 (copy)", - "freeze_account#0", - "freeze_asset#0" - ], - "stack_out": [ - "freeze_asset#0", - "freeze_account#0", - "asset_frozen#0", - "asset_frozen#0 (copy)" - ] - }, - "1561": { - "op": "len", - "defined_out": [ - "asset_frozen#0", - "freeze_account#0", - "freeze_asset#0", - "len%2#0" - ], - "stack_out": [ - "freeze_asset#0", - "freeze_account#0", - "asset_frozen#0", - "len%2#0" - ] - }, - "1562": { - "op": "intc_1 // 1", - "defined_out": [ - "1", - "asset_frozen#0", - "freeze_account#0", - "freeze_asset#0", - "len%2#0" - ], - "stack_out": [ - "freeze_asset#0", - "freeze_account#0", - "asset_frozen#0", - "len%2#0", - "1" - ] - }, - "1563": { - "op": "==", - "defined_out": [ - "asset_frozen#0", - "eq%2#0", - "freeze_account#0", - "freeze_asset#0" - ], - "stack_out": [ - "freeze_asset#0", - "freeze_account#0", - "asset_frozen#0", - "eq%2#0" - ] - }, - "1564": { - "error": "invalid number of bytes for arc4.bool", - "op": "assert // invalid number of bytes for arc4.bool", - "stack_out": [ - "freeze_asset#0", - "freeze_account#0", - "asset_frozen#0" - ] - }, - "1565": { - "op": "uncover 2", - "stack_out": [ - "freeze_account#0", - "asset_frozen#0", - "freeze_asset#0" - ] - }, - "1567": { - "callsub": "smart_contracts.smart_asa.contract.SmartAsa.assert_common_preconditions", - "op": "callsub assert_common_preconditions", - "stack_out": [ - "freeze_account#0", - "asset_frozen#0" - ] - }, - "1570": { - "op": "dig 1", - "stack_out": [ - "freeze_account#0", - "asset_frozen#0", - "freeze_account#0 (copy)" - ] - }, - "1572": { - "op": "intc_0 // 0", - "defined_out": [ - "0", - "asset_frozen#0", - "freeze_account#0", - "freeze_account#0 (copy)" - ], - "stack_out": [ - "freeze_account#0", - "asset_frozen#0", - "freeze_account#0 (copy)", - "0" - ] - }, - "1573": { - "op": "bytec_3 // \"account_smart_asa_id\"", - "defined_out": [ - "\"account_smart_asa_id\"", - "0", - "asset_frozen#0", - "freeze_account#0", - "freeze_account#0 (copy)" - ], - "stack_out": [ - "freeze_account#0", - "asset_frozen#0", - "freeze_account#0 (copy)", - "0", - "\"account_smart_asa_id\"" - ] - }, - "1574": { - "op": "app_local_get_ex", - "defined_out": [ - "asset_frozen#0", - "freeze_account#0", - "maybe_exists%0#0", - "maybe_value%0#0" - ], - "stack_out": [ - "freeze_account#0", - "asset_frozen#0", - "maybe_value%0#0", - "maybe_exists%0#0" - ] - }, - "1575": { - "error": "check self.account_smart_asa_id exists for account", - "op": "assert // check self.account_smart_asa_id exists for account", - "stack_out": [ - "freeze_account#0", - "asset_frozen#0", - "maybe_value%0#0" - ] - }, - "1576": { - "op": "intc_0 // 0", - "stack_out": [ - "freeze_account#0", - "asset_frozen#0", - "maybe_value%0#0", - "0" - ] - }, - "1577": { - "op": "bytec_0 // \"smart_asa_id\"", - "defined_out": [ - "\"smart_asa_id\"", - "0", - "asset_frozen#0", - "freeze_account#0", - "maybe_value%0#0" - ], - "stack_out": [ - "freeze_account#0", - "asset_frozen#0", - "maybe_value%0#0", - "0", - "\"smart_asa_id\"" - ] - }, - "1578": { - "op": "app_global_get_ex", - "defined_out": [ - "asset_frozen#0", - "freeze_account#0", - "maybe_exists%1#0", - "maybe_value%0#0", - "maybe_value%1#0" - ], - "stack_out": [ - "freeze_account#0", - "asset_frozen#0", - "maybe_value%0#0", - "maybe_value%1#0", - "maybe_exists%1#0" - ] - }, - "1579": { - "error": "check self.smart_asa_id exists", - "op": "assert // check self.smart_asa_id exists", - "stack_out": [ - "freeze_account#0", - "asset_frozen#0", - "maybe_value%0#0", - "maybe_value%1#0" - ] - }, - "1580": { - "op": "==", - "defined_out": [ - "asset_frozen#0", - "freeze_account#0", - "tmp%0#1" - ], - "stack_out": [ - "freeze_account#0", - "asset_frozen#0", - "tmp%0#1" - ] - }, - "1581": { - "error": "Invalid Controlled ASA ID", - "op": "assert // Invalid Controlled ASA ID", - "stack_out": [ - "freeze_account#0", - "asset_frozen#0" - ] - }, - "1582": { - "op": "txn Sender", - "defined_out": [ - "asset_frozen#0", - "freeze_account#0", - "tmp%1#1" - ], - "stack_out": [ - "freeze_account#0", - "asset_frozen#0", - "tmp%1#1" - ] - }, - "1584": { - "op": "intc_0 // 0", - "stack_out": [ - "freeze_account#0", - "asset_frozen#0", - "tmp%1#1", - "0" - ] - }, - "1585": { - "op": "bytec 5 // \"freeze_addr\"", - "defined_out": [ - "\"freeze_addr\"", - "0", - "asset_frozen#0", - "freeze_account#0", - "tmp%1#1" - ], - "stack_out": [ - "freeze_account#0", - "asset_frozen#0", - "tmp%1#1", - "0", - "\"freeze_addr\"" - ] - }, - "1587": { - "op": "app_global_get_ex", - "defined_out": [ - "asset_frozen#0", - "freeze_account#0", - "maybe_exists%2#0", - "maybe_value%2#0", - "tmp%1#1" - ], - "stack_out": [ - "freeze_account#0", - "asset_frozen#0", - "tmp%1#1", - "maybe_value%2#0", - "maybe_exists%2#0" - ] - }, - "1588": { - "error": "check self.freeze_addr exists", - "op": "assert // check self.freeze_addr exists", - "stack_out": [ - "freeze_account#0", - "asset_frozen#0", - "tmp%1#1", - "maybe_value%2#0" - ] - }, - "1589": { - "op": "==", - "defined_out": [ - "asset_frozen#0", - "freeze_account#0", - "tmp%2#1" - ], - "stack_out": [ - "freeze_account#0", - "asset_frozen#0", - "tmp%2#1" - ] - }, - "1590": { - "error": "Unauthorized Freeze", - "op": "assert // Unauthorized Freeze", - "stack_out": [ - "freeze_account#0", - "asset_frozen#0" - ] - }, - "1591": { - "op": "intc_0 // 0", - "stack_out": [ - "freeze_account#0", - "asset_frozen#0", - "0" - ] - }, - "1592": { - "op": "getbit", - "defined_out": [ - "aggregate%get_bit%0#0", - "freeze_account#0" - ], - "stack_out": [ - "freeze_account#0", - "aggregate%get_bit%0#0" - ] - }, - "1593": { - "op": "bytec 4 // \"account_frozen\"" - }, - "1595": { - "op": "swap", - "defined_out": [ - "\"account_frozen\"", - "aggregate%get_bit%0#0", - "freeze_account#0" - ], - "stack_out": [ - "freeze_account#0", - "\"account_frozen\"", - "aggregate%get_bit%0#0" - ] - }, - "1596": { - "op": "app_local_put", - "stack_out": [] - }, - "1597": { - "op": "intc_1 // 1", - "stack_out": [ - "1" - ] - }, - "1598": { - "op": "return", - "stack_out": [] - }, - "1599": { - "subroutine": "smart_contracts.smart_asa.contract.SmartAsa.asset_close_out[routing]", - "params": {}, - "block": "asset_close_out", - "stack_in": [], - "op": "txna ApplicationArgs 1", - "defined_out": [ - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0" - ] - }, - "1602": { - "op": "dup", - "defined_out": [ - "tmp%0#0", - "tmp%0#0 (copy)" - ], - "stack_out": [ - "tmp%0#0", - "tmp%0#0 (copy)" - ] - }, - "1603": { - "op": "len", - "defined_out": [ - "len%0#0", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "len%0#0" - ] - }, - "1604": { - "op": "intc_2 // 8", - "defined_out": [ - "8", - "len%0#0", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "len%0#0", - "8" - ] - }, - "1605": { - "op": "==", - "defined_out": [ - "eq%0#0", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "eq%0#0" - ] - }, - "1606": { - "error": "invalid number of bytes for arc4.uint64", - "op": "assert // invalid number of bytes for arc4.uint64", - "stack_out": [ - "tmp%0#0" - ] - }, - "1607": { - "op": "btoi", - "defined_out": [ - "close_asset#0" - ], - "stack_out": [ - "close_asset#0" - ] - }, - "1608": { - "op": "dup", - "defined_out": [ - "close_asset#0" - ], - "stack_out": [ - "close_asset#0", - "close_asset#0" - ] - }, - "1609": { - "op": "txna ApplicationArgs 2" - }, - "1612": { - "op": "dup", - "defined_out": [ - "close_asset#0", - "close_to#0" - ], - "stack_out": [ - "close_asset#0", - "close_asset#0", - "close_to#0", - "close_to#0" - ] - }, - "1613": { - "op": "cover 2", - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "close_to#0" - ] - }, - "1615": { - "op": "len", - "defined_out": [ - "close_asset#0", - "close_to#0", - "len%1#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "len%1#0" - ] - }, - "1616": { - "op": "intc_3 // 32", - "defined_out": [ - "32", - "close_asset#0", - "close_to#0", - "len%1#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "len%1#0", - "32" - ] - }, - "1617": { - "op": "==", - "defined_out": [ - "close_asset#0", - "close_to#0", - "eq%1#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "eq%1#0" - ] - }, - "1618": { - "error": "invalid number of bytes for arc4.static_array", - "op": "assert // invalid number of bytes for arc4.static_array", - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0" - ] - }, - "1619": { - "op": "txn GroupIndex", - "defined_out": [ - "close_asset#0", - "close_to#0", - "tmp%0#2" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "tmp%0#2" - ] - }, - "1621": { - "op": "intc_1 // 1", - "defined_out": [ - "1", - "close_asset#0", - "close_to#0", - "tmp%0#2" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "tmp%0#2", - "1" - ] - }, - "1622": { - "op": "+", - "defined_out": [ - "asa_close_out_relative_idx#0", - "close_asset#0", - "close_to#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0" - ] - }, - "1623": { - "op": "dup", - "defined_out": [ - "asa_close_out_relative_idx#0", - "asa_close_out_relative_idx#0 (copy)", - "close_asset#0", - "close_to#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0", - "asa_close_out_relative_idx#0 (copy)" - ] - }, - "1624": { - "op": "gtxns TypeEnum", - "defined_out": [ - "asa_close_out_relative_idx#0", - "close_asset#0", - "close_to#0", - "gtxn_type%0#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0", - "gtxn_type%0#0" - ] - }, - "1626": { - "op": "pushint 4 // axfer", - "defined_out": [ - "asa_close_out_relative_idx#0", - "axfer", - "close_asset#0", - "close_to#0", - "gtxn_type%0#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0", - "gtxn_type%0#0", - "axfer" - ] - }, - "1628": { - "op": "==", - "defined_out": [ - "asa_close_out_relative_idx#0", - "close_asset#0", - "close_to#0", - "gtxn_type_matches%0#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0", - "gtxn_type_matches%0#0" - ] - }, - "1629": { - "error": "transaction type is axfer", - "op": "assert // transaction type is axfer", - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0" - ] - }, - "1630": { - "op": "txn OnCompletion", - "defined_out": [ - "asa_close_out_relative_idx#0", - "close_asset#0", - "close_to#0", - "tmp%2#4" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0", - "tmp%2#4" - ] - }, - "1632": { - "op": "pushint 2 // CloseOut", - "defined_out": [ - "CloseOut", - "asa_close_out_relative_idx#0", - "close_asset#0", - "close_to#0", - "tmp%2#4" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0", - "tmp%2#4", - "CloseOut" - ] - }, - "1634": { - "op": "==", - "defined_out": [ - "asa_close_out_relative_idx#0", - "close_asset#0", - "close_to#0", - "tmp%3#1" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0", - "tmp%3#1" - ] - }, - "1635": { - "error": "Wrong On Complete Action", - "op": "assert // Wrong On Complete Action", - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0" - ] - }, - "1636": { - "op": "txn Sender", - "defined_out": [ - "asa_close_out_relative_idx#0", - "close_asset#0", - "close_to#0", - "tmp%4#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0", - "tmp%4#0" - ] - }, - "1638": { - "op": "intc_0 // 0", - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0", - "tmp%4#0", - "0" - ] - }, - "1639": { - "op": "bytec_3 // \"account_smart_asa_id\"", - "defined_out": [ - "\"account_smart_asa_id\"", - "0", - "asa_close_out_relative_idx#0", - "close_asset#0", - "close_to#0", - "tmp%4#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0", - "tmp%4#0", - "0", - "\"account_smart_asa_id\"" - ] - }, - "1640": { - "op": "app_local_get_ex", - "defined_out": [ - "asa_close_out_relative_idx#0", - "close_asset#0", - "close_to#0", - "maybe_exists%0#0", - "maybe_value%0#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0", - "maybe_value%0#0", - "maybe_exists%0#0" - ] - }, - "1641": { - "error": "check self.account_smart_asa_id exists for account", - "op": "assert // check self.account_smart_asa_id exists for account", - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0", - "maybe_value%0#0" - ] - }, - "1642": { - "op": "dig 2", - "defined_out": [ - "asa_close_out_relative_idx#0", - "close_asset#0", - "close_asset#0 (copy)", - "close_to#0", - "maybe_value%0#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0", - "maybe_value%0#0", - "close_asset#0 (copy)" - ] - }, - "1644": { - "op": "==", - "defined_out": [ - "asa_close_out_relative_idx#0", - "close_asset#0", - "close_to#0", - "tmp%5#1" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0", - "tmp%5#1" - ] - }, - "1645": { - "error": "Invalid Controlled ASA ID", - "op": "assert // Invalid Controlled ASA ID", - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0" - ] - }, - "1646": { - "op": "global GroupSize", - "defined_out": [ - "asa_close_out_relative_idx#0", - "close_asset#0", - "close_to#0", - "tmp%6#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0", - "tmp%6#0" - ] - }, - "1648": { - "op": "dig 1", - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0", - "tmp%6#0", - "asa_close_out_relative_idx#0 (copy)" - ] - }, - "1650": { - "op": ">", - "defined_out": [ - "asa_close_out_relative_idx#0", - "close_asset#0", - "close_to#0", - "tmp%7#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0", - "tmp%7#0" - ] - }, - "1651": { - "error": "Invalid Close Out group size", - "op": "assert // Invalid Close Out group size", - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0" - ] - }, - "1652": { - "op": "dup", - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0", - "asa_close_out_relative_idx#0 (copy)" - ] - }, - "1653": { - "op": "gtxns XferAsset", - "defined_out": [ - "asa_close_out_relative_idx#0", - "close_asset#0", - "close_to#0", - "tmp%10#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0", - "tmp%10#0" - ] - }, - "1655": { - "op": "dig 2", - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0", - "tmp%10#0", - "close_asset#0 (copy)" - ] - }, - "1657": { - "op": "==", - "defined_out": [ - "asa_close_out_relative_idx#0", - "close_asset#0", - "close_to#0", - "tmp%11#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0", - "tmp%11#0" - ] - }, - "1658": { - "error": "Wrong ASA Close Out ID", - "op": "assert // Wrong ASA Close Out ID", - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0" - ] - }, - "1659": { - "op": "dup", - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0", - "asa_close_out_relative_idx#0 (copy)" - ] - }, - "1660": { - "op": "gtxns Sender", - "defined_out": [ - "asa_close_out_relative_idx#0", - "close_asset#0", - "close_to#0", - "tmp%12#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0", - "tmp%12#0" - ] - }, - "1662": { - "op": "txn Sender", - "defined_out": [ - "asa_close_out_relative_idx#0", - "close_asset#0", - "close_to#0", - "tmp%12#0", - "tmp%13#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0", - "tmp%12#0", - "tmp%13#0" - ] - }, - "1664": { - "op": "==", - "defined_out": [ - "asa_close_out_relative_idx#0", - "close_asset#0", - "close_to#0", - "tmp%14#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0", - "tmp%14#0" - ] - }, - "1665": { - "error": "Wrong ASA Close Out Sender", - "op": "assert // Wrong ASA Close Out Sender", - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0" - ] - }, - "1666": { - "op": "dup", - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0", - "asa_close_out_relative_idx#0 (copy)" - ] - }, - "1667": { - "op": "gtxns AssetAmount", - "defined_out": [ - "asa_close_out_relative_idx#0", - "close_asset#0", - "close_to#0", - "tmp%15#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0", - "tmp%15#0" - ] - }, - "1669": { - "op": "!", - "defined_out": [ - "asa_close_out_relative_idx#0", - "close_asset#0", - "close_to#0", - "tmp%16#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0", - "tmp%16#0" - ] - }, - "1670": { - "error": "Wrong ASA Close Out Amount", - "op": "assert // Wrong ASA Close Out Amount", - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "asa_close_out_relative_idx#0" - ] - }, - "1671": { - "op": "gtxns AssetCloseTo", - "defined_out": [ - "close_asset#0", - "close_to#0", - "tmp%17#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "tmp%17#0" - ] - }, - "1673": { - "op": "global ZeroAddress", - "defined_out": [ - "close_asset#0", - "close_to#0", - "tmp%17#0", - "tmp%18#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "tmp%17#0", - "tmp%18#0" - ] - }, - "1675": { - "op": "!=", - "defined_out": [ - "close_asset#0", - "close_to#0", - "tmp%19#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0", - "tmp%19#0" - ] - }, - "1676": { - "error": "Wrong Close Out on Close Out", - "op": "assert // Wrong Close Out on Close Out", - "stack_out": [ - "close_asset#0", - "close_to#0", - "close_asset#0" - ] - }, - "1677": { - "op": "asset_params_get AssetCreator", - "defined_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "exists#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "exists#0" - ] - }, - "1679": { - "op": "bz asset_close_out_after_if_else@5", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0" - ] - }, - "1682": { - "op": "txn GroupIndex", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "tmp%0#2" - ] - }, - "1684": { - "op": "intc_1 // 1", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "tmp%0#2", - "1" - ] - }, - "1685": { - "op": "+", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "asa_close_out_relative_idx#0" - ] - }, - "1686": { - "op": "dup", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "asa_close_out_relative_idx#0", - "asa_close_out_relative_idx#0 (copy)" - ] - }, - "1687": { - "op": "gtxns TypeEnum", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "asa_close_out_relative_idx#0", - "gtxn_type%0#0" - ] - }, - "1689": { - "op": "pushint 4 // axfer", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "asa_close_out_relative_idx#0", - "gtxn_type%0#0", - "axfer" - ] - }, - "1691": { - "op": "==", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "asa_close_out_relative_idx#0", - "gtxn_type_matches%0#0" - ] - }, - "1692": { - "error": "transaction type is axfer", - "op": "assert // transaction type is axfer", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "asa_close_out_relative_idx#0" - ] - }, - "1693": { - "op": "gtxns AssetCloseTo", - "defined_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "tmp%2#3" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "tmp%2#3" - ] - }, - "1695": { - "op": "dig 1", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "tmp%2#3", - "creator#0" - ] - }, - "1697": { - "op": "dup", - "defined_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "creator#0 (copy)", - "tmp%2#3" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "tmp%2#3", - "creator#0 (copy)", - "creator#0 (copy)" - ] - }, - "1698": { - "op": "cover 2", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "creator#0", - "tmp%2#3", - "creator#0 (copy)" - ] - }, - "1700": { - "op": "==", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "creator#0", - "tmp%3#1" - ] - }, - "1701": { - "error": "Wrong Close Out on Close Out", - "op": "assert // Wrong Close Out on Close Out", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "creator#0" - ] - }, - "1702": { - "op": "intc_0 // 0", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "creator#0", - "0" - ] - }, - "1703": { - "op": "bytec_0 // \"smart_asa_id\"", - "defined_out": [ - "\"smart_asa_id\"", - "0", - "close_asset#0", - "close_to#0", - "creator#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "creator#0", - "0", - "\"smart_asa_id\"" - ] - }, - "1704": { - "op": "app_global_get_ex", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "creator#0", - "maybe_value%0#0", - "maybe_exists%0#0" - ] - }, - "1705": { - "error": "check self.smart_asa_id exists", - "op": "assert // check self.smart_asa_id exists", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "creator#0", - "maybe_value%0#0" - ] - }, - "1706": { - "op": "dig 4", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "creator#0", - "maybe_value%0#0", - "close_asset#0" - ] - }, - "1708": { - "op": "==", - "defined_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "tmp%4#1" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "creator#0", - "tmp%4#1" - ] - }, - "1709": { - "error": "Invalid Controlled ASA ID", - "op": "assert // Invalid Controlled ASA ID", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "creator#0" - ] - }, - "1710": { - "op": "dig 2", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "creator#0", - "close_to#0" - ] - }, - "1712": { - "op": "!=", - "defined_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "tmp%2#1" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "tmp%2#1" - ] - }, - "1713": { - "op": "bz asset_close_out_after_if_else@4", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0" - ] - }, - "1716": { - "op": "dig 1", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "close_to#0" - ] - }, - "1718": { - "op": "dup", - "defined_out": [ - "close_asset#0", - "close_to#0", - "close_to#0 (copy)", - "creator#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "close_to#0", - "close_to#0 (copy)" - ] - }, - "1719": { - "op": "intc_0 // 0", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "close_to#0", - "close_to#0 (copy)", - "0" - ] - }, - "1720": { - "op": "bytec_3 // \"account_smart_asa_id\"", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "close_to#0", - "close_to#0 (copy)", - "0", - "\"account_smart_asa_id\"" - ] - }, - "1721": { - "op": "app_local_get_ex", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "close_to#0", - "maybe_value%0#0", - "maybe_exists%0#0" - ] - }, - "1722": { - "error": "check self.account_smart_asa_id exists for account", - "op": "assert // check self.account_smart_asa_id exists for account", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "close_to#0", - "maybe_value%0#0" - ] - }, - "1723": { - "op": "intc_0 // 0", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "close_to#0", - "maybe_value%0#0", - "0" - ] - }, - "1724": { - "op": "bytec_0 // \"smart_asa_id\"", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "close_to#0", - "maybe_value%0#0", - "0", - "\"smart_asa_id\"" - ] - }, - "1725": { - "op": "app_global_get_ex", - "defined_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "maybe_exists%1#0", - "maybe_value%0#0", - "maybe_value%1#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "close_to#0", - "maybe_value%0#0", - "maybe_value%1#0", - "maybe_exists%1#0" - ] - }, - "1726": { - "error": "check self.smart_asa_id exists", - "op": "assert // check self.smart_asa_id exists", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "close_to#0", - "maybe_value%0#0", - "maybe_value%1#0" - ] - }, - "1727": { - "op": "==", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "close_to#0", - "tmp%3#1" - ] - }, - "1728": { - "error": "Invalid Controlled ASA ID", - "op": "assert // Invalid Controlled ASA ID", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "close_to#0" - ] - }, - "1729": { - "op": "intc_0 // 0", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "close_to#0", - "0" - ] - }, - "1730": { - "op": "bytec 6 // \"global_frozen\"", - "defined_out": [ - "\"global_frozen\"", - "0", - "close_asset#0", - "close_to#0", - "creator#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "close_to#0", - "0", - "\"global_frozen\"" - ] - }, - "1732": { - "op": "app_global_get_ex", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "close_to#0", - "maybe_value%0#0", - "maybe_exists%0#0" - ] - }, - "1733": { - "error": "check self.global_frozen exists", - "op": "assert // check self.global_frozen exists", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "close_to#0", - "maybe_value%0#0" - ] - }, - "1734": { - "op": "!", - "defined_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "tmp%0#1" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "close_to#0", - "tmp%0#1" - ] - }, - "1735": { - "error": "Smart ASA is global frozen", - "op": "assert // Smart ASA is global frozen", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "close_to#0" - ] - }, - "1736": { - "op": "txn Sender", - "defined_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "tmp%1#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "close_to#0", - "tmp%1#0" - ] - }, - "1738": { - "op": "intc_0 // 0", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "close_to#0", - "tmp%1#0", - "0" - ] - }, - "1739": { - "op": "bytec 4 // \"account_frozen\"", - "defined_out": [ - "\"account_frozen\"", - "0", - "close_asset#0", - "close_to#0", - "creator#0", - "tmp%1#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "close_to#0", - "tmp%1#0", - "0", - "\"account_frozen\"" - ] - }, - "1741": { - "op": "app_local_get_ex", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "close_to#0", - "maybe_value%1#0", - "maybe_exists%1#0" - ] - }, - "1742": { - "error": "check self.account_frozen exists for account", - "op": "assert // check self.account_frozen exists for account", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "close_to#0", - "maybe_value%1#0" - ] - }, - "1743": { - "op": "!", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "close_to#0", - "tmp%2#1" - ] - }, - "1744": { - "error": "Sender account is frozen", - "op": "assert // Sender account is frozen", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "close_to#0" - ] - }, - "1745": { - "op": "intc_0 // 0", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "close_to#0", - "0" - ] - }, - "1746": { - "op": "bytec 4 // \"account_frozen\"", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "close_to#0", - "0", - "\"account_frozen\"" - ] - }, - "1748": { - "op": "app_local_get_ex", - "defined_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "maybe_exists%2#0", - "maybe_value%2#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "maybe_value%2#0", - "maybe_exists%2#0" - ] - }, - "1749": { - "error": "check self.account_frozen exists for account", - "op": "assert // check self.account_frozen exists for account", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "maybe_value%2#0" - ] - }, - "1750": { - "op": "!", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "tmp%3#1" - ] - }, - "1751": { - "error": "Close to account is frozen", - "op": "assert // Close to account is frozen", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0" - ] - }, - "1752": { - "block": "asset_close_out_after_if_else@4", - "stack_in": [ - "close_asset#0", - "close_to#0", - "creator#0" - ], - "op": "txn Sender", - "defined_out": [ - "tmp%4#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "tmp%4#0" - ] - }, - "1754": { - "op": "dig 3", - "defined_out": [ - "close_asset#0", - "tmp%4#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "tmp%4#0", - "close_asset#0" - ] - }, - "1756": { - "op": "dup", - "defined_out": [ - "close_asset#0", - "close_asset#0 (copy)", - "tmp%4#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "tmp%4#0", - "close_asset#0 (copy)", - "close_asset#0 (copy)" - ] - }, - "1757": { - "op": "cover 2", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "close_asset#0", - "tmp%4#0", - "close_asset#0 (copy)" - ] - }, - "1759": { - "op": "asset_holding_get AssetBalance", - "defined_out": [ - "check%0#0", - "close_asset#0", - "value%0#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "close_asset#0", - "value%0#0", - "check%0#0" - ] - }, - "1761": { - "error": "account opted into asset", - "op": "assert // account opted into asset", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "close_asset#0", - "value%0#0" - ] - }, - "1762": { - "op": "txn Sender", - "defined_out": [ - "close_asset#0", - "tmp%5#0", - "value%0#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "close_asset#0", - "value%0#0", - "tmp%5#0" - ] - }, - "1764": { - "op": "dig 4", - "defined_out": [ - "close_asset#0", - "close_to#0", - "tmp%5#0", - "value%0#0" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "close_asset#0", - "value%0#0", - "tmp%5#0", - "close_to#0" - ] - }, - "1766": { - "callsub": "smart_contracts.smart_asa.contract.SmartAsa.inner_asset_transfer", - "op": "callsub inner_asset_transfer", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0" - ] - }, - "1769": { - "block": "asset_close_out_after_if_else@5", - "stack_in": [ - "close_asset#0", - "close_to#0", - "creator#0" - ], - "op": "intc_1 // 1", - "defined_out": [ - "1" - ], - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0", - "1" - ] - }, - "1770": { - "op": "return", - "stack_out": [ - "close_asset#0", - "close_to#0", - "creator#0" - ] - }, - "1771": { - "subroutine": "smart_contracts.smart_asa.contract.SmartAsa.asset_destroy[routing]", - "params": {}, - "block": "asset_destroy", - "stack_in": [], - "op": "txna ApplicationArgs 1", - "defined_out": [ - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0" - ] - }, - "1774": { - "op": "dup", - "defined_out": [ - "tmp%0#0", - "tmp%0#0 (copy)" - ], - "stack_out": [ - "tmp%0#0", - "tmp%0#0 (copy)" - ] - }, - "1775": { - "op": "len", - "defined_out": [ - "len%0#0", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "len%0#0" - ] - }, - "1776": { - "op": "intc_2 // 8", - "defined_out": [ - "8", - "len%0#0", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "len%0#0", - "8" - ] - }, - "1777": { - "op": "==", - "defined_out": [ - "eq%0#0", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "eq%0#0" - ] - }, - "1778": { - "error": "invalid number of bytes for arc4.uint64", - "op": "assert // invalid number of bytes for arc4.uint64", - "stack_out": [ - "tmp%0#0" - ] - }, - "1779": { - "op": "btoi", - "defined_out": [ - "destroy_asset#0" - ], - "stack_out": [ - "destroy_asset#0" - ] - }, - "1780": { - "op": "dup", - "defined_out": [ - "destroy_asset#0", - "destroy_asset#0 (copy)" - ], - "stack_out": [ - "destroy_asset#0", - "destroy_asset#0 (copy)" - ] - }, - "1781": { - "callsub": "smart_contracts.smart_asa.contract.SmartAsa.assert_common_preconditions", - "op": "callsub assert_common_preconditions", - "stack_out": [ - "destroy_asset#0" - ] - }, - "1784": { - "op": "txn Sender", - "defined_out": [ - "destroy_asset#0", - "tmp%0#1" - ], - "stack_out": [ - "destroy_asset#0", - "tmp%0#1" - ] - }, - "1786": { - "op": "intc_0 // 0", - "defined_out": [ - "0", - "destroy_asset#0", - "tmp%0#1" - ], - "stack_out": [ - "destroy_asset#0", - "tmp%0#1", - "0" - ] - }, - "1787": { - "op": "bytec 7 // \"manager_addr\"", - "defined_out": [ - "\"manager_addr\"", - "0", - "destroy_asset#0", - "tmp%0#1" - ], - "stack_out": [ - "destroy_asset#0", - "tmp%0#1", - "0", - "\"manager_addr\"" - ] - }, - "1789": { - "op": "app_global_get_ex", - "defined_out": [ - "destroy_asset#0", - "maybe_exists%0#0", - "maybe_value%0#0", - "tmp%0#1" - ], - "stack_out": [ - "destroy_asset#0", - "tmp%0#1", - "maybe_value%0#0", - "maybe_exists%0#0" - ] - }, - "1790": { - "error": "check self.manager_addr exists", - "op": "assert // check self.manager_addr exists", - "stack_out": [ - "destroy_asset#0", - "tmp%0#1", - "maybe_value%0#0" - ] - }, - "1791": { - "op": "==", - "defined_out": [ - "destroy_asset#0", - "tmp%1#1" - ], - "stack_out": [ - "destroy_asset#0", - "tmp%1#1" - ] - }, - "1792": { - "error": "Unauthorized Manager", - "op": "assert // Unauthorized Manager", - "stack_out": [ - "destroy_asset#0" - ] - }, - "1793": { - "op": "itxn_begin" - }, - "1794": { - "op": "global CurrentApplicationAddress", - "defined_out": [ - "destroy_asset#0", - "inner_txn_params%0%%param_Sender_idx_0#0" - ], - "stack_out": [ - "destroy_asset#0", - "inner_txn_params%0%%param_Sender_idx_0#0" - ] - }, - "1796": { - "op": "itxn_field Sender", - "stack_out": [ - "destroy_asset#0" - ] - }, - "1798": { - "op": "itxn_field ConfigAsset", - "stack_out": [] - }, - "1800": { - "op": "pushint 3 // acfg", - "defined_out": [ - "acfg" - ], - "stack_out": [ - "acfg" - ] - }, - "1802": { - "op": "itxn_field TypeEnum", - "stack_out": [] - }, - "1804": { - "op": "intc_0 // 0", - "stack_out": [ - "0" - ] - }, - "1805": { - "op": "itxn_field Fee", - "stack_out": [] - }, - "1807": { - "op": "itxn_submit" - }, - "1808": { - "op": "bytec 8 // \"total\"", - "defined_out": [ - "\"total\"" - ], - "stack_out": [ - "\"total\"" - ] - }, - "1810": { - "op": "intc_0 // 0", - "stack_out": [ - "\"total\"", - "0" - ] - }, - "1811": { - "op": "app_global_put", - "stack_out": [] - }, - "1812": { - "op": "bytec 10 // \"decimals\"", - "defined_out": [ - "\"decimals\"" - ], - "stack_out": [ - "\"decimals\"" - ] - }, - "1814": { - "op": "intc_0 // 0", - "stack_out": [ - "\"decimals\"", - "0" - ] - }, - "1815": { - "op": "app_global_put", - "stack_out": [] - }, - "1816": { - "op": "bytec 9 // \"default_frozen\"", - "defined_out": [ - "\"default_frozen\"" - ], - "stack_out": [ - "\"default_frozen\"" - ] - }, - "1818": { - "op": "intc_0 // 0", - "stack_out": [ - "\"default_frozen\"", - "0" - ] - }, - "1819": { - "op": "app_global_put", - "stack_out": [] - }, - "1820": { - "op": "bytec 11 // \"unit_name\"", - "defined_out": [ - "\"unit_name\"" - ], - "stack_out": [ - "\"unit_name\"" - ] - }, - "1822": { - "op": "pushbytes \"\"", - "defined_out": [ - "\"\"", - "\"unit_name\"" - ], - "stack_out": [ - "\"unit_name\"", - "\"\"" - ] - }, - "1824": { - "op": "app_global_put", - "stack_out": [] - }, - "1825": { - "op": "bytec 12 // \"name\"", - "defined_out": [ - "\"name\"" - ], - "stack_out": [ - "\"name\"" - ] - }, - "1827": { - "op": "pushbytes \"\"", - "stack_out": [ - "\"name\"", - "\"\"" - ] - }, - "1829": { - "op": "app_global_put", - "stack_out": [] - }, - "1830": { - "op": "bytec 13 // \"url\"", - "defined_out": [ - "\"url\"" - ], - "stack_out": [ - "\"url\"" - ] - }, - "1832": { - "op": "pushbytes \"\"", - "stack_out": [ - "\"url\"", - "\"\"" - ] - }, - "1834": { - "op": "app_global_put", - "stack_out": [] - }, - "1835": { - "op": "bytec 14 // \"metadata_hash\"", - "defined_out": [ - "\"metadata_hash\"" - ], - "stack_out": [ - "\"metadata_hash\"" - ] - }, - "1837": { - "op": "pushbytes 0x", - "defined_out": [ - "\"metadata_hash\"", - "0x" - ], - "stack_out": [ - "\"metadata_hash\"", - "0x" - ] - }, - "1839": { - "op": "app_global_put", - "stack_out": [] - }, - "1840": { - "op": "bytec 7 // \"manager_addr\"", - "stack_out": [ - "\"manager_addr\"" - ] - }, - "1842": { - "op": "global ZeroAddress", - "defined_out": [ - "\"manager_addr\"", - "tmp%2#0" - ], - "stack_out": [ - "\"manager_addr\"", - "tmp%2#0" - ] - }, - "1844": { - "op": "app_global_put", - "stack_out": [] - }, - "1845": { - "op": "bytec_1 // \"reserve_addr\"", - "defined_out": [ - "\"reserve_addr\"" - ], - "stack_out": [ - "\"reserve_addr\"" - ] - }, - "1846": { - "op": "global ZeroAddress", - "defined_out": [ - "\"reserve_addr\"", - "tmp%3#0" - ], - "stack_out": [ - "\"reserve_addr\"", - "tmp%3#0" - ] - }, - "1848": { - "op": "app_global_put", - "stack_out": [] - }, - "1849": { - "op": "bytec 5 // \"freeze_addr\"", - "defined_out": [ - "\"freeze_addr\"" - ], - "stack_out": [ - "\"freeze_addr\"" - ] - }, - "1851": { - "op": "global ZeroAddress", - "defined_out": [ - "\"freeze_addr\"", - "tmp%4#0" - ], - "stack_out": [ - "\"freeze_addr\"", - "tmp%4#0" - ] - }, - "1853": { - "op": "app_global_put", - "stack_out": [] - }, - "1854": { - "op": "bytec_2 // \"clawback_addr\"", - "defined_out": [ - "\"clawback_addr\"" - ], - "stack_out": [ - "\"clawback_addr\"" - ] - }, - "1855": { - "op": "global ZeroAddress", - "defined_out": [ - "\"clawback_addr\"", - "tmp%5#0" - ], - "stack_out": [ - "\"clawback_addr\"", - "tmp%5#0" - ] - }, - "1857": { - "op": "app_global_put", - "stack_out": [] - }, - "1858": { - "op": "bytec_0 // \"smart_asa_id\"", - "defined_out": [ - "\"smart_asa_id\"" - ], - "stack_out": [ - "\"smart_asa_id\"" - ] - }, - "1859": { - "op": "intc_0 // 0", - "stack_out": [ - "\"smart_asa_id\"", - "0" - ] - }, - "1860": { - "op": "app_global_put", - "stack_out": [] - }, - "1861": { - "op": "bytec 6 // \"global_frozen\"", - "defined_out": [ - "\"global_frozen\"" - ], - "stack_out": [ - "\"global_frozen\"" - ] - }, - "1863": { - "op": "intc_0 // 0", - "stack_out": [ - "\"global_frozen\"", - "0" - ] - }, - "1864": { - "op": "app_global_put", - "stack_out": [] - }, - "1865": { - "op": "intc_1 // 1", - "defined_out": [ - "1" - ], - "stack_out": [ - "1" - ] - }, - "1866": { - "op": "return", - "stack_out": [] - }, - "1867": { - "subroutine": "smart_contracts.smart_asa.contract.SmartAsa.get_asset_config[routing]", - "params": {}, - "block": "get_asset_config", - "stack_in": [], - "op": "txna ApplicationArgs 1", - "defined_out": [ - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0" - ] - }, - "1870": { - "op": "dup", - "defined_out": [ - "tmp%0#0", - "tmp%0#0 (copy)" - ], - "stack_out": [ - "tmp%0#0", - "tmp%0#0 (copy)" - ] - }, - "1871": { - "op": "len", - "defined_out": [ - "len%0#0", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "len%0#0" - ] - }, - "1872": { - "op": "intc_2 // 8", - "defined_out": [ - "8", - "len%0#0", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "len%0#0", - "8" - ] - }, - "1873": { - "op": "==", - "defined_out": [ - "eq%0#0", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "eq%0#0" - ] - }, - "1874": { - "error": "invalid number of bytes for arc4.uint64", - "op": "assert // invalid number of bytes for arc4.uint64", - "stack_out": [ - "tmp%0#0" - ] - }, - "1875": { - "op": "btoi", - "defined_out": [ - "asset#0" - ], - "stack_out": [ - "asset#0" - ] - }, - "1876": { - "callsub": "smart_contracts.smart_asa.contract.SmartAsa.assert_common_preconditions", - "op": "callsub assert_common_preconditions", - "stack_out": [] - }, - "1879": { - "op": "intc_0 // 0", - "defined_out": [ - "0" - ], - "stack_out": [ - "0" - ] - }, - "1880": { - "op": "bytec 8 // \"total\"", - "defined_out": [ - "\"total\"", - "0" - ], - "stack_out": [ - "0", - "\"total\"" - ] - }, - "1882": { - "op": "app_global_get_ex", - "defined_out": [ - "maybe_exists%0#0", - "maybe_value%0#0" - ], - "stack_out": [ - "maybe_value%0#0", - "maybe_exists%0#0" - ] - }, - "1883": { - "error": "check self.total exists", - "op": "assert // check self.total exists", - "stack_out": [ - "maybe_value%0#0" - ] - }, - "1884": { - "op": "itob", - "defined_out": [ - "aggregate%val_as_bytes%0#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0" - ] - }, - "1885": { - "op": "intc_0 // 0", - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "0" - ] - }, - "1886": { - "op": "bytec 10 // \"decimals\"", - "defined_out": [ - "\"decimals\"", - "0", - "aggregate%val_as_bytes%0#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "0", - "\"decimals\"" - ] - }, - "1888": { - "op": "app_global_get_ex", - "defined_out": [ - "aggregate%val_as_bytes%0#0", - "maybe_exists%1#0", - "maybe_value%1#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "maybe_value%1#0", - "maybe_exists%1#0" - ] - }, - "1889": { - "error": "check self.decimals exists", - "op": "assert // check self.decimals exists", - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "maybe_value%1#0" - ] - }, - "1890": { - "op": "itob", - "defined_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%val_as_bytes%1#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%val_as_bytes%1#0" - ] - }, - "1891": { - "op": "dup", - "defined_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%val_as_bytes%1#0", - "aggregate%val_as_bytes%1#0 (copy)" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%val_as_bytes%1#0", - "aggregate%val_as_bytes%1#0 (copy)" - ] - }, - "1892": { - "op": "bitlen", - "defined_out": [ - "aggregate%bitlen%0#0", - "aggregate%val_as_bytes%0#0", - "aggregate%val_as_bytes%1#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%val_as_bytes%1#0", - "aggregate%bitlen%0#0" - ] - }, - "1893": { - "op": "intc_3 // 32", - "defined_out": [ - "32", - "aggregate%bitlen%0#0", - "aggregate%val_as_bytes%0#0", - "aggregate%val_as_bytes%1#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%val_as_bytes%1#0", - "aggregate%bitlen%0#0", - "32" - ] - }, - "1894": { - "op": "<=", - "defined_out": [ - "aggregate%no_overflow%0#0", - "aggregate%val_as_bytes%0#0", - "aggregate%val_as_bytes%1#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%val_as_bytes%1#0", - "aggregate%no_overflow%0#0" - ] - }, - "1895": { - "error": "overflow", - "op": "assert // overflow", - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%val_as_bytes%1#0" - ] - }, - "1896": { - "op": "extract 4 4", - "defined_out": [ - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0" - ] - }, - "1899": { - "op": "intc_0 // 0", - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "0" - ] - }, - "1900": { - "op": "bytec 9 // \"default_frozen\"", - "defined_out": [ - "\"default_frozen\"", - "0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "0", - "\"default_frozen\"" - ] - }, - "1902": { - "op": "app_global_get_ex", - "defined_out": [ - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0", - "maybe_exists%2#0", - "maybe_value%2#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "maybe_value%2#0", - "maybe_exists%2#0" - ] - }, - "1903": { - "error": "check self.default_frozen exists", - "op": "assert // check self.default_frozen exists", - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "maybe_value%2#0" - ] - }, - "1904": { - "op": "bytec 16 // 0x00", - "defined_out": [ - "0x00", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0", - "maybe_value%2#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "maybe_value%2#0", - "0x00" - ] - }, - "1906": { - "op": "intc_0 // 0", - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "maybe_value%2#0", - "0x00", - "0" - ] - }, - "1907": { - "op": "uncover 2", - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "0x00", - "0", - "maybe_value%2#0" - ] - }, - "1909": { - "op": "setbit", - "defined_out": [ - "aggregate%encoded_bool%0#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0" - ] - }, - "1910": { - "op": "intc_0 // 0", - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "0" - ] - }, - "1911": { - "op": "bytec 11 // \"unit_name\"", - "defined_out": [ - "\"unit_name\"", - "0", - "aggregate%encoded_bool%0#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "0", - "\"unit_name\"" - ] - }, - "1913": { - "op": "app_global_get_ex", - "defined_out": [ - "aggregate%encoded_bool%0#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0", - "maybe_exists%3#0", - "maybe_value%3#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "maybe_value%3#0", - "maybe_exists%3#0" - ] - }, - "1914": { - "error": "check self.unit_name exists", - "op": "assert // check self.unit_name exists", - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "maybe_value%3#0" - ] - }, - "1915": { - "op": "dup", - "defined_out": [ - "aggregate%encoded_bool%0#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0", - "maybe_value%3#0", - "maybe_value%3#0 (copy)" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "maybe_value%3#0", - "maybe_value%3#0 (copy)" - ] - }, - "1916": { - "op": "len", - "defined_out": [ - "aggregate%encoded_bool%0#0", - "aggregate%length%0#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0", - "maybe_value%3#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "maybe_value%3#0", - "aggregate%length%0#0" - ] - }, - "1917": { - "op": "itob", - "defined_out": [ - "aggregate%as_bytes%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0", - "maybe_value%3#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "maybe_value%3#0", - "aggregate%as_bytes%0#0" - ] - }, - "1918": { - "op": "extract 6 2", - "defined_out": [ - "aggregate%encoded_bool%0#0", - "aggregate%length_uint16%0#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0", - "maybe_value%3#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "maybe_value%3#0", - "aggregate%length_uint16%0#0" - ] - }, - "1921": { - "op": "swap", - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%length_uint16%0#0", - "maybe_value%3#0" - ] - }, - "1922": { - "op": "concat", - "defined_out": [ - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0" - ] - }, - "1923": { - "op": "intc_0 // 0", - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "0" - ] - }, - "1924": { - "op": "bytec 12 // \"name\"", - "defined_out": [ - "\"name\"", - "0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "0", - "\"name\"" - ] - }, - "1926": { - "op": "app_global_get_ex", - "defined_out": [ - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0", - "maybe_exists%4#0", - "maybe_value%4#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "maybe_value%4#0", - "maybe_exists%4#0" - ] - }, - "1927": { - "error": "check self.name exists", - "op": "assert // check self.name exists", - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "maybe_value%4#0" - ] - }, - "1928": { - "op": "dup", - "defined_out": [ - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0", - "maybe_value%4#0", - "maybe_value%4#0 (copy)" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "maybe_value%4#0", - "maybe_value%4#0 (copy)" - ] - }, - "1929": { - "op": "len", - "defined_out": [ - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%length%1#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0", - "maybe_value%4#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "maybe_value%4#0", - "aggregate%length%1#0" - ] - }, - "1930": { - "op": "itob", - "defined_out": [ - "aggregate%as_bytes%1#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0", - "maybe_value%4#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "maybe_value%4#0", - "aggregate%as_bytes%1#0" - ] - }, - "1931": { - "op": "extract 6 2", - "defined_out": [ - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%length_uint16%1#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0", - "maybe_value%4#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "maybe_value%4#0", - "aggregate%length_uint16%1#0" - ] - }, - "1934": { - "op": "swap", - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%length_uint16%1#0", - "maybe_value%4#0" - ] - }, - "1935": { - "op": "concat", - "defined_out": [ - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0" - ] - }, - "1936": { - "op": "intc_0 // 0", - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "0" - ] - }, - "1937": { - "op": "bytec 13 // \"url\"", - "defined_out": [ - "\"url\"", - "0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "0", - "\"url\"" - ] - }, - "1939": { - "op": "app_global_get_ex", - "defined_out": [ - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0", - "maybe_exists%5#0", - "maybe_value%5#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "maybe_value%5#0", - "maybe_exists%5#0" - ] - }, - "1940": { - "error": "check self.url exists", - "op": "assert // check self.url exists", - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "maybe_value%5#0" - ] - }, - "1941": { - "op": "dup", - "defined_out": [ - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0", - "maybe_value%5#0", - "maybe_value%5#0 (copy)" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "maybe_value%5#0", - "maybe_value%5#0 (copy)" - ] - }, - "1942": { - "op": "len", - "defined_out": [ - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%length%2#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0", - "maybe_value%5#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "maybe_value%5#0", - "aggregate%length%2#0" - ] - }, - "1943": { - "op": "itob", - "defined_out": [ - "aggregate%as_bytes%2#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0", - "maybe_value%5#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "maybe_value%5#0", - "aggregate%as_bytes%2#0" - ] - }, - "1944": { - "op": "extract 6 2", - "defined_out": [ - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%length_uint16%2#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0", - "maybe_value%5#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "maybe_value%5#0", - "aggregate%length_uint16%2#0" - ] - }, - "1947": { - "op": "swap", - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%length_uint16%2#0", - "maybe_value%5#0" - ] - }, - "1948": { - "op": "concat", - "defined_out": [ - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0" - ] - }, - "1949": { - "op": "intc_0 // 0", - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "0" - ] - }, - "1950": { - "op": "bytec 14 // \"metadata_hash\"", - "defined_out": [ - "\"metadata_hash\"", - "0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "0", - "\"metadata_hash\"" - ] - }, - "1952": { - "op": "app_global_get_ex", - "defined_out": [ - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0", - "maybe_exists%6#0", - "maybe_value%6#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "maybe_value%6#0", - "maybe_exists%6#0" - ] - }, - "1953": { - "error": "check self.metadata_hash exists", - "op": "assert // check self.metadata_hash exists", - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "maybe_value%6#0" - ] - }, - "1954": { - "op": "dup", - "defined_out": [ - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0", - "maybe_value%6#0", - "maybe_value%6#0 (copy)" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "maybe_value%6#0", - "maybe_value%6#0 (copy)" - ] - }, - "1955": { - "op": "len", - "defined_out": [ - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%length%3#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0", - "maybe_value%6#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "maybe_value%6#0", - "aggregate%length%3#0" - ] - }, - "1956": { - "op": "itob", - "defined_out": [ - "aggregate%as_bytes%3#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0", - "maybe_value%6#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "maybe_value%6#0", - "aggregate%as_bytes%3#0" - ] - }, - "1957": { - "op": "extract 6 2", - "defined_out": [ - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%length_uint16%3#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0", - "maybe_value%6#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "maybe_value%6#0", - "aggregate%length_uint16%3#0" - ] - }, - "1960": { - "op": "swap", - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%length_uint16%3#0", - "maybe_value%6#0" - ] - }, - "1961": { - "op": "concat", - "defined_out": [ - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0" - ] - }, - "1962": { - "op": "intc_0 // 0", - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "0" - ] - }, - "1963": { - "op": "bytec 7 // \"manager_addr\"", - "defined_out": [ - "\"manager_addr\"", - "0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "0", - "\"manager_addr\"" - ] - }, - "1965": { - "op": "app_global_get_ex", - "defined_out": [ - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0", - "maybe_exists%7#0", - "maybe_value%7#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_exists%7#0" - ] - }, - "1966": { - "error": "check self.manager_addr exists", - "op": "assert // check self.manager_addr exists", - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0" - ] - }, - "1967": { - "op": "intc_0 // 0", - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "0" - ] - }, - "1968": { - "op": "bytec_1 // \"reserve_addr\"", - "defined_out": [ - "\"reserve_addr\"", - "0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0", - "maybe_value%7#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "0", - "\"reserve_addr\"" - ] - }, - "1969": { - "op": "app_global_get_ex", - "defined_out": [ - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0", - "maybe_exists%8#0", - "maybe_value%7#0", - "maybe_value%8#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_exists%8#0" - ] - }, - "1970": { - "error": "check self.reserve_addr exists", - "op": "assert // check self.reserve_addr exists", - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0" - ] - }, - "1971": { - "op": "intc_0 // 0", - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "0" - ] - }, - "1972": { - "op": "bytec 5 // \"freeze_addr\"", - "defined_out": [ - "\"freeze_addr\"", - "0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0", - "maybe_value%7#0", - "maybe_value%8#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "0", - "\"freeze_addr\"" - ] - }, - "1974": { - "op": "app_global_get_ex", - "defined_out": [ - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0", - "maybe_exists%9#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_exists%9#0" - ] - }, - "1975": { - "error": "check self.freeze_addr exists", - "op": "assert // check self.freeze_addr exists", - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0" - ] - }, - "1976": { - "op": "intc_0 // 0", - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "0" - ] - }, - "1977": { - "op": "bytec_2 // \"clawback_addr\"", - "defined_out": [ - "\"clawback_addr\"", - "0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "0", - "\"clawback_addr\"" - ] - }, - "1978": { - "op": "app_global_get_ex", - "defined_out": [ - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%uint32%0#0", - "aggregate%val_as_bytes%0#0", - "maybe_exists%10#0", - "maybe_value%10#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "maybe_exists%10#0" - ] - }, - "1979": { - "error": "check self.clawback_addr exists", - "op": "assert // check self.clawback_addr exists", - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0" - ] - }, - "1980": { - "op": "uncover 10", - "stack_out": [ - "aggregate%uint32%0#0", - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%val_as_bytes%0#0" - ] - }, - "1982": { - "op": "uncover 10", - "stack_out": [ - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%val_as_bytes%0#0", - "aggregate%uint32%0#0" - ] - }, - "1984": { - "op": "concat", - "defined_out": [ - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%head%1#0", - "maybe_value%10#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0" - ], - "stack_out": [ - "aggregate%encoded_bool%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%head%1#0" - ] - }, - "1985": { - "op": "uncover 9", - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%head%1#0", - "aggregate%encoded_bool%0#0" - ] - }, - "1987": { - "op": "concat", - "defined_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%head%2#0", - "maybe_value%10#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0" - ], - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%head%2#0" - ] - }, - "1988": { - "op": "pushbytes 0x0095", - "defined_out": [ - "0x0095", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%head%2#0", - "maybe_value%10#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0" - ], - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%head%2#0", - "0x0095" - ] - }, - "1992": { - "op": "concat", - "defined_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%head%3#0", - "maybe_value%10#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0" - ], - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%head%3#0" - ] - }, - "1993": { - "op": "dig 8", - "defined_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%0#0 (copy)", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%head%3#0", - "maybe_value%10#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0" - ], - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%head%3#0", - "aggregate%encoded_value%0#0 (copy)" - ] - }, - "1995": { - "op": "len", - "defined_out": [ - "aggregate%data_length%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%head%3#0", - "maybe_value%10#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0" - ], - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%head%3#0", - "aggregate%data_length%0#0" - ] - }, - "1996": { - "op": "pushint 149 // 149", - "defined_out": [ - "149", - "aggregate%data_length%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%head%3#0", - "maybe_value%10#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0" - ], - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%head%3#0", - "aggregate%data_length%0#0", - "149" - ] - }, - "1999": { - "op": "+", - "defined_out": [ - "aggregate%current_tail_offset%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%head%3#0", - "maybe_value%10#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0" - ], - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%head%3#0", - "aggregate%current_tail_offset%0#0" - ] - }, - "2000": { - "op": "dup", - "defined_out": [ - "aggregate%current_tail_offset%0#0", - "aggregate%current_tail_offset%0#0 (copy)", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%head%3#0", - "maybe_value%10#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0" - ], - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%head%3#0", - "aggregate%current_tail_offset%0#0", - "aggregate%current_tail_offset%0#0 (copy)" - ] - }, - "2001": { - "op": "itob", - "defined_out": [ - "aggregate%as_bytes%5#0", - "aggregate%current_tail_offset%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%head%3#0", - "maybe_value%10#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0" - ], - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%head%3#0", - "aggregate%current_tail_offset%0#0", - "aggregate%as_bytes%5#0" - ] - }, - "2002": { - "op": "extract 6 2", - "defined_out": [ - "aggregate%current_tail_offset%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%head%3#0", - "aggregate%offset_as_uint16%1#0", - "maybe_value%10#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0" - ], - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%head%3#0", - "aggregate%current_tail_offset%0#0", - "aggregate%offset_as_uint16%1#0" - ] - }, - "2005": { - "op": "uncover 2", - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%current_tail_offset%0#0", - "aggregate%offset_as_uint16%1#0", - "aggregate%head%3#0" - ] - }, - "2007": { - "op": "swap", - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%current_tail_offset%0#0", - "aggregate%head%3#0", - "aggregate%offset_as_uint16%1#0" - ] - }, - "2008": { - "op": "concat", - "defined_out": [ - "aggregate%current_tail_offset%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%head%4#0", - "maybe_value%10#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0" - ], - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%current_tail_offset%0#0", - "aggregate%head%4#0" - ] - }, - "2009": { - "op": "dig 8", - "defined_out": [ - "aggregate%current_tail_offset%0#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%1#0 (copy)", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%head%4#0", - "maybe_value%10#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0" - ], - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%current_tail_offset%0#0", - "aggregate%head%4#0", - "aggregate%encoded_value%1#0 (copy)" - ] - }, - "2011": { - "op": "len", - "defined_out": [ - "aggregate%current_tail_offset%0#0", - "aggregate%data_length%1#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%head%4#0", - "maybe_value%10#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0" - ], - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%current_tail_offset%0#0", - "aggregate%head%4#0", - "aggregate%data_length%1#0" - ] - }, - "2012": { - "op": "uncover 2", - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%head%4#0", - "aggregate%data_length%1#0", - "aggregate%current_tail_offset%0#0" - ] - }, - "2014": { - "op": "+", - "defined_out": [ - "aggregate%current_tail_offset%1#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%head%4#0", - "maybe_value%10#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0" - ], - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%head%4#0", - "aggregate%current_tail_offset%1#0" - ] - }, - "2015": { - "op": "dup", - "defined_out": [ - "aggregate%current_tail_offset%1#0", - "aggregate%current_tail_offset%1#0 (copy)", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%head%4#0", - "maybe_value%10#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0" - ], - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%head%4#0", - "aggregate%current_tail_offset%1#0", - "aggregate%current_tail_offset%1#0 (copy)" - ] - }, - "2016": { - "op": "itob", - "defined_out": [ - "aggregate%as_bytes%6#0", - "aggregate%current_tail_offset%1#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%head%4#0", - "maybe_value%10#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0" - ], - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%head%4#0", - "aggregate%current_tail_offset%1#0", - "aggregate%as_bytes%6#0" - ] - }, - "2017": { - "op": "extract 6 2", - "defined_out": [ - "aggregate%current_tail_offset%1#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%head%4#0", - "aggregate%offset_as_uint16%2#0", - "maybe_value%10#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0" - ], - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%head%4#0", - "aggregate%current_tail_offset%1#0", - "aggregate%offset_as_uint16%2#0" - ] - }, - "2020": { - "op": "uncover 2", - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%current_tail_offset%1#0", - "aggregate%offset_as_uint16%2#0", - "aggregate%head%4#0" - ] - }, - "2022": { - "op": "swap", - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%current_tail_offset%1#0", - "aggregate%head%4#0", - "aggregate%offset_as_uint16%2#0" - ] - }, - "2023": { - "op": "concat", - "defined_out": [ - "aggregate%current_tail_offset%1#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%head%5#0", - "maybe_value%10#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0" - ], - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%current_tail_offset%1#0", - "aggregate%head%5#0" - ] - }, - "2024": { - "op": "dig 7", - "defined_out": [ - "aggregate%current_tail_offset%1#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%2#0 (copy)", - "aggregate%encoded_value%3#0", - "aggregate%head%5#0", - "maybe_value%10#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0" - ], - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%current_tail_offset%1#0", - "aggregate%head%5#0", - "aggregate%encoded_value%2#0 (copy)" - ] - }, - "2026": { - "op": "len", - "defined_out": [ - "aggregate%current_tail_offset%1#0", - "aggregate%data_length%2#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%head%5#0", - "maybe_value%10#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0" - ], - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%current_tail_offset%1#0", - "aggregate%head%5#0", - "aggregate%data_length%2#0" - ] - }, - "2027": { - "op": "uncover 2", - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%head%5#0", - "aggregate%data_length%2#0", - "aggregate%current_tail_offset%1#0" - ] - }, - "2029": { - "op": "+", - "defined_out": [ - "aggregate%current_tail_offset%2#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%head%5#0", - "maybe_value%10#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0" - ], - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%head%5#0", - "aggregate%current_tail_offset%2#0" - ] - }, - "2030": { - "op": "itob", - "defined_out": [ - "aggregate%as_bytes%7#0", - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%head%5#0", - "maybe_value%10#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0" - ], - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%head%5#0", - "aggregate%as_bytes%7#0" - ] - }, - "2031": { - "op": "extract 6 2", - "defined_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%head%5#0", - "aggregate%offset_as_uint16%3#0", - "maybe_value%10#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0" - ], - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%head%5#0", - "aggregate%offset_as_uint16%3#0" - ] - }, - "2034": { - "op": "concat", - "defined_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%head%6#0", - "maybe_value%10#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0" - ], - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%7#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%head%6#0" - ] - }, - "2035": { - "op": "uncover 4", - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%head%6#0", - "maybe_value%7#0" - ] - }, - "2037": { - "op": "concat", - "defined_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%head%7#0", - "maybe_value%10#0", - "maybe_value%8#0", - "maybe_value%9#0" - ], - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%8#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%head%7#0" - ] - }, - "2038": { - "op": "uncover 3", - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%head%7#0", - "maybe_value%8#0" - ] - }, - "2040": { - "op": "concat", - "defined_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%head%8#0", - "maybe_value%10#0", - "maybe_value%9#0" - ], - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%9#0", - "maybe_value%10#0", - "aggregate%head%8#0" - ] - }, - "2041": { - "op": "uncover 2", - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%10#0", - "aggregate%head%8#0", - "maybe_value%9#0" - ] - }, - "2043": { - "op": "concat", - "defined_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%head%9#0", - "maybe_value%10#0" - ], - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "maybe_value%10#0", - "aggregate%head%9#0" - ] - }, - "2044": { - "op": "swap", - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%head%9#0", - "maybe_value%10#0" - ] - }, - "2045": { - "op": "concat", - "defined_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%head%10#0" - ], - "stack_out": [ - "aggregate%encoded_value%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%head%10#0" - ] - }, - "2046": { - "op": "uncover 4", - "stack_out": [ - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%head%10#0", - "aggregate%encoded_value%0#0" - ] - }, - "2048": { - "op": "concat", - "defined_out": [ - "aggregate%concat%0#0", - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0" - ], - "stack_out": [ - "aggregate%encoded_value%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%concat%0#0" - ] - }, - "2049": { - "op": "uncover 3", - "stack_out": [ - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%concat%0#0", - "aggregate%encoded_value%1#0" - ] - }, - "2051": { - "op": "concat", - "defined_out": [ - "aggregate%concat%1#0", - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0" - ], - "stack_out": [ - "aggregate%encoded_value%2#0", - "aggregate%encoded_value%3#0", - "aggregate%concat%1#0" - ] - }, - "2052": { - "op": "uncover 2", - "stack_out": [ - "aggregate%encoded_value%3#0", - "aggregate%concat%1#0", - "aggregate%encoded_value%2#0" - ] - }, - "2054": { - "op": "concat", - "defined_out": [ - "aggregate%concat%2#0", - "aggregate%encoded_value%3#0" - ], - "stack_out": [ - "aggregate%encoded_value%3#0", - "aggregate%concat%2#0" - ] - }, - "2055": { - "op": "swap", - "stack_out": [ - "aggregate%concat%2#0", - "aggregate%encoded_value%3#0" - ] - }, - "2056": { - "op": "concat", - "defined_out": [ - "aggregate%concat%3#0" - ], - "stack_out": [ - "aggregate%concat%3#0" - ] - }, - "2057": { - "op": "bytec 15 // 0x151f7c75", - "defined_out": [ - "0x151f7c75", - "aggregate%concat%3#0" - ], - "stack_out": [ - "aggregate%concat%3#0", - "0x151f7c75" - ] - }, - "2059": { - "op": "swap", - "stack_out": [ - "0x151f7c75", - "aggregate%concat%3#0" - ] - }, - "2060": { - "op": "concat", - "defined_out": [ - "tmp%3#0" - ], - "stack_out": [ - "tmp%3#0" - ] - }, - "2061": { - "op": "log", - "stack_out": [] - }, - "2062": { - "op": "intc_1 // 1", - "defined_out": [ - "1" - ], - "stack_out": [ - "1" - ] - }, - "2063": { - "op": "return", - "stack_out": [] - }, - "2064": { - "subroutine": "smart_contracts.smart_asa.contract.SmartAsa.get_asset_is_frozen[routing]", - "params": {}, - "block": "get_asset_is_frozen", - "stack_in": [], - "op": "txna ApplicationArgs 1", - "defined_out": [ - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0" - ] - }, - "2067": { - "op": "dup", - "defined_out": [ - "tmp%0#0", - "tmp%0#0 (copy)" - ], - "stack_out": [ - "tmp%0#0", - "tmp%0#0 (copy)" - ] - }, - "2068": { - "op": "len", - "defined_out": [ - "len%0#0", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "len%0#0" - ] - }, - "2069": { - "op": "intc_2 // 8", - "defined_out": [ - "8", - "len%0#0", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "len%0#0", - "8" - ] - }, - "2070": { - "op": "==", - "defined_out": [ - "eq%0#0", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "eq%0#0" - ] - }, - "2071": { - "error": "invalid number of bytes for arc4.uint64", - "op": "assert // invalid number of bytes for arc4.uint64", - "stack_out": [ - "tmp%0#0" - ] - }, - "2072": { - "op": "btoi", - "defined_out": [ - "freeze_asset#0" - ], - "stack_out": [ - "freeze_asset#0" - ] - }, - "2073": { - "callsub": "smart_contracts.smart_asa.contract.SmartAsa.assert_common_preconditions", - "op": "callsub assert_common_preconditions", - "stack_out": [] - }, - "2076": { - "op": "intc_0 // 0", - "defined_out": [ - "0" - ], - "stack_out": [ - "0" - ] - }, - "2077": { - "op": "bytec 6 // \"global_frozen\"", - "defined_out": [ - "\"global_frozen\"", - "0" - ], - "stack_out": [ - "0", - "\"global_frozen\"" - ] - }, - "2079": { - "op": "app_global_get_ex", - "defined_out": [ - "maybe_exists%0#0", - "maybe_value%0#0" - ], - "stack_out": [ - "maybe_value%0#0", - "maybe_exists%0#0" - ] - }, - "2080": { - "error": "check self.global_frozen exists", - "op": "assert // check self.global_frozen exists", - "stack_out": [ - "maybe_value%0#0" - ] - }, - "2081": { - "op": "bytec 16 // 0x00", - "defined_out": [ - "0x00", - "maybe_value%0#0" - ], - "stack_out": [ - "maybe_value%0#0", - "0x00" - ] - }, - "2083": { - "op": "intc_0 // 0", - "stack_out": [ - "maybe_value%0#0", - "0x00", - "0" - ] - }, - "2084": { - "op": "uncover 2", - "stack_out": [ - "0x00", - "0", - "maybe_value%0#0" - ] - }, - "2086": { - "op": "setbit", - "defined_out": [ - "aggregate%encoded_bool%0#0" - ], - "stack_out": [ - "aggregate%encoded_bool%0#0" - ] - }, - "2087": { - "op": "bytec 15 // 0x151f7c75", - "defined_out": [ - "0x151f7c75", - "aggregate%encoded_bool%0#0" - ], - "stack_out": [ - "aggregate%encoded_bool%0#0", - "0x151f7c75" - ] - }, - "2089": { - "op": "swap", - "stack_out": [ - "0x151f7c75", - "aggregate%encoded_bool%0#0" - ] - }, - "2090": { - "op": "concat", - "defined_out": [ - "tmp%3#0" - ], - "stack_out": [ - "tmp%3#0" - ] - }, - "2091": { - "op": "log", - "stack_out": [] - }, - "2092": { - "op": "intc_1 // 1", - "defined_out": [ - "1" - ], - "stack_out": [ - "1" - ] - }, - "2093": { - "op": "return", - "stack_out": [] - }, - "2094": { - "subroutine": "smart_contracts.smart_asa.contract.SmartAsa.get_account_is_frozen[routing]", - "params": {}, - "block": "get_account_is_frozen", - "stack_in": [], - "op": "txna ApplicationArgs 1", - "defined_out": [ - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0" - ] - }, - "2097": { - "op": "dup", - "defined_out": [ - "tmp%0#0", - "tmp%0#0 (copy)" - ], - "stack_out": [ - "tmp%0#0", - "tmp%0#0 (copy)" - ] - }, - "2098": { - "op": "len", - "defined_out": [ - "len%0#0", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "len%0#0" - ] - }, - "2099": { - "op": "intc_2 // 8", - "defined_out": [ - "8", - "len%0#0", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "len%0#0", - "8" - ] - }, - "2100": { - "op": "==", - "defined_out": [ - "eq%0#0", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "eq%0#0" - ] - }, - "2101": { - "error": "invalid number of bytes for arc4.uint64", - "op": "assert // invalid number of bytes for arc4.uint64", - "stack_out": [ - "tmp%0#0" - ] - }, - "2102": { - "op": "btoi", - "defined_out": [ - "freeze_asset#0" - ], - "stack_out": [ - "freeze_asset#0" - ] - }, - "2103": { - "op": "txna ApplicationArgs 2", - "defined_out": [ - "freeze_account#0", - "freeze_asset#0" - ], - "stack_out": [ - "freeze_asset#0", - "freeze_account#0" - ] - }, - "2106": { - "op": "dup", - "defined_out": [ - "freeze_account#0", - "freeze_account#0 (copy)", - "freeze_asset#0" - ], - "stack_out": [ - "freeze_asset#0", - "freeze_account#0", - "freeze_account#0 (copy)" - ] - }, - "2107": { - "op": "len", - "defined_out": [ - "freeze_account#0", - "freeze_asset#0", - "len%1#0" - ], - "stack_out": [ - "freeze_asset#0", - "freeze_account#0", - "len%1#0" - ] - }, - "2108": { - "op": "intc_3 // 32", - "defined_out": [ - "32", - "freeze_account#0", - "freeze_asset#0", - "len%1#0" - ], - "stack_out": [ - "freeze_asset#0", - "freeze_account#0", - "len%1#0", - "32" - ] - }, - "2109": { - "op": "==", - "defined_out": [ - "eq%1#0", - "freeze_account#0", - "freeze_asset#0" - ], - "stack_out": [ - "freeze_asset#0", - "freeze_account#0", - "eq%1#0" - ] - }, - "2110": { - "error": "invalid number of bytes for arc4.static_array", - "op": "assert // invalid number of bytes for arc4.static_array", - "stack_out": [ - "freeze_asset#0", - "freeze_account#0" - ] - }, - "2111": { - "op": "swap", - "stack_out": [ - "freeze_account#0", - "freeze_asset#0" - ] - }, - "2112": { - "callsub": "smart_contracts.smart_asa.contract.SmartAsa.assert_common_preconditions", - "op": "callsub assert_common_preconditions", - "stack_out": [ - "freeze_account#0" - ] - }, - "2115": { - "op": "intc_0 // 0", - "defined_out": [ - "0", - "freeze_account#0" - ], - "stack_out": [ - "freeze_account#0", - "0" - ] - }, - "2116": { - "op": "bytec 4 // \"account_frozen\"", - "defined_out": [ - "\"account_frozen\"", - "0", - "freeze_account#0" - ], - "stack_out": [ - "freeze_account#0", - "0", - "\"account_frozen\"" - ] - }, - "2118": { - "op": "app_local_get_ex", - "defined_out": [ - "maybe_exists%0#0", - "maybe_value%0#0" - ], - "stack_out": [ - "maybe_value%0#0", - "maybe_exists%0#0" - ] - }, - "2119": { - "error": "check self.account_frozen exists for account", - "op": "assert // check self.account_frozen exists for account", - "stack_out": [ - "maybe_value%0#0" - ] - }, - "2120": { - "op": "bytec 16 // 0x00", - "defined_out": [ - "0x00", - "maybe_value%0#0" - ], - "stack_out": [ - "maybe_value%0#0", - "0x00" - ] - }, - "2122": { - "op": "intc_0 // 0", - "stack_out": [ - "maybe_value%0#0", - "0x00", - "0" - ] - }, - "2123": { - "op": "uncover 2", - "stack_out": [ - "0x00", - "0", - "maybe_value%0#0" - ] - }, - "2125": { - "op": "setbit", - "defined_out": [ - "aggregate%encoded_bool%0#0" - ], - "stack_out": [ - "aggregate%encoded_bool%0#0" - ] - }, - "2126": { - "op": "bytec 15 // 0x151f7c75", - "defined_out": [ - "0x151f7c75", - "aggregate%encoded_bool%0#0" - ], - "stack_out": [ - "aggregate%encoded_bool%0#0", - "0x151f7c75" - ] - }, - "2128": { - "op": "swap", - "stack_out": [ - "0x151f7c75", - "aggregate%encoded_bool%0#0" - ] - }, - "2129": { - "op": "concat", - "defined_out": [ - "tmp%5#0" - ], - "stack_out": [ - "tmp%5#0" - ] - }, - "2130": { - "op": "log", - "stack_out": [] - }, - "2131": { - "op": "intc_1 // 1", - "defined_out": [ - "1" - ], - "stack_out": [ - "1" - ] - }, - "2132": { - "op": "return", - "stack_out": [] - }, - "2133": { - "subroutine": "smart_contracts.smart_asa.contract.SmartAsa.get_circulating_supply[routing]", - "params": {}, - "block": "get_circulating_supply", - "stack_in": [], - "op": "txna ApplicationArgs 1", - "defined_out": [ - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0" - ] - }, - "2136": { - "op": "dup", - "defined_out": [ - "tmp%0#0", - "tmp%0#0 (copy)" - ], - "stack_out": [ - "tmp%0#0", - "tmp%0#0 (copy)" - ] - }, - "2137": { - "op": "len", - "defined_out": [ - "len%0#0", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "len%0#0" - ] - }, - "2138": { - "op": "intc_2 // 8", - "defined_out": [ - "8", - "len%0#0", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "len%0#0", - "8" - ] - }, - "2139": { - "op": "==", - "defined_out": [ - "eq%0#0", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "eq%0#0" - ] - }, - "2140": { - "error": "invalid number of bytes for arc4.uint64", - "op": "assert // invalid number of bytes for arc4.uint64", - "stack_out": [ - "tmp%0#0" - ] - }, - "2141": { - "op": "btoi", - "defined_out": [ - "asset#0" - ], - "stack_out": [ - "asset#0" - ] - }, - "2142": { - "op": "dup", - "defined_out": [ - "asset#0", - "asset#0 (copy)" - ], - "stack_out": [ - "asset#0", - "asset#0 (copy)" - ] - }, - "2143": { - "callsub": "smart_contracts.smart_asa.contract.SmartAsa.assert_common_preconditions", - "op": "callsub assert_common_preconditions", - "stack_out": [ - "asset#0" - ] - }, - "2146": { - "callsub": "smart_contracts.smart_asa.contract.SmartAsa.circulating_supply", - "op": "callsub circulating_supply", - "defined_out": [ - "tmp%0#1" - ], - "stack_out": [ - "tmp%0#1" - ] - }, - "2149": { - "op": "itob", - "defined_out": [ - "aggregate%val_as_bytes%0#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0" - ] - }, - "2150": { - "op": "bytec 15 // 0x151f7c75", - "defined_out": [ - "0x151f7c75", - "aggregate%val_as_bytes%0#0" - ], - "stack_out": [ - "aggregate%val_as_bytes%0#0", - "0x151f7c75" - ] - }, - "2152": { - "op": "swap", - "stack_out": [ - "0x151f7c75", - "aggregate%val_as_bytes%0#0" - ] - }, - "2153": { - "op": "concat", - "defined_out": [ - "tmp%3#0" - ], - "stack_out": [ - "tmp%3#0" - ] - }, - "2154": { - "op": "log", - "stack_out": [] - }, - "2155": { - "op": "intc_1 // 1", - "defined_out": [ - "1" - ], - "stack_out": [ - "1" - ] - }, - "2156": { - "op": "return", - "stack_out": [] - }, - "2157": { - "subroutine": "smart_contracts.smart_asa.contract.SmartAsa.circulating_supply", - "params": { - "ctrl_asset#0": "uint64" - }, - "block": "circulating_supply", - "stack_in": [], - "op": "proto 1 1" - }, - "2160": { - "op": "global CurrentApplicationAddress", - "defined_out": [ - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0" - ] - }, - "2162": { - "op": "frame_dig -1", - "defined_out": [ - "ctrl_asset#0 (copy)", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "ctrl_asset#0 (copy)" - ] - }, - "2164": { - "op": "asset_holding_get AssetBalance", - "defined_out": [ - "check%0#0", - "value%0#0" - ], - "stack_out": [ - "value%0#0", - "check%0#0" - ] - }, - "2166": { - "error": "account opted into asset", - "op": "assert // account opted into asset", - "stack_out": [ - "value%0#0" - ] - }, - "2167": { - "op": "intc 4 // 18446744073709551615", - "defined_out": [ - "18446744073709551615", - "value%0#0" - ], - "stack_out": [ - "value%0#0", - "18446744073709551615" - ] - }, - "2169": { - "op": "swap", - "stack_out": [ - "18446744073709551615", - "value%0#0" - ] - }, - "2170": { - "op": "-", - "defined_out": [ - "tmp%1#0" - ], - "stack_out": [ - "tmp%1#0" - ] - }, - "2171": { - "retsub": true, - "op": "retsub" - }, - "2172": { - "subroutine": "smart_contracts.smart_asa.contract.SmartAsa.assert_common_preconditions", - "params": { - "asset_id#0": "uint64" - }, - "block": "assert_common_preconditions", - "stack_in": [], - "op": "proto 1 0" - }, - "2175": { - "op": "intc_0 // 0", - "defined_out": [ - "0" - ], - "stack_out": [ - "0" - ] - }, - "2176": { - "op": "bytec_0 // \"smart_asa_id\"", - "defined_out": [ - "\"smart_asa_id\"", - "0" - ], - "stack_out": [ - "0", - "\"smart_asa_id\"" - ] - }, - "2177": { - "op": "app_global_get_ex", - "defined_out": [ - "maybe_exists%0#0", - "maybe_value%0#0" - ], - "stack_out": [ - "maybe_value%0#0", - "maybe_exists%0#0" - ] - }, - "2178": { - "error": "check self.smart_asa_id exists", - "op": "assert // check self.smart_asa_id exists", - "stack_out": [ - "maybe_value%0#0" - ] - }, - "2179": { - "op": "dup", - "defined_out": [ - "maybe_value%0#0", - "maybe_value%0#0 (copy)" - ], - "stack_out": [ - "maybe_value%0#0", - "maybe_value%0#0 (copy)" - ] - }, - "2180": { - "error": "Missing Controlled ASA", - "op": "assert // Missing Controlled ASA", - "stack_out": [ - "maybe_value%0#0" - ] - }, - "2181": { - "op": "frame_dig -1", - "defined_out": [ - "asset_id#0 (copy)", - "maybe_value%0#0" - ], - "stack_out": [ - "maybe_value%0#0", - "asset_id#0 (copy)" - ] - }, - "2183": { - "op": "==", - "defined_out": [ - "tmp%1#0" - ], - "stack_out": [ - "tmp%1#0" - ] - }, - "2184": { - "error": "Invalid Controlled ASA ID", - "op": "assert // Invalid Controlled ASA ID", - "stack_out": [] - }, - "2185": { - "retsub": true, - "op": "retsub" - }, - "2186": { - "subroutine": "smart_contracts.smart_asa.contract.SmartAsa.inner_asset_transfer", - "params": { - "xfer_asset#0": "uint64", - "asset_amount#0": "uint64", - "asset_sender#0": "bytes", - "asset_receiver#0": "bytes" - }, - "block": "inner_asset_transfer", - "stack_in": [], - "op": "proto 4 0" - }, - "2189": { - "op": "itxn_begin" - }, - "2190": { - "op": "global CurrentApplicationAddress", - "defined_out": [ - "inner_txn_params%0%%param_Sender_idx_0#0" - ], - "stack_out": [ - "inner_txn_params%0%%param_Sender_idx_0#0" - ] - }, - "2192": { - "op": "itxn_field Sender", - "stack_out": [] - }, - "2194": { - "op": "frame_dig -1", - "defined_out": [ - "asset_receiver#0 (copy)" - ], - "stack_out": [ - "asset_receiver#0 (copy)" - ] - }, - "2196": { - "op": "itxn_field AssetReceiver", - "stack_out": [] - }, - "2198": { - "op": "frame_dig -2", - "defined_out": [ - "asset_sender#0 (copy)" - ], - "stack_out": [ - "asset_sender#0 (copy)" - ] - }, - "2200": { - "op": "itxn_field AssetSender", - "stack_out": [] - }, - "2202": { - "op": "frame_dig -3", - "defined_out": [ - "asset_amount#0 (copy)" - ], - "stack_out": [ - "asset_amount#0 (copy)" - ] - }, - "2204": { - "op": "itxn_field AssetAmount", - "stack_out": [] - }, - "2206": { - "op": "frame_dig -4", - "defined_out": [ - "xfer_asset#0 (copy)" - ], - "stack_out": [ - "xfer_asset#0 (copy)" - ] - }, - "2208": { - "op": "itxn_field XferAsset", - "stack_out": [] - }, - "2210": { - "op": "pushint 4 // axfer", - "defined_out": [ - "axfer" - ], - "stack_out": [ - "axfer" - ] - }, - "2212": { - "op": "itxn_field TypeEnum", - "stack_out": [] - }, - "2214": { - "op": "intc_0 // 0", - "defined_out": [ - "0" - ], - "stack_out": [ - "0" - ] - }, - "2215": { - "op": "itxn_field Fee", - "stack_out": [] - }, - "2217": { - "op": "itxn_submit" - }, - "2218": { - "retsub": true, - "op": "retsub" - } - } -} \ No newline at end of file diff --git a/assets/arc-0020/smart_contracts/artifacts/smart_asa/SmartAsa.approval.teal b/assets/arc-0020/smart_contracts/artifacts/smart_asa/SmartAsa.approval.teal deleted file mode 100644 index c509d8385..000000000 --- a/assets/arc-0020/smart_contracts/artifacts/smart_asa/SmartAsa.approval.teal +++ /dev/null @@ -1,2109 +0,0 @@ -#pragma version 11 -#pragma typetrack false - -// algopy.arc4.ARC4Contract.approval_program() -> uint64: -main: - intcblock 0 1 8 32 18446744073709551615 - bytecblock "smart_asa_id" "reserve_addr" "clawback_addr" "account_smart_asa_id" "account_frozen" "freeze_addr" "global_frozen" "manager_addr" "total" "default_frozen" "decimals" "unit_name" "name" "url" "metadata_hash" 0x151f7c75 0x00 - txn ApplicationID - bnz main_after_if_else@2 - // smart_contracts/smart_asa/contract.py:41-42 - // # Preconditions - // assert Txn.global_num_byte_slice == cfg.GLOBAL_BYTES, err.WRONG_GLOBAL_BYTES - txn GlobalNumByteSlice - intc_2 // 8 - == - assert // Wrong Global Bytes allocation - // smart_contracts/smart_asa/contract.py:43 - // assert Txn.global_num_uint == cfg.GLOBAL_UINTS, err.WRONG_GLOBAL_UINTS - txn GlobalNumUint - pushint 5 // 5 - == - assert // Wrong Global UInts allocation - // smart_contracts/smart_asa/contract.py:44 - // assert Txn.local_num_byte_slice == cfg.LOCAL_BYTES, err.WRONG_LOCAL_BYTES - txn LocalNumByteSlice - ! - assert // Wrong Local Bytes allocation - // smart_contracts/smart_asa/contract.py:45 - // assert Txn.local_num_uint == cfg.LOCAL_UINTS, err.WRONG_LOCAL_UINTS - txn LocalNumUint - pushint 2 // 2 - == - assert // Wrong Local UInts allocation - // smart_contracts/smart_asa/contract.py:47-49 - // # GLOBAL STATE - // # ASA Fields - // self.total = UInt64() - bytec 8 // "total" - intc_0 // 0 - app_global_put - // smart_contracts/smart_asa/contract.py:50 - // self.decimals = UInt64() - bytec 10 // "decimals" - intc_0 // 0 - app_global_put - // smart_contracts/smart_asa/contract.py:51 - // self.default_frozen = False - bytec 9 // "default_frozen" - intc_0 // 0 - app_global_put - // smart_contracts/smart_asa/contract.py:52 - // self.unit_name = String() - bytec 11 // "unit_name" - pushbytes "" - app_global_put - // smart_contracts/smart_asa/contract.py:53 - // self.name = String() - bytec 12 // "name" - pushbytes "" - app_global_put - // smart_contracts/smart_asa/contract.py:54 - // self.url = String() - bytec 13 // "url" - pushbytes "" - app_global_put - // smart_contracts/smart_asa/contract.py:55 - // self.metadata_hash = Bytes() - bytec 14 // "metadata_hash" - pushbytes 0x - app_global_put - // smart_contracts/smart_asa/contract.py:56 - // self.manager_addr = Account() - bytec 7 // "manager_addr" - global ZeroAddress - app_global_put - // smart_contracts/smart_asa/contract.py:57 - // self.reserve_addr = Account() - bytec_1 // "reserve_addr" - global ZeroAddress - app_global_put - // smart_contracts/smart_asa/contract.py:58 - // self.freeze_addr = Account() - bytec 5 // "freeze_addr" - global ZeroAddress - app_global_put - // smart_contracts/smart_asa/contract.py:59 - // self.clawback_addr = Account() - bytec_2 // "clawback_addr" - global ZeroAddress - app_global_put - // smart_contracts/smart_asa/contract.py:60-61 - // # Smart ASA Fields - // self.smart_asa_id = UInt64() - bytec_0 // "smart_asa_id" - intc_0 // 0 - app_global_put - // smart_contracts/smart_asa/contract.py:62 - // self.global_frozen = False - bytec 6 // "global_frozen" - intc_0 // 0 - app_global_put - -main_after_if_else@2: - // smart_contracts/smart_asa/contract.py:27-35 - // class SmartAsa( - // ARC4Contract, - // state_totals=StateTotals( - // global_bytes=cfg.GLOBAL_BYTES, - // global_uints=cfg.GLOBAL_UINTS, - // local_bytes=cfg.LOCAL_BYTES, - // local_uints=cfg.LOCAL_UINTS, - // ), - // ): - txn NumAppArgs - bz main___algopy_default_create@22 - pushbytess 0x48641645 0x3a045bdc // method "asset_opt_in(uint64,axfer)void", method "asset_close_out(uint64,address)void" - txna ApplicationArgs 0 - match main_asset_opt_in_route@5 main_asset_close_out_route@6 - -main_switch_case_next@7: - // smart_contracts/smart_asa/contract.py:27-35 - // class SmartAsa( - // ARC4Contract, - // state_totals=StateTotals( - // global_bytes=cfg.GLOBAL_BYTES, - // global_uints=cfg.GLOBAL_UINTS, - // local_bytes=cfg.LOCAL_BYTES, - // local_uints=cfg.LOCAL_UINTS, - // ), - // ): - txn OnCompletion - ! - assert // OnCompletion must be NoOp - txn ApplicationID - assert - pushbytess 0xe7ecd5a8 0xf8819feb 0x7eacb775 0xa133d581 0xff53adef 0xed64452f 0x2e9b9038 0x979b9972 0x48a63cc9 0x46ad0d52 // method "asset_create(uint64,uint32,bool,string,string,string,byte[],address,address,address,address)uint64", method "asset_config(uint64,uint64,uint32,bool,string,string,string,byte[],address,address,address,address)void", method "asset_transfer(uint64,uint64,address,address)void", method "asset_freeze(uint64,bool)void", method "account_freeze(uint64,address,bool)void", method "asset_destroy(uint64)void", method "get_asset_config(uint64)(uint64,uint32,bool,string,string,string,byte[],address,address,address,address)", method "get_asset_is_frozen(uint64)bool", method "get_account_is_frozen(uint64,address)bool", method "get_circulating_supply(uint64)uint64" - txna ApplicationArgs 0 - match asset_create asset_config asset_transfer asset_freeze account_freeze asset_destroy get_asset_config get_asset_is_frozen get_account_is_frozen get_circulating_supply - err - -main_asset_close_out_route@6: - // smart_contracts/smart_asa/contract.py:465 - // @arc4.abimethod(allow_actions=["CloseOut"]) - txn OnCompletion - pushint 2 // CloseOut - == - txn ApplicationID - && - assert // OnCompletion must be CloseOut && can only call when not creating - b asset_close_out - -main_asset_opt_in_route@5: - // smart_contracts/smart_asa/contract.py:288 - // @arc4.abimethod(allow_actions=["OptIn"]) - txn OnCompletion - intc_1 // OptIn - == - txn ApplicationID - && - assert // OnCompletion must be OptIn && can only call when not creating - b asset_opt_in - -main___algopy_default_create@22: - txn OnCompletion - ! - txn ApplicationID - ! - && - assert // OnCompletion must be NoOp && can only call when creating - intc_1 // 1 - return - - -// smart_contracts.smart_asa.contract.SmartAsa.asset_create[routing]() -> void: -asset_create: - // smart_contracts/smart_asa/contract.py:235 - // @arc4.abimethod - txna ApplicationArgs 1 - dup - len - intc_2 // 8 - == - assert // invalid number of bytes for arc4.uint64 - txna ApplicationArgs 2 - dup - len - pushint 4 // 4 - == - assert // invalid number of bytes for arc4.uint32 - txna ApplicationArgs 3 - dup - len - intc_1 // 1 - == - assert // invalid number of bytes for arc4.bool - txna ApplicationArgs 4 - dupn 2 - intc_0 // 0 - extract_uint16 // on error: invalid array length header - pushint 2 // 2 - + - swap - len - == - assert // invalid number of bytes for arc4.dynamic_array - txna ApplicationArgs 5 - dupn 2 - intc_0 // 0 - extract_uint16 // on error: invalid array length header - pushint 2 // 2 - + - swap - len - == - assert // invalid number of bytes for arc4.dynamic_array - txna ApplicationArgs 6 - dupn 2 - intc_0 // 0 - extract_uint16 // on error: invalid array length header - pushint 2 // 2 - + - swap - len - == - assert // invalid number of bytes for arc4.dynamic_array - txna ApplicationArgs 7 - dupn 2 - intc_0 // 0 - extract_uint16 // on error: invalid array length header - pushint 2 // 2 - + - swap - len - == - assert // invalid number of bytes for arc4.dynamic_array - txna ApplicationArgs 8 - dup - len - intc_3 // 32 - == - assert // invalid number of bytes for arc4.static_array - txna ApplicationArgs 9 - dup - len - intc_3 // 32 - == - assert // invalid number of bytes for arc4.static_array - txna ApplicationArgs 10 - dup - len - intc_3 // 32 - == - assert // invalid number of bytes for arc4.static_array - txna ApplicationArgs 11 - dup - len - intc_3 // 32 - == - assert // invalid number of bytes for arc4.static_array - // smart_contracts/smart_asa/contract.py:269-270 - // # Preconditions - // assert Txn.sender == Global.creator_address, err.UNAUTHORIZED - txn Sender - global CreatorAddress - == - assert // Unauthorized - // smart_contracts/smart_asa/contract.py:271 - // assert not self.smart_asa_id, err.EXISTING_CTRL_ASA - intc_0 // 0 - bytec_0 // "smart_asa_id" - app_global_get_ex - assert // check self.smart_asa_id exists - ! - assert // Controlled ASA already created - // smart_contracts/smart_asa/contract.py:192-205 - // itxn.AssetConfig( - // fee=0, - // total=cfg.TOTAL, - // decimals=cfg.DECIMALS, - // default_frozen=cfg.DEFAULT_FROZEN, - // unit_name=cfg.UNIT_NAME, - // asset_name=cfg.NAME, - // url=cfg.APP_BINDING + self.itoa(Global.current_application_id.id), - // manager=Global.current_application_address, - // reserve=Global.current_application_address, - // freeze=Global.current_application_address, - // clawback=Global.current_application_address, - // ) - // .submit() - itxn_begin - // smart_contracts/smart_asa/contract.py:199 - // url=cfg.APP_BINDING + self.itoa(Global.current_application_id.id), - global CurrentApplicationID - // smart_contracts/smart_asa/contract.py:72 - // acc = Bytes() - pushbytes 0x - -asset_create_while_top@2: - // smart_contracts/smart_asa/contract.py:73 - // while n > 0: - dig 1 - bz asset_create_after_while@4 - // smart_contracts/smart_asa/contract.py:74 - // acc = digits[n % 10] + acc - dig 1 - dup - pushint 10 // 10 - % - // smart_contracts/smart_asa/contract.py:71 - // digits = Bytes(b"0123456789") - pushbytes 0x30313233343536373839 - // smart_contracts/smart_asa/contract.py:74 - // acc = digits[n % 10] + acc - swap - intc_1 // 1 - extract3 - dig 2 - concat - bury 2 - // smart_contracts/smart_asa/contract.py:75 - // n //= 10 - pushint 10 // 10 - / - bury 2 - b asset_create_while_top@2 - -asset_create_after_while@4: - // smart_contracts/smart_asa/contract.py:76 - // return acc or Bytes(b"0") - dupn 2 - len - pushbytes 0x30 - cover 2 - select - // smart_contracts/smart_asa/contract.py:199 - // url=cfg.APP_BINDING + self.itoa(Global.current_application_id.id), - pushbytes 0x616c676f72616e643a2f2f6170702f - swap - concat - // smart_contracts/smart_asa/contract.py:200 - // manager=Global.current_application_address, - global CurrentApplicationAddress - // smart_contracts/smart_asa/contract.py:201-203 - // reserve=Global.current_application_address, - // freeze=Global.current_application_address, - // clawback=Global.current_application_address, - dupn 3 - itxn_field ConfigAssetClawback - itxn_field ConfigAssetFreeze - itxn_field ConfigAssetReserve - itxn_field ConfigAssetManager - itxn_field ConfigAssetURL - // smart_contracts/smart_asa/contract.py:198 - // asset_name=cfg.NAME, - pushbytes "ARC-20 Smart ASA" - itxn_field ConfigAssetName - // smart_contracts/smart_asa/contract.py:197 - // unit_name=cfg.UNIT_NAME, - pushbytes "ARC-20" - itxn_field ConfigAssetUnitName - // smart_contracts/smart_asa/contract.py:196 - // default_frozen=cfg.DEFAULT_FROZEN, - intc_1 // 1 - itxn_field ConfigAssetDefaultFrozen - // smart_contracts/smart_asa/contract.py:195 - // decimals=cfg.DECIMALS, - intc_0 // 0 - itxn_field ConfigAssetDecimals - // smart_contracts/smart_asa/contract.py:194 - // total=cfg.TOTAL, - intc 4 // 18446744073709551615 - itxn_field ConfigAssetTotal - // smart_contracts/smart_asa/contract.py:192 - // itxn.AssetConfig( - pushint 3 // acfg - itxn_field TypeEnum - // smart_contracts/smart_asa/contract.py:193 - // fee=0, - intc_0 // 0 - itxn_field Fee - // smart_contracts/smart_asa/contract.py:192-205 - // itxn.AssetConfig( - // fee=0, - // total=cfg.TOTAL, - // decimals=cfg.DECIMALS, - // default_frozen=cfg.DEFAULT_FROZEN, - // unit_name=cfg.UNIT_NAME, - // asset_name=cfg.NAME, - // url=cfg.APP_BINDING + self.itoa(Global.current_application_id.id), - // manager=Global.current_application_address, - // reserve=Global.current_application_address, - // freeze=Global.current_application_address, - // clawback=Global.current_application_address, - // ) - // .submit() - itxn_submit - // smart_contracts/smart_asa/contract.py:273-274 - // # Effects - // self.smart_asa_id = self.inner_asset_config() - bytec_0 // "smart_asa_id" - // smart_contracts/smart_asa/contract.py:192-206 - // itxn.AssetConfig( - // fee=0, - // total=cfg.TOTAL, - // decimals=cfg.DECIMALS, - // default_frozen=cfg.DEFAULT_FROZEN, - // unit_name=cfg.UNIT_NAME, - // asset_name=cfg.NAME, - // url=cfg.APP_BINDING + self.itoa(Global.current_application_id.id), - // manager=Global.current_application_address, - // reserve=Global.current_application_address, - // freeze=Global.current_application_address, - // clawback=Global.current_application_address, - // ) - // .submit() - // .created_asset.id - itxn CreatedAssetID - // smart_contracts/smart_asa/contract.py:273-274 - // # Effects - // self.smart_asa_id = self.inner_asset_config() - app_global_put - // smart_contracts/smart_asa/contract.py:275 - // self.total = total.native - dig 12 - btoi - bytec 8 // "total" - swap - app_global_put - // smart_contracts/smart_asa/contract.py:276 - // self.decimals = decimals.native - dig 11 - btoi - bytec 10 // "decimals" - swap - app_global_put - // smart_contracts/smart_asa/contract.py:277 - // self.default_frozen = default_frozen.native - dig 10 - intc_0 // 0 - getbit - bytec 9 // "default_frozen" - swap - app_global_put - // smart_contracts/smart_asa/contract.py:278 - // self.unit_name = unit_name.native - dig 9 - extract 2 0 - bytec 11 // "unit_name" - swap - app_global_put - // smart_contracts/smart_asa/contract.py:279 - // self.name = name.native - dig 8 - extract 2 0 - bytec 12 // "name" - swap - app_global_put - // smart_contracts/smart_asa/contract.py:280 - // self.url = url.native - dig 7 - extract 2 0 - bytec 13 // "url" - swap - app_global_put - // smart_contracts/smart_asa/contract.py:281 - // self.metadata_hash = metadata_hash.native - dig 6 - extract 2 0 - bytec 14 // "metadata_hash" - swap - app_global_put - // smart_contracts/smart_asa/contract.py:282 - // self.manager_addr = manager_addr.native - bytec 7 // "manager_addr" - dig 6 - app_global_put - // smart_contracts/smart_asa/contract.py:283 - // self.reserve_addr = reserve_addr.native - bytec_1 // "reserve_addr" - dig 5 - app_global_put - // smart_contracts/smart_asa/contract.py:284 - // self.freeze_addr = freeze_addr.native - bytec 5 // "freeze_addr" - dig 4 - app_global_put - // smart_contracts/smart_asa/contract.py:285 - // self.clawback_addr = clawback_addr.native - bytec_2 // "clawback_addr" - dig 3 - app_global_put - // smart_contracts/smart_asa/contract.py:286 - // return arc4.UInt64(self.smart_asa_id) - intc_0 // 0 - bytec_0 // "smart_asa_id" - app_global_get_ex - assert // check self.smart_asa_id exists - itob - // smart_contracts/smart_asa/contract.py:235 - // @arc4.abimethod - bytec 15 // 0x151f7c75 - swap - concat - log - intc_1 // 1 - return - - -// smart_contracts.smart_asa.contract.SmartAsa.asset_opt_in[routing]() -> void: -asset_opt_in: - // smart_contracts/smart_asa/contract.py:288 - // @arc4.abimethod(allow_actions=["OptIn"]) - txna ApplicationArgs 1 - dup - len - intc_2 // 8 - == - assert // invalid number of bytes for arc4.uint64 - btoi - dup - txn GroupIndex - intc_1 // 1 - - - dup - gtxns TypeEnum - pushint 4 // axfer - == - assert // transaction type is axfer - // smart_contracts/smart_asa/contract.py:299-300 - // # Preconditions - // self.assert_common_preconditions(asset.id) - dig 1 - callsub assert_common_preconditions - // smart_contracts/smart_asa/contract.py:304 - // assert ctrl_asa_opt_in.xfer_asset.id == self.smart_asa_id, err.OPT_IN_WRONG_ASA - dup - gtxns XferAsset - intc_0 // 0 - bytec_0 // "smart_asa_id" - app_global_get_ex - assert // check self.smart_asa_id exists - swap - dig 1 - == - assert // Wrong ASA Opt In ID - // smart_contracts/smart_asa/contract.py:305 - // assert ctrl_asa_opt_in.sender == Txn.sender, err.OPT_IN_WRONG_SENDER - dig 1 - gtxns Sender - txn Sender - == - assert // Wrong ASA Opt In Sender - // smart_contracts/smart_asa/contract.py:306 - // assert ctrl_asa_opt_in.asset_receiver == Txn.sender, err.OPT_IN_WRONG_RECEIVER - dig 1 - gtxns AssetReceiver - txn Sender - == - assert // Wrong ASA Opt In Receiver - // smart_contracts/smart_asa/contract.py:308 - // ctrl_asa_opt_in.asset_amount == 0 - dig 1 - gtxns AssetAmount - ! - // smart_contracts/smart_asa/contract.py:307-309 - // assert ( - // ctrl_asa_opt_in.asset_amount == 0 - // ), err.OPT_IN_WRONG_AMOUNT # Pedant: Controlled ASA is default frozen - assert // Wrong ASA Opt In Amount - // smart_contracts/smart_asa/contract.py:311 - // ctrl_asa_opt_in.asset_close_to == Global.zero_address - swap - gtxns AssetCloseTo - global ZeroAddress - == - // smart_contracts/smart_asa/contract.py:310-312 - // assert ( - // ctrl_asa_opt_in.asset_close_to == Global.zero_address - // ), err.OPT_IN_WRONG_CLOSE_TO - assert // Forbidden Close Out on Opt In - // smart_contracts/smart_asa/contract.py:313 - // assert Txn.on_completion == OnCompleteAction.OptIn, err.WRONG_ON_COMPLETE - txn OnCompletion - intc_1 // OptIn - == - assert // Wrong On Complete Action - // smart_contracts/smart_asa/contract.py:314 - // assert Txn.sender.is_opted_in( - txn Sender - // smart_contracts/smart_asa/contract.py:314-316 - // assert Txn.sender.is_opted_in( - // asset - // ), err.MISSING_CTRL_ASA # Pedant: ctrl_asa_opt_in is checked properly - uncover 2 - asset_holding_get AssetBalance - bury 1 - assert // Missing Controlled ASA - // smart_contracts/smart_asa/contract.py:318-319 - // # Local State Init - // self.account_smart_asa_id[Txn.sender] = self.smart_asa_id - txn Sender - bytec_3 // "account_smart_asa_id" - uncover 2 - app_local_put - // smart_contracts/smart_asa/contract.py:320 - // self.account_frozen[Txn.sender] = False - txn Sender - bytec 4 // "account_frozen" - intc_0 // 0 - app_local_put - // smart_contracts/smart_asa/contract.py:324 - // self.default_frozen or asset.balance(Txn.sender) > 0 - intc_0 // 0 - bytec 9 // "default_frozen" - app_global_get_ex - assert // check self.default_frozen exists - bnz asset_opt_in_if_body@3 - txn Sender - dig 1 - asset_holding_get AssetBalance - assert // account opted into asset - bz asset_opt_in_after_if_else@4 - -asset_opt_in_if_body@3: - // smart_contracts/smart_asa/contract.py:326 - // self.account_frozen[Txn.sender] = True - txn Sender - bytec 4 // "account_frozen" - intc_1 // 1 - app_local_put - -asset_opt_in_after_if_else@4: - // smart_contracts/smart_asa/contract.py:288 - // @arc4.abimethod(allow_actions=["OptIn"]) - intc_1 // 1 - return - - -// smart_contracts.smart_asa.contract.SmartAsa.asset_config[routing]() -> void: -asset_config: - // smart_contracts/smart_asa/contract.py:328 - // @arc4.abimethod - txna ApplicationArgs 1 - dup - len - intc_2 // 8 - == - assert // invalid number of bytes for arc4.uint64 - btoi - dup - txna ApplicationArgs 2 - dup - cover 2 - len - intc_2 // 8 - == - assert // invalid number of bytes for arc4.uint64 - txna ApplicationArgs 3 - dup - cover 2 - len - pushint 4 // 4 - == - assert // invalid number of bytes for arc4.uint32 - txna ApplicationArgs 4 - dup - cover 2 - len - intc_1 // 1 - == - assert // invalid number of bytes for arc4.bool - txna ApplicationArgs 5 - dup - cover 2 - dup - intc_0 // 0 - extract_uint16 // on error: invalid array length header - pushint 2 // 2 - + - swap - len - == - assert // invalid number of bytes for arc4.dynamic_array - txna ApplicationArgs 6 - dup - cover 2 - dup - intc_0 // 0 - extract_uint16 // on error: invalid array length header - pushint 2 // 2 - + - swap - len - == - assert // invalid number of bytes for arc4.dynamic_array - txna ApplicationArgs 7 - dup - cover 2 - dup - intc_0 // 0 - extract_uint16 // on error: invalid array length header - pushint 2 // 2 - + - swap - len - == - assert // invalid number of bytes for arc4.dynamic_array - txna ApplicationArgs 8 - dup - cover 2 - dup - intc_0 // 0 - extract_uint16 // on error: invalid array length header - pushint 2 // 2 - + - swap - len - == - assert // invalid number of bytes for arc4.dynamic_array - txna ApplicationArgs 9 - dup - cover 2 - len - intc_3 // 32 - == - assert // invalid number of bytes for arc4.static_array - txna ApplicationArgs 10 - dup - cover 2 - dup - len - intc_3 // 32 - == - assert // invalid number of bytes for arc4.static_array - txna ApplicationArgs 11 - dup - cover 3 - len - intc_3 // 32 - == - assert // invalid number of bytes for arc4.static_array - txna ApplicationArgs 12 - dup - cover 3 - len - intc_3 // 32 - == - assert // invalid number of bytes for arc4.static_array - // smart_contracts/smart_asa/contract.py:361-362 - // # Preconditions - // self.assert_common_preconditions(config_asset.id) - swap - callsub assert_common_preconditions - // smart_contracts/smart_asa/contract.py:363 - // assert Txn.sender == self.manager_addr, err.UNAUTHORIZED_MANAGER - txn Sender - intc_0 // 0 - bytec 7 // "manager_addr" - app_global_get_ex - assert // check self.manager_addr exists - == - assert // Unauthorized Manager - // smart_contracts/smart_asa/contract.py:364 - // if reserve_addr != self.reserve_addr: - intc_0 // 0 - bytec_1 // "reserve_addr" - app_global_get_ex - assert // check self.reserve_addr exists - != - bz asset_config_after_if_else@3 - // smart_contracts/smart_asa/contract.py:365 - // assert self.reserve_addr != Global.zero_address, err.DISABLED_RESERVE - intc_0 // 0 - bytec_1 // "reserve_addr" - app_global_get_ex - assert // check self.reserve_addr exists - global ZeroAddress - != - assert // Reserve Address has been deleted - -asset_config_after_if_else@3: - // smart_contracts/smart_asa/contract.py:366 - // if freeze_addr != self.freeze_addr: - intc_0 // 0 - bytec 5 // "freeze_addr" - app_global_get_ex - assert // check self.freeze_addr exists - dig 2 - != - bz asset_config_after_if_else@5 - // smart_contracts/smart_asa/contract.py:367 - // assert self.freeze_addr != Global.zero_address, err.DISABLED_FREEZE - intc_0 // 0 - bytec 5 // "freeze_addr" - app_global_get_ex - assert // check self.freeze_addr exists - global ZeroAddress - != - assert // Freeze Address has been deleted - -asset_config_after_if_else@5: - // smart_contracts/smart_asa/contract.py:368 - // if clawback_addr != self.clawback_addr: - intc_0 // 0 - bytec_2 // "clawback_addr" - app_global_get_ex - assert // check self.clawback_addr exists - dig 1 - != - bz asset_config_after_if_else@7 - // smart_contracts/smart_asa/contract.py:369 - // assert self.clawback_addr != Global.zero_address, err.DISABLED_CLAWBACK - intc_0 // 0 - bytec_2 // "clawback_addr" - app_global_get_ex - assert // check self.clawback_addr exists - global ZeroAddress - != - assert // Clawback Address has been deleted - -asset_config_after_if_else@7: - // smart_contracts/smart_asa/contract.py:370 - // assert total >= self.circulating_supply(config_asset), err.INVALID_TOTAL - dig 11 - callsub circulating_supply - itob - dig 11 - dup - uncover 2 - b>= - assert // Invalid Total, must be >= circulating supply - // smart_contracts/smart_asa/contract.py:372-373 - // # Effects - // self.total = total.native - btoi - bytec 8 // "total" - swap - app_global_put - // smart_contracts/smart_asa/contract.py:374 - // self.decimals = decimals.native - dig 9 - btoi - bytec 10 // "decimals" - swap - app_global_put - // smart_contracts/smart_asa/contract.py:375 - // self.default_frozen = default_frozen.native - dig 8 - intc_0 // 0 - getbit - bytec 9 // "default_frozen" - swap - app_global_put - // smart_contracts/smart_asa/contract.py:376 - // self.unit_name = unit_name.native - dig 7 - extract 2 0 - bytec 11 // "unit_name" - swap - app_global_put - // smart_contracts/smart_asa/contract.py:377 - // self.name = name.native - dig 6 - extract 2 0 - bytec 12 // "name" - swap - app_global_put - // smart_contracts/smart_asa/contract.py:378 - // self.url = url.native - dig 5 - extract 2 0 - bytec 13 // "url" - swap - app_global_put - // smart_contracts/smart_asa/contract.py:379 - // self.metadata_hash = metadata_hash.native - dig 4 - extract 2 0 - bytec 14 // "metadata_hash" - swap - app_global_put - // smart_contracts/smart_asa/contract.py:380 - // self.manager_addr = manager_addr.native - bytec 7 // "manager_addr" - dig 4 - app_global_put - // smart_contracts/smart_asa/contract.py:381 - // self.reserve_addr = reserve_addr.native - bytec_1 // "reserve_addr" - dig 3 - app_global_put - // smart_contracts/smart_asa/contract.py:382 - // self.freeze_addr = freeze_addr.native - bytec 5 // "freeze_addr" - dig 2 - app_global_put - // smart_contracts/smart_asa/contract.py:383 - // self.clawback_addr = clawback_addr.native - bytec_2 // "clawback_addr" - dig 1 - app_global_put - // smart_contracts/smart_asa/contract.py:328 - // @arc4.abimethod - intc_1 // 1 - return - - -// smart_contracts.smart_asa.contract.SmartAsa.asset_transfer[routing]() -> void: -asset_transfer: - // smart_contracts/smart_asa/contract.py:385 - // @arc4.abimethod - txna ApplicationArgs 1 - dup - len - intc_2 // 8 - == - assert // invalid number of bytes for arc4.uint64 - btoi - dup - txna ApplicationArgs 2 - dup - cover 2 - len - intc_2 // 8 - == - assert // invalid number of bytes for arc4.uint64 - txna ApplicationArgs 3 - dup - cover 2 - dup - len - intc_3 // 32 - == - assert // invalid number of bytes for arc4.static_array - txna ApplicationArgs 4 - dup - cover 3 - len - intc_3 // 32 - == - assert // invalid number of bytes for arc4.static_array - // smart_contracts/smart_asa/contract.py:402-403 - // # Preconditions - // self.assert_common_preconditions(xfer_asset.id) - swap - callsub assert_common_preconditions - // smart_contracts/smart_asa/contract.py:404 - // if asset_sender == Global.current_application_address: - global CurrentApplicationAddress - == - bz asset_transfer_else_body@3 - // smart_contracts/smart_asa/contract.py:406 - // asset_receiver=asset_receiver, asset_amount=asset_amount.native - dig 2 - btoi - // smart_contracts/smart_asa/contract.py:91-92 - // # Mint permission restricted to Reserve. - // assert Txn.sender == self.reserve_addr, err.UNAUTHORIZED_RESERVE - txn Sender - intc_0 // 0 - bytec_1 // "reserve_addr" - app_global_get_ex - assert // check self.reserve_addr exists - == - assert // Unauthorized Reserve - // smart_contracts/smart_asa/contract.py:93-94 - // # Forbidden self-mint (to Creator) and over-mint (> total). - // assert asset_receiver != Global.current_application_address, err.SELF_MINT - global CurrentApplicationAddress - dig 2 - dup - uncover 2 - != - assert // Forbidden self minting - // smart_contracts/smart_asa/contract.py:96 - // asset_amount + self.circulating_supply(Asset(self.smart_asa_id)) - intc_0 // 0 - bytec_0 // "smart_asa_id" - app_global_get_ex - assert // check self.smart_asa_id exists - callsub circulating_supply - uncover 2 - + - // smart_contracts/smart_asa/contract.py:97 - // <= self.total - intc_0 // 0 - bytec 8 // "total" - app_global_get_ex - assert // check self.total exists - // smart_contracts/smart_asa/contract.py:96-97 - // asset_amount + self.circulating_supply(Asset(self.smart_asa_id)) - // <= self.total - <= - // smart_contracts/smart_asa/contract.py:95-98 - // assert ( - // asset_amount + self.circulating_supply(Asset(self.smart_asa_id)) - // <= self.total - // ), err.OVER_MINT - assert // Forbidden over minting - // smart_contracts/smart_asa/contract.py:101 - // self.account_smart_asa_id[asset_receiver] == self.smart_asa_id - intc_0 // 0 - bytec_3 // "account_smart_asa_id" - app_local_get_ex - assert // check self.account_smart_asa_id exists for account - intc_0 // 0 - bytec_0 // "smart_asa_id" - app_global_get_ex - assert // check self.smart_asa_id exists - == - // smart_contracts/smart_asa/contract.py:99-102 - // # In the case of Controlled ASA destroyed and re-created, the Smart ADA ID in Local State could be outdated. - // assert ( - // self.account_smart_asa_id[asset_receiver] == self.smart_asa_id - // ), err.INVALID_CTRL_ASA - assert // Invalid Controlled ASA ID - // smart_contracts/smart_asa/contract.py:103 - // assert not self.global_frozen, err.GLOBAL_FROZEN - intc_0 // 0 - bytec 6 // "global_frozen" - app_global_get_ex - assert // check self.global_frozen exists - ! - assert // Smart ASA is global frozen - // smart_contracts/smart_asa/contract.py:104 - // if self.reserve_addr != self.clawback_addr: - intc_0 // 0 - bytec_1 // "reserve_addr" - app_global_get_ex - assert // check self.reserve_addr exists - intc_0 // 0 - bytec_2 // "clawback_addr" - app_global_get_ex - assert // check self.clawback_addr exists - != - bz asset_transfer_after_if_else@10 - // smart_contracts/smart_asa/contract.py:105 - // assert not self.account_frozen[asset_receiver], err.RECEIVER_FROZEN - dup - intc_0 // 0 - bytec 4 // "account_frozen" - app_local_get_ex - assert // check self.account_frozen exists for account - ! - assert // Receiver account is frozen - -asset_transfer_after_if_else@10: - // smart_contracts/smart_asa/contract.py:422 - // asset_amount=asset_amount.native, - dig 2 - btoi - // smart_contracts/smart_asa/contract.py:419-425 - // # Effects - // self.inner_asset_transfer( - // xfer_asset=xfer_asset, - // asset_amount=asset_amount.native, - // asset_sender=asset_sender, - // asset_receiver=asset_receiver, - // ) - dig 4 - swap - dig 3 - dig 3 - callsub inner_asset_transfer - // smart_contracts/smart_asa/contract.py:385 - // @arc4.abimethod - intc_1 // 1 - return - -asset_transfer_else_body@3: - // smart_contracts/smart_asa/contract.py:408 - // elif asset_receiver == Global.current_application_address: - dup - global CurrentApplicationAddress - == - bz asset_transfer_else_body@5 - // smart_contracts/smart_asa/contract.py:109-110 - // # Burn permission restricted to Reserve. - // assert Txn.sender == self.reserve_addr, err.UNAUTHORIZED_RESERVE - txn Sender - intc_0 // 0 - bytec_1 // "reserve_addr" - app_global_get_ex - assert // check self.reserve_addr exists - swap - dig 1 - == - assert // Unauthorized Reserve - // smart_contracts/smart_asa/contract.py:113 - // self.account_smart_asa_id[asset_sender] == self.smart_asa_id - dig 2 - intc_0 // 0 - bytec_3 // "account_smart_asa_id" - app_local_get_ex - assert // check self.account_smart_asa_id exists for account - intc_0 // 0 - bytec_0 // "smart_asa_id" - app_global_get_ex - assert // check self.smart_asa_id exists - == - // smart_contracts/smart_asa/contract.py:111-114 - // # In case of Controlled ASA destroyed and re-created the Smart ADA ID in Local State could be outdated. - // assert ( - // self.account_smart_asa_id[asset_sender] == self.smart_asa_id - // ), err.INVALID_CTRL_ASA - assert // Invalid Controlled ASA ID - // smart_contracts/smart_asa/contract.py:115 - // assert not self.global_frozen, err.GLOBAL_FROZEN - intc_0 // 0 - bytec 6 // "global_frozen" - app_global_get_ex - assert // check self.global_frozen exists - ! - assert // Smart ASA is global frozen - // smart_contracts/smart_asa/contract.py:116 - // if self.reserve_addr != self.clawback_addr: - intc_0 // 0 - bytec_2 // "clawback_addr" - app_global_get_ex - assert // check self.clawback_addr exists - != - bz asset_transfer_after_if_else@10 - // smart_contracts/smart_asa/contract.py:117 - // assert not self.account_frozen[asset_sender], err.SENDER_FROZEN - dig 1 - dup - intc_0 // 0 - bytec 4 // "account_frozen" - app_local_get_ex - assert // check self.account_frozen exists for account - ! - assert // Sender account is frozen - // smart_contracts/smart_asa/contract.py:118-119 - // # Forbidden clawback through burning (burned amount not from Reserve). - // assert asset_sender == self.reserve_addr, err.CLAWBACK_BURN - intc_0 // 0 - bytec_1 // "reserve_addr" - app_global_get_ex - assert // check self.reserve_addr exists - == - assert // Forbidden clawback burning - b asset_transfer_after_if_else@10 - -asset_transfer_else_body@5: - // smart_contracts/smart_asa/contract.py:410 - // elif Txn.sender == self.clawback_addr: - txn Sender - intc_0 // 0 - bytec_2 // "clawback_addr" - app_global_get_ex - assert // check self.clawback_addr exists - == - bz asset_transfer_else_body@7 - // smart_contracts/smart_asa/contract.py:127 - // self.account_smart_asa_id[asset_sender] == self.smart_asa_id - dig 1 - intc_0 // 0 - bytec_3 // "account_smart_asa_id" - app_local_get_ex - assert // check self.account_smart_asa_id exists for account - intc_0 // 0 - bytec_0 // "smart_asa_id" - app_global_get_ex - assert // check self.smart_asa_id exists - swap - dig 1 - == - // smart_contracts/smart_asa/contract.py:125-128 - // # In the case of Controlled ASA destroyed and re-created, the Smart ADA ID in Local State could be outdated. - // assert ( - // self.account_smart_asa_id[asset_sender] == self.smart_asa_id - // ), err.INVALID_CTRL_ASA - assert // Invalid Controlled ASA ID - // smart_contracts/smart_asa/contract.py:130 - // self.account_smart_asa_id[asset_receiver] == self.smart_asa_id - dig 1 - intc_0 // 0 - bytec_3 // "account_smart_asa_id" - app_local_get_ex - assert // check self.account_smart_asa_id exists for account - == - // smart_contracts/smart_asa/contract.py:129-131 - // assert ( - // self.account_smart_asa_id[asset_receiver] == self.smart_asa_id - // ), err.INVALID_CTRL_ASA - assert // Invalid Controlled ASA ID - b asset_transfer_after_if_else@10 - -asset_transfer_else_body@7: - // smart_contracts/smart_asa/contract.py:137 - // assert Txn.sender == asset_sender, err.UNAUTHORIZED_CLAWBACK - txn Sender - dig 2 - dup - cover 2 - == - assert // Unauthorized Clawback - // smart_contracts/smart_asa/contract.py:140 - // self.account_smart_asa_id[asset_sender] == self.smart_asa_id - dup - intc_0 // 0 - bytec_3 // "account_smart_asa_id" - app_local_get_ex - assert // check self.account_smart_asa_id exists for account - intc_0 // 0 - bytec_0 // "smart_asa_id" - app_global_get_ex - assert // check self.smart_asa_id exists - swap - dig 1 - == - // smart_contracts/smart_asa/contract.py:138-141 - // # In the case of Controlled ASA destroyed and re-created, the Smart ADA ID in Local State could be outdated. - // assert ( - // self.account_smart_asa_id[asset_sender] == self.smart_asa_id - // ), err.INVALID_CTRL_ASA - assert // Invalid Controlled ASA ID - // smart_contracts/smart_asa/contract.py:143 - // self.account_smart_asa_id[asset_receiver] == self.smart_asa_id - dig 2 - dup - cover 2 - intc_0 // 0 - bytec_3 // "account_smart_asa_id" - app_local_get_ex - assert // check self.account_smart_asa_id exists for account - == - // smart_contracts/smart_asa/contract.py:142-144 - // assert ( - // self.account_smart_asa_id[asset_receiver] == self.smart_asa_id - // ), err.INVALID_CTRL_ASA - assert // Invalid Controlled ASA ID - // smart_contracts/smart_asa/contract.py:145 - // assert not self.global_frozen, err.GLOBAL_FROZEN - intc_0 // 0 - bytec 6 // "global_frozen" - app_global_get_ex - assert // check self.global_frozen exists - ! - assert // Smart ASA is global frozen - // smart_contracts/smart_asa/contract.py:146 - // assert not self.account_frozen[asset_sender], err.SENDER_FROZEN - swap - intc_0 // 0 - bytec 4 // "account_frozen" - app_local_get_ex - assert // check self.account_frozen exists for account - ! - assert // Sender account is frozen - // smart_contracts/smart_asa/contract.py:147 - // assert not self.account_frozen[asset_receiver], err.RECEIVER_FROZEN - intc_0 // 0 - bytec 4 // "account_frozen" - app_local_get_ex - assert // check self.account_frozen exists for account - ! - assert // Receiver account is frozen - b asset_transfer_after_if_else@10 - - -// smart_contracts.smart_asa.contract.SmartAsa.asset_freeze[routing]() -> void: -asset_freeze: - // smart_contracts/smart_asa/contract.py:427 - // @arc4.abimethod - txna ApplicationArgs 1 - dup - len - intc_2 // 8 - == - assert // invalid number of bytes for arc4.uint64 - btoi - txna ApplicationArgs 2 - dup - len - intc_1 // 1 - == - assert // invalid number of bytes for arc4.bool - // smart_contracts/smart_asa/contract.py:436-437 - // # Preconditions - // self.assert_common_preconditions(freeze_asset.id) - swap - callsub assert_common_preconditions - // smart_contracts/smart_asa/contract.py:438 - // assert Txn.sender == self.freeze_addr, err.UNAUTHORIZED_FREEZE - txn Sender - intc_0 // 0 - bytec 5 // "freeze_addr" - app_global_get_ex - assert // check self.freeze_addr exists - == - assert // Unauthorized Freeze - // smart_contracts/smart_asa/contract.py:440-441 - // # Effects - // self.global_frozen = asset_frozen.native - intc_0 // 0 - getbit - bytec 6 // "global_frozen" - swap - app_global_put - // smart_contracts/smart_asa/contract.py:427 - // @arc4.abimethod - intc_1 // 1 - return - - -// smart_contracts.smart_asa.contract.SmartAsa.account_freeze[routing]() -> void: -account_freeze: - // smart_contracts/smart_asa/contract.py:443 - // @arc4.abimethod - txna ApplicationArgs 1 - dup - len - intc_2 // 8 - == - assert // invalid number of bytes for arc4.uint64 - btoi - txna ApplicationArgs 2 - dup - len - intc_3 // 32 - == - assert // invalid number of bytes for arc4.static_array - txna ApplicationArgs 3 - dup - len - intc_1 // 1 - == - assert // invalid number of bytes for arc4.bool - // smart_contracts/smart_asa/contract.py:455-456 - // # Preconditions - // self.assert_common_preconditions(freeze_asset.id) - uncover 2 - callsub assert_common_preconditions - // smart_contracts/smart_asa/contract.py:458 - // self.account_smart_asa_id[freeze_account] == self.smart_asa_id - dig 1 - intc_0 // 0 - bytec_3 // "account_smart_asa_id" - app_local_get_ex - assert // check self.account_smart_asa_id exists for account - intc_0 // 0 - bytec_0 // "smart_asa_id" - app_global_get_ex - assert // check self.smart_asa_id exists - == - // smart_contracts/smart_asa/contract.py:457-459 - // assert ( - // self.account_smart_asa_id[freeze_account] == self.smart_asa_id - // ), err.INVALID_CTRL_ASA - assert // Invalid Controlled ASA ID - // smart_contracts/smart_asa/contract.py:460 - // assert Txn.sender == self.freeze_addr, err.UNAUTHORIZED_FREEZE - txn Sender - intc_0 // 0 - bytec 5 // "freeze_addr" - app_global_get_ex - assert // check self.freeze_addr exists - == - assert // Unauthorized Freeze - // smart_contracts/smart_asa/contract.py:462-463 - // # Effects - // self.account_frozen[freeze_account] = asset_frozen.native - intc_0 // 0 - getbit - bytec 4 // "account_frozen" - swap - app_local_put - // smart_contracts/smart_asa/contract.py:443 - // @arc4.abimethod - intc_1 // 1 - return - - -// smart_contracts.smart_asa.contract.SmartAsa.asset_close_out[routing]() -> void: -asset_close_out: - // smart_contracts/smart_asa/contract.py:465 - // @arc4.abimethod(allow_actions=["CloseOut"]) - txna ApplicationArgs 1 - dup - len - intc_2 // 8 - == - assert // invalid number of bytes for arc4.uint64 - btoi - dup - txna ApplicationArgs 2 - dup - cover 2 - len - intc_3 // 32 - == - assert // invalid number of bytes for arc4.static_array - // smart_contracts/smart_asa/contract.py:151 - // asa_close_out_relative_idx = Txn.group_index + 1 - txn GroupIndex - intc_1 // 1 - + - // smart_contracts/smart_asa/contract.py:152 - // asa_close_out_txn = gtxn.AssetTransferTransaction(asa_close_out_relative_idx) - dup - gtxns TypeEnum - pushint 4 // axfer - == - assert // transaction type is axfer - // smart_contracts/smart_asa/contract.py:153 - // assert Txn.on_completion == OnCompleteAction.CloseOut, err.WRONG_ON_COMPLETE - txn OnCompletion - pushint 2 // CloseOut - == - assert // Wrong On Complete Action - // smart_contracts/smart_asa/contract.py:155 - // self.account_smart_asa_id[Txn.sender] == close_asset.id - txn Sender - intc_0 // 0 - bytec_3 // "account_smart_asa_id" - app_local_get_ex - assert // check self.account_smart_asa_id exists for account - dig 2 - == - // smart_contracts/smart_asa/contract.py:154-156 - // assert ( - // self.account_smart_asa_id[Txn.sender] == close_asset.id - // ), err.INVALID_CTRL_ASA - assert // Invalid Controlled ASA ID - // smart_contracts/smart_asa/contract.py:158 - // Global.group_size > asa_close_out_relative_idx - global GroupSize - dig 1 - > - // smart_contracts/smart_asa/contract.py:157-159 - // assert ( - // Global.group_size > asa_close_out_relative_idx - // ), err.INVALID_CLOSE_OUT_GROUP_SIZE - assert // Invalid Close Out group size - // smart_contracts/smart_asa/contract.py:164 - // asa_close_out_txn.xfer_asset.id == close_asset.id - dup - gtxns XferAsset - dig 2 - == - // smart_contracts/smart_asa/contract.py:163-165 - // assert ( - // asa_close_out_txn.xfer_asset.id == close_asset.id - // ), err.CLOSE_OUT_WRONG_ASA - assert // Wrong ASA Close Out ID - // smart_contracts/smart_asa/contract.py:166 - // assert asa_close_out_txn.sender == Txn.sender, err.CLOSE_OUT_WRONG_SENDER - dup - gtxns Sender - txn Sender - == - assert // Wrong ASA Close Out Sender - // smart_contracts/smart_asa/contract.py:167 - // assert asa_close_out_txn.asset_amount == UInt64(0), err.CLOSE_OUT_WRONG_AMOUNT - dup - gtxns AssetAmount - ! - assert // Wrong ASA Close Out Amount - // smart_contracts/smart_asa/contract.py:169 - // asa_close_out_txn.asset_close_to != Global.zero_address - gtxns AssetCloseTo - global ZeroAddress - != - // smart_contracts/smart_asa/contract.py:168-170 - // assert ( - // asa_close_out_txn.asset_close_to != Global.zero_address - // ), err.CLOSE_OUT_WRONG_CLOSE_TO - assert // Wrong Close Out on Close Out - // smart_contracts/smart_asa/contract.py:476 - // (creator, exists) = op.AssetParamsGet.asset_creator(close_asset.id) - asset_params_get AssetCreator - // smart_contracts/smart_asa/contract.py:477 - // if exists: # Smart ASA has not been destroyed - bz asset_close_out_after_if_else@5 - // smart_contracts/smart_asa/contract.py:176 - // asa_close_out_relative_idx = Txn.group_index + 1 - txn GroupIndex - intc_1 // 1 - + - // smart_contracts/smart_asa/contract.py:177 - // asa_close_out_txn = gtxn.AssetTransferTransaction(asa_close_out_relative_idx) - dup - gtxns TypeEnum - pushint 4 // axfer - == - assert // transaction type is axfer - // smart_contracts/smart_asa/contract.py:179 - // asa_close_out_txn.asset_close_to == asset_creator - gtxns AssetCloseTo - dig 1 - dup - cover 2 - == - // smart_contracts/smart_asa/contract.py:178-180 - // assert ( - // asa_close_out_txn.asset_close_to == asset_creator - // ), err.CLOSE_OUT_WRONG_CLOSE_TO - assert // Wrong Close Out on Close Out - // smart_contracts/smart_asa/contract.py:181 - // assert close_asset.id == self.smart_asa_id, err.INVALID_CTRL_ASA - intc_0 // 0 - bytec_0 // "smart_asa_id" - app_global_get_ex - assert // check self.smart_asa_id exists - dig 4 - == - assert // Invalid Controlled ASA ID - // smart_contracts/smart_asa/contract.py:480 - // close_to != creator - dig 2 - != - // smart_contracts/smart_asa/contract.py:479-481 - // if ( - // close_to != creator - // ): # If close-out target is not the Creator, then close-out target MUST be opted-in - bz asset_close_out_after_if_else@4 - // smart_contracts/smart_asa/contract.py:483 - // self.account_smart_asa_id[close_to] == self.smart_asa_id - dig 1 - dup - intc_0 // 0 - bytec_3 // "account_smart_asa_id" - app_local_get_ex - assert // check self.account_smart_asa_id exists for account - intc_0 // 0 - bytec_0 // "smart_asa_id" - app_global_get_ex - assert // check self.smart_asa_id exists - == - // smart_contracts/smart_asa/contract.py:482-484 - // assert ( - // self.account_smart_asa_id[close_to] == self.smart_asa_id - // ), err.INVALID_CTRL_ASA - assert // Invalid Controlled ASA ID - // smart_contracts/smart_asa/contract.py:185 - // assert not self.global_frozen, err.GLOBAL_FROZEN - intc_0 // 0 - bytec 6 // "global_frozen" - app_global_get_ex - assert // check self.global_frozen exists - ! - assert // Smart ASA is global frozen - // smart_contracts/smart_asa/contract.py:186 - // assert not self.account_frozen[Txn.sender], err.SENDER_FROZEN - txn Sender - intc_0 // 0 - bytec 4 // "account_frozen" - app_local_get_ex - assert // check self.account_frozen exists for account - ! - assert // Sender account is frozen - // smart_contracts/smart_asa/contract.py:187 - // assert not self.account_frozen[close_to], err.CLOSE_TO_FROZEN - intc_0 // 0 - bytec 4 // "account_frozen" - app_local_get_ex - assert // check self.account_frozen exists for account - ! - assert // Close to account is frozen - -asset_close_out_after_if_else@4: - // smart_contracts/smart_asa/contract.py:490 - // asset_amount=close_asset.balance(Txn.sender), - txn Sender - dig 3 - dup - cover 2 - asset_holding_get AssetBalance - assert // account opted into asset - // smart_contracts/smart_asa/contract.py:491 - // asset_sender=Txn.sender, - txn Sender - // smart_contracts/smart_asa/contract.py:487-493 - // # Effects - // self.inner_asset_transfer( - // xfer_asset=close_asset, - // asset_amount=close_asset.balance(Txn.sender), - // asset_sender=Txn.sender, - // asset_receiver=close_to, - // ) - dig 4 - callsub inner_asset_transfer - -asset_close_out_after_if_else@5: - // smart_contracts/smart_asa/contract.py:465 - // @arc4.abimethod(allow_actions=["CloseOut"]) - intc_1 // 1 - return - - -// smart_contracts.smart_asa.contract.SmartAsa.asset_destroy[routing]() -> void: -asset_destroy: - // smart_contracts/smart_asa/contract.py:495 - // @arc4.abimethod - txna ApplicationArgs 1 - dup - len - intc_2 // 8 - == - assert // invalid number of bytes for arc4.uint64 - btoi - // smart_contracts/smart_asa/contract.py:503-504 - // # Preconditions - // self.assert_common_preconditions(destroy_asset.id) - dup - callsub assert_common_preconditions - // smart_contracts/smart_asa/contract.py:505 - // assert Txn.sender == self.manager_addr, err.UNAUTHORIZED_MANAGER - txn Sender - intc_0 // 0 - bytec 7 // "manager_addr" - app_global_get_ex - assert // check self.manager_addr exists - == - assert // Unauthorized Manager - // smart_contracts/smart_asa/contract.py:229-233 - // itxn.AssetConfig( - // fee=0, - // config_asset=destroy_asset, - // sender=Global.current_application_address, - // ).submit() - itxn_begin - // smart_contracts/smart_asa/contract.py:232 - // sender=Global.current_application_address, - global CurrentApplicationAddress - itxn_field Sender - itxn_field ConfigAsset - // smart_contracts/smart_asa/contract.py:229 - // itxn.AssetConfig( - pushint 3 // acfg - itxn_field TypeEnum - // smart_contracts/smart_asa/contract.py:230 - // fee=0, - intc_0 // 0 - itxn_field Fee - // smart_contracts/smart_asa/contract.py:229-233 - // itxn.AssetConfig( - // fee=0, - // config_asset=destroy_asset, - // sender=Global.current_application_address, - // ).submit() - itxn_submit - // smart_contracts/smart_asa/contract.py:509 - // self.total = UInt64() - bytec 8 // "total" - intc_0 // 0 - app_global_put - // smart_contracts/smart_asa/contract.py:510 - // self.decimals = UInt64() - bytec 10 // "decimals" - intc_0 // 0 - app_global_put - // smart_contracts/smart_asa/contract.py:511 - // self.default_frozen = False - bytec 9 // "default_frozen" - intc_0 // 0 - app_global_put - // smart_contracts/smart_asa/contract.py:512 - // self.unit_name = String() - bytec 11 // "unit_name" - pushbytes "" - app_global_put - // smart_contracts/smart_asa/contract.py:513 - // self.name = String() - bytec 12 // "name" - pushbytes "" - app_global_put - // smart_contracts/smart_asa/contract.py:514 - // self.url = String() - bytec 13 // "url" - pushbytes "" - app_global_put - // smart_contracts/smart_asa/contract.py:515 - // self.metadata_hash = Bytes() - bytec 14 // "metadata_hash" - pushbytes 0x - app_global_put - // smart_contracts/smart_asa/contract.py:516 - // self.manager_addr = Account() - bytec 7 // "manager_addr" - global ZeroAddress - app_global_put - // smart_contracts/smart_asa/contract.py:517 - // self.reserve_addr = Account() - bytec_1 // "reserve_addr" - global ZeroAddress - app_global_put - // smart_contracts/smart_asa/contract.py:518 - // self.freeze_addr = Account() - bytec 5 // "freeze_addr" - global ZeroAddress - app_global_put - // smart_contracts/smart_asa/contract.py:519 - // self.clawback_addr = Account() - bytec_2 // "clawback_addr" - global ZeroAddress - app_global_put - // smart_contracts/smart_asa/contract.py:520 - // self.smart_asa_id = UInt64() - bytec_0 // "smart_asa_id" - intc_0 // 0 - app_global_put - // smart_contracts/smart_asa/contract.py:521 - // self.global_frozen = False - bytec 6 // "global_frozen" - intc_0 // 0 - app_global_put - // smart_contracts/smart_asa/contract.py:495 - // @arc4.abimethod - intc_1 // 1 - return - - -// smart_contracts.smart_asa.contract.SmartAsa.get_asset_config[routing]() -> void: -get_asset_config: - // smart_contracts/smart_asa/contract.py:523 - // @arc4.abimethod(readonly=True) - txna ApplicationArgs 1 - dup - len - intc_2 // 8 - == - assert // invalid number of bytes for arc4.uint64 - btoi - // smart_contracts/smart_asa/contract.py:534-535 - // # Preconditions - // self.assert_common_preconditions(asset.id) - callsub assert_common_preconditions - // smart_contracts/smart_asa/contract.py:539 - // total=arc4.UInt64(self.total), - intc_0 // 0 - bytec 8 // "total" - app_global_get_ex - assert // check self.total exists - itob - // smart_contracts/smart_asa/contract.py:540 - // decimals=arc4.UInt32(self.decimals), - intc_0 // 0 - bytec 10 // "decimals" - app_global_get_ex - assert // check self.decimals exists - itob - dup - bitlen - intc_3 // 32 - <= - assert // overflow - extract 4 4 - // smart_contracts/smart_asa/contract.py:541 - // default_frozen=arc4.Bool(self.default_frozen), - intc_0 // 0 - bytec 9 // "default_frozen" - app_global_get_ex - assert // check self.default_frozen exists - bytec 16 // 0x00 - intc_0 // 0 - uncover 2 - setbit - // smart_contracts/smart_asa/contract.py:542 - // unit_name=arc4.String(self.unit_name), - intc_0 // 0 - bytec 11 // "unit_name" - app_global_get_ex - assert // check self.unit_name exists - dup - len - itob - extract 6 2 - swap - concat - // smart_contracts/smart_asa/contract.py:543 - // name=arc4.String(self.name), - intc_0 // 0 - bytec 12 // "name" - app_global_get_ex - assert // check self.name exists - dup - len - itob - extract 6 2 - swap - concat - // smart_contracts/smart_asa/contract.py:544 - // url=arc4.String(self.url), - intc_0 // 0 - bytec 13 // "url" - app_global_get_ex - assert // check self.url exists - dup - len - itob - extract 6 2 - swap - concat - // smart_contracts/smart_asa/contract.py:545 - // metadata_hash=arc4.DynamicBytes(self.metadata_hash), - intc_0 // 0 - bytec 14 // "metadata_hash" - app_global_get_ex - assert // check self.metadata_hash exists - dup - len - itob - extract 6 2 - swap - concat - // smart_contracts/smart_asa/contract.py:546 - // manager_addr=arc4.Address(self.manager_addr), - intc_0 // 0 - bytec 7 // "manager_addr" - app_global_get_ex - assert // check self.manager_addr exists - // smart_contracts/smart_asa/contract.py:547 - // reserve_addr=arc4.Address(self.reserve_addr), - intc_0 // 0 - bytec_1 // "reserve_addr" - app_global_get_ex - assert // check self.reserve_addr exists - // smart_contracts/smart_asa/contract.py:548 - // freeze_addr=arc4.Address(self.freeze_addr), - intc_0 // 0 - bytec 5 // "freeze_addr" - app_global_get_ex - assert // check self.freeze_addr exists - // smart_contracts/smart_asa/contract.py:549 - // clawback_addr=arc4.Address(self.clawback_addr), - intc_0 // 0 - bytec_2 // "clawback_addr" - app_global_get_ex - assert // check self.clawback_addr exists - // smart_contracts/smart_asa/contract.py:537-550 - // # Effects - // return AssetConfig( - // total=arc4.UInt64(self.total), - // decimals=arc4.UInt32(self.decimals), - // default_frozen=arc4.Bool(self.default_frozen), - // unit_name=arc4.String(self.unit_name), - // name=arc4.String(self.name), - // url=arc4.String(self.url), - // metadata_hash=arc4.DynamicBytes(self.metadata_hash), - // manager_addr=arc4.Address(self.manager_addr), - // reserve_addr=arc4.Address(self.reserve_addr), - // freeze_addr=arc4.Address(self.freeze_addr), - // clawback_addr=arc4.Address(self.clawback_addr), - // ) - uncover 10 - uncover 10 - concat - uncover 9 - concat - pushbytes 0x0095 - concat - dig 8 - len - pushint 149 // 149 - + - dup - itob - extract 6 2 - uncover 2 - swap - concat - dig 8 - len - uncover 2 - + - dup - itob - extract 6 2 - uncover 2 - swap - concat - dig 7 - len - uncover 2 - + - itob - extract 6 2 - concat - uncover 4 - concat - uncover 3 - concat - uncover 2 - concat - swap - concat - uncover 4 - concat - uncover 3 - concat - uncover 2 - concat - swap - concat - // smart_contracts/smart_asa/contract.py:523 - // @arc4.abimethod(readonly=True) - bytec 15 // 0x151f7c75 - swap - concat - log - intc_1 // 1 - return - - -// smart_contracts.smart_asa.contract.SmartAsa.get_asset_is_frozen[routing]() -> void: -get_asset_is_frozen: - // smart_contracts/smart_asa/contract.py:552 - // @arc4.abimethod(readonly=True) - txna ApplicationArgs 1 - dup - len - intc_2 // 8 - == - assert // invalid number of bytes for arc4.uint64 - btoi - // smart_contracts/smart_asa/contract.py:563-564 - // # Preconditions - // self.assert_common_preconditions(freeze_asset.id) - callsub assert_common_preconditions - // smart_contracts/smart_asa/contract.py:566-567 - // # Effects - // return arc4.Bool(self.global_frozen) - intc_0 // 0 - bytec 6 // "global_frozen" - app_global_get_ex - assert // check self.global_frozen exists - bytec 16 // 0x00 - intc_0 // 0 - uncover 2 - setbit - // smart_contracts/smart_asa/contract.py:552 - // @arc4.abimethod(readonly=True) - bytec 15 // 0x151f7c75 - swap - concat - log - intc_1 // 1 - return - - -// smart_contracts.smart_asa.contract.SmartAsa.get_account_is_frozen[routing]() -> void: -get_account_is_frozen: - // smart_contracts/smart_asa/contract.py:569 - // @arc4.abimethod(readonly=True) - txna ApplicationArgs 1 - dup - len - intc_2 // 8 - == - assert // invalid number of bytes for arc4.uint64 - btoi - txna ApplicationArgs 2 - dup - len - intc_3 // 32 - == - assert // invalid number of bytes for arc4.static_array - // smart_contracts/smart_asa/contract.py:583-584 - // # Preconditions - // self.assert_common_preconditions(freeze_asset.id) - swap - callsub assert_common_preconditions - // smart_contracts/smart_asa/contract.py:586-587 - // # Effects - // return arc4.Bool(self.account_frozen[freeze_account]) - intc_0 // 0 - bytec 4 // "account_frozen" - app_local_get_ex - assert // check self.account_frozen exists for account - bytec 16 // 0x00 - intc_0 // 0 - uncover 2 - setbit - // smart_contracts/smart_asa/contract.py:569 - // @arc4.abimethod(readonly=True) - bytec 15 // 0x151f7c75 - swap - concat - log - intc_1 // 1 - return - - -// smart_contracts.smart_asa.contract.SmartAsa.get_circulating_supply[routing]() -> void: -get_circulating_supply: - // smart_contracts/smart_asa/contract.py:589 - // @arc4.abimethod(readonly=True) - txna ApplicationArgs 1 - dup - len - intc_2 // 8 - == - assert // invalid number of bytes for arc4.uint64 - btoi - // smart_contracts/smart_asa/contract.py:600-601 - // # Preconditions - // self.assert_common_preconditions(asset.id) - dup - callsub assert_common_preconditions - // smart_contracts/smart_asa/contract.py:603-604 - // # Effects - // return arc4.UInt64(self.circulating_supply(asset)) - callsub circulating_supply - itob - // smart_contracts/smart_asa/contract.py:589 - // @arc4.abimethod(readonly=True) - bytec 15 // 0x151f7c75 - swap - concat - log - intc_1 // 1 - return - - -// smart_contracts.smart_asa.contract.SmartAsa.circulating_supply(ctrl_asset: uint64) -> uint64: -circulating_supply: - // smart_contracts/smart_asa/contract.py:78-79 - // @subroutine - // def circulating_supply(self, ctrl_asset: Asset) -> UInt64: - proto 1 1 - // smart_contracts/smart_asa/contract.py:80 - // return cfg.TOTAL - ctrl_asset.balance(Global.current_application_address) - global CurrentApplicationAddress - frame_dig -1 - asset_holding_get AssetBalance - assert // account opted into asset - intc 4 // 18446744073709551615 - swap - - - retsub - - -// smart_contracts.smart_asa.contract.SmartAsa.assert_common_preconditions(asset_id: uint64) -> void: -assert_common_preconditions: - // smart_contracts/smart_asa/contract.py:82-83 - // @subroutine - // def assert_common_preconditions(self, asset_id: UInt64) -> None: - proto 1 0 - // smart_contracts/smart_asa/contract.py:84 - // assert self.smart_asa_id, err.MISSING_CTRL_ASA - intc_0 // 0 - bytec_0 // "smart_asa_id" - app_global_get_ex - assert // check self.smart_asa_id exists - dup - assert // Missing Controlled ASA - // smart_contracts/smart_asa/contract.py:85 - // assert self.smart_asa_id == asset_id, err.INVALID_CTRL_ASA - frame_dig -1 - == - assert // Invalid Controlled ASA ID - retsub - - -// smart_contracts.smart_asa.contract.SmartAsa.inner_asset_transfer(xfer_asset: uint64, asset_amount: uint64, asset_sender: bytes, asset_receiver: bytes) -> void: -inner_asset_transfer: - // smart_contracts/smart_asa/contract.py:209-217 - // @subroutine - // def inner_asset_transfer( - // self, - // *, - // xfer_asset: Asset, - // asset_amount: UInt64, - // asset_sender: Account, - // asset_receiver: Account - // ) -> None: - proto 4 0 - // smart_contracts/smart_asa/contract.py:218-225 - // itxn.AssetTransfer( - // fee=0, - // xfer_asset=xfer_asset.id, - // asset_amount=asset_amount, - // asset_sender=asset_sender, - // asset_receiver=asset_receiver, - // sender=Global.current_application_address, - // ).submit() - itxn_begin - // smart_contracts/smart_asa/contract.py:224 - // sender=Global.current_application_address, - global CurrentApplicationAddress - itxn_field Sender - frame_dig -1 - itxn_field AssetReceiver - frame_dig -2 - itxn_field AssetSender - frame_dig -3 - itxn_field AssetAmount - frame_dig -4 - itxn_field XferAsset - // smart_contracts/smart_asa/contract.py:218 - // itxn.AssetTransfer( - pushint 4 // axfer - itxn_field TypeEnum - // smart_contracts/smart_asa/contract.py:219 - // fee=0, - intc_0 // 0 - itxn_field Fee - // smart_contracts/smart_asa/contract.py:218-225 - // itxn.AssetTransfer( - // fee=0, - // xfer_asset=xfer_asset.id, - // asset_amount=asset_amount, - // asset_sender=asset_sender, - // asset_receiver=asset_receiver, - // sender=Global.current_application_address, - // ).submit() - itxn_submit - retsub diff --git a/assets/arc-0020/smart_contracts/artifacts/smart_asa/SmartAsa.arc56.json b/assets/arc-0020/smart_contracts/artifacts/smart_asa/SmartAsa.arc56.json deleted file mode 100644 index 3b4b91bb7..000000000 --- a/assets/arc-0020/smart_contracts/artifacts/smart_asa/SmartAsa.arc56.json +++ /dev/null @@ -1,1114 +0,0 @@ -{ - "name": "SmartAsa", - "structs": { - "AssetConfig": [ - { - "name": "total", - "type": "uint64" - }, - { - "name": "decimals", - "type": "uint32" - }, - { - "name": "default_frozen", - "type": "bool" - }, - { - "name": "unit_name", - "type": "string" - }, - { - "name": "name", - "type": "string" - }, - { - "name": "url", - "type": "string" - }, - { - "name": "metadata_hash", - "type": "byte[]" - }, - { - "name": "manager_addr", - "type": "address" - }, - { - "name": "reserve_addr", - "type": "address" - }, - { - "name": "freeze_addr", - "type": "address" - }, - { - "name": "clawback_addr", - "type": "address" - } - ] - }, - "methods": [ - { - "name": "asset_create", - "args": [ - { - "type": "uint64", - "name": "total", - "desc": "The total number of base units of the Smart ASA to create" - }, - { - "type": "uint32", - "name": "decimals", - "desc": "The number of digits to use after the decimal point when displaying the Smart ASA" - }, - { - "type": "bool", - "name": "default_frozen", - "desc": "Smart ASA default frozen (True to freeze holdings by default)" - }, - { - "type": "string", - "name": "unit_name", - "desc": "The name of a unit of Smart ASA" - }, - { - "type": "string", - "name": "name", - "desc": "The name of the Smart ASA" - }, - { - "type": "string", - "name": "url", - "desc": "Smart ASA external URL" - }, - { - "type": "byte[]", - "name": "metadata_hash", - "desc": "Smart ASA metadata hash" - }, - { - "type": "address", - "name": "manager_addr", - "desc": "Account that can manage the configuration of the Smart ASA and destroy it" - }, - { - "type": "address", - "name": "reserve_addr", - "desc": "Account that holds the reserve (non-minted) units of Smart ASA and can mint or burn it" - }, - { - "type": "address", - "name": "freeze_addr", - "desc": "Account that can freeze/unfreeze holdings of the Smart ASA globally or locally" - }, - { - "type": "address", - "name": "clawback_addr", - "desc": "Account that can clawback holdings of the Smart ASA" - } - ], - "returns": { - "type": "uint64", - "desc": "Controlled ASA ID" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "desc": "Create the Controlled ASA", - "events": [], - "recommendations": {} - }, - { - "name": "asset_opt_in", - "args": [ - { - "type": "uint64", - "name": "asset", - "desc": "Smart ASA ID" - }, - { - "type": "axfer", - "name": "ctrl_asa_opt_in", - "desc": "Controlled ASA opt in transaction" - } - ], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "OptIn" - ] - }, - "readonly": false, - "desc": "Smart ASA opt in (App and Controlled ASA)", - "events": [], - "recommendations": {} - }, - { - "name": "asset_config", - "args": [ - { - "type": "uint64", - "name": "config_asset", - "desc": "Smart ASA ID to configure" - }, - { - "type": "uint64", - "name": "total", - "desc": "Total number of base units if the Smart ASA. It can not be less than current circulating supply" - }, - { - "type": "uint32", - "name": "decimals", - "desc": "The number of digits to use after the decimal point when displaying the Smart ASA" - }, - { - "type": "bool", - "name": "default_frozen", - "desc": "Smart ASA default frozen (True to freeze holdings by default)" - }, - { - "type": "string", - "name": "unit_name", - "desc": "The name of a unit of Smart ASA" - }, - { - "type": "string", - "name": "name", - "desc": "The name of the Smart ASA" - }, - { - "type": "string", - "name": "url", - "desc": "Smart ASA external URL" - }, - { - "type": "byte[]", - "name": "metadata_hash", - "desc": "Smart ASA metadata hash" - }, - { - "type": "address", - "name": "manager_addr", - "desc": "Account that can manage the configuration of the Smart ASA and destroy it" - }, - { - "type": "address", - "name": "reserve_addr", - "desc": "Account that holds the reserve (non-minted) units of Smart ASA and can mint or burn it" - }, - { - "type": "address", - "name": "freeze_addr", - "desc": "Account that can freeze/unfreeze holdings of the Smart ASA globally or locally" - }, - { - "type": "address", - "name": "clawback_addr", - "desc": "Account that can clawback holdings of the Smart ASA" - } - ], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "desc": "Configure Smart ASA (for unchanged parameters use existing value - no optional args on AVM)", - "events": [], - "recommendations": {} - }, - { - "name": "asset_transfer", - "args": [ - { - "type": "uint64", - "name": "xfer_asset", - "desc": "Smart ASA ID to transfer" - }, - { - "type": "uint64", - "name": "asset_amount", - "desc": "Amount to transfer" - }, - { - "type": "address", - "name": "asset_sender", - "desc": "Smart ASA sender" - }, - { - "type": "address", - "name": "asset_receiver", - "desc": "Smart ASA receiver" - } - ], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "desc": "Smart ASA transfers: regular, clawback, mint, burn", - "events": [], - "recommendations": {} - }, - { - "name": "asset_freeze", - "args": [ - { - "type": "uint64", - "name": "freeze_asset", - "desc": "Smart ASA ID to globally freeze/unfreeze" - }, - { - "type": "bool", - "name": "asset_frozen", - "desc": "Smart ASA frozen status" - } - ], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "desc": "Smart ASA global freeze (all accounts)", - "events": [], - "recommendations": {} - }, - { - "name": "account_freeze", - "args": [ - { - "type": "uint64", - "name": "freeze_asset", - "desc": "Smart ASA ID to locally freeze/unfreeze" - }, - { - "type": "address", - "name": "freeze_account", - "desc": "Account to freeze/unfreeze" - }, - { - "type": "bool", - "name": "asset_frozen", - "desc": "Smart ASA frozen status" - } - ], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "desc": "Smart ASA local freeze (account specific)", - "events": [], - "recommendations": {} - }, - { - "name": "asset_close_out", - "args": [ - { - "type": "uint64", - "name": "close_asset", - "desc": "Smart ASA ID to close out" - }, - { - "type": "address", - "name": "close_to", - "desc": "Account to send all the Smart ASA remainder to." - } - ], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "CloseOut" - ] - }, - "readonly": false, - "desc": "Smart ASA close out (App and Controlled ASA)", - "events": [], - "recommendations": {} - }, - { - "name": "asset_destroy", - "args": [ - { - "type": "uint64", - "name": "destroy_asset", - "desc": "Smart ASA ID to destroy" - } - ], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "desc": "Destroy the Controlled ASA", - "events": [], - "recommendations": {} - }, - { - "name": "get_asset_config", - "args": [ - { - "type": "uint64", - "name": "asset", - "desc": "Smart ASA ID" - } - ], - "returns": { - "type": "(uint64,uint32,bool,string,string,string,byte[],address,address,address,address)", - "struct": "AssetConfig", - "desc": "Smart ASA configuration parameters" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": true, - "desc": "Get Smart ASA configuration", - "events": [], - "recommendations": {} - }, - { - "name": "get_asset_is_frozen", - "args": [ - { - "type": "uint64", - "name": "freeze_asset", - "desc": "Smart ASA ID" - } - ], - "returns": { - "type": "bool", - "desc": "Smart ASA global frozen status" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": true, - "desc": "Get Smart ASA global frozen status", - "events": [], - "recommendations": {} - }, - { - "name": "get_account_is_frozen", - "args": [ - { - "type": "uint64", - "name": "freeze_asset", - "desc": "Smart ASA ID" - }, - { - "type": "address", - "name": "freeze_account", - "desc": "Account to check" - } - ], - "returns": { - "type": "bool", - "desc": "Smart ASA account frozen status" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": true, - "desc": "Get Smart ASA account frozen status", - "events": [], - "recommendations": {} - }, - { - "name": "get_circulating_supply", - "args": [ - { - "type": "uint64", - "name": "asset", - "desc": "Smart ASA ID" - } - ], - "returns": { - "type": "uint64", - "desc": "Smart ASA circulating supply" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": true, - "desc": "Get Smart ASA circulating supply", - "events": [], - "recommendations": {} - } - ], - "arcs": [ - 22, - 28 - ], - "desc": "\n ARC-0020 (Smart ASA) - Reference Implementation\n ", - "networks": {}, - "state": { - "schema": { - "global": { - "ints": 5, - "bytes": 8 - }, - "local": { - "ints": 2, - "bytes": 0 - } - }, - "keys": { - "global": { - "total": { - "keyType": "AVMString", - "valueType": "AVMUint64", - "key": "dG90YWw=" - }, - "decimals": { - "keyType": "AVMString", - "valueType": "AVMUint64", - "key": "ZGVjaW1hbHM=" - }, - "default_frozen": { - "keyType": "AVMString", - "valueType": "AVMUint64", - "key": "ZGVmYXVsdF9mcm96ZW4=" - }, - "unit_name": { - "keyType": "AVMString", - "valueType": "AVMString", - "key": "dW5pdF9uYW1l" - }, - "name": { - "keyType": "AVMString", - "valueType": "AVMString", - "key": "bmFtZQ==" - }, - "url": { - "keyType": "AVMString", - "valueType": "AVMString", - "key": "dXJs" - }, - "metadata_hash": { - "keyType": "AVMString", - "valueType": "AVMBytes", - "key": "bWV0YWRhdGFfaGFzaA==" - }, - "manager_addr": { - "keyType": "AVMString", - "valueType": "address", - "key": "bWFuYWdlcl9hZGRy" - }, - "reserve_addr": { - "keyType": "AVMString", - "valueType": "address", - "key": "cmVzZXJ2ZV9hZGRy" - }, - "freeze_addr": { - "keyType": "AVMString", - "valueType": "address", - "key": "ZnJlZXplX2FkZHI=" - }, - "clawback_addr": { - "keyType": "AVMString", - "valueType": "address", - "key": "Y2xhd2JhY2tfYWRkcg==" - }, - "smart_asa_id": { - "keyType": "AVMString", - "valueType": "AVMUint64", - "key": "c21hcnRfYXNhX2lk" - }, - "global_frozen": { - "keyType": "AVMString", - "valueType": "AVMUint64", - "key": "Z2xvYmFsX2Zyb3plbg==" - } - }, - "local": { - "account_smart_asa_id": { - "keyType": "AVMString", - "valueType": "AVMUint64", - "key": "YWNjb3VudF9zbWFydF9hc2FfaWQ=" - }, - "account_frozen": { - "keyType": "AVMString", - "valueType": "AVMUint64", - "key": "YWNjb3VudF9mcm96ZW4=" - } - }, - "box": {} - }, - "maps": { - "global": {}, - "local": {}, - "box": {} - } - }, - "bareActions": { - "create": [ - "NoOp" - ], - "call": [] - }, - "sourceInfo": { - "approval": { - "sourceInfo": [ - { - "pc": [ - 1113 - ], - "errorMessage": "Clawback Address has been deleted" - }, - { - "pc": [ - 1751 - ], - "errorMessage": "Close to account is frozen" - }, - { - "pc": [ - 555 - ], - "errorMessage": "Controlled ASA already created" - }, - { - "pc": [ - 848 - ], - "errorMessage": "Forbidden Close Out on Opt In" - }, - { - "pc": [ - 1403 - ], - "errorMessage": "Forbidden clawback burning" - }, - { - "pc": [ - 1290 - ], - "errorMessage": "Forbidden over minting" - }, - { - "pc": [ - 1273 - ], - "errorMessage": "Forbidden self minting" - }, - { - "pc": [ - 1095 - ], - "errorMessage": "Freeze Address has been deleted" - }, - { - "pc": [ - 1651 - ], - "errorMessage": "Invalid Close Out group size" - }, - { - "pc": [ - 1300, - 1372, - 1431, - 1439, - 1465, - 1476, - 1581, - 1645, - 1709, - 1728, - 2184 - ], - "errorMessage": "Invalid Controlled ASA ID" - }, - { - "pc": [ - 1126 - ], - "errorMessage": "Invalid Total, must be >= circulating supply" - }, - { - "pc": [ - 862, - 2180 - ], - "errorMessage": "Missing Controlled ASA" - }, - { - "pc": [ - 406 - ], - "errorMessage": "OnCompletion must be CloseOut && can only call when not creating" - }, - { - "pc": [ - 316 - ], - "errorMessage": "OnCompletion must be NoOp" - }, - { - "pc": [ - 428 - ], - "errorMessage": "OnCompletion must be NoOp && can only call when creating" - }, - { - "pc": [ - 417 - ], - "errorMessage": "OnCompletion must be OptIn && can only call when not creating" - }, - { - "pc": [ - 1327, - 1498 - ], - "errorMessage": "Receiver account is frozen" - }, - { - "pc": [ - 1075 - ], - "errorMessage": "Reserve Address has been deleted" - }, - { - "pc": [ - 1397, - 1491, - 1744 - ], - "errorMessage": "Sender account is frozen" - }, - { - "pc": [ - 1307, - 1379, - 1483, - 1735 - ], - "errorMessage": "Smart ASA is global frozen" - }, - { - "pc": [ - 549 - ], - "errorMessage": "Unauthorized" - }, - { - "pc": [ - 1451 - ], - "errorMessage": "Unauthorized Clawback" - }, - { - "pc": [ - 1531, - 1590 - ], - "errorMessage": "Unauthorized Freeze" - }, - { - "pc": [ - 1059, - 1792 - ], - "errorMessage": "Unauthorized Manager" - }, - { - "pc": [ - 1264, - 1360 - ], - "errorMessage": "Unauthorized Reserve" - }, - { - "pc": [ - 1670 - ], - "errorMessage": "Wrong ASA Close Out Amount" - }, - { - "pc": [ - 1658 - ], - "errorMessage": "Wrong ASA Close Out ID" - }, - { - "pc": [ - 1665 - ], - "errorMessage": "Wrong ASA Close Out Sender" - }, - { - "pc": [ - 841 - ], - "errorMessage": "Wrong ASA Opt In Amount" - }, - { - "pc": [ - 819 - ], - "errorMessage": "Wrong ASA Opt In ID" - }, - { - "pc": [ - 835 - ], - "errorMessage": "Wrong ASA Opt In Receiver" - }, - { - "pc": [ - 827 - ], - "errorMessage": "Wrong ASA Opt In Sender" - }, - { - "pc": [ - 1676, - 1701 - ], - "errorMessage": "Wrong Close Out on Close Out" - }, - { - "pc": [ - 213 - ], - "errorMessage": "Wrong Global Bytes allocation" - }, - { - "pc": [ - 219 - ], - "errorMessage": "Wrong Global UInts allocation" - }, - { - "pc": [ - 223 - ], - "errorMessage": "Wrong Local Bytes allocation" - }, - { - "pc": [ - 229 - ], - "errorMessage": "Wrong Local UInts allocation" - }, - { - "pc": [ - 853, - 1635 - ], - "errorMessage": "Wrong On Complete Action" - }, - { - "pc": [ - 889, - 1761, - 2166 - ], - "errorMessage": "account opted into asset" - }, - { - "pc": [ - 1325, - 1395, - 1489, - 1496, - 1742, - 1749, - 2119 - ], - "errorMessage": "check self.account_frozen exists for account" - }, - { - "pc": [ - 1294, - 1366, - 1422, - 1437, - 1456, - 1474, - 1575, - 1641, - 1722 - ], - "errorMessage": "check self.account_smart_asa_id exists for account" - }, - { - "pc": [ - 1099, - 1109, - 1315, - 1383, - 1412, - 1979 - ], - "errorMessage": "check self.clawback_addr exists" - }, - { - "pc": [ - 1889 - ], - "errorMessage": "check self.decimals exists" - }, - { - "pc": [ - 879, - 1903 - ], - "errorMessage": "check self.default_frozen exists" - }, - { - "pc": [ - 1080, - 1091, - 1529, - 1588, - 1975 - ], - "errorMessage": "check self.freeze_addr exists" - }, - { - "pc": [ - 1305, - 1377, - 1481, - 1733, - 2080 - ], - "errorMessage": "check self.global_frozen exists" - }, - { - "pc": [ - 1057, - 1790, - 1966 - ], - "errorMessage": "check self.manager_addr exists" - }, - { - "pc": [ - 1953 - ], - "errorMessage": "check self.metadata_hash exists" - }, - { - "pc": [ - 1927 - ], - "errorMessage": "check self.name exists" - }, - { - "pc": [ - 1063, - 1071, - 1262, - 1311, - 1355, - 1401, - 1970 - ], - "errorMessage": "check self.reserve_addr exists" - }, - { - "pc": [ - 553, - 773, - 814, - 1277, - 1298, - 1370, - 1426, - 1460, - 1579, - 1705, - 1726, - 2178 - ], - "errorMessage": "check self.smart_asa_id exists" - }, - { - "pc": [ - 1288, - 1883 - ], - "errorMessage": "check self.total exists" - }, - { - "pc": [ - 1914 - ], - "errorMessage": "check self.unit_name exists" - }, - { - "pc": [ - 1940 - ], - "errorMessage": "check self.url exists" - }, - { - "pc": [ - 462, - 476, - 490, - 504, - 950, - 966, - 982, - 998 - ], - "errorMessage": "invalid array length header" - }, - { - "pc": [ - 455, - 941, - 1518, - 1564 - ], - "errorMessage": "invalid number of bytes for arc4.bool" - }, - { - "pc": [ - 469, - 483, - 497, - 511, - 957, - 973, - 989, - 1005 - ], - "errorMessage": "invalid number of bytes for arc4.dynamic_array" - }, - { - "pc": [ - 519, - 527, - 535, - 543, - 1015, - 1026, - 1036, - 1046, - 1233, - 1243, - 1556, - 1618, - 2110 - ], - "errorMessage": "invalid number of bytes for arc4.static_array" - }, - { - "pc": [ - 447, - 931 - ], - "errorMessage": "invalid number of bytes for arc4.uint32" - }, - { - "pc": [ - 438, - 789, - 908, - 920, - 1210, - 1222, - 1509, - 1547, - 1606, - 1778, - 1874, - 2071, - 2101, - 2140 - ], - "errorMessage": "invalid number of bytes for arc4.uint64" - }, - { - "pc": [ - 1895 - ], - "errorMessage": "overflow" - }, - { - "pc": [ - 802, - 1629, - 1692 - ], - "errorMessage": "transaction type is axfer" - } - ], - "pcOffsetMethod": "none" - }, - "clear": { - "sourceInfo": [], - "pcOffsetMethod": "none" - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgOCAzMiAxODQ0Njc0NDA3MzcwOTU1MTYxNQogICAgYnl0ZWNibG9jayAic21hcnRfYXNhX2lkIiAicmVzZXJ2ZV9hZGRyIiAiY2xhd2JhY2tfYWRkciIgImFjY291bnRfc21hcnRfYXNhX2lkIiAiYWNjb3VudF9mcm96ZW4iICJmcmVlemVfYWRkciIgImdsb2JhbF9mcm96ZW4iICJtYW5hZ2VyX2FkZHIiICJ0b3RhbCIgImRlZmF1bHRfZnJvemVuIiAiZGVjaW1hbHMiICJ1bml0X25hbWUiICJuYW1lIiAidXJsIiAibWV0YWRhdGFfaGFzaCIgMHgxNTFmN2M3NSAweDAwCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQxLTQyCiAgICAvLyAjIFByZWNvbmRpdGlvbnMKICAgIC8vIGFzc2VydCBUeG4uZ2xvYmFsX251bV9ieXRlX3NsaWNlID09IGNmZy5HTE9CQUxfQllURVMsIGVyci5XUk9OR19HTE9CQUxfQllURVMKICAgIHR4biBHbG9iYWxOdW1CeXRlU2xpY2UKICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIFdyb25nIEdsb2JhbCBCeXRlcyBhbGxvY2F0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQzCiAgICAvLyBhc3NlcnQgVHhuLmdsb2JhbF9udW1fdWludCA9PSBjZmcuR0xPQkFMX1VJTlRTLCBlcnIuV1JPTkdfR0xPQkFMX1VJTlRTCiAgICB0eG4gR2xvYmFsTnVtVWludAogICAgcHVzaGludCA1IC8vIDUKICAgID09CiAgICBhc3NlcnQgLy8gV3JvbmcgR2xvYmFsIFVJbnRzIGFsbG9jYXRpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NDQKICAgIC8vIGFzc2VydCBUeG4ubG9jYWxfbnVtX2J5dGVfc2xpY2UgPT0gY2ZnLkxPQ0FMX0JZVEVTLCBlcnIuV1JPTkdfTE9DQUxfQllURVMKICAgIHR4biBMb2NhbE51bUJ5dGVTbGljZQogICAgIQogICAgYXNzZXJ0IC8vIFdyb25nIExvY2FsIEJ5dGVzIGFsbG9jYXRpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NDUKICAgIC8vIGFzc2VydCBUeG4ubG9jYWxfbnVtX3VpbnQgPT0gY2ZnLkxPQ0FMX1VJTlRTLCBlcnIuV1JPTkdfTE9DQUxfVUlOVFMKICAgIHR4biBMb2NhbE51bVVpbnQKICAgIHB1c2hpbnQgMiAvLyAyCiAgICA9PQogICAgYXNzZXJ0IC8vIFdyb25nIExvY2FsIFVJbnRzIGFsbG9jYXRpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NDctNDkKICAgIC8vICMgR0xPQkFMIFNUQVRFCiAgICAvLyAjIEFTQSBGaWVsZHMKICAgIC8vIHNlbGYudG90YWwgPSBVSW50NjQoKQogICAgYnl0ZWMgOCAvLyAidG90YWwiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTAKICAgIC8vIHNlbGYuZGVjaW1hbHMgPSBVSW50NjQoKQogICAgYnl0ZWMgMTAgLy8gImRlY2ltYWxzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjUxCiAgICAvLyBzZWxmLmRlZmF1bHRfZnJvemVuID0gRmFsc2UKICAgIGJ5dGVjIDkgLy8gImRlZmF1bHRfZnJvemVuIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjUyCiAgICAvLyBzZWxmLnVuaXRfbmFtZSA9IFN0cmluZygpCiAgICBieXRlYyAxMSAvLyAidW5pdF9uYW1lIgogICAgcHVzaGJ5dGVzICIiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1MwogICAgLy8gc2VsZi5uYW1lID0gU3RyaW5nKCkKICAgIGJ5dGVjIDEyIC8vICJuYW1lIgogICAgcHVzaGJ5dGVzICIiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1NAogICAgLy8gc2VsZi51cmwgPSBTdHJpbmcoKQogICAgYnl0ZWMgMTMgLy8gInVybCIKICAgIHB1c2hieXRlcyAiIgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTUKICAgIC8vIHNlbGYubWV0YWRhdGFfaGFzaCA9IEJ5dGVzKCkKICAgIGJ5dGVjIDE0IC8vICJtZXRhZGF0YV9oYXNoIgogICAgcHVzaGJ5dGVzIDB4CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1NgogICAgLy8gc2VsZi5tYW5hZ2VyX2FkZHIgPSBBY2NvdW50KCkKICAgIGJ5dGVjIDcgLy8gIm1hbmFnZXJfYWRkciIKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTcKICAgIC8vIHNlbGYucmVzZXJ2ZV9hZGRyID0gQWNjb3VudCgpCiAgICBieXRlY18xIC8vICJyZXNlcnZlX2FkZHIiCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjU4CiAgICAvLyBzZWxmLmZyZWV6ZV9hZGRyID0gQWNjb3VudCgpCiAgICBieXRlYyA1IC8vICJmcmVlemVfYWRkciIKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTkKICAgIC8vIHNlbGYuY2xhd2JhY2tfYWRkciA9IEFjY291bnQoKQogICAgYnl0ZWNfMiAvLyAiY2xhd2JhY2tfYWRkciIKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NjAtNjEKICAgIC8vICMgU21hcnQgQVNBIEZpZWxkcwogICAgLy8gc2VsZi5zbWFydF9hc2FfaWQgPSBVSW50NjQoKQogICAgYnl0ZWNfMCAvLyAic21hcnRfYXNhX2lkIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjYyCiAgICAvLyBzZWxmLmdsb2JhbF9mcm96ZW4gPSBGYWxzZQogICAgYnl0ZWMgNiAvLyAiZ2xvYmFsX2Zyb3plbiIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjI3LTM1CiAgICAvLyBjbGFzcyBTbWFydEFzYSgKICAgIC8vICAgICBBUkM0Q29udHJhY3QsCiAgICAvLyAgICAgc3RhdGVfdG90YWxzPVN0YXRlVG90YWxzKAogICAgLy8gICAgICAgICBnbG9iYWxfYnl0ZXM9Y2ZnLkdMT0JBTF9CWVRFUywKICAgIC8vICAgICAgICAgZ2xvYmFsX3VpbnRzPWNmZy5HTE9CQUxfVUlOVFMsCiAgICAvLyAgICAgICAgIGxvY2FsX2J5dGVzPWNmZy5MT0NBTF9CWVRFUywKICAgIC8vICAgICAgICAgbG9jYWxfdWludHM9Y2ZnLkxPQ0FMX1VJTlRTLAogICAgLy8gICAgICksCiAgICAvLyApOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMjIKICAgIHB1c2hieXRlc3MgMHg0ODY0MTY0NSAweDNhMDQ1YmRjIC8vIG1ldGhvZCAiYXNzZXRfb3B0X2luKHVpbnQ2NCxheGZlcil2b2lkIiwgbWV0aG9kICJhc3NldF9jbG9zZV9vdXQodWludDY0LGFkZHJlc3Mpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fYXNzZXRfb3B0X2luX3JvdXRlQDUgbWFpbl9hc3NldF9jbG9zZV9vdXRfcm91dGVANgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjI3LTM1CiAgICAvLyBjbGFzcyBTbWFydEFzYSgKICAgIC8vICAgICBBUkM0Q29udHJhY3QsCiAgICAvLyAgICAgc3RhdGVfdG90YWxzPVN0YXRlVG90YWxzKAogICAgLy8gICAgICAgICBnbG9iYWxfYnl0ZXM9Y2ZnLkdMT0JBTF9CWVRFUywKICAgIC8vICAgICAgICAgZ2xvYmFsX3VpbnRzPWNmZy5HTE9CQUxfVUlOVFMsCiAgICAvLyAgICAgICAgIGxvY2FsX2J5dGVzPWNmZy5MT0NBTF9CWVRFUywKICAgIC8vICAgICAgICAgbG9jYWxfdWludHM9Y2ZnLkxPQ0FMX1VJTlRTLAogICAgLy8gICAgICksCiAgICAvLyApOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQKICAgIHB1c2hieXRlc3MgMHhlN2VjZDVhOCAweGY4ODE5ZmViIDB4N2VhY2I3NzUgMHhhMTMzZDU4MSAweGZmNTNhZGVmIDB4ZWQ2NDQ1MmYgMHgyZTliOTAzOCAweDk3OWI5OTcyIDB4NDhhNjNjYzkgMHg0NmFkMGQ1MiAvLyBtZXRob2QgImFzc2V0X2NyZWF0ZSh1aW50NjQsdWludDMyLGJvb2wsc3RyaW5nLHN0cmluZyxzdHJpbmcsYnl0ZVtdLGFkZHJlc3MsYWRkcmVzcyxhZGRyZXNzLGFkZHJlc3MpdWludDY0IiwgbWV0aG9kICJhc3NldF9jb25maWcodWludDY0LHVpbnQ2NCx1aW50MzIsYm9vbCxzdHJpbmcsc3RyaW5nLHN0cmluZyxieXRlW10sYWRkcmVzcyxhZGRyZXNzLGFkZHJlc3MsYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJhc3NldF90cmFuc2Zlcih1aW50NjQsdWludDY0LGFkZHJlc3MsYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJhc3NldF9mcmVlemUodWludDY0LGJvb2wpdm9pZCIsIG1ldGhvZCAiYWNjb3VudF9mcmVlemUodWludDY0LGFkZHJlc3MsYm9vbCl2b2lkIiwgbWV0aG9kICJhc3NldF9kZXN0cm95KHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJnZXRfYXNzZXRfY29uZmlnKHVpbnQ2NCkodWludDY0LHVpbnQzMixib29sLHN0cmluZyxzdHJpbmcsc3RyaW5nLGJ5dGVbXSxhZGRyZXNzLGFkZHJlc3MsYWRkcmVzcyxhZGRyZXNzKSIsIG1ldGhvZCAiZ2V0X2Fzc2V0X2lzX2Zyb3plbih1aW50NjQpYm9vbCIsIG1ldGhvZCAiZ2V0X2FjY291bnRfaXNfZnJvemVuKHVpbnQ2NCxhZGRyZXNzKWJvb2wiLCBtZXRob2QgImdldF9jaXJjdWxhdGluZ19zdXBwbHkodWludDY0KXVpbnQ2NCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIGFzc2V0X2NyZWF0ZSBhc3NldF9jb25maWcgYXNzZXRfdHJhbnNmZXIgYXNzZXRfZnJlZXplIGFjY291bnRfZnJlZXplIGFzc2V0X2Rlc3Ryb3kgZ2V0X2Fzc2V0X2NvbmZpZyBnZXRfYXNzZXRfaXNfZnJvemVuIGdldF9hY2NvdW50X2lzX2Zyb3plbiBnZXRfY2lyY3VsYXRpbmdfc3VwcGx5CiAgICBlcnIKCm1haW5fYXNzZXRfY2xvc2Vfb3V0X3JvdXRlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQ2NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJDbG9zZU91dCJdKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCAyIC8vIENsb3NlT3V0CiAgICA9PQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgQ2xvc2VPdXQgJiYgY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYiBhc3NldF9jbG9zZV9vdXQKCm1haW5fYXNzZXRfb3B0X2luX3JvdXRlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjI4OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJPcHRJbiJdKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18xIC8vIE9wdEluCiAgICA9PQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgT3B0SW4gJiYgY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYiBhc3NldF9vcHRfaW4KCm1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMjI6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgJiYKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wICYmIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5zbWFydF9hc2EuY29udHJhY3QuU21hcnRBc2EuYXNzZXRfY3JlYXRlW3JvdXRpbmddKCkgLT4gdm9pZDoKYXNzZXRfY3JlYXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToyMzUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgNCAvLyA0CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQzMgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmJvb2wKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZHVwbiAyCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBkdXBuIDIKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDIgLy8gMgogICAgKwogICAgc3dhcAogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDcKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA5CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEwCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDExCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MjY5LTI3MAogICAgLy8gIyBQcmVjb25kaXRpb25zCiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBHbG9iYWwuY3JlYXRvcl9hZGRyZXNzLCBlcnIuVU5BVVRIT1JJWkVECiAgICB0eG4gU2VuZGVyCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gVW5hdXRob3JpemVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjI3MQogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLnNtYXJ0X2FzYV9pZCwgZXJyLkVYSVNUSU5HX0NUUkxfQVNBCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAic21hcnRfYXNhX2lkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnNtYXJ0X2FzYV9pZCBleGlzdHMKICAgICEKICAgIGFzc2VydCAvLyBDb250cm9sbGVkIEFTQSBhbHJlYWR5IGNyZWF0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTkyLTIwNQogICAgLy8gaXR4bi5Bc3NldENvbmZpZygKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICAgICB0b3RhbD1jZmcuVE9UQUwsCiAgICAvLyAgICAgZGVjaW1hbHM9Y2ZnLkRFQ0lNQUxTLAogICAgLy8gICAgIGRlZmF1bHRfZnJvemVuPWNmZy5ERUZBVUxUX0ZST1pFTiwKICAgIC8vICAgICB1bml0X25hbWU9Y2ZnLlVOSVRfTkFNRSwKICAgIC8vICAgICBhc3NldF9uYW1lPWNmZy5OQU1FLAogICAgLy8gICAgIHVybD1jZmcuQVBQX0JJTkRJTkcgKyBzZWxmLml0b2EoR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25faWQuaWQpLAogICAgLy8gICAgIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgZnJlZXplPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgY2xhd2JhY2s9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICkKICAgIC8vIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToxOTkKICAgIC8vIHVybD1jZmcuQVBQX0JJTkRJTkcgKyBzZWxmLml0b2EoR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25faWQuaWQpLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbklECiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjcyCiAgICAvLyBhY2MgPSBCeXRlcygpCiAgICBwdXNoYnl0ZXMgMHgKCmFzc2V0X2NyZWF0ZV93aGlsZV90b3BAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NzMKICAgIC8vIHdoaWxlIG4gPiAwOgogICAgZGlnIDEKICAgIGJ6IGFzc2V0X2NyZWF0ZV9hZnRlcl93aGlsZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5Ojc0CiAgICAvLyBhY2MgPSBkaWdpdHNbbiAlIDEwXSArIGFjYwogICAgZGlnIDEKICAgIGR1cAogICAgcHVzaGludCAxMCAvLyAxMAogICAgJQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo3MQogICAgLy8gZGlnaXRzID0gQnl0ZXMoYiIwMTIzNDU2Nzg5IikKICAgIHB1c2hieXRlcyAweDMwMzEzMjMzMzQzNTM2MzczODM5CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5Ojc0CiAgICAvLyBhY2MgPSBkaWdpdHNbbiAlIDEwXSArIGFjYwogICAgc3dhcAogICAgaW50Y18xIC8vIDEKICAgIGV4dHJhY3QzCiAgICBkaWcgMgogICAgY29uY2F0CiAgICBidXJ5IDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NzUKICAgIC8vIG4gLy89IDEwCiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICAvCiAgICBidXJ5IDIKICAgIGIgYXNzZXRfY3JlYXRlX3doaWxlX3RvcEAyCgphc3NldF9jcmVhdGVfYWZ0ZXJfd2hpbGVANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NzYKICAgIC8vIHJldHVybiBhY2Mgb3IgQnl0ZXMoYiIwIikKICAgIGR1cG4gMgogICAgbGVuCiAgICBwdXNoYnl0ZXMgMHgzMAogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjE5OQogICAgLy8gdXJsPWNmZy5BUFBfQklORElORyArIHNlbGYuaXRvYShHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9pZC5pZCksCiAgICBwdXNoYnl0ZXMgMHg2MTZjNjc2ZjcyNjE2ZTY0M2EyZjJmNjE3MDcwMmYKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToyMDAKICAgIC8vIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjIwMS0yMDMKICAgIC8vIHJlc2VydmU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vIGZyZWV6ZT1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gY2xhd2JhY2s9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGR1cG4gMwogICAgaXR4bl9maWVsZCBDb25maWdBc3NldENsYXdiYWNrCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RnJlZXplCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0UmVzZXJ2ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVUkwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTk4CiAgICAvLyBhc3NldF9uYW1lPWNmZy5OQU1FLAogICAgcHVzaGJ5dGVzICJBUkMtMjAgU21hcnQgQVNBIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTk3CiAgICAvLyB1bml0X25hbWU9Y2ZnLlVOSVRfTkFNRSwKICAgIHB1c2hieXRlcyAiQVJDLTIwIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFVuaXROYW1lCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjE5NgogICAgLy8gZGVmYXVsdF9mcm96ZW49Y2ZnLkRFRkFVTFRfRlJPWkVOLAogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWZhdWx0RnJvemVuCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjE5NQogICAgLy8gZGVjaW1hbHM9Y2ZnLkRFQ0lNQUxTLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToxOTQKICAgIC8vIHRvdGFsPWNmZy5UT1RBTCwKICAgIGludGMgNCAvLyAxODQ0Njc0NDA3MzcwOTU1MTYxNQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFRvdGFsCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjE5MgogICAgLy8gaXR4bi5Bc3NldENvbmZpZygKICAgIHB1c2hpbnQgMyAvLyBhY2ZnCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjE5MwogICAgLy8gZmVlPTAsCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTkyLTIwNQogICAgLy8gaXR4bi5Bc3NldENvbmZpZygKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICAgICB0b3RhbD1jZmcuVE9UQUwsCiAgICAvLyAgICAgZGVjaW1hbHM9Y2ZnLkRFQ0lNQUxTLAogICAgLy8gICAgIGRlZmF1bHRfZnJvemVuPWNmZy5ERUZBVUxUX0ZST1pFTiwKICAgIC8vICAgICB1bml0X25hbWU9Y2ZnLlVOSVRfTkFNRSwKICAgIC8vICAgICBhc3NldF9uYW1lPWNmZy5OQU1FLAogICAgLy8gICAgIHVybD1jZmcuQVBQX0JJTkRJTkcgKyBzZWxmLml0b2EoR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25faWQuaWQpLAogICAgLy8gICAgIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgZnJlZXplPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgY2xhd2JhY2s9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICkKICAgIC8vIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MjczLTI3NAogICAgLy8gIyBFZmZlY3RzCiAgICAvLyBzZWxmLnNtYXJ0X2FzYV9pZCA9IHNlbGYuaW5uZXJfYXNzZXRfY29uZmlnKCkKICAgIGJ5dGVjXzAgLy8gInNtYXJ0X2FzYV9pZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTkyLTIwNgogICAgLy8gaXR4bi5Bc3NldENvbmZpZygKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICAgICB0b3RhbD1jZmcuVE9UQUwsCiAgICAvLyAgICAgZGVjaW1hbHM9Y2ZnLkRFQ0lNQUxTLAogICAgLy8gICAgIGRlZmF1bHRfZnJvemVuPWNmZy5ERUZBVUxUX0ZST1pFTiwKICAgIC8vICAgICB1bml0X25hbWU9Y2ZnLlVOSVRfTkFNRSwKICAgIC8vICAgICBhc3NldF9uYW1lPWNmZy5OQU1FLAogICAgLy8gICAgIHVybD1jZmcuQVBQX0JJTkRJTkcgKyBzZWxmLml0b2EoR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25faWQuaWQpLAogICAgLy8gICAgIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgZnJlZXplPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgY2xhd2JhY2s9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICkKICAgIC8vIC5zdWJtaXQoKQogICAgLy8gLmNyZWF0ZWRfYXNzZXQuaWQKICAgIGl0eG4gQ3JlYXRlZEFzc2V0SUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MjczLTI3NAogICAgLy8gIyBFZmZlY3RzCiAgICAvLyBzZWxmLnNtYXJ0X2FzYV9pZCA9IHNlbGYuaW5uZXJfYXNzZXRfY29uZmlnKCkKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjI3NQogICAgLy8gc2VsZi50b3RhbCA9IHRvdGFsLm5hdGl2ZQogICAgZGlnIDEyCiAgICBidG9pCiAgICBieXRlYyA4IC8vICJ0b3RhbCIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjI3NgogICAgLy8gc2VsZi5kZWNpbWFscyA9IGRlY2ltYWxzLm5hdGl2ZQogICAgZGlnIDExCiAgICBidG9pCiAgICBieXRlYyAxMCAvLyAiZGVjaW1hbHMiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToyNzcKICAgIC8vIHNlbGYuZGVmYXVsdF9mcm96ZW4gPSBkZWZhdWx0X2Zyb3plbi5uYXRpdmUKICAgIGRpZyAxMAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgYnl0ZWMgOSAvLyAiZGVmYXVsdF9mcm96ZW4iCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToyNzgKICAgIC8vIHNlbGYudW5pdF9uYW1lID0gdW5pdF9uYW1lLm5hdGl2ZQogICAgZGlnIDkKICAgIGV4dHJhY3QgMiAwCiAgICBieXRlYyAxMSAvLyAidW5pdF9uYW1lIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6Mjc5CiAgICAvLyBzZWxmLm5hbWUgPSBuYW1lLm5hdGl2ZQogICAgZGlnIDgKICAgIGV4dHJhY3QgMiAwCiAgICBieXRlYyAxMiAvLyAibmFtZSIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjI4MAogICAgLy8gc2VsZi51cmwgPSB1cmwubmF0aXZlCiAgICBkaWcgNwogICAgZXh0cmFjdCAyIDAKICAgIGJ5dGVjIDEzIC8vICJ1cmwiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToyODEKICAgIC8vIHNlbGYubWV0YWRhdGFfaGFzaCA9IG1ldGFkYXRhX2hhc2gubmF0aXZlCiAgICBkaWcgNgogICAgZXh0cmFjdCAyIDAKICAgIGJ5dGVjIDE0IC8vICJtZXRhZGF0YV9oYXNoIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MjgyCiAgICAvLyBzZWxmLm1hbmFnZXJfYWRkciA9IG1hbmFnZXJfYWRkci5uYXRpdmUKICAgIGJ5dGVjIDcgLy8gIm1hbmFnZXJfYWRkciIKICAgIGRpZyA2CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToyODMKICAgIC8vIHNlbGYucmVzZXJ2ZV9hZGRyID0gcmVzZXJ2ZV9hZGRyLm5hdGl2ZQogICAgYnl0ZWNfMSAvLyAicmVzZXJ2ZV9hZGRyIgogICAgZGlnIDUKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjI4NAogICAgLy8gc2VsZi5mcmVlemVfYWRkciA9IGZyZWV6ZV9hZGRyLm5hdGl2ZQogICAgYnl0ZWMgNSAvLyAiZnJlZXplX2FkZHIiCiAgICBkaWcgNAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6Mjg1CiAgICAvLyBzZWxmLmNsYXdiYWNrX2FkZHIgPSBjbGF3YmFja19hZGRyLm5hdGl2ZQogICAgYnl0ZWNfMiAvLyAiY2xhd2JhY2tfYWRkciIKICAgIGRpZyAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToyODYKICAgIC8vIHJldHVybiBhcmM0LlVJbnQ2NChzZWxmLnNtYXJ0X2FzYV9pZCkKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJzbWFydF9hc2FfaWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc21hcnRfYXNhX2lkIGV4aXN0cwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToyMzUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgYnl0ZWMgMTUgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuc21hcnRfYXNhLmNvbnRyYWN0LlNtYXJ0QXNhLmFzc2V0X29wdF9pbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmFzc2V0X29wdF9pbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6Mjg4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoYWxsb3dfYWN0aW9ucz1bIk9wdEluIl0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICBkdXAKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgcHVzaGludCA0IC8vIGF4ZmVyCiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgYXhmZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6Mjk5LTMwMAogICAgLy8gIyBQcmVjb25kaXRpb25zCiAgICAvLyBzZWxmLmFzc2VydF9jb21tb25fcHJlY29uZGl0aW9ucyhhc3NldC5pZCkKICAgIGRpZyAxCiAgICBjYWxsc3ViIGFzc2VydF9jb21tb25fcHJlY29uZGl0aW9ucwogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozMDQKICAgIC8vIGFzc2VydCBjdHJsX2FzYV9vcHRfaW4ueGZlcl9hc3NldC5pZCA9PSBzZWxmLnNtYXJ0X2FzYV9pZCwgZXJyLk9QVF9JTl9XUk9OR19BU0EKICAgIGR1cAogICAgZ3R4bnMgWGZlckFzc2V0CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAic21hcnRfYXNhX2lkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnNtYXJ0X2FzYV9pZCBleGlzdHMKICAgIHN3YXAKICAgIGRpZyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIFdyb25nIEFTQSBPcHQgSW4gSUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MzA1CiAgICAvLyBhc3NlcnQgY3RybF9hc2Ffb3B0X2luLnNlbmRlciA9PSBUeG4uc2VuZGVyLCBlcnIuT1BUX0lOX1dST05HX1NFTkRFUgogICAgZGlnIDEKICAgIGd0eG5zIFNlbmRlcgogICAgdHhuIFNlbmRlcgogICAgPT0KICAgIGFzc2VydCAvLyBXcm9uZyBBU0EgT3B0IEluIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozMDYKICAgIC8vIGFzc2VydCBjdHJsX2FzYV9vcHRfaW4uYXNzZXRfcmVjZWl2ZXIgPT0gVHhuLnNlbmRlciwgZXJyLk9QVF9JTl9XUk9OR19SRUNFSVZFUgogICAgZGlnIDEKICAgIGd0eG5zIEFzc2V0UmVjZWl2ZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQgLy8gV3JvbmcgQVNBIE9wdCBJbiBSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozMDgKICAgIC8vIGN0cmxfYXNhX29wdF9pbi5hc3NldF9hbW91bnQgPT0gMAogICAgZGlnIDEKICAgIGd0eG5zIEFzc2V0QW1vdW50CiAgICAhCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjMwNy0zMDkKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgY3RybF9hc2Ffb3B0X2luLmFzc2V0X2Ftb3VudCA9PSAwCiAgICAvLyApLCBlcnIuT1BUX0lOX1dST05HX0FNT1VOVCAgIyBQZWRhbnQ6IENvbnRyb2xsZWQgQVNBIGlzIGRlZmF1bHQgZnJvemVuCiAgICBhc3NlcnQgLy8gV3JvbmcgQVNBIE9wdCBJbiBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MzExCiAgICAvLyBjdHJsX2FzYV9vcHRfaW4uYXNzZXRfY2xvc2VfdG8gPT0gR2xvYmFsLnplcm9fYWRkcmVzcwogICAgc3dhcAogICAgZ3R4bnMgQXNzZXRDbG9zZVRvCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjMxMC0zMTIKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgY3RybF9hc2Ffb3B0X2luLmFzc2V0X2Nsb3NlX3RvID09IEdsb2JhbC56ZXJvX2FkZHJlc3MKICAgIC8vICksIGVyci5PUFRfSU5fV1JPTkdfQ0xPU0VfVE8KICAgIGFzc2VydCAvLyBGb3JiaWRkZW4gQ2xvc2UgT3V0IG9uIE9wdCBJbgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozMTMKICAgIC8vIGFzc2VydCBUeG4ub25fY29tcGxldGlvbiA9PSBPbkNvbXBsZXRlQWN0aW9uLk9wdEluLCBlcnIuV1JPTkdfT05fQ09NUExFVEUKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMSAvLyBPcHRJbgogICAgPT0KICAgIGFzc2VydCAvLyBXcm9uZyBPbiBDb21wbGV0ZSBBY3Rpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MzE0CiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlci5pc19vcHRlZF9pbigKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MzE0LTMxNgogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIuaXNfb3B0ZWRfaW4oCiAgICAvLyAgICAgYXNzZXQKICAgIC8vICksIGVyci5NSVNTSU5HX0NUUkxfQVNBICAjIFBlZGFudDogY3RybF9hc2Ffb3B0X2luIGlzIGNoZWNrZWQgcHJvcGVybHkKICAgIHVuY292ZXIgMgogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBNaXNzaW5nIENvbnRyb2xsZWQgQVNBCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjMxOC0zMTkKICAgIC8vICMgTG9jYWwgU3RhdGUgSW5pdAogICAgLy8gc2VsZi5hY2NvdW50X3NtYXJ0X2FzYV9pZFtUeG4uc2VuZGVyXSA9IHNlbGYuc21hcnRfYXNhX2lkCiAgICB0eG4gU2VuZGVyCiAgICBieXRlY18zIC8vICJhY2NvdW50X3NtYXJ0X2FzYV9pZCIKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozMjAKICAgIC8vIHNlbGYuYWNjb3VudF9mcm96ZW5bVHhuLnNlbmRlcl0gPSBGYWxzZQogICAgdHhuIFNlbmRlcgogICAgYnl0ZWMgNCAvLyAiYWNjb3VudF9mcm96ZW4iCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozMjQKICAgIC8vIHNlbGYuZGVmYXVsdF9mcm96ZW4gb3IgYXNzZXQuYmFsYW5jZShUeG4uc2VuZGVyKSA+IDAKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA5IC8vICJkZWZhdWx0X2Zyb3plbiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kZWZhdWx0X2Zyb3plbiBleGlzdHMKICAgIGJueiBhc3NldF9vcHRfaW5faWZfYm9keUAzCiAgICB0eG4gU2VuZGVyCiAgICBkaWcgMQogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBhc3NlcnQgLy8gYWNjb3VudCBvcHRlZCBpbnRvIGFzc2V0CiAgICBieiBhc3NldF9vcHRfaW5fYWZ0ZXJfaWZfZWxzZUA0Cgphc3NldF9vcHRfaW5faWZfYm9keUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozMjYKICAgIC8vIHNlbGYuYWNjb3VudF9mcm96ZW5bVHhuLnNlbmRlcl0gPSBUcnVlCiAgICB0eG4gU2VuZGVyCiAgICBieXRlYyA0IC8vICJhY2NvdW50X2Zyb3plbiIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfbG9jYWxfcHV0Cgphc3NldF9vcHRfaW5fYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToyODgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChhbGxvd19hY3Rpb25zPVsiT3B0SW4iXSkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuc21hcnRfYXNhLmNvbnRyYWN0LlNtYXJ0QXNhLmFzc2V0X2NvbmZpZ1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmFzc2V0X2NvbmZpZzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MzI4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBjb3ZlciAyCiAgICBsZW4KICAgIHB1c2hpbnQgNCAvLyA0CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQzMgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmJvb2wKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDUKICAgIGR1cAogICAgY292ZXIgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNwogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDIgLy8gMgogICAgKwogICAgc3dhcAogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDgKICAgIGR1cAogICAgY292ZXIgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA5CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTEKICAgIGR1cAogICAgY292ZXIgMwogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTIKICAgIGR1cAogICAgY292ZXIgMwogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozNjEtMzYyCiAgICAvLyAjIFByZWNvbmRpdGlvbnMKICAgIC8vIHNlbGYuYXNzZXJ0X2NvbW1vbl9wcmVjb25kaXRpb25zKGNvbmZpZ19hc3NldC5pZCkKICAgIHN3YXAKICAgIGNhbGxzdWIgYXNzZXJ0X2NvbW1vbl9wcmVjb25kaXRpb25zCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjM2MwogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIgPT0gc2VsZi5tYW5hZ2VyX2FkZHIsIGVyci5VTkFVVEhPUklaRURfTUFOQUdFUgogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDcgLy8gIm1hbmFnZXJfYWRkciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5tYW5hZ2VyX2FkZHIgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIFVuYXV0aG9yaXplZCBNYW5hZ2VyCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjM2NAogICAgLy8gaWYgcmVzZXJ2ZV9hZGRyICE9IHNlbGYucmVzZXJ2ZV9hZGRyOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gInJlc2VydmVfYWRkciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5yZXNlcnZlX2FkZHIgZXhpc3RzCiAgICAhPQogICAgYnogYXNzZXRfY29uZmlnX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozNjUKICAgIC8vIGFzc2VydCBzZWxmLnJlc2VydmVfYWRkciAhPSBHbG9iYWwuemVyb19hZGRyZXNzLCBlcnIuRElTQUJMRURfUkVTRVJWRQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gInJlc2VydmVfYWRkciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5yZXNlcnZlX2FkZHIgZXhpc3RzCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgICE9CiAgICBhc3NlcnQgLy8gUmVzZXJ2ZSBBZGRyZXNzIGhhcyBiZWVuIGRlbGV0ZWQKCmFzc2V0X2NvbmZpZ19hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjM2NgogICAgLy8gaWYgZnJlZXplX2FkZHIgIT0gc2VsZi5mcmVlemVfYWRkcjoKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJmcmVlemVfYWRkciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5mcmVlemVfYWRkciBleGlzdHMKICAgIGRpZyAyCiAgICAhPQogICAgYnogYXNzZXRfY29uZmlnX2FmdGVyX2lmX2Vsc2VANQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozNjcKICAgIC8vIGFzc2VydCBzZWxmLmZyZWV6ZV9hZGRyICE9IEdsb2JhbC56ZXJvX2FkZHJlc3MsIGVyci5ESVNBQkxFRF9GUkVFWkUKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJmcmVlemVfYWRkciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5mcmVlemVfYWRkciBleGlzdHMKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgIT0KICAgIGFzc2VydCAvLyBGcmVlemUgQWRkcmVzcyBoYXMgYmVlbiBkZWxldGVkCgphc3NldF9jb25maWdfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozNjgKICAgIC8vIGlmIGNsYXdiYWNrX2FkZHIgIT0gc2VsZi5jbGF3YmFja19hZGRyOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImNsYXdiYWNrX2FkZHIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY2xhd2JhY2tfYWRkciBleGlzdHMKICAgIGRpZyAxCiAgICAhPQogICAgYnogYXNzZXRfY29uZmlnX2FmdGVyX2lmX2Vsc2VANwogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozNjkKICAgIC8vIGFzc2VydCBzZWxmLmNsYXdiYWNrX2FkZHIgIT0gR2xvYmFsLnplcm9fYWRkcmVzcywgZXJyLkRJU0FCTEVEX0NMQVdCQUNLCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiY2xhd2JhY2tfYWRkciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5jbGF3YmFja19hZGRyIGV4aXN0cwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICAhPQogICAgYXNzZXJ0IC8vIENsYXdiYWNrIEFkZHJlc3MgaGFzIGJlZW4gZGVsZXRlZAoKYXNzZXRfY29uZmlnX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MzcwCiAgICAvLyBhc3NlcnQgdG90YWwgPj0gc2VsZi5jaXJjdWxhdGluZ19zdXBwbHkoY29uZmlnX2Fzc2V0KSwgZXJyLklOVkFMSURfVE9UQUwKICAgIGRpZyAxMQogICAgY2FsbHN1YiBjaXJjdWxhdGluZ19zdXBwbHkKICAgIGl0b2IKICAgIGRpZyAxMQogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGI+PQogICAgYXNzZXJ0IC8vIEludmFsaWQgVG90YWwsIG11c3QgYmUgPj0gY2lyY3VsYXRpbmcgc3VwcGx5CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjM3Mi0zNzMKICAgIC8vICMgRWZmZWN0cwogICAgLy8gc2VsZi50b3RhbCA9IHRvdGFsLm5hdGl2ZQogICAgYnRvaQogICAgYnl0ZWMgOCAvLyAidG90YWwiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozNzQKICAgIC8vIHNlbGYuZGVjaW1hbHMgPSBkZWNpbWFscy5uYXRpdmUKICAgIGRpZyA5CiAgICBidG9pCiAgICBieXRlYyAxMCAvLyAiZGVjaW1hbHMiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozNzUKICAgIC8vIHNlbGYuZGVmYXVsdF9mcm96ZW4gPSBkZWZhdWx0X2Zyb3plbi5uYXRpdmUKICAgIGRpZyA4CiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBieXRlYyA5IC8vICJkZWZhdWx0X2Zyb3plbiIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjM3NgogICAgLy8gc2VsZi51bml0X25hbWUgPSB1bml0X25hbWUubmF0aXZlCiAgICBkaWcgNwogICAgZXh0cmFjdCAyIDAKICAgIGJ5dGVjIDExIC8vICJ1bml0X25hbWUiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozNzcKICAgIC8vIHNlbGYubmFtZSA9IG5hbWUubmF0aXZlCiAgICBkaWcgNgogICAgZXh0cmFjdCAyIDAKICAgIGJ5dGVjIDEyIC8vICJuYW1lIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6Mzc4CiAgICAvLyBzZWxmLnVybCA9IHVybC5uYXRpdmUKICAgIGRpZyA1CiAgICBleHRyYWN0IDIgMAogICAgYnl0ZWMgMTMgLy8gInVybCIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjM3OQogICAgLy8gc2VsZi5tZXRhZGF0YV9oYXNoID0gbWV0YWRhdGFfaGFzaC5uYXRpdmUKICAgIGRpZyA0CiAgICBleHRyYWN0IDIgMAogICAgYnl0ZWMgMTQgLy8gIm1ldGFkYXRhX2hhc2giCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozODAKICAgIC8vIHNlbGYubWFuYWdlcl9hZGRyID0gbWFuYWdlcl9hZGRyLm5hdGl2ZQogICAgYnl0ZWMgNyAvLyAibWFuYWdlcl9hZGRyIgogICAgZGlnIDQKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjM4MQogICAgLy8gc2VsZi5yZXNlcnZlX2FkZHIgPSByZXNlcnZlX2FkZHIubmF0aXZlCiAgICBieXRlY18xIC8vICJyZXNlcnZlX2FkZHIiCiAgICBkaWcgMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MzgyCiAgICAvLyBzZWxmLmZyZWV6ZV9hZGRyID0gZnJlZXplX2FkZHIubmF0aXZlCiAgICBieXRlYyA1IC8vICJmcmVlemVfYWRkciIKICAgIGRpZyAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozODMKICAgIC8vIHNlbGYuY2xhd2JhY2tfYWRkciA9IGNsYXdiYWNrX2FkZHIubmF0aXZlCiAgICBieXRlY18yIC8vICJjbGF3YmFja19hZGRyIgogICAgZGlnIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjMyOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnNtYXJ0X2FzYS5jb250cmFjdC5TbWFydEFzYS5hc3NldF90cmFuc2Zlcltyb3V0aW5nXSgpIC0+IHZvaWQ6CmFzc2V0X3RyYW5zZmVyOgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozODUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBjb3ZlciAzCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQwMi00MDMKICAgIC8vICMgUHJlY29uZGl0aW9ucwogICAgLy8gc2VsZi5hc3NlcnRfY29tbW9uX3ByZWNvbmRpdGlvbnMoeGZlcl9hc3NldC5pZCkKICAgIHN3YXAKICAgIGNhbGxzdWIgYXNzZXJ0X2NvbW1vbl9wcmVjb25kaXRpb25zCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQwNAogICAgLy8gaWYgYXNzZXRfc2VuZGVyID09IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3M6CiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGJ6IGFzc2V0X3RyYW5zZmVyX2Vsc2VfYm9keUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQwNgogICAgLy8gYXNzZXRfcmVjZWl2ZXI9YXNzZXRfcmVjZWl2ZXIsIGFzc2V0X2Ftb3VudD1hc3NldF9hbW91bnQubmF0aXZlCiAgICBkaWcgMgogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo5MS05MgogICAgLy8gIyBNaW50IHBlcm1pc3Npb24gcmVzdHJpY3RlZCB0byBSZXNlcnZlLgogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIgPT0gc2VsZi5yZXNlcnZlX2FkZHIsIGVyci5VTkFVVEhPUklaRURfUkVTRVJWRQogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gInJlc2VydmVfYWRkciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5yZXNlcnZlX2FkZHIgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIFVuYXV0aG9yaXplZCBSZXNlcnZlCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjkzLTk0CiAgICAvLyAjIEZvcmJpZGRlbiBzZWxmLW1pbnQgKHRvIENyZWF0b3IpIGFuZCBvdmVyLW1pbnQgKD4gdG90YWwpLgogICAgLy8gYXNzZXJ0IGFzc2V0X3JlY2VpdmVyICE9IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsIGVyci5TRUxGX01JTlQKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBkaWcgMgogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgICE9CiAgICBhc3NlcnQgLy8gRm9yYmlkZGVuIHNlbGYgbWludGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo5NgogICAgLy8gYXNzZXRfYW1vdW50ICsgc2VsZi5jaXJjdWxhdGluZ19zdXBwbHkoQXNzZXQoc2VsZi5zbWFydF9hc2FfaWQpKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInNtYXJ0X2FzYV9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zbWFydF9hc2FfaWQgZXhpc3RzCiAgICBjYWxsc3ViIGNpcmN1bGF0aW5nX3N1cHBseQogICAgdW5jb3ZlciAyCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5Ojk3CiAgICAvLyA8PSBzZWxmLnRvdGFsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOCAvLyAidG90YWwiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWwgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5Ojk2LTk3CiAgICAvLyBhc3NldF9hbW91bnQgKyBzZWxmLmNpcmN1bGF0aW5nX3N1cHBseShBc3NldChzZWxmLnNtYXJ0X2FzYV9pZCkpCiAgICAvLyA8PSBzZWxmLnRvdGFsCiAgICA8PQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo5NS05OAogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBhc3NldF9hbW91bnQgKyBzZWxmLmNpcmN1bGF0aW5nX3N1cHBseShBc3NldChzZWxmLnNtYXJ0X2FzYV9pZCkpCiAgICAvLyAgICAgPD0gc2VsZi50b3RhbAogICAgLy8gKSwgZXJyLk9WRVJfTUlOVAogICAgYXNzZXJ0IC8vIEZvcmJpZGRlbiBvdmVyIG1pbnRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTAxCiAgICAvLyBzZWxmLmFjY291bnRfc21hcnRfYXNhX2lkW2Fzc2V0X3JlY2VpdmVyXSA9PSBzZWxmLnNtYXJ0X2FzYV9pZAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImFjY291bnRfc21hcnRfYXNhX2lkIgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWNjb3VudF9zbWFydF9hc2FfaWQgZXhpc3RzIGZvciBhY2NvdW50CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAic21hcnRfYXNhX2lkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnNtYXJ0X2FzYV9pZCBleGlzdHMKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5Ojk5LTEwMgogICAgLy8gIyBJbiB0aGUgY2FzZSBvZiBDb250cm9sbGVkIEFTQSBkZXN0cm95ZWQgYW5kIHJlLWNyZWF0ZWQsIHRoZSBTbWFydCBBREEgSUQgaW4gTG9jYWwgU3RhdGUgY291bGQgYmUgb3V0ZGF0ZWQuCiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHNlbGYuYWNjb3VudF9zbWFydF9hc2FfaWRbYXNzZXRfcmVjZWl2ZXJdID09IHNlbGYuc21hcnRfYXNhX2lkCiAgICAvLyApLCBlcnIuSU5WQUxJRF9DVFJMX0FTQQogICAgYXNzZXJ0IC8vIEludmFsaWQgQ29udHJvbGxlZCBBU0EgSUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTAzCiAgICAvLyBhc3NlcnQgbm90IHNlbGYuZ2xvYmFsX2Zyb3plbiwgZXJyLkdMT0JBTF9GUk9aRU4KICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJnbG9iYWxfZnJvemVuIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmdsb2JhbF9mcm96ZW4gZXhpc3RzCiAgICAhCiAgICBhc3NlcnQgLy8gU21hcnQgQVNBIGlzIGdsb2JhbCBmcm96ZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTA0CiAgICAvLyBpZiBzZWxmLnJlc2VydmVfYWRkciAhPSBzZWxmLmNsYXdiYWNrX2FkZHI6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAicmVzZXJ2ZV9hZGRyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJlc2VydmVfYWRkciBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJjbGF3YmFja19hZGRyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNsYXdiYWNrX2FkZHIgZXhpc3RzCiAgICAhPQogICAgYnogYXNzZXRfdHJhbnNmZXJfYWZ0ZXJfaWZfZWxzZUAxMAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToxMDUKICAgIC8vIGFzc2VydCBub3Qgc2VsZi5hY2NvdW50X2Zyb3plblthc3NldF9yZWNlaXZlcl0sIGVyci5SRUNFSVZFUl9GUk9aRU4KICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gImFjY291bnRfZnJvemVuIgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWNjb3VudF9mcm96ZW4gZXhpc3RzIGZvciBhY2NvdW50CiAgICAhCiAgICBhc3NlcnQgLy8gUmVjZWl2ZXIgYWNjb3VudCBpcyBmcm96ZW4KCmFzc2V0X3RyYW5zZmVyX2FmdGVyX2lmX2Vsc2VAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQyMgogICAgLy8gYXNzZXRfYW1vdW50PWFzc2V0X2Ftb3VudC5uYXRpdmUsCiAgICBkaWcgMgogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo0MTktNDI1CiAgICAvLyAjIEVmZmVjdHMKICAgIC8vIHNlbGYuaW5uZXJfYXNzZXRfdHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD14ZmVyX2Fzc2V0LAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1hc3NldF9hbW91bnQubmF0aXZlLAogICAgLy8gICAgIGFzc2V0X3NlbmRlcj1hc3NldF9zZW5kZXIsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9YXNzZXRfcmVjZWl2ZXIsCiAgICAvLyApCiAgICBkaWcgNAogICAgc3dhcAogICAgZGlnIDMKICAgIGRpZyAzCiAgICBjYWxsc3ViIGlubmVyX2Fzc2V0X3RyYW5zZmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjM4NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgphc3NldF90cmFuc2Zlcl9lbHNlX2JvZHlAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NDA4CiAgICAvLyBlbGlmIGFzc2V0X3JlY2VpdmVyID09IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3M6CiAgICBkdXAKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYnogYXNzZXRfdHJhbnNmZXJfZWxzZV9ib2R5QDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTA5LTExMAogICAgLy8gIyBCdXJuIHBlcm1pc3Npb24gcmVzdHJpY3RlZCB0byBSZXNlcnZlLgogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIgPT0gc2VsZi5yZXNlcnZlX2FkZHIsIGVyci5VTkFVVEhPUklaRURfUkVTRVJWRQogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gInJlc2VydmVfYWRkciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5yZXNlcnZlX2FkZHIgZXhpc3RzCiAgICBzd2FwCiAgICBkaWcgMQogICAgPT0KICAgIGFzc2VydCAvLyBVbmF1dGhvcml6ZWQgUmVzZXJ2ZQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToxMTMKICAgIC8vIHNlbGYuYWNjb3VudF9zbWFydF9hc2FfaWRbYXNzZXRfc2VuZGVyXSA9PSBzZWxmLnNtYXJ0X2FzYV9pZAogICAgZGlnIDIKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJhY2NvdW50X3NtYXJ0X2FzYV9pZCIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnRfc21hcnRfYXNhX2lkIGV4aXN0cyBmb3IgYWNjb3VudAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInNtYXJ0X2FzYV9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zbWFydF9hc2FfaWQgZXhpc3RzCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToxMTEtMTE0CiAgICAvLyAjIEluIGNhc2Ugb2YgQ29udHJvbGxlZCBBU0EgZGVzdHJveWVkIGFuZCByZS1jcmVhdGVkIHRoZSBTbWFydCBBREEgSUQgaW4gTG9jYWwgU3RhdGUgY291bGQgYmUgb3V0ZGF0ZWQuCiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHNlbGYuYWNjb3VudF9zbWFydF9hc2FfaWRbYXNzZXRfc2VuZGVyXSA9PSBzZWxmLnNtYXJ0X2FzYV9pZAogICAgLy8gKSwgZXJyLklOVkFMSURfQ1RSTF9BU0EKICAgIGFzc2VydCAvLyBJbnZhbGlkIENvbnRyb2xsZWQgQVNBIElECiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjExNQogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLmdsb2JhbF9mcm96ZW4sIGVyci5HTE9CQUxfRlJPWkVOCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAiZ2xvYmFsX2Zyb3plbiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5nbG9iYWxfZnJvemVuIGV4aXN0cwogICAgIQogICAgYXNzZXJ0IC8vIFNtYXJ0IEFTQSBpcyBnbG9iYWwgZnJvemVuCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjExNgogICAgLy8gaWYgc2VsZi5yZXNlcnZlX2FkZHIgIT0gc2VsZi5jbGF3YmFja19hZGRyOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImNsYXdiYWNrX2FkZHIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY2xhd2JhY2tfYWRkciBleGlzdHMKICAgICE9CiAgICBieiBhc3NldF90cmFuc2Zlcl9hZnRlcl9pZl9lbHNlQDEwCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjExNwogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLmFjY291bnRfZnJvemVuW2Fzc2V0X3NlbmRlcl0sIGVyci5TRU5ERVJfRlJPWkVOCiAgICBkaWcgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAiYWNjb3VudF9mcm96ZW4iCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50X2Zyb3plbiBleGlzdHMgZm9yIGFjY291bnQKICAgICEKICAgIGFzc2VydCAvLyBTZW5kZXIgYWNjb3VudCBpcyBmcm96ZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTE4LTExOQogICAgLy8gIyBGb3JiaWRkZW4gY2xhd2JhY2sgdGhyb3VnaCBidXJuaW5nIChidXJuZWQgYW1vdW50IG5vdCBmcm9tIFJlc2VydmUpLgogICAgLy8gYXNzZXJ0IGFzc2V0X3NlbmRlciA9PSBzZWxmLnJlc2VydmVfYWRkciwgZXJyLkNMQVdCQUNLX0JVUk4KICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJyZXNlcnZlX2FkZHIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucmVzZXJ2ZV9hZGRyIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBGb3JiaWRkZW4gY2xhd2JhY2sgYnVybmluZwogICAgYiBhc3NldF90cmFuc2Zlcl9hZnRlcl9pZl9lbHNlQDEwCgphc3NldF90cmFuc2Zlcl9lbHNlX2JvZHlANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NDEwCiAgICAvLyBlbGlmIFR4bi5zZW5kZXIgPT0gc2VsZi5jbGF3YmFja19hZGRyOgogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImNsYXdiYWNrX2FkZHIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY2xhd2JhY2tfYWRkciBleGlzdHMKICAgID09CiAgICBieiBhc3NldF90cmFuc2Zlcl9lbHNlX2JvZHlANwogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToxMjcKICAgIC8vIHNlbGYuYWNjb3VudF9zbWFydF9hc2FfaWRbYXNzZXRfc2VuZGVyXSA9PSBzZWxmLnNtYXJ0X2FzYV9pZAogICAgZGlnIDEKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJhY2NvdW50X3NtYXJ0X2FzYV9pZCIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnRfc21hcnRfYXNhX2lkIGV4aXN0cyBmb3IgYWNjb3VudAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInNtYXJ0X2FzYV9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zbWFydF9hc2FfaWQgZXhpc3RzCiAgICBzd2FwCiAgICBkaWcgMQogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTI1LTEyOAogICAgLy8gIyBJbiB0aGUgY2FzZSBvZiBDb250cm9sbGVkIEFTQSBkZXN0cm95ZWQgYW5kIHJlLWNyZWF0ZWQsIHRoZSBTbWFydCBBREEgSUQgaW4gTG9jYWwgU3RhdGUgY291bGQgYmUgb3V0ZGF0ZWQuCiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHNlbGYuYWNjb3VudF9zbWFydF9hc2FfaWRbYXNzZXRfc2VuZGVyXSA9PSBzZWxmLnNtYXJ0X2FzYV9pZAogICAgLy8gKSwgZXJyLklOVkFMSURfQ1RSTF9BU0EKICAgIGFzc2VydCAvLyBJbnZhbGlkIENvbnRyb2xsZWQgQVNBIElECiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjEzMAogICAgLy8gc2VsZi5hY2NvdW50X3NtYXJ0X2FzYV9pZFthc3NldF9yZWNlaXZlcl0gPT0gc2VsZi5zbWFydF9hc2FfaWQKICAgIGRpZyAxCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAiYWNjb3VudF9zbWFydF9hc2FfaWQiCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50X3NtYXJ0X2FzYV9pZCBleGlzdHMgZm9yIGFjY291bnQKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjEyOS0xMzEKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgc2VsZi5hY2NvdW50X3NtYXJ0X2FzYV9pZFthc3NldF9yZWNlaXZlcl0gPT0gc2VsZi5zbWFydF9hc2FfaWQKICAgIC8vICksIGVyci5JTlZBTElEX0NUUkxfQVNBCiAgICBhc3NlcnQgLy8gSW52YWxpZCBDb250cm9sbGVkIEFTQSBJRAogICAgYiBhc3NldF90cmFuc2Zlcl9hZnRlcl9pZl9lbHNlQDEwCgphc3NldF90cmFuc2Zlcl9lbHNlX2JvZHlANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTM3CiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBhc3NldF9zZW5kZXIsIGVyci5VTkFVVEhPUklaRURfQ0xBV0JBQ0sKICAgIHR4biBTZW5kZXIKICAgIGRpZyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gVW5hdXRob3JpemVkIENsYXdiYWNrCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjE0MAogICAgLy8gc2VsZi5hY2NvdW50X3NtYXJ0X2FzYV9pZFthc3NldF9zZW5kZXJdID09IHNlbGYuc21hcnRfYXNhX2lkCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJhY2NvdW50X3NtYXJ0X2FzYV9pZCIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnRfc21hcnRfYXNhX2lkIGV4aXN0cyBmb3IgYWNjb3VudAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInNtYXJ0X2FzYV9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zbWFydF9hc2FfaWQgZXhpc3RzCiAgICBzd2FwCiAgICBkaWcgMQogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTM4LTE0MQogICAgLy8gIyBJbiB0aGUgY2FzZSBvZiBDb250cm9sbGVkIEFTQSBkZXN0cm95ZWQgYW5kIHJlLWNyZWF0ZWQsIHRoZSBTbWFydCBBREEgSUQgaW4gTG9jYWwgU3RhdGUgY291bGQgYmUgb3V0ZGF0ZWQuCiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHNlbGYuYWNjb3VudF9zbWFydF9hc2FfaWRbYXNzZXRfc2VuZGVyXSA9PSBzZWxmLnNtYXJ0X2FzYV9pZAogICAgLy8gKSwgZXJyLklOVkFMSURfQ1RSTF9BU0EKICAgIGFzc2VydCAvLyBJbnZhbGlkIENvbnRyb2xsZWQgQVNBIElECiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjE0MwogICAgLy8gc2VsZi5hY2NvdW50X3NtYXJ0X2FzYV9pZFthc3NldF9yZWNlaXZlcl0gPT0gc2VsZi5zbWFydF9hc2FfaWQKICAgIGRpZyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJhY2NvdW50X3NtYXJ0X2FzYV9pZCIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnRfc21hcnRfYXNhX2lkIGV4aXN0cyBmb3IgYWNjb3VudAogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTQyLTE0NAogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBzZWxmLmFjY291bnRfc21hcnRfYXNhX2lkW2Fzc2V0X3JlY2VpdmVyXSA9PSBzZWxmLnNtYXJ0X2FzYV9pZAogICAgLy8gKSwgZXJyLklOVkFMSURfQ1RSTF9BU0EKICAgIGFzc2VydCAvLyBJbnZhbGlkIENvbnRyb2xsZWQgQVNBIElECiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjE0NQogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLmdsb2JhbF9mcm96ZW4sIGVyci5HTE9CQUxfRlJPWkVOCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAiZ2xvYmFsX2Zyb3plbiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5nbG9iYWxfZnJvemVuIGV4aXN0cwogICAgIQogICAgYXNzZXJ0IC8vIFNtYXJ0IEFTQSBpcyBnbG9iYWwgZnJvemVuCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjE0NgogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLmFjY291bnRfZnJvemVuW2Fzc2V0X3NlbmRlcl0sIGVyci5TRU5ERVJfRlJPWkVOCiAgICBzd2FwCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAiYWNjb3VudF9mcm96ZW4iCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50X2Zyb3plbiBleGlzdHMgZm9yIGFjY291bnQKICAgICEKICAgIGFzc2VydCAvLyBTZW5kZXIgYWNjb3VudCBpcyBmcm96ZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTQ3CiAgICAvLyBhc3NlcnQgbm90IHNlbGYuYWNjb3VudF9mcm96ZW5bYXNzZXRfcmVjZWl2ZXJdLCBlcnIuUkVDRUlWRVJfRlJPWkVOCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAiYWNjb3VudF9mcm96ZW4iCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50X2Zyb3plbiBleGlzdHMgZm9yIGFjY291bnQKICAgICEKICAgIGFzc2VydCAvLyBSZWNlaXZlciBhY2NvdW50IGlzIGZyb3plbgogICAgYiBhc3NldF90cmFuc2Zlcl9hZnRlcl9pZl9lbHNlQDEwCgoKLy8gc21hcnRfY29udHJhY3RzLnNtYXJ0X2FzYS5jb250cmFjdC5TbWFydEFzYS5hc3NldF9mcmVlemVbcm91dGluZ10oKSAtPiB2b2lkOgphc3NldF9mcmVlemU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQyNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuYm9vbAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo0MzYtNDM3CiAgICAvLyAjIFByZWNvbmRpdGlvbnMKICAgIC8vIHNlbGYuYXNzZXJ0X2NvbW1vbl9wcmVjb25kaXRpb25zKGZyZWV6ZV9hc3NldC5pZCkKICAgIHN3YXAKICAgIGNhbGxzdWIgYXNzZXJ0X2NvbW1vbl9wcmVjb25kaXRpb25zCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQzOAogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIgPT0gc2VsZi5mcmVlemVfYWRkciwgZXJyLlVOQVVUSE9SSVpFRF9GUkVFWkUKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJmcmVlemVfYWRkciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5mcmVlemVfYWRkciBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gVW5hdXRob3JpemVkIEZyZWV6ZQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo0NDAtNDQxCiAgICAvLyAjIEVmZmVjdHMKICAgIC8vIHNlbGYuZ2xvYmFsX2Zyb3plbiA9IGFzc2V0X2Zyb3plbi5uYXRpdmUKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIGJ5dGVjIDYgLy8gImdsb2JhbF9mcm96ZW4iCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo0MjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5zbWFydF9hc2EuY29udHJhY3QuU21hcnRBc2EuYWNjb3VudF9mcmVlemVbcm91dGluZ10oKSAtPiB2b2lkOgphY2NvdW50X2ZyZWV6ZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NDQzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmJvb2wKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NDU1LTQ1NgogICAgLy8gIyBQcmVjb25kaXRpb25zCiAgICAvLyBzZWxmLmFzc2VydF9jb21tb25fcHJlY29uZGl0aW9ucyhmcmVlemVfYXNzZXQuaWQpCiAgICB1bmNvdmVyIDIKICAgIGNhbGxzdWIgYXNzZXJ0X2NvbW1vbl9wcmVjb25kaXRpb25zCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQ1OAogICAgLy8gc2VsZi5hY2NvdW50X3NtYXJ0X2FzYV9pZFtmcmVlemVfYWNjb3VudF0gPT0gc2VsZi5zbWFydF9hc2FfaWQKICAgIGRpZyAxCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAiYWNjb3VudF9zbWFydF9hc2FfaWQiCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50X3NtYXJ0X2FzYV9pZCBleGlzdHMgZm9yIGFjY291bnQKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJzbWFydF9hc2FfaWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc21hcnRfYXNhX2lkIGV4aXN0cwogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NDU3LTQ1OQogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBzZWxmLmFjY291bnRfc21hcnRfYXNhX2lkW2ZyZWV6ZV9hY2NvdW50XSA9PSBzZWxmLnNtYXJ0X2FzYV9pZAogICAgLy8gKSwgZXJyLklOVkFMSURfQ1RSTF9BU0EKICAgIGFzc2VydCAvLyBJbnZhbGlkIENvbnRyb2xsZWQgQVNBIElECiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQ2MAogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIgPT0gc2VsZi5mcmVlemVfYWRkciwgZXJyLlVOQVVUSE9SSVpFRF9GUkVFWkUKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJmcmVlemVfYWRkciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5mcmVlemVfYWRkciBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gVW5hdXRob3JpemVkIEZyZWV6ZQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo0NjItNDYzCiAgICAvLyAjIEVmZmVjdHMKICAgIC8vIHNlbGYuYWNjb3VudF9mcm96ZW5bZnJlZXplX2FjY291bnRdID0gYXNzZXRfZnJvemVuLm5hdGl2ZQogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgYnl0ZWMgNCAvLyAiYWNjb3VudF9mcm96ZW4iCiAgICBzd2FwCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQ0MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnNtYXJ0X2FzYS5jb250cmFjdC5TbWFydEFzYS5hc3NldF9jbG9zZV9vdXRbcm91dGluZ10oKSAtPiB2b2lkOgphc3NldF9jbG9zZV9vdXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQ2NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJDbG9zZU91dCJdKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTUxCiAgICAvLyBhc2FfY2xvc2Vfb3V0X3JlbGF0aXZlX2lkeCA9IFR4bi5ncm91cF9pbmRleCArIDEKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToxNTIKICAgIC8vIGFzYV9jbG9zZV9vdXRfdHhuID0gZ3R4bi5Bc3NldFRyYW5zZmVyVHJhbnNhY3Rpb24oYXNhX2Nsb3NlX291dF9yZWxhdGl2ZV9pZHgpCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBheGZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToxNTMKICAgIC8vIGFzc2VydCBUeG4ub25fY29tcGxldGlvbiA9PSBPbkNvbXBsZXRlQWN0aW9uLkNsb3NlT3V0LCBlcnIuV1JPTkdfT05fQ09NUExFVEUKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIHB1c2hpbnQgMiAvLyBDbG9zZU91dAogICAgPT0KICAgIGFzc2VydCAvLyBXcm9uZyBPbiBDb21wbGV0ZSBBY3Rpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTU1CiAgICAvLyBzZWxmLmFjY291bnRfc21hcnRfYXNhX2lkW1R4bi5zZW5kZXJdID09IGNsb3NlX2Fzc2V0LmlkCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAiYWNjb3VudF9zbWFydF9hc2FfaWQiCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50X3NtYXJ0X2FzYV9pZCBleGlzdHMgZm9yIGFjY291bnQKICAgIGRpZyAyCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToxNTQtMTU2CiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHNlbGYuYWNjb3VudF9zbWFydF9hc2FfaWRbVHhuLnNlbmRlcl0gPT0gY2xvc2VfYXNzZXQuaWQKICAgIC8vICksIGVyci5JTlZBTElEX0NUUkxfQVNBCiAgICBhc3NlcnQgLy8gSW52YWxpZCBDb250cm9sbGVkIEFTQSBJRAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToxNTgKICAgIC8vIEdsb2JhbC5ncm91cF9zaXplID4gYXNhX2Nsb3NlX291dF9yZWxhdGl2ZV9pZHgKICAgIGdsb2JhbCBHcm91cFNpemUKICAgIGRpZyAxCiAgICA+CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjE1Ny0xNTkKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgR2xvYmFsLmdyb3VwX3NpemUgPiBhc2FfY2xvc2Vfb3V0X3JlbGF0aXZlX2lkeAogICAgLy8gKSwgZXJyLklOVkFMSURfQ0xPU0VfT1VUX0dST1VQX1NJWkUKICAgIGFzc2VydCAvLyBJbnZhbGlkIENsb3NlIE91dCBncm91cCBzaXplCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjE2NAogICAgLy8gYXNhX2Nsb3NlX291dF90eG4ueGZlcl9hc3NldC5pZCA9PSBjbG9zZV9hc3NldC5pZAogICAgZHVwCiAgICBndHhucyBYZmVyQXNzZXQKICAgIGRpZyAyCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToxNjMtMTY1CiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIGFzYV9jbG9zZV9vdXRfdHhuLnhmZXJfYXNzZXQuaWQgPT0gY2xvc2VfYXNzZXQuaWQKICAgIC8vICksIGVyci5DTE9TRV9PVVRfV1JPTkdfQVNBCiAgICBhc3NlcnQgLy8gV3JvbmcgQVNBIENsb3NlIE91dCBJRAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToxNjYKICAgIC8vIGFzc2VydCBhc2FfY2xvc2Vfb3V0X3R4bi5zZW5kZXIgPT0gVHhuLnNlbmRlciwgZXJyLkNMT1NFX09VVF9XUk9OR19TRU5ERVIKICAgIGR1cAogICAgZ3R4bnMgU2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYXNzZXJ0IC8vIFdyb25nIEFTQSBDbG9zZSBPdXQgU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjE2NwogICAgLy8gYXNzZXJ0IGFzYV9jbG9zZV9vdXRfdHhuLmFzc2V0X2Ftb3VudCA9PSBVSW50NjQoMCksIGVyci5DTE9TRV9PVVRfV1JPTkdfQU1PVU5UCiAgICBkdXAKICAgIGd0eG5zIEFzc2V0QW1vdW50CiAgICAhCiAgICBhc3NlcnQgLy8gV3JvbmcgQVNBIENsb3NlIE91dCBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTY5CiAgICAvLyBhc2FfY2xvc2Vfb3V0X3R4bi5hc3NldF9jbG9zZV90byAhPSBHbG9iYWwuemVyb19hZGRyZXNzCiAgICBndHhucyBBc3NldENsb3NlVG8KICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgIT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTY4LTE3MAogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBhc2FfY2xvc2Vfb3V0X3R4bi5hc3NldF9jbG9zZV90byAhPSBHbG9iYWwuemVyb19hZGRyZXNzCiAgICAvLyApLCBlcnIuQ0xPU0VfT1VUX1dST05HX0NMT1NFX1RPCiAgICBhc3NlcnQgLy8gV3JvbmcgQ2xvc2UgT3V0IG9uIENsb3NlIE91dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo0NzYKICAgIC8vIChjcmVhdG9yLCBleGlzdHMpID0gb3AuQXNzZXRQYXJhbXNHZXQuYXNzZXRfY3JlYXRvcihjbG9zZV9hc3NldC5pZCkKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQ3NwogICAgLy8gaWYgZXhpc3RzOiAgIyBTbWFydCBBU0EgaGFzIG5vdCBiZWVuIGRlc3Ryb3llZAogICAgYnogYXNzZXRfY2xvc2Vfb3V0X2FmdGVyX2lmX2Vsc2VANQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToxNzYKICAgIC8vIGFzYV9jbG9zZV9vdXRfcmVsYXRpdmVfaWR4ID0gVHhuLmdyb3VwX2luZGV4ICsgMQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjE3NwogICAgLy8gYXNhX2Nsb3NlX291dF90eG4gPSBndHhuLkFzc2V0VHJhbnNmZXJUcmFuc2FjdGlvbihhc2FfY2xvc2Vfb3V0X3JlbGF0aXZlX2lkeCkKICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGF4ZmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjE3OQogICAgLy8gYXNhX2Nsb3NlX291dF90eG4uYXNzZXRfY2xvc2VfdG8gPT0gYXNzZXRfY3JlYXRvcgogICAgZ3R4bnMgQXNzZXRDbG9zZVRvCiAgICBkaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToxNzgtMTgwCiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIGFzYV9jbG9zZV9vdXRfdHhuLmFzc2V0X2Nsb3NlX3RvID09IGFzc2V0X2NyZWF0b3IKICAgIC8vICksIGVyci5DTE9TRV9PVVRfV1JPTkdfQ0xPU0VfVE8KICAgIGFzc2VydCAvLyBXcm9uZyBDbG9zZSBPdXQgb24gQ2xvc2UgT3V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjE4MQogICAgLy8gYXNzZXJ0IGNsb3NlX2Fzc2V0LmlkID09IHNlbGYuc21hcnRfYXNhX2lkLCBlcnIuSU5WQUxJRF9DVFJMX0FTQQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInNtYXJ0X2FzYV9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zbWFydF9hc2FfaWQgZXhpc3RzCiAgICBkaWcgNAogICAgPT0KICAgIGFzc2VydCAvLyBJbnZhbGlkIENvbnRyb2xsZWQgQVNBIElECiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQ4MAogICAgLy8gY2xvc2VfdG8gIT0gY3JlYXRvcgogICAgZGlnIDIKICAgICE9CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQ3OS00ODEKICAgIC8vIGlmICgKICAgIC8vICAgICBjbG9zZV90byAhPSBjcmVhdG9yCiAgICAvLyApOiAgIyBJZiBjbG9zZS1vdXQgdGFyZ2V0IGlzIG5vdCB0aGUgQ3JlYXRvciwgdGhlbiBjbG9zZS1vdXQgdGFyZ2V0IE1VU1QgYmUgb3B0ZWQtaW4KICAgIGJ6IGFzc2V0X2Nsb3NlX291dF9hZnRlcl9pZl9lbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NDgzCiAgICAvLyBzZWxmLmFjY291bnRfc21hcnRfYXNhX2lkW2Nsb3NlX3RvXSA9PSBzZWxmLnNtYXJ0X2FzYV9pZAogICAgZGlnIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImFjY291bnRfc21hcnRfYXNhX2lkIgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWNjb3VudF9zbWFydF9hc2FfaWQgZXhpc3RzIGZvciBhY2NvdW50CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAic21hcnRfYXNhX2lkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnNtYXJ0X2FzYV9pZCBleGlzdHMKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQ4Mi00ODQKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgc2VsZi5hY2NvdW50X3NtYXJ0X2FzYV9pZFtjbG9zZV90b10gPT0gc2VsZi5zbWFydF9hc2FfaWQKICAgIC8vICksIGVyci5JTlZBTElEX0NUUkxfQVNBCiAgICBhc3NlcnQgLy8gSW52YWxpZCBDb250cm9sbGVkIEFTQSBJRAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToxODUKICAgIC8vIGFzc2VydCBub3Qgc2VsZi5nbG9iYWxfZnJvemVuLCBlcnIuR0xPQkFMX0ZST1pFTgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gImdsb2JhbF9mcm96ZW4iCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZ2xvYmFsX2Zyb3plbiBleGlzdHMKICAgICEKICAgIGFzc2VydCAvLyBTbWFydCBBU0EgaXMgZ2xvYmFsIGZyb3plbgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToxODYKICAgIC8vIGFzc2VydCBub3Qgc2VsZi5hY2NvdW50X2Zyb3plbltUeG4uc2VuZGVyXSwgZXJyLlNFTkRFUl9GUk9aRU4KICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0IC8vICJhY2NvdW50X2Zyb3plbiIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnRfZnJvemVuIGV4aXN0cyBmb3IgYWNjb3VudAogICAgIQogICAgYXNzZXJ0IC8vIFNlbmRlciBhY2NvdW50IGlzIGZyb3plbgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToxODcKICAgIC8vIGFzc2VydCBub3Qgc2VsZi5hY2NvdW50X2Zyb3plbltjbG9zZV90b10sIGVyci5DTE9TRV9UT19GUk9aRU4KICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0IC8vICJhY2NvdW50X2Zyb3plbiIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnRfZnJvemVuIGV4aXN0cyBmb3IgYWNjb3VudAogICAgIQogICAgYXNzZXJ0IC8vIENsb3NlIHRvIGFjY291bnQgaXMgZnJvemVuCgphc3NldF9jbG9zZV9vdXRfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo0OTAKICAgIC8vIGFzc2V0X2Ftb3VudD1jbG9zZV9hc3NldC5iYWxhbmNlKFR4bi5zZW5kZXIpLAogICAgdHhuIFNlbmRlcgogICAgZGlnIDMKICAgIGR1cAogICAgY292ZXIgMgogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBhc3NlcnQgLy8gYWNjb3VudCBvcHRlZCBpbnRvIGFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQ5MQogICAgLy8gYXNzZXRfc2VuZGVyPVR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQ4Ny00OTMKICAgIC8vICMgRWZmZWN0cwogICAgLy8gc2VsZi5pbm5lcl9hc3NldF90cmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PWNsb3NlX2Fzc2V0LAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1jbG9zZV9hc3NldC5iYWxhbmNlKFR4bi5zZW5kZXIpLAogICAgLy8gICAgIGFzc2V0X3NlbmRlcj1UeG4uc2VuZGVyLAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPWNsb3NlX3RvLAogICAgLy8gKQogICAgZGlnIDQKICAgIGNhbGxzdWIgaW5uZXJfYXNzZXRfdHJhbnNmZXIKCmFzc2V0X2Nsb3NlX291dF9hZnRlcl9pZl9lbHNlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQ2NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJDbG9zZU91dCJdKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5zbWFydF9hc2EuY29udHJhY3QuU21hcnRBc2EuYXNzZXRfZGVzdHJveVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmFzc2V0X2Rlc3Ryb3k6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQ5NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjUwMy01MDQKICAgIC8vICMgUHJlY29uZGl0aW9ucwogICAgLy8gc2VsZi5hc3NlcnRfY29tbW9uX3ByZWNvbmRpdGlvbnMoZGVzdHJveV9hc3NldC5pZCkKICAgIGR1cAogICAgY2FsbHN1YiBhc3NlcnRfY29tbW9uX3ByZWNvbmRpdGlvbnMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTA1CiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBzZWxmLm1hbmFnZXJfYWRkciwgZXJyLlVOQVVUSE9SSVpFRF9NQU5BR0VSCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAibWFuYWdlcl9hZGRyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm1hbmFnZXJfYWRkciBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gVW5hdXRob3JpemVkIE1hbmFnZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MjI5LTIzMwogICAgLy8gaXR4bi5Bc3NldENvbmZpZygKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICAgICBjb25maWdfYXNzZXQ9ZGVzdHJveV9hc3NldCwKICAgIC8vICAgICBzZW5kZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MjMyCiAgICAvLyBzZW5kZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBpdHhuX2ZpZWxkIFNlbmRlcgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToyMjkKICAgIC8vIGl0eG4uQXNzZXRDb25maWcoCiAgICBwdXNoaW50IDMgLy8gYWNmZwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToyMzAKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjIyOS0yMzMKICAgIC8vIGl0eG4uQXNzZXRDb25maWcoCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyAgICAgY29uZmlnX2Fzc2V0PWRlc3Ryb3lfYXNzZXQsCiAgICAvLyAgICAgc2VuZGVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1MDkKICAgIC8vIHNlbGYudG90YWwgPSBVSW50NjQoKQogICAgYnl0ZWMgOCAvLyAidG90YWwiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTEwCiAgICAvLyBzZWxmLmRlY2ltYWxzID0gVUludDY0KCkKICAgIGJ5dGVjIDEwIC8vICJkZWNpbWFscyIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1MTEKICAgIC8vIHNlbGYuZGVmYXVsdF9mcm96ZW4gPSBGYWxzZQogICAgYnl0ZWMgOSAvLyAiZGVmYXVsdF9mcm96ZW4iCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTEyCiAgICAvLyBzZWxmLnVuaXRfbmFtZSA9IFN0cmluZygpCiAgICBieXRlYyAxMSAvLyAidW5pdF9uYW1lIgogICAgcHVzaGJ5dGVzICIiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1MTMKICAgIC8vIHNlbGYubmFtZSA9IFN0cmluZygpCiAgICBieXRlYyAxMiAvLyAibmFtZSIKICAgIHB1c2hieXRlcyAiIgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTE0CiAgICAvLyBzZWxmLnVybCA9IFN0cmluZygpCiAgICBieXRlYyAxMyAvLyAidXJsIgogICAgcHVzaGJ5dGVzICIiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1MTUKICAgIC8vIHNlbGYubWV0YWRhdGFfaGFzaCA9IEJ5dGVzKCkKICAgIGJ5dGVjIDE0IC8vICJtZXRhZGF0YV9oYXNoIgogICAgcHVzaGJ5dGVzIDB4CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1MTYKICAgIC8vIHNlbGYubWFuYWdlcl9hZGRyID0gQWNjb3VudCgpCiAgICBieXRlYyA3IC8vICJtYW5hZ2VyX2FkZHIiCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjUxNwogICAgLy8gc2VsZi5yZXNlcnZlX2FkZHIgPSBBY2NvdW50KCkKICAgIGJ5dGVjXzEgLy8gInJlc2VydmVfYWRkciIKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTE4CiAgICAvLyBzZWxmLmZyZWV6ZV9hZGRyID0gQWNjb3VudCgpCiAgICBieXRlYyA1IC8vICJmcmVlemVfYWRkciIKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTE5CiAgICAvLyBzZWxmLmNsYXdiYWNrX2FkZHIgPSBBY2NvdW50KCkKICAgIGJ5dGVjXzIgLy8gImNsYXdiYWNrX2FkZHIiCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjUyMAogICAgLy8gc2VsZi5zbWFydF9hc2FfaWQgPSBVSW50NjQoKQogICAgYnl0ZWNfMCAvLyAic21hcnRfYXNhX2lkIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjUyMQogICAgLy8gc2VsZi5nbG9iYWxfZnJvemVuID0gRmFsc2UKICAgIGJ5dGVjIDYgLy8gImdsb2JhbF9mcm96ZW4iCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NDk1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuc21hcnRfYXNhLmNvbnRyYWN0LlNtYXJ0QXNhLmdldF9hc3NldF9jb25maWdbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfYXNzZXRfY29uZmlnOgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1MjMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1MzQtNTM1CiAgICAvLyAjIFByZWNvbmRpdGlvbnMKICAgIC8vIHNlbGYuYXNzZXJ0X2NvbW1vbl9wcmVjb25kaXRpb25zKGFzc2V0LmlkKQogICAgY2FsbHN1YiBhc3NlcnRfY29tbW9uX3ByZWNvbmRpdGlvbnMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTM5CiAgICAvLyB0b3RhbD1hcmM0LlVJbnQ2NChzZWxmLnRvdGFsKSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA4IC8vICJ0b3RhbCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbCBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTQwCiAgICAvLyBkZWNpbWFscz1hcmM0LlVJbnQzMihzZWxmLmRlY2ltYWxzKSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMCAvLyAiZGVjaW1hbHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZGVjaW1hbHMgZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGJpdGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBleHRyYWN0IDQgNAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1NDEKICAgIC8vIGRlZmF1bHRfZnJvemVuPWFyYzQuQm9vbChzZWxmLmRlZmF1bHRfZnJvemVuKSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA5IC8vICJkZWZhdWx0X2Zyb3plbiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kZWZhdWx0X2Zyb3plbiBleGlzdHMKICAgIGJ5dGVjIDE2IC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1NDIKICAgIC8vIHVuaXRfbmFtZT1hcmM0LlN0cmluZyhzZWxmLnVuaXRfbmFtZSksCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTEgLy8gInVuaXRfbmFtZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi51bml0X25hbWUgZXhpc3RzCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1NDMKICAgIC8vIG5hbWU9YXJjNC5TdHJpbmcoc2VsZi5uYW1lKSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMiAvLyAibmFtZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5uYW1lIGV4aXN0cwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTQ0CiAgICAvLyB1cmw9YXJjNC5TdHJpbmcoc2VsZi51cmwpLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDEzIC8vICJ1cmwiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudXJsIGV4aXN0cwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTQ1CiAgICAvLyBtZXRhZGF0YV9oYXNoPWFyYzQuRHluYW1pY0J5dGVzKHNlbGYubWV0YWRhdGFfaGFzaCksCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTQgLy8gIm1ldGFkYXRhX2hhc2giCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubWV0YWRhdGFfaGFzaCBleGlzdHMKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjU0NgogICAgLy8gbWFuYWdlcl9hZGRyPWFyYzQuQWRkcmVzcyhzZWxmLm1hbmFnZXJfYWRkciksCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAibWFuYWdlcl9hZGRyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm1hbmFnZXJfYWRkciBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTQ3CiAgICAvLyByZXNlcnZlX2FkZHI9YXJjNC5BZGRyZXNzKHNlbGYucmVzZXJ2ZV9hZGRyKSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJyZXNlcnZlX2FkZHIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucmVzZXJ2ZV9hZGRyIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1NDgKICAgIC8vIGZyZWV6ZV9hZGRyPWFyYzQuQWRkcmVzcyhzZWxmLmZyZWV6ZV9hZGRyKSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJmcmVlemVfYWRkciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5mcmVlemVfYWRkciBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTQ5CiAgICAvLyBjbGF3YmFja19hZGRyPWFyYzQuQWRkcmVzcyhzZWxmLmNsYXdiYWNrX2FkZHIpLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImNsYXdiYWNrX2FkZHIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY2xhd2JhY2tfYWRkciBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTM3LTU1MAogICAgLy8gIyBFZmZlY3RzCiAgICAvLyByZXR1cm4gQXNzZXRDb25maWcoCiAgICAvLyAgICAgdG90YWw9YXJjNC5VSW50NjQoc2VsZi50b3RhbCksCiAgICAvLyAgICAgZGVjaW1hbHM9YXJjNC5VSW50MzIoc2VsZi5kZWNpbWFscyksCiAgICAvLyAgICAgZGVmYXVsdF9mcm96ZW49YXJjNC5Cb29sKHNlbGYuZGVmYXVsdF9mcm96ZW4pLAogICAgLy8gICAgIHVuaXRfbmFtZT1hcmM0LlN0cmluZyhzZWxmLnVuaXRfbmFtZSksCiAgICAvLyAgICAgbmFtZT1hcmM0LlN0cmluZyhzZWxmLm5hbWUpLAogICAgLy8gICAgIHVybD1hcmM0LlN0cmluZyhzZWxmLnVybCksCiAgICAvLyAgICAgbWV0YWRhdGFfaGFzaD1hcmM0LkR5bmFtaWNCeXRlcyhzZWxmLm1ldGFkYXRhX2hhc2gpLAogICAgLy8gICAgIG1hbmFnZXJfYWRkcj1hcmM0LkFkZHJlc3Moc2VsZi5tYW5hZ2VyX2FkZHIpLAogICAgLy8gICAgIHJlc2VydmVfYWRkcj1hcmM0LkFkZHJlc3Moc2VsZi5yZXNlcnZlX2FkZHIpLAogICAgLy8gICAgIGZyZWV6ZV9hZGRyPWFyYzQuQWRkcmVzcyhzZWxmLmZyZWV6ZV9hZGRyKSwKICAgIC8vICAgICBjbGF3YmFja19hZGRyPWFyYzQuQWRkcmVzcyhzZWxmLmNsYXdiYWNrX2FkZHIpLAogICAgLy8gKQogICAgdW5jb3ZlciAxMAogICAgdW5jb3ZlciAxMAogICAgY29uY2F0CiAgICB1bmNvdmVyIDkKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MDA5NQogICAgY29uY2F0CiAgICBkaWcgOAogICAgbGVuCiAgICBwdXNoaW50IDE0OSAvLyAxNDkKICAgICsKICAgIGR1cAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBkaWcgOAogICAgbGVuCiAgICB1bmNvdmVyIDIKICAgICsKICAgIGR1cAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBkaWcgNwogICAgbGVuCiAgICB1bmNvdmVyIDIKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBjb25jYXQKICAgIHVuY292ZXIgNAogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgdW5jb3ZlciA0CiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjUyMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBieXRlYyAxNSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5zbWFydF9hc2EuY29udHJhY3QuU21hcnRBc2EuZ2V0X2Fzc2V0X2lzX2Zyb3plbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldF9hc3NldF9pc19mcm96ZW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjU1MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjU2My01NjQKICAgIC8vICMgUHJlY29uZGl0aW9ucwogICAgLy8gc2VsZi5hc3NlcnRfY29tbW9uX3ByZWNvbmRpdGlvbnMoZnJlZXplX2Fzc2V0LmlkKQogICAgY2FsbHN1YiBhc3NlcnRfY29tbW9uX3ByZWNvbmRpdGlvbnMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTY2LTU2NwogICAgLy8gIyBFZmZlY3RzCiAgICAvLyByZXR1cm4gYXJjNC5Cb29sKHNlbGYuZ2xvYmFsX2Zyb3plbikKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJnbG9iYWxfZnJvemVuIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmdsb2JhbF9mcm96ZW4gZXhpc3RzCiAgICBieXRlYyAxNiAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTUyCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjIDE1IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnNtYXJ0X2FzYS5jb250cmFjdC5TbWFydEFzYS5nZXRfYWNjb3VudF9pc19mcm96ZW5bcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfYWNjb3VudF9pc19mcm96ZW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjU2OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTgzLTU4NAogICAgLy8gIyBQcmVjb25kaXRpb25zCiAgICAvLyBzZWxmLmFzc2VydF9jb21tb25fcHJlY29uZGl0aW9ucyhmcmVlemVfYXNzZXQuaWQpCiAgICBzd2FwCiAgICBjYWxsc3ViIGFzc2VydF9jb21tb25fcHJlY29uZGl0aW9ucwogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1ODYtNTg3CiAgICAvLyAjIEVmZmVjdHMKICAgIC8vIHJldHVybiBhcmM0LkJvb2woc2VsZi5hY2NvdW50X2Zyb3plbltmcmVlemVfYWNjb3VudF0pCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAiYWNjb3VudF9mcm96ZW4iCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50X2Zyb3plbiBleGlzdHMgZm9yIGFjY291bnQKICAgIGJ5dGVjIDE2IC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1NjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYnl0ZWMgMTUgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuc21hcnRfYXNhLmNvbnRyYWN0LlNtYXJ0QXNhLmdldF9jaXJjdWxhdGluZ19zdXBwbHlbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfY2lyY3VsYXRpbmdfc3VwcGx5OgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1ODkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo2MDAtNjAxCiAgICAvLyAjIFByZWNvbmRpdGlvbnMKICAgIC8vIHNlbGYuYXNzZXJ0X2NvbW1vbl9wcmVjb25kaXRpb25zKGFzc2V0LmlkKQogICAgZHVwCiAgICBjYWxsc3ViIGFzc2VydF9jb21tb25fcHJlY29uZGl0aW9ucwogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo2MDMtNjA0CiAgICAvLyAjIEVmZmVjdHMKICAgIC8vIHJldHVybiBhcmM0LlVJbnQ2NChzZWxmLmNpcmN1bGF0aW5nX3N1cHBseShhc3NldCkpCiAgICBjYWxsc3ViIGNpcmN1bGF0aW5nX3N1cHBseQogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1ODkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYnl0ZWMgMTUgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuc21hcnRfYXNhLmNvbnRyYWN0LlNtYXJ0QXNhLmNpcmN1bGF0aW5nX3N1cHBseShjdHJsX2Fzc2V0OiB1aW50NjQpIC0+IHVpbnQ2NDoKY2lyY3VsYXRpbmdfc3VwcGx5OgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo3OC03OQogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBjaXJjdWxhdGluZ19zdXBwbHkoc2VsZiwgY3RybF9hc3NldDogQXNzZXQpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo4MAogICAgLy8gcmV0dXJuIGNmZy5UT1RBTCAtIGN0cmxfYXNzZXQuYmFsYW5jZShHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzKQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBhc3NlcnQgLy8gYWNjb3VudCBvcHRlZCBpbnRvIGFzc2V0CiAgICBpbnRjIDQgLy8gMTg0NDY3NDQwNzM3MDk1NTE2MTUKICAgIHN3YXAKICAgIC0KICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5zbWFydF9hc2EuY29udHJhY3QuU21hcnRBc2EuYXNzZXJ0X2NvbW1vbl9wcmVjb25kaXRpb25zKGFzc2V0X2lkOiB1aW50NjQpIC0+IHZvaWQ6CmFzc2VydF9jb21tb25fcHJlY29uZGl0aW9uczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6ODItODMKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgYXNzZXJ0X2NvbW1vbl9wcmVjb25kaXRpb25zKHNlbGYsIGFzc2V0X2lkOiBVSW50NjQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6ODQKICAgIC8vIGFzc2VydCBzZWxmLnNtYXJ0X2FzYV9pZCwgZXJyLk1JU1NJTkdfQ1RSTF9BU0EKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJzbWFydF9hc2FfaWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc21hcnRfYXNhX2lkIGV4aXN0cwogICAgZHVwCiAgICBhc3NlcnQgLy8gTWlzc2luZyBDb250cm9sbGVkIEFTQQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo4NQogICAgLy8gYXNzZXJ0IHNlbGYuc21hcnRfYXNhX2lkID09IGFzc2V0X2lkLCBlcnIuSU5WQUxJRF9DVFJMX0FTQQogICAgZnJhbWVfZGlnIC0xCiAgICA9PQogICAgYXNzZXJ0IC8vIEludmFsaWQgQ29udHJvbGxlZCBBU0EgSUQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5zbWFydF9hc2EuY29udHJhY3QuU21hcnRBc2EuaW5uZXJfYXNzZXRfdHJhbnNmZXIoeGZlcl9hc3NldDogdWludDY0LCBhc3NldF9hbW91bnQ6IHVpbnQ2NCwgYXNzZXRfc2VuZGVyOiBieXRlcywgYXNzZXRfcmVjZWl2ZXI6IGJ5dGVzKSAtPiB2b2lkOgppbm5lcl9hc3NldF90cmFuc2ZlcjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MjA5LTIxNwogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBpbm5lcl9hc3NldF90cmFuc2ZlcigKICAgIC8vICAgICBzZWxmLAogICAgLy8gICAgICosCiAgICAvLyAgICAgeGZlcl9hc3NldDogQXNzZXQsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50OiBVSW50NjQsCiAgICAvLyAgICAgYXNzZXRfc2VuZGVyOiBBY2NvdW50LAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyOiBBY2NvdW50CiAgICAvLyApIC0+IE5vbmU6CiAgICBwcm90byA0IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MjE4LTIyNQogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gICAgIHhmZXJfYXNzZXQ9eGZlcl9hc3NldC5pZCwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9YXNzZXRfYW1vdW50LAogICAgLy8gICAgIGFzc2V0X3NlbmRlcj1hc3NldF9zZW5kZXIsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9YXNzZXRfcmVjZWl2ZXIsCiAgICAvLyAgICAgc2VuZGVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjIyNAogICAgLy8gc2VuZGVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgaXR4bl9maWVsZCBTZW5kZXIKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXNzZXRTZW5kZXIKICAgIGZyYW1lX2RpZyAtMwogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC00CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToyMTgKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToyMTkKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjIxOC0yMjUKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICAgICB4ZmVyX2Fzc2V0PXhmZXJfYXNzZXQuaWQsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PWFzc2V0X2Ftb3VudCwKICAgIC8vICAgICBhc3NldF9zZW5kZXI9YXNzZXRfc2VuZGVyLAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPWFzc2V0X3JlY2VpdmVyLAogICAgLy8gICAgIHNlbmRlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1Ygo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" - }, - "byteCode": { - "approval": "CyAFAAEIIP///////////wEmEQxzbWFydF9hc2FfaWQMcmVzZXJ2ZV9hZGRyDWNsYXdiYWNrX2FkZHIUYWNjb3VudF9zbWFydF9hc2FfaWQOYWNjb3VudF9mcm96ZW4LZnJlZXplX2FkZHINZ2xvYmFsX2Zyb3plbgxtYW5hZ2VyX2FkZHIFdG90YWwOZGVmYXVsdF9mcm96ZW4IZGVjaW1hbHMJdW5pdF9uYW1lBG5hbWUDdXJsDW1ldGFkYXRhX2hhc2gEFR98dQEAMRhAAE4xNSQSRDE0gQUSRDE3FEQxNoECEkQnCCJnJwoiZycJImcnC4AAZycMgABnJw2AAGcnDoAAZycHMgNnKTIDZycFMgNnKjIDZygiZycGImcxG0EAgYICBEhkFkUEOgRb3DYaAI4CAGEAVTEZFEQxGESCCgTn7NWoBPiBn+sEfqy3dQShM9WBBP9Tre8E7WRFLwQum5A4BJebmXIESKY8yQRGrQ1SNhoAjgoAIgH4AyYEUQR3BV4FvgaDBqEGyAAxGYECEjEYEERCBKUxGSMSMRgQREIBaTEZFDEYFBBEI0M2GgFJFSQSRDYaAkkVgQQSRDYaA0kVIxJENhoERwIiWYECCEwVEkQ2GgVHAiJZgQIITBUSRDYaBkcCIlmBAghMFRJENhoHRwIiWYECCEwVEkQ2GghJFSUSRDYaCUkVJRJENhoKSRUlEkQ2GgtJFSUSRDEAMgkSRCIoZUQURLEyCIAASwFBACJLAUmBChiACjAxMjM0NTY3ODlMI1hLAlBFAoEKCkUCQv/ZRwIVgAEwTgJNgA9hbGdvcmFuZDovL2FwcC9MUDIKRwOyLLIrsiqyKbIngBBBUkMtMjAgU21hcnQgQVNBsiaABkFSQy0yMLIlI7IkIrIjIQSyIoEDshAisgGzKLQ8Z0sMFycITGdLCxcnCkxnSwoiUycJTGdLCVcCACcLTGdLCFcCACcMTGdLB1cCACcNTGdLBlcCACcOTGcnB0sGZylLBWcnBUsEZypLA2ciKGVEFicPTFCwI0M2GgFJFSQSRBdJMRYjCUk4EIEEEkRLAYgFVEk4ESIoZURMSwESREsBOAAxABJESwE4FDEAEkRLATgSFERMOBUyAxJEMRkjEkQxAE8CcABFAUQxACtPAmYxACcEImYiJwllREAACjEASwFwAERBAAYxACcEI2YjQzYaAUkVJBJEF0k2GgJJTgIVJBJENhoDSU4CFYEEEkQ2GgRJTgIVIxJENhoFSU4CSSJZgQIITBUSRDYaBklOAkkiWYECCEwVEkQ2GgdJTgJJIlmBAghMFRJENhoISU4CSSJZgQIITBUSRDYaCUlOAhUlEkQ2GgpJTgJJFSUSRDYaC0lOAxUlEkQ2GgxJTgMVJRJETIgEYTEAIicHZUQSRCIpZUQTQQAIIillRDIDE0QiJwVlREsCE0EACSInBWVEMgMTRCIqZURLARNBAAgiKmVEMgMTREsLiAQOFksLSU8Cp0QXJwhMZ0sJFycKTGdLCCJTJwlMZ0sHVwIAJwtMZ0sGVwIAJwxMZ0sFVwIAJw1MZ0sEVwIAJw5MZycHSwRnKUsDZycFSwJnKksBZyNDNhoBSRUkEkQXSTYaAklOAhUkEkQ2GgNJTgJJFSUSRDYaBElOAxUlEkRMiAOcMgoSQQBZSwIXMQAiKWVEEkQyCksCSU8CE0QiKGVEiANsTwIIIicIZUQORCIrY0QiKGVEEkQiJwZlRBREIillRCIqZUQTQQAISSInBGNEFERLAhdLBExLA0sDiANNI0NJMgoSQQA5MQAiKWVETEsBEkRLAiIrY0QiKGVEEkQiJwZlRBREIiplRBNB/8RLAUkiJwRjRBREIillRBJEQv+xMQAiKmVEEkEAGksBIitjRCIoZURMSwESREsBIitjRBJEQv+NMQBLAklOAhJESSIrY0QiKGVETEsBEkRLAklOAiIrY0QSRCInBmVEFERMIicEY0QURCInBGNEFERC/1I2GgFJFSQSRBc2GgJJFSMSREyIAokxACInBWVEEkQiUycGTGcjQzYaAUkVJBJEFzYaAkkVJRJENhoDSRUjEkRPAogCWksBIitjRCIoZUQSRDEAIicFZUQSRCJTJwRMZiNDNhoBSRUkEkQXSTYaAklOAhUlEkQxFiMISTgQgQQSRDEZgQISRDEAIitjREsCEkQyBEsBDURJOBFLAhJESTgAMQASREk4EhREOBUyAxNEcQtBAFcxFiMISTgQgQQSRDgVSwFJTgISRCIoZURLBBJESwITQQAkSwFJIitjRCIoZUQSRCInBmVEFEQxACInBGNEFEQiJwRjRBREMQBLA0lOAnAARDEASwSIAaEjQzYaAUkVJBJEF0mIAYQxACInB2VEEkSxMgqyALIhgQOyECKyAbMnCCJnJwoiZycJImcnC4AAZycMgABnJw2AAGcnDoAAZycHMgNnKTIDZycFMgNnKjIDZygiZycGImcjQzYaAUkVJBJEF4gBJSInCGVEFiInCmVEFkmTJQ5EVwQEIicJZUQnECJPAlQiJwtlREkVFlcGAkxQIicMZURJFRZXBgJMUCInDWVESRUWVwYCTFAiJw5lREkVFlcGAkxQIicHZUQiKWVEIicFZUQiKmVETwpPClBPCVCAAgCVUEsIFYGVAQhJFlcGAk8CTFBLCBVPAghJFlcGAk8CTFBLBxVPAggWVwYCUE8EUE8DUE8CUExQTwRQTwNQTwJQTFAnD0xQsCNDNhoBSRUkEkQXiABgIicGZUQnECJPAlQnD0xQsCNDNhoBSRUkEkQXNhoCSRUlEkRMiAA5IicEY0QnECJPAlQnD0xQsCNDNhoBSRUkEkQXSYgAGogACBYnD0xQsCNDigEBMgqL/3AARCEETAmJigEAIihlRElEi/8SRImKBACxMgqyAIv/shSL/rITi/2yEov8shGBBLIQIrIBs4k=", - "clear": "C4EBQw==" - }, - "compilerInfo": { - "compiler": "puya", - "compilerVersion": { - "major": 5, - "minor": 4, - "patch": 0 - } - }, - "events": [], - "templateVariables": {} -} \ No newline at end of file diff --git a/assets/arc-0020/smart_contracts/artifacts/smart_asa/SmartAsa.clear.puya.map b/assets/arc-0020/smart_contracts/artifacts/smart_asa/SmartAsa.clear.puya.map deleted file mode 100644 index 7e7f2c0d5..000000000 --- a/assets/arc-0020/smart_contracts/artifacts/smart_asa/SmartAsa.clear.puya.map +++ /dev/null @@ -1,25 +0,0 @@ -{ - "version": 3, - "sources": [], - "mappings": ";;;", - "op_pc_offset": 0, - "pc_events": { - "1": { - "subroutine": "algopy.arc4.ARC4Contract.clear_state_program", - "params": {}, - "block": "main", - "stack_in": [], - "op": "pushint 1 // 1", - "defined_out": [ - "1" - ], - "stack_out": [ - "1" - ] - }, - "3": { - "op": "return", - "stack_out": [] - } - } -} \ No newline at end of file diff --git a/assets/arc-0020/smart_contracts/artifacts/smart_asa/SmartAsa.clear.teal b/assets/arc-0020/smart_contracts/artifacts/smart_asa/SmartAsa.clear.teal deleted file mode 100644 index 8843a4b0d..000000000 --- a/assets/arc-0020/smart_contracts/artifacts/smart_asa/SmartAsa.clear.teal +++ /dev/null @@ -1,7 +0,0 @@ -#pragma version 11 -#pragma typetrack false - -// algopy.arc4.ARC4Contract.clear_state_program() -> uint64: -main: - pushint 1 // 1 - return diff --git a/assets/arc-0020/smart_contracts/artifacts/smart_asa/smart_asa_client.py b/assets/arc-0020/smart_contracts/artifacts/smart_asa/smart_asa_client.py deleted file mode 100644 index 35d2bfe23..000000000 --- a/assets/arc-0020/smart_contracts/artifacts/smart_asa/smart_asa_client.py +++ /dev/null @@ -1,2055 +0,0 @@ -# flake8: noqa -# fmt: off -# mypy: ignore-errors -# This file was automatically generated by algokit-client-generator. -# DO NOT MODIFY IT BY HAND. -# requires: algokit-utils@^3.0.0 - -# common -import dataclasses -import typing -# core algosdk -import algosdk -from algosdk.transaction import OnComplete -from algosdk.atomic_transaction_composer import TransactionSigner -from algosdk.source_map import SourceMap -from algosdk.transaction import Transaction -from algosdk.v2client.models import SimulateTraceConfig -# utils -import algokit_utils -from algokit_utils import AlgorandClient as _AlgoKitAlgorandClient - -_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "desc": "The total number of base units of the Smart ASA to create", "name": "total"}, {"type": "uint32", "desc": "The number of digits to use after the decimal point when displaying the Smart ASA", "name": "decimals"}, {"type": "bool", "desc": "Smart ASA default frozen (True to freeze holdings by default)", "name": "default_frozen"}, {"type": "string", "desc": "The name of a unit of Smart ASA", "name": "unit_name"}, {"type": "string", "desc": "The name of the Smart ASA", "name": "name"}, {"type": "string", "desc": "Smart ASA external URL", "name": "url"}, {"type": "byte[]", "desc": "Smart ASA metadata hash", "name": "metadata_hash"}, {"type": "address", "desc": "Account that can manage the configuration of the Smart ASA and destroy it", "name": "manager_addr"}, {"type": "address", "desc": "Account that holds the reserve (non-minted) units of Smart ASA and can mint or burn it", "name": "reserve_addr"}, {"type": "address", "desc": "Account that can freeze/unfreeze holdings of the Smart ASA globally or locally", "name": "freeze_addr"}, {"type": "address", "desc": "Account that can clawback holdings of the Smart ASA", "name": "clawback_addr"}], "name": "asset_create", "returns": {"type": "uint64", "desc": "Controlled ASA ID"}, "desc": "Create the Controlled ASA", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["OptIn"], "create": []}, "args": [{"type": "uint64", "desc": "Smart ASA ID", "name": "asset"}, {"type": "axfer", "desc": "Controlled ASA opt in transaction", "name": "ctrl_asa_opt_in"}], "name": "asset_opt_in", "returns": {"type": "void"}, "desc": "Smart ASA opt in (App and Controlled ASA)", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "desc": "Smart ASA ID to configure", "name": "config_asset"}, {"type": "uint64", "desc": "Total number of base units if the Smart ASA. It can not be less than current circulating supply", "name": "total"}, {"type": "uint32", "desc": "The number of digits to use after the decimal point when displaying the Smart ASA", "name": "decimals"}, {"type": "bool", "desc": "Smart ASA default frozen (True to freeze holdings by default)", "name": "default_frozen"}, {"type": "string", "desc": "The name of a unit of Smart ASA", "name": "unit_name"}, {"type": "string", "desc": "The name of the Smart ASA", "name": "name"}, {"type": "string", "desc": "Smart ASA external URL", "name": "url"}, {"type": "byte[]", "desc": "Smart ASA metadata hash", "name": "metadata_hash"}, {"type": "address", "desc": "Account that can manage the configuration of the Smart ASA and destroy it", "name": "manager_addr"}, {"type": "address", "desc": "Account that holds the reserve (non-minted) units of Smart ASA and can mint or burn it", "name": "reserve_addr"}, {"type": "address", "desc": "Account that can freeze/unfreeze holdings of the Smart ASA globally or locally", "name": "freeze_addr"}, {"type": "address", "desc": "Account that can clawback holdings of the Smart ASA", "name": "clawback_addr"}], "name": "asset_config", "returns": {"type": "void"}, "desc": "Configure Smart ASA (for unchanged parameters use existing value - no optional args on AVM)", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "desc": "Smart ASA ID to transfer", "name": "xfer_asset"}, {"type": "uint64", "desc": "Amount to transfer", "name": "asset_amount"}, {"type": "address", "desc": "Smart ASA sender", "name": "asset_sender"}, {"type": "address", "desc": "Smart ASA receiver", "name": "asset_receiver"}], "name": "asset_transfer", "returns": {"type": "void"}, "desc": "Smart ASA transfers: regular, clawback, mint, burn", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "desc": "Smart ASA ID to globally freeze/unfreeze", "name": "freeze_asset"}, {"type": "bool", "desc": "Smart ASA frozen status", "name": "asset_frozen"}], "name": "asset_freeze", "returns": {"type": "void"}, "desc": "Smart ASA global freeze (all accounts)", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "desc": "Smart ASA ID to locally freeze/unfreeze", "name": "freeze_asset"}, {"type": "address", "desc": "Account to freeze/unfreeze", "name": "freeze_account"}, {"type": "bool", "desc": "Smart ASA frozen status", "name": "asset_frozen"}], "name": "account_freeze", "returns": {"type": "void"}, "desc": "Smart ASA local freeze (account specific)", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["CloseOut"], "create": []}, "args": [{"type": "uint64", "desc": "Smart ASA ID to close out", "name": "close_asset"}, {"type": "address", "desc": "Account to send all the Smart ASA remainder to.", "name": "close_to"}], "name": "asset_close_out", "returns": {"type": "void"}, "desc": "Smart ASA close out (App and Controlled ASA)", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "desc": "Smart ASA ID to destroy", "name": "destroy_asset"}], "name": "asset_destroy", "returns": {"type": "void"}, "desc": "Destroy the Controlled ASA", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "desc": "Smart ASA ID", "name": "asset"}], "name": "get_asset_config", "returns": {"type": "(uint64,uint32,bool,string,string,string,byte[],address,address,address,address)", "desc": "Smart ASA configuration parameters", "struct": "AssetConfig"}, "desc": "Get Smart ASA configuration", "events": [], "readonly": true, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "desc": "Smart ASA ID", "name": "freeze_asset"}], "name": "get_asset_is_frozen", "returns": {"type": "bool", "desc": "Smart ASA global frozen status"}, "desc": "Get Smart ASA global frozen status", "events": [], "readonly": true, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "desc": "Smart ASA ID", "name": "freeze_asset"}, {"type": "address", "desc": "Account to check", "name": "freeze_account"}], "name": "get_account_is_frozen", "returns": {"type": "bool", "desc": "Smart ASA account frozen status"}, "desc": "Get Smart ASA account frozen status", "events": [], "readonly": true, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "desc": "Smart ASA ID", "name": "asset"}], "name": "get_circulating_supply", "returns": {"type": "uint64", "desc": "Smart ASA circulating supply"}, "desc": "Get Smart ASA circulating supply", "events": [], "readonly": true, "recommendations": {}}], "name": "SmartAsa", "state": {"keys": {"box": {}, "global": {"total": {"key": "dG90YWw=", "keyType": "AVMString", "valueType": "AVMUint64"}, "decimals": {"key": "ZGVjaW1hbHM=", "keyType": "AVMString", "valueType": "AVMUint64"}, "default_frozen": {"key": "ZGVmYXVsdF9mcm96ZW4=", "keyType": "AVMString", "valueType": "AVMUint64"}, "unit_name": {"key": "dW5pdF9uYW1l", "keyType": "AVMString", "valueType": "AVMString"}, "name": {"key": "bmFtZQ==", "keyType": "AVMString", "valueType": "AVMString"}, "url": {"key": "dXJs", "keyType": "AVMString", "valueType": "AVMString"}, "metadata_hash": {"key": "bWV0YWRhdGFfaGFzaA==", "keyType": "AVMString", "valueType": "AVMBytes"}, "manager_addr": {"key": "bWFuYWdlcl9hZGRy", "keyType": "AVMString", "valueType": "address"}, "reserve_addr": {"key": "cmVzZXJ2ZV9hZGRy", "keyType": "AVMString", "valueType": "address"}, "freeze_addr": {"key": "ZnJlZXplX2FkZHI=", "keyType": "AVMString", "valueType": "address"}, "clawback_addr": {"key": "Y2xhd2JhY2tfYWRkcg==", "keyType": "AVMString", "valueType": "address"}, "smart_asa_id": {"key": "c21hcnRfYXNhX2lk", "keyType": "AVMString", "valueType": "AVMUint64"}, "global_frozen": {"key": "Z2xvYmFsX2Zyb3plbg==", "keyType": "AVMString", "valueType": "AVMUint64"}}, "local": {"account_smart_asa_id": {"key": "YWNjb3VudF9zbWFydF9hc2FfaWQ=", "keyType": "AVMString", "valueType": "AVMUint64"}, "account_frozen": {"key": "YWNjb3VudF9mcm96ZW4=", "keyType": "AVMString", "valueType": "AVMUint64"}}}, "maps": {"box": {}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 8, "ints": 5}, "local": {"bytes": 0, "ints": 2}}}, "structs": {"AssetConfig": [{"name": "total", "type": "uint64"}, {"name": "decimals", "type": "uint32"}, {"name": "default_frozen", "type": "bool"}, {"name": "unit_name", "type": "string"}, {"name": "name", "type": "string"}, {"name": "url", "type": "string"}, {"name": "metadata_hash", "type": "byte[]"}, {"name": "manager_addr", "type": "address"}, {"name": "reserve_addr", "type": "address"}, {"name": "freeze_addr", "type": "address"}, {"name": "clawback_addr", "type": "address"}]}, "byteCode": {"approval": "CyAFAAEIIP///////////wEmEQxzbWFydF9hc2FfaWQMcmVzZXJ2ZV9hZGRyDWNsYXdiYWNrX2FkZHIUYWNjb3VudF9zbWFydF9hc2FfaWQOYWNjb3VudF9mcm96ZW4LZnJlZXplX2FkZHINZ2xvYmFsX2Zyb3plbgxtYW5hZ2VyX2FkZHIFdG90YWwOZGVmYXVsdF9mcm96ZW4IZGVjaW1hbHMJdW5pdF9uYW1lBG5hbWUDdXJsDW1ldGFkYXRhX2hhc2gEFR98dQEAMRhAAE4xNSQSRDE0gQUSRDE3FEQxNoECEkQnCCJnJwoiZycJImcnC4AAZycMgABnJw2AAGcnDoAAZycHMgNnKTIDZycFMgNnKjIDZygiZycGImcxG0EAgYICBEhkFkUEOgRb3DYaAI4CAGEAVTEZFEQxGESCCgTn7NWoBPiBn+sEfqy3dQShM9WBBP9Tre8E7WRFLwQum5A4BJebmXIESKY8yQRGrQ1SNhoAjgoAIgH4AyYEUQR3BV4FvgaDBqEGyAAxGYECEjEYEERCBKUxGSMSMRgQREIBaTEZFDEYFBBEI0M2GgFJFSQSRDYaAkkVgQQSRDYaA0kVIxJENhoERwIiWYECCEwVEkQ2GgVHAiJZgQIITBUSRDYaBkcCIlmBAghMFRJENhoHRwIiWYECCEwVEkQ2GghJFSUSRDYaCUkVJRJENhoKSRUlEkQ2GgtJFSUSRDEAMgkSRCIoZUQURLEyCIAASwFBACJLAUmBChiACjAxMjM0NTY3ODlMI1hLAlBFAoEKCkUCQv/ZRwIVgAEwTgJNgA9hbGdvcmFuZDovL2FwcC9MUDIKRwOyLLIrsiqyKbIngBBBUkMtMjAgU21hcnQgQVNBsiaABkFSQy0yMLIlI7IkIrIjIQSyIoEDshAisgGzKLQ8Z0sMFycITGdLCxcnCkxnSwoiUycJTGdLCVcCACcLTGdLCFcCACcMTGdLB1cCACcNTGdLBlcCACcOTGcnB0sGZylLBWcnBUsEZypLA2ciKGVEFicPTFCwI0M2GgFJFSQSRBdJMRYjCUk4EIEEEkRLAYgFVEk4ESIoZURMSwESREsBOAAxABJESwE4FDEAEkRLATgSFERMOBUyAxJEMRkjEkQxAE8CcABFAUQxACtPAmYxACcEImYiJwllREAACjEASwFwAERBAAYxACcEI2YjQzYaAUkVJBJEF0k2GgJJTgIVJBJENhoDSU4CFYEEEkQ2GgRJTgIVIxJENhoFSU4CSSJZgQIITBUSRDYaBklOAkkiWYECCEwVEkQ2GgdJTgJJIlmBAghMFRJENhoISU4CSSJZgQIITBUSRDYaCUlOAhUlEkQ2GgpJTgJJFSUSRDYaC0lOAxUlEkQ2GgxJTgMVJRJETIgEYTEAIicHZUQSRCIpZUQTQQAIIillRDIDE0QiJwVlREsCE0EACSInBWVEMgMTRCIqZURLARNBAAgiKmVEMgMTREsLiAQOFksLSU8Cp0QXJwhMZ0sJFycKTGdLCCJTJwlMZ0sHVwIAJwtMZ0sGVwIAJwxMZ0sFVwIAJw1MZ0sEVwIAJw5MZycHSwRnKUsDZycFSwJnKksBZyNDNhoBSRUkEkQXSTYaAklOAhUkEkQ2GgNJTgJJFSUSRDYaBElOAxUlEkRMiAOcMgoSQQBZSwIXMQAiKWVEEkQyCksCSU8CE0QiKGVEiANsTwIIIicIZUQORCIrY0QiKGVEEkQiJwZlRBREIillRCIqZUQTQQAISSInBGNEFERLAhdLBExLA0sDiANNI0NJMgoSQQA5MQAiKWVETEsBEkRLAiIrY0QiKGVEEkQiJwZlRBREIiplRBNB/8RLAUkiJwRjRBREIillRBJEQv+xMQAiKmVEEkEAGksBIitjRCIoZURMSwESREsBIitjRBJEQv+NMQBLAklOAhJESSIrY0QiKGVETEsBEkRLAklOAiIrY0QSRCInBmVEFERMIicEY0QURCInBGNEFERC/1I2GgFJFSQSRBc2GgJJFSMSREyIAokxACInBWVEEkQiUycGTGcjQzYaAUkVJBJEFzYaAkkVJRJENhoDSRUjEkRPAogCWksBIitjRCIoZUQSRDEAIicFZUQSRCJTJwRMZiNDNhoBSRUkEkQXSTYaAklOAhUlEkQxFiMISTgQgQQSRDEZgQISRDEAIitjREsCEkQyBEsBDURJOBFLAhJESTgAMQASREk4EhREOBUyAxNEcQtBAFcxFiMISTgQgQQSRDgVSwFJTgISRCIoZURLBBJESwITQQAkSwFJIitjRCIoZUQSRCInBmVEFEQxACInBGNEFEQiJwRjRBREMQBLA0lOAnAARDEASwSIAaEjQzYaAUkVJBJEF0mIAYQxACInB2VEEkSxMgqyALIhgQOyECKyAbMnCCJnJwoiZycJImcnC4AAZycMgABnJw2AAGcnDoAAZycHMgNnKTIDZycFMgNnKjIDZygiZycGImcjQzYaAUkVJBJEF4gBJSInCGVEFiInCmVEFkmTJQ5EVwQEIicJZUQnECJPAlQiJwtlREkVFlcGAkxQIicMZURJFRZXBgJMUCInDWVESRUWVwYCTFAiJw5lREkVFlcGAkxQIicHZUQiKWVEIicFZUQiKmVETwpPClBPCVCAAgCVUEsIFYGVAQhJFlcGAk8CTFBLCBVPAghJFlcGAk8CTFBLBxVPAggWVwYCUE8EUE8DUE8CUExQTwRQTwNQTwJQTFAnD0xQsCNDNhoBSRUkEkQXiABgIicGZUQnECJPAlQnD0xQsCNDNhoBSRUkEkQXNhoCSRUlEkRMiAA5IicEY0QnECJPAlQnD0xQsCNDNhoBSRUkEkQXSYgAGogACBYnD0xQsCNDigEBMgqL/3AARCEETAmJigEAIihlRElEi/8SRImKBACxMgqyAIv/shSL/rITi/2yEov8shGBBLIQIrIBs4k=", "clear": "C4EBQw=="}, "desc": "\n ARC-0020 (Smart ASA) - Reference Implementation\n ", "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgOCAzMiAxODQ0Njc0NDA3MzcwOTU1MTYxNQogICAgYnl0ZWNibG9jayAic21hcnRfYXNhX2lkIiAicmVzZXJ2ZV9hZGRyIiAiY2xhd2JhY2tfYWRkciIgImFjY291bnRfc21hcnRfYXNhX2lkIiAiYWNjb3VudF9mcm96ZW4iICJmcmVlemVfYWRkciIgImdsb2JhbF9mcm96ZW4iICJtYW5hZ2VyX2FkZHIiICJ0b3RhbCIgImRlZmF1bHRfZnJvemVuIiAiZGVjaW1hbHMiICJ1bml0X25hbWUiICJuYW1lIiAidXJsIiAibWV0YWRhdGFfaGFzaCIgMHgxNTFmN2M3NSAweDAwCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQxLTQyCiAgICAvLyAjIFByZWNvbmRpdGlvbnMKICAgIC8vIGFzc2VydCBUeG4uZ2xvYmFsX251bV9ieXRlX3NsaWNlID09IGNmZy5HTE9CQUxfQllURVMsIGVyci5XUk9OR19HTE9CQUxfQllURVMKICAgIHR4biBHbG9iYWxOdW1CeXRlU2xpY2UKICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIFdyb25nIEdsb2JhbCBCeXRlcyBhbGxvY2F0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQzCiAgICAvLyBhc3NlcnQgVHhuLmdsb2JhbF9udW1fdWludCA9PSBjZmcuR0xPQkFMX1VJTlRTLCBlcnIuV1JPTkdfR0xPQkFMX1VJTlRTCiAgICB0eG4gR2xvYmFsTnVtVWludAogICAgcHVzaGludCA1IC8vIDUKICAgID09CiAgICBhc3NlcnQgLy8gV3JvbmcgR2xvYmFsIFVJbnRzIGFsbG9jYXRpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NDQKICAgIC8vIGFzc2VydCBUeG4ubG9jYWxfbnVtX2J5dGVfc2xpY2UgPT0gY2ZnLkxPQ0FMX0JZVEVTLCBlcnIuV1JPTkdfTE9DQUxfQllURVMKICAgIHR4biBMb2NhbE51bUJ5dGVTbGljZQogICAgIQogICAgYXNzZXJ0IC8vIFdyb25nIExvY2FsIEJ5dGVzIGFsbG9jYXRpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NDUKICAgIC8vIGFzc2VydCBUeG4ubG9jYWxfbnVtX3VpbnQgPT0gY2ZnLkxPQ0FMX1VJTlRTLCBlcnIuV1JPTkdfTE9DQUxfVUlOVFMKICAgIHR4biBMb2NhbE51bVVpbnQKICAgIHB1c2hpbnQgMiAvLyAyCiAgICA9PQogICAgYXNzZXJ0IC8vIFdyb25nIExvY2FsIFVJbnRzIGFsbG9jYXRpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NDctNDkKICAgIC8vICMgR0xPQkFMIFNUQVRFCiAgICAvLyAjIEFTQSBGaWVsZHMKICAgIC8vIHNlbGYudG90YWwgPSBVSW50NjQoKQogICAgYnl0ZWMgOCAvLyAidG90YWwiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTAKICAgIC8vIHNlbGYuZGVjaW1hbHMgPSBVSW50NjQoKQogICAgYnl0ZWMgMTAgLy8gImRlY2ltYWxzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjUxCiAgICAvLyBzZWxmLmRlZmF1bHRfZnJvemVuID0gRmFsc2UKICAgIGJ5dGVjIDkgLy8gImRlZmF1bHRfZnJvemVuIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjUyCiAgICAvLyBzZWxmLnVuaXRfbmFtZSA9IFN0cmluZygpCiAgICBieXRlYyAxMSAvLyAidW5pdF9uYW1lIgogICAgcHVzaGJ5dGVzICIiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1MwogICAgLy8gc2VsZi5uYW1lID0gU3RyaW5nKCkKICAgIGJ5dGVjIDEyIC8vICJuYW1lIgogICAgcHVzaGJ5dGVzICIiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1NAogICAgLy8gc2VsZi51cmwgPSBTdHJpbmcoKQogICAgYnl0ZWMgMTMgLy8gInVybCIKICAgIHB1c2hieXRlcyAiIgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTUKICAgIC8vIHNlbGYubWV0YWRhdGFfaGFzaCA9IEJ5dGVzKCkKICAgIGJ5dGVjIDE0IC8vICJtZXRhZGF0YV9oYXNoIgogICAgcHVzaGJ5dGVzIDB4CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1NgogICAgLy8gc2VsZi5tYW5hZ2VyX2FkZHIgPSBBY2NvdW50KCkKICAgIGJ5dGVjIDcgLy8gIm1hbmFnZXJfYWRkciIKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTcKICAgIC8vIHNlbGYucmVzZXJ2ZV9hZGRyID0gQWNjb3VudCgpCiAgICBieXRlY18xIC8vICJyZXNlcnZlX2FkZHIiCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjU4CiAgICAvLyBzZWxmLmZyZWV6ZV9hZGRyID0gQWNjb3VudCgpCiAgICBieXRlYyA1IC8vICJmcmVlemVfYWRkciIKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTkKICAgIC8vIHNlbGYuY2xhd2JhY2tfYWRkciA9IEFjY291bnQoKQogICAgYnl0ZWNfMiAvLyAiY2xhd2JhY2tfYWRkciIKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NjAtNjEKICAgIC8vICMgU21hcnQgQVNBIEZpZWxkcwogICAgLy8gc2VsZi5zbWFydF9hc2FfaWQgPSBVSW50NjQoKQogICAgYnl0ZWNfMCAvLyAic21hcnRfYXNhX2lkIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjYyCiAgICAvLyBzZWxmLmdsb2JhbF9mcm96ZW4gPSBGYWxzZQogICAgYnl0ZWMgNiAvLyAiZ2xvYmFsX2Zyb3plbiIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjI3LTM1CiAgICAvLyBjbGFzcyBTbWFydEFzYSgKICAgIC8vICAgICBBUkM0Q29udHJhY3QsCiAgICAvLyAgICAgc3RhdGVfdG90YWxzPVN0YXRlVG90YWxzKAogICAgLy8gICAgICAgICBnbG9iYWxfYnl0ZXM9Y2ZnLkdMT0JBTF9CWVRFUywKICAgIC8vICAgICAgICAgZ2xvYmFsX3VpbnRzPWNmZy5HTE9CQUxfVUlOVFMsCiAgICAvLyAgICAgICAgIGxvY2FsX2J5dGVzPWNmZy5MT0NBTF9CWVRFUywKICAgIC8vICAgICAgICAgbG9jYWxfdWludHM9Y2ZnLkxPQ0FMX1VJTlRTLAogICAgLy8gICAgICksCiAgICAvLyApOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMjIKICAgIHB1c2hieXRlc3MgMHg0ODY0MTY0NSAweDNhMDQ1YmRjIC8vIG1ldGhvZCAiYXNzZXRfb3B0X2luKHVpbnQ2NCxheGZlcil2b2lkIiwgbWV0aG9kICJhc3NldF9jbG9zZV9vdXQodWludDY0LGFkZHJlc3Mpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fYXNzZXRfb3B0X2luX3JvdXRlQDUgbWFpbl9hc3NldF9jbG9zZV9vdXRfcm91dGVANgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjI3LTM1CiAgICAvLyBjbGFzcyBTbWFydEFzYSgKICAgIC8vICAgICBBUkM0Q29udHJhY3QsCiAgICAvLyAgICAgc3RhdGVfdG90YWxzPVN0YXRlVG90YWxzKAogICAgLy8gICAgICAgICBnbG9iYWxfYnl0ZXM9Y2ZnLkdMT0JBTF9CWVRFUywKICAgIC8vICAgICAgICAgZ2xvYmFsX3VpbnRzPWNmZy5HTE9CQUxfVUlOVFMsCiAgICAvLyAgICAgICAgIGxvY2FsX2J5dGVzPWNmZy5MT0NBTF9CWVRFUywKICAgIC8vICAgICAgICAgbG9jYWxfdWludHM9Y2ZnLkxPQ0FMX1VJTlRTLAogICAgLy8gICAgICksCiAgICAvLyApOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQKICAgIHB1c2hieXRlc3MgMHhlN2VjZDVhOCAweGY4ODE5ZmViIDB4N2VhY2I3NzUgMHhhMTMzZDU4MSAweGZmNTNhZGVmIDB4ZWQ2NDQ1MmYgMHgyZTliOTAzOCAweDk3OWI5OTcyIDB4NDhhNjNjYzkgMHg0NmFkMGQ1MiAvLyBtZXRob2QgImFzc2V0X2NyZWF0ZSh1aW50NjQsdWludDMyLGJvb2wsc3RyaW5nLHN0cmluZyxzdHJpbmcsYnl0ZVtdLGFkZHJlc3MsYWRkcmVzcyxhZGRyZXNzLGFkZHJlc3MpdWludDY0IiwgbWV0aG9kICJhc3NldF9jb25maWcodWludDY0LHVpbnQ2NCx1aW50MzIsYm9vbCxzdHJpbmcsc3RyaW5nLHN0cmluZyxieXRlW10sYWRkcmVzcyxhZGRyZXNzLGFkZHJlc3MsYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJhc3NldF90cmFuc2Zlcih1aW50NjQsdWludDY0LGFkZHJlc3MsYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJhc3NldF9mcmVlemUodWludDY0LGJvb2wpdm9pZCIsIG1ldGhvZCAiYWNjb3VudF9mcmVlemUodWludDY0LGFkZHJlc3MsYm9vbCl2b2lkIiwgbWV0aG9kICJhc3NldF9kZXN0cm95KHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJnZXRfYXNzZXRfY29uZmlnKHVpbnQ2NCkodWludDY0LHVpbnQzMixib29sLHN0cmluZyxzdHJpbmcsc3RyaW5nLGJ5dGVbXSxhZGRyZXNzLGFkZHJlc3MsYWRkcmVzcyxhZGRyZXNzKSIsIG1ldGhvZCAiZ2V0X2Fzc2V0X2lzX2Zyb3plbih1aW50NjQpYm9vbCIsIG1ldGhvZCAiZ2V0X2FjY291bnRfaXNfZnJvemVuKHVpbnQ2NCxhZGRyZXNzKWJvb2wiLCBtZXRob2QgImdldF9jaXJjdWxhdGluZ19zdXBwbHkodWludDY0KXVpbnQ2NCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIGFzc2V0X2NyZWF0ZSBhc3NldF9jb25maWcgYXNzZXRfdHJhbnNmZXIgYXNzZXRfZnJlZXplIGFjY291bnRfZnJlZXplIGFzc2V0X2Rlc3Ryb3kgZ2V0X2Fzc2V0X2NvbmZpZyBnZXRfYXNzZXRfaXNfZnJvemVuIGdldF9hY2NvdW50X2lzX2Zyb3plbiBnZXRfY2lyY3VsYXRpbmdfc3VwcGx5CiAgICBlcnIKCm1haW5fYXNzZXRfY2xvc2Vfb3V0X3JvdXRlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQ2NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJDbG9zZU91dCJdKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCAyIC8vIENsb3NlT3V0CiAgICA9PQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgQ2xvc2VPdXQgJiYgY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYiBhc3NldF9jbG9zZV9vdXQKCm1haW5fYXNzZXRfb3B0X2luX3JvdXRlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjI4OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJPcHRJbiJdKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18xIC8vIE9wdEluCiAgICA9PQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgT3B0SW4gJiYgY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYiBhc3NldF9vcHRfaW4KCm1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMjI6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgJiYKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wICYmIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5zbWFydF9hc2EuY29udHJhY3QuU21hcnRBc2EuYXNzZXRfY3JlYXRlW3JvdXRpbmddKCkgLT4gdm9pZDoKYXNzZXRfY3JlYXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToyMzUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgNCAvLyA0CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQzMgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmJvb2wKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZHVwbiAyCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBkdXBuIDIKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDIgLy8gMgogICAgKwogICAgc3dhcAogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDcKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA5CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEwCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDExCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MjY5LTI3MAogICAgLy8gIyBQcmVjb25kaXRpb25zCiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBHbG9iYWwuY3JlYXRvcl9hZGRyZXNzLCBlcnIuVU5BVVRIT1JJWkVECiAgICB0eG4gU2VuZGVyCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gVW5hdXRob3JpemVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjI3MQogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLnNtYXJ0X2FzYV9pZCwgZXJyLkVYSVNUSU5HX0NUUkxfQVNBCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAic21hcnRfYXNhX2lkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnNtYXJ0X2FzYV9pZCBleGlzdHMKICAgICEKICAgIGFzc2VydCAvLyBDb250cm9sbGVkIEFTQSBhbHJlYWR5IGNyZWF0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTkyLTIwNQogICAgLy8gaXR4bi5Bc3NldENvbmZpZygKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICAgICB0b3RhbD1jZmcuVE9UQUwsCiAgICAvLyAgICAgZGVjaW1hbHM9Y2ZnLkRFQ0lNQUxTLAogICAgLy8gICAgIGRlZmF1bHRfZnJvemVuPWNmZy5ERUZBVUxUX0ZST1pFTiwKICAgIC8vICAgICB1bml0X25hbWU9Y2ZnLlVOSVRfTkFNRSwKICAgIC8vICAgICBhc3NldF9uYW1lPWNmZy5OQU1FLAogICAgLy8gICAgIHVybD1jZmcuQVBQX0JJTkRJTkcgKyBzZWxmLml0b2EoR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25faWQuaWQpLAogICAgLy8gICAgIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgZnJlZXplPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgY2xhd2JhY2s9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICkKICAgIC8vIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToxOTkKICAgIC8vIHVybD1jZmcuQVBQX0JJTkRJTkcgKyBzZWxmLml0b2EoR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25faWQuaWQpLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbklECiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjcyCiAgICAvLyBhY2MgPSBCeXRlcygpCiAgICBwdXNoYnl0ZXMgMHgKCmFzc2V0X2NyZWF0ZV93aGlsZV90b3BAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NzMKICAgIC8vIHdoaWxlIG4gPiAwOgogICAgZGlnIDEKICAgIGJ6IGFzc2V0X2NyZWF0ZV9hZnRlcl93aGlsZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5Ojc0CiAgICAvLyBhY2MgPSBkaWdpdHNbbiAlIDEwXSArIGFjYwogICAgZGlnIDEKICAgIGR1cAogICAgcHVzaGludCAxMCAvLyAxMAogICAgJQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo3MQogICAgLy8gZGlnaXRzID0gQnl0ZXMoYiIwMTIzNDU2Nzg5IikKICAgIHB1c2hieXRlcyAweDMwMzEzMjMzMzQzNTM2MzczODM5CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5Ojc0CiAgICAvLyBhY2MgPSBkaWdpdHNbbiAlIDEwXSArIGFjYwogICAgc3dhcAogICAgaW50Y18xIC8vIDEKICAgIGV4dHJhY3QzCiAgICBkaWcgMgogICAgY29uY2F0CiAgICBidXJ5IDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NzUKICAgIC8vIG4gLy89IDEwCiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICAvCiAgICBidXJ5IDIKICAgIGIgYXNzZXRfY3JlYXRlX3doaWxlX3RvcEAyCgphc3NldF9jcmVhdGVfYWZ0ZXJfd2hpbGVANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NzYKICAgIC8vIHJldHVybiBhY2Mgb3IgQnl0ZXMoYiIwIikKICAgIGR1cG4gMgogICAgbGVuCiAgICBwdXNoYnl0ZXMgMHgzMAogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjE5OQogICAgLy8gdXJsPWNmZy5BUFBfQklORElORyArIHNlbGYuaXRvYShHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9pZC5pZCksCiAgICBwdXNoYnl0ZXMgMHg2MTZjNjc2ZjcyNjE2ZTY0M2EyZjJmNjE3MDcwMmYKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToyMDAKICAgIC8vIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjIwMS0yMDMKICAgIC8vIHJlc2VydmU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vIGZyZWV6ZT1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gY2xhd2JhY2s9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGR1cG4gMwogICAgaXR4bl9maWVsZCBDb25maWdBc3NldENsYXdiYWNrCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RnJlZXplCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0UmVzZXJ2ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVUkwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTk4CiAgICAvLyBhc3NldF9uYW1lPWNmZy5OQU1FLAogICAgcHVzaGJ5dGVzICJBUkMtMjAgU21hcnQgQVNBIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTk3CiAgICAvLyB1bml0X25hbWU9Y2ZnLlVOSVRfTkFNRSwKICAgIHB1c2hieXRlcyAiQVJDLTIwIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFVuaXROYW1lCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjE5NgogICAgLy8gZGVmYXVsdF9mcm96ZW49Y2ZnLkRFRkFVTFRfRlJPWkVOLAogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWZhdWx0RnJvemVuCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjE5NQogICAgLy8gZGVjaW1hbHM9Y2ZnLkRFQ0lNQUxTLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToxOTQKICAgIC8vIHRvdGFsPWNmZy5UT1RBTCwKICAgIGludGMgNCAvLyAxODQ0Njc0NDA3MzcwOTU1MTYxNQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFRvdGFsCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjE5MgogICAgLy8gaXR4bi5Bc3NldENvbmZpZygKICAgIHB1c2hpbnQgMyAvLyBhY2ZnCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjE5MwogICAgLy8gZmVlPTAsCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTkyLTIwNQogICAgLy8gaXR4bi5Bc3NldENvbmZpZygKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICAgICB0b3RhbD1jZmcuVE9UQUwsCiAgICAvLyAgICAgZGVjaW1hbHM9Y2ZnLkRFQ0lNQUxTLAogICAgLy8gICAgIGRlZmF1bHRfZnJvemVuPWNmZy5ERUZBVUxUX0ZST1pFTiwKICAgIC8vICAgICB1bml0X25hbWU9Y2ZnLlVOSVRfTkFNRSwKICAgIC8vICAgICBhc3NldF9uYW1lPWNmZy5OQU1FLAogICAgLy8gICAgIHVybD1jZmcuQVBQX0JJTkRJTkcgKyBzZWxmLml0b2EoR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25faWQuaWQpLAogICAgLy8gICAgIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgZnJlZXplPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgY2xhd2JhY2s9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICkKICAgIC8vIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MjczLTI3NAogICAgLy8gIyBFZmZlY3RzCiAgICAvLyBzZWxmLnNtYXJ0X2FzYV9pZCA9IHNlbGYuaW5uZXJfYXNzZXRfY29uZmlnKCkKICAgIGJ5dGVjXzAgLy8gInNtYXJ0X2FzYV9pZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTkyLTIwNgogICAgLy8gaXR4bi5Bc3NldENvbmZpZygKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICAgICB0b3RhbD1jZmcuVE9UQUwsCiAgICAvLyAgICAgZGVjaW1hbHM9Y2ZnLkRFQ0lNQUxTLAogICAgLy8gICAgIGRlZmF1bHRfZnJvemVuPWNmZy5ERUZBVUxUX0ZST1pFTiwKICAgIC8vICAgICB1bml0X25hbWU9Y2ZnLlVOSVRfTkFNRSwKICAgIC8vICAgICBhc3NldF9uYW1lPWNmZy5OQU1FLAogICAgLy8gICAgIHVybD1jZmcuQVBQX0JJTkRJTkcgKyBzZWxmLml0b2EoR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25faWQuaWQpLAogICAgLy8gICAgIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgZnJlZXplPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgY2xhd2JhY2s9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICkKICAgIC8vIC5zdWJtaXQoKQogICAgLy8gLmNyZWF0ZWRfYXNzZXQuaWQKICAgIGl0eG4gQ3JlYXRlZEFzc2V0SUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MjczLTI3NAogICAgLy8gIyBFZmZlY3RzCiAgICAvLyBzZWxmLnNtYXJ0X2FzYV9pZCA9IHNlbGYuaW5uZXJfYXNzZXRfY29uZmlnKCkKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjI3NQogICAgLy8gc2VsZi50b3RhbCA9IHRvdGFsLm5hdGl2ZQogICAgZGlnIDEyCiAgICBidG9pCiAgICBieXRlYyA4IC8vICJ0b3RhbCIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjI3NgogICAgLy8gc2VsZi5kZWNpbWFscyA9IGRlY2ltYWxzLm5hdGl2ZQogICAgZGlnIDExCiAgICBidG9pCiAgICBieXRlYyAxMCAvLyAiZGVjaW1hbHMiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToyNzcKICAgIC8vIHNlbGYuZGVmYXVsdF9mcm96ZW4gPSBkZWZhdWx0X2Zyb3plbi5uYXRpdmUKICAgIGRpZyAxMAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgYnl0ZWMgOSAvLyAiZGVmYXVsdF9mcm96ZW4iCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToyNzgKICAgIC8vIHNlbGYudW5pdF9uYW1lID0gdW5pdF9uYW1lLm5hdGl2ZQogICAgZGlnIDkKICAgIGV4dHJhY3QgMiAwCiAgICBieXRlYyAxMSAvLyAidW5pdF9uYW1lIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6Mjc5CiAgICAvLyBzZWxmLm5hbWUgPSBuYW1lLm5hdGl2ZQogICAgZGlnIDgKICAgIGV4dHJhY3QgMiAwCiAgICBieXRlYyAxMiAvLyAibmFtZSIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjI4MAogICAgLy8gc2VsZi51cmwgPSB1cmwubmF0aXZlCiAgICBkaWcgNwogICAgZXh0cmFjdCAyIDAKICAgIGJ5dGVjIDEzIC8vICJ1cmwiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToyODEKICAgIC8vIHNlbGYubWV0YWRhdGFfaGFzaCA9IG1ldGFkYXRhX2hhc2gubmF0aXZlCiAgICBkaWcgNgogICAgZXh0cmFjdCAyIDAKICAgIGJ5dGVjIDE0IC8vICJtZXRhZGF0YV9oYXNoIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MjgyCiAgICAvLyBzZWxmLm1hbmFnZXJfYWRkciA9IG1hbmFnZXJfYWRkci5uYXRpdmUKICAgIGJ5dGVjIDcgLy8gIm1hbmFnZXJfYWRkciIKICAgIGRpZyA2CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToyODMKICAgIC8vIHNlbGYucmVzZXJ2ZV9hZGRyID0gcmVzZXJ2ZV9hZGRyLm5hdGl2ZQogICAgYnl0ZWNfMSAvLyAicmVzZXJ2ZV9hZGRyIgogICAgZGlnIDUKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjI4NAogICAgLy8gc2VsZi5mcmVlemVfYWRkciA9IGZyZWV6ZV9hZGRyLm5hdGl2ZQogICAgYnl0ZWMgNSAvLyAiZnJlZXplX2FkZHIiCiAgICBkaWcgNAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6Mjg1CiAgICAvLyBzZWxmLmNsYXdiYWNrX2FkZHIgPSBjbGF3YmFja19hZGRyLm5hdGl2ZQogICAgYnl0ZWNfMiAvLyAiY2xhd2JhY2tfYWRkciIKICAgIGRpZyAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToyODYKICAgIC8vIHJldHVybiBhcmM0LlVJbnQ2NChzZWxmLnNtYXJ0X2FzYV9pZCkKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJzbWFydF9hc2FfaWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc21hcnRfYXNhX2lkIGV4aXN0cwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToyMzUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgYnl0ZWMgMTUgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuc21hcnRfYXNhLmNvbnRyYWN0LlNtYXJ0QXNhLmFzc2V0X29wdF9pbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmFzc2V0X29wdF9pbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6Mjg4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoYWxsb3dfYWN0aW9ucz1bIk9wdEluIl0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICBkdXAKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgcHVzaGludCA0IC8vIGF4ZmVyCiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgYXhmZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6Mjk5LTMwMAogICAgLy8gIyBQcmVjb25kaXRpb25zCiAgICAvLyBzZWxmLmFzc2VydF9jb21tb25fcHJlY29uZGl0aW9ucyhhc3NldC5pZCkKICAgIGRpZyAxCiAgICBjYWxsc3ViIGFzc2VydF9jb21tb25fcHJlY29uZGl0aW9ucwogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozMDQKICAgIC8vIGFzc2VydCBjdHJsX2FzYV9vcHRfaW4ueGZlcl9hc3NldC5pZCA9PSBzZWxmLnNtYXJ0X2FzYV9pZCwgZXJyLk9QVF9JTl9XUk9OR19BU0EKICAgIGR1cAogICAgZ3R4bnMgWGZlckFzc2V0CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAic21hcnRfYXNhX2lkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnNtYXJ0X2FzYV9pZCBleGlzdHMKICAgIHN3YXAKICAgIGRpZyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIFdyb25nIEFTQSBPcHQgSW4gSUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MzA1CiAgICAvLyBhc3NlcnQgY3RybF9hc2Ffb3B0X2luLnNlbmRlciA9PSBUeG4uc2VuZGVyLCBlcnIuT1BUX0lOX1dST05HX1NFTkRFUgogICAgZGlnIDEKICAgIGd0eG5zIFNlbmRlcgogICAgdHhuIFNlbmRlcgogICAgPT0KICAgIGFzc2VydCAvLyBXcm9uZyBBU0EgT3B0IEluIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozMDYKICAgIC8vIGFzc2VydCBjdHJsX2FzYV9vcHRfaW4uYXNzZXRfcmVjZWl2ZXIgPT0gVHhuLnNlbmRlciwgZXJyLk9QVF9JTl9XUk9OR19SRUNFSVZFUgogICAgZGlnIDEKICAgIGd0eG5zIEFzc2V0UmVjZWl2ZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQgLy8gV3JvbmcgQVNBIE9wdCBJbiBSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozMDgKICAgIC8vIGN0cmxfYXNhX29wdF9pbi5hc3NldF9hbW91bnQgPT0gMAogICAgZGlnIDEKICAgIGd0eG5zIEFzc2V0QW1vdW50CiAgICAhCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjMwNy0zMDkKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgY3RybF9hc2Ffb3B0X2luLmFzc2V0X2Ftb3VudCA9PSAwCiAgICAvLyApLCBlcnIuT1BUX0lOX1dST05HX0FNT1VOVCAgIyBQZWRhbnQ6IENvbnRyb2xsZWQgQVNBIGlzIGRlZmF1bHQgZnJvemVuCiAgICBhc3NlcnQgLy8gV3JvbmcgQVNBIE9wdCBJbiBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MzExCiAgICAvLyBjdHJsX2FzYV9vcHRfaW4uYXNzZXRfY2xvc2VfdG8gPT0gR2xvYmFsLnplcm9fYWRkcmVzcwogICAgc3dhcAogICAgZ3R4bnMgQXNzZXRDbG9zZVRvCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjMxMC0zMTIKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgY3RybF9hc2Ffb3B0X2luLmFzc2V0X2Nsb3NlX3RvID09IEdsb2JhbC56ZXJvX2FkZHJlc3MKICAgIC8vICksIGVyci5PUFRfSU5fV1JPTkdfQ0xPU0VfVE8KICAgIGFzc2VydCAvLyBGb3JiaWRkZW4gQ2xvc2UgT3V0IG9uIE9wdCBJbgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozMTMKICAgIC8vIGFzc2VydCBUeG4ub25fY29tcGxldGlvbiA9PSBPbkNvbXBsZXRlQWN0aW9uLk9wdEluLCBlcnIuV1JPTkdfT05fQ09NUExFVEUKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMSAvLyBPcHRJbgogICAgPT0KICAgIGFzc2VydCAvLyBXcm9uZyBPbiBDb21wbGV0ZSBBY3Rpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MzE0CiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlci5pc19vcHRlZF9pbigKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MzE0LTMxNgogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIuaXNfb3B0ZWRfaW4oCiAgICAvLyAgICAgYXNzZXQKICAgIC8vICksIGVyci5NSVNTSU5HX0NUUkxfQVNBICAjIFBlZGFudDogY3RybF9hc2Ffb3B0X2luIGlzIGNoZWNrZWQgcHJvcGVybHkKICAgIHVuY292ZXIgMgogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBNaXNzaW5nIENvbnRyb2xsZWQgQVNBCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjMxOC0zMTkKICAgIC8vICMgTG9jYWwgU3RhdGUgSW5pdAogICAgLy8gc2VsZi5hY2NvdW50X3NtYXJ0X2FzYV9pZFtUeG4uc2VuZGVyXSA9IHNlbGYuc21hcnRfYXNhX2lkCiAgICB0eG4gU2VuZGVyCiAgICBieXRlY18zIC8vICJhY2NvdW50X3NtYXJ0X2FzYV9pZCIKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozMjAKICAgIC8vIHNlbGYuYWNjb3VudF9mcm96ZW5bVHhuLnNlbmRlcl0gPSBGYWxzZQogICAgdHhuIFNlbmRlcgogICAgYnl0ZWMgNCAvLyAiYWNjb3VudF9mcm96ZW4iCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozMjQKICAgIC8vIHNlbGYuZGVmYXVsdF9mcm96ZW4gb3IgYXNzZXQuYmFsYW5jZShUeG4uc2VuZGVyKSA+IDAKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA5IC8vICJkZWZhdWx0X2Zyb3plbiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kZWZhdWx0X2Zyb3plbiBleGlzdHMKICAgIGJueiBhc3NldF9vcHRfaW5faWZfYm9keUAzCiAgICB0eG4gU2VuZGVyCiAgICBkaWcgMQogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBhc3NlcnQgLy8gYWNjb3VudCBvcHRlZCBpbnRvIGFzc2V0CiAgICBieiBhc3NldF9vcHRfaW5fYWZ0ZXJfaWZfZWxzZUA0Cgphc3NldF9vcHRfaW5faWZfYm9keUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozMjYKICAgIC8vIHNlbGYuYWNjb3VudF9mcm96ZW5bVHhuLnNlbmRlcl0gPSBUcnVlCiAgICB0eG4gU2VuZGVyCiAgICBieXRlYyA0IC8vICJhY2NvdW50X2Zyb3plbiIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfbG9jYWxfcHV0Cgphc3NldF9vcHRfaW5fYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToyODgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChhbGxvd19hY3Rpb25zPVsiT3B0SW4iXSkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuc21hcnRfYXNhLmNvbnRyYWN0LlNtYXJ0QXNhLmFzc2V0X2NvbmZpZ1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmFzc2V0X2NvbmZpZzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MzI4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBjb3ZlciAyCiAgICBsZW4KICAgIHB1c2hpbnQgNCAvLyA0CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQzMgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmJvb2wKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDUKICAgIGR1cAogICAgY292ZXIgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNwogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDIgLy8gMgogICAgKwogICAgc3dhcAogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDgKICAgIGR1cAogICAgY292ZXIgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA5CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTEKICAgIGR1cAogICAgY292ZXIgMwogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTIKICAgIGR1cAogICAgY292ZXIgMwogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozNjEtMzYyCiAgICAvLyAjIFByZWNvbmRpdGlvbnMKICAgIC8vIHNlbGYuYXNzZXJ0X2NvbW1vbl9wcmVjb25kaXRpb25zKGNvbmZpZ19hc3NldC5pZCkKICAgIHN3YXAKICAgIGNhbGxzdWIgYXNzZXJ0X2NvbW1vbl9wcmVjb25kaXRpb25zCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjM2MwogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIgPT0gc2VsZi5tYW5hZ2VyX2FkZHIsIGVyci5VTkFVVEhPUklaRURfTUFOQUdFUgogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDcgLy8gIm1hbmFnZXJfYWRkciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5tYW5hZ2VyX2FkZHIgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIFVuYXV0aG9yaXplZCBNYW5hZ2VyCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjM2NAogICAgLy8gaWYgcmVzZXJ2ZV9hZGRyICE9IHNlbGYucmVzZXJ2ZV9hZGRyOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gInJlc2VydmVfYWRkciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5yZXNlcnZlX2FkZHIgZXhpc3RzCiAgICAhPQogICAgYnogYXNzZXRfY29uZmlnX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozNjUKICAgIC8vIGFzc2VydCBzZWxmLnJlc2VydmVfYWRkciAhPSBHbG9iYWwuemVyb19hZGRyZXNzLCBlcnIuRElTQUJMRURfUkVTRVJWRQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gInJlc2VydmVfYWRkciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5yZXNlcnZlX2FkZHIgZXhpc3RzCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgICE9CiAgICBhc3NlcnQgLy8gUmVzZXJ2ZSBBZGRyZXNzIGhhcyBiZWVuIGRlbGV0ZWQKCmFzc2V0X2NvbmZpZ19hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjM2NgogICAgLy8gaWYgZnJlZXplX2FkZHIgIT0gc2VsZi5mcmVlemVfYWRkcjoKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJmcmVlemVfYWRkciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5mcmVlemVfYWRkciBleGlzdHMKICAgIGRpZyAyCiAgICAhPQogICAgYnogYXNzZXRfY29uZmlnX2FmdGVyX2lmX2Vsc2VANQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozNjcKICAgIC8vIGFzc2VydCBzZWxmLmZyZWV6ZV9hZGRyICE9IEdsb2JhbC56ZXJvX2FkZHJlc3MsIGVyci5ESVNBQkxFRF9GUkVFWkUKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJmcmVlemVfYWRkciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5mcmVlemVfYWRkciBleGlzdHMKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgIT0KICAgIGFzc2VydCAvLyBGcmVlemUgQWRkcmVzcyBoYXMgYmVlbiBkZWxldGVkCgphc3NldF9jb25maWdfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozNjgKICAgIC8vIGlmIGNsYXdiYWNrX2FkZHIgIT0gc2VsZi5jbGF3YmFja19hZGRyOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImNsYXdiYWNrX2FkZHIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY2xhd2JhY2tfYWRkciBleGlzdHMKICAgIGRpZyAxCiAgICAhPQogICAgYnogYXNzZXRfY29uZmlnX2FmdGVyX2lmX2Vsc2VANwogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozNjkKICAgIC8vIGFzc2VydCBzZWxmLmNsYXdiYWNrX2FkZHIgIT0gR2xvYmFsLnplcm9fYWRkcmVzcywgZXJyLkRJU0FCTEVEX0NMQVdCQUNLCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiY2xhd2JhY2tfYWRkciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5jbGF3YmFja19hZGRyIGV4aXN0cwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICAhPQogICAgYXNzZXJ0IC8vIENsYXdiYWNrIEFkZHJlc3MgaGFzIGJlZW4gZGVsZXRlZAoKYXNzZXRfY29uZmlnX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MzcwCiAgICAvLyBhc3NlcnQgdG90YWwgPj0gc2VsZi5jaXJjdWxhdGluZ19zdXBwbHkoY29uZmlnX2Fzc2V0KSwgZXJyLklOVkFMSURfVE9UQUwKICAgIGRpZyAxMQogICAgY2FsbHN1YiBjaXJjdWxhdGluZ19zdXBwbHkKICAgIGl0b2IKICAgIGRpZyAxMQogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGI+PQogICAgYXNzZXJ0IC8vIEludmFsaWQgVG90YWwsIG11c3QgYmUgPj0gY2lyY3VsYXRpbmcgc3VwcGx5CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjM3Mi0zNzMKICAgIC8vICMgRWZmZWN0cwogICAgLy8gc2VsZi50b3RhbCA9IHRvdGFsLm5hdGl2ZQogICAgYnRvaQogICAgYnl0ZWMgOCAvLyAidG90YWwiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozNzQKICAgIC8vIHNlbGYuZGVjaW1hbHMgPSBkZWNpbWFscy5uYXRpdmUKICAgIGRpZyA5CiAgICBidG9pCiAgICBieXRlYyAxMCAvLyAiZGVjaW1hbHMiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozNzUKICAgIC8vIHNlbGYuZGVmYXVsdF9mcm96ZW4gPSBkZWZhdWx0X2Zyb3plbi5uYXRpdmUKICAgIGRpZyA4CiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBieXRlYyA5IC8vICJkZWZhdWx0X2Zyb3plbiIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjM3NgogICAgLy8gc2VsZi51bml0X25hbWUgPSB1bml0X25hbWUubmF0aXZlCiAgICBkaWcgNwogICAgZXh0cmFjdCAyIDAKICAgIGJ5dGVjIDExIC8vICJ1bml0X25hbWUiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozNzcKICAgIC8vIHNlbGYubmFtZSA9IG5hbWUubmF0aXZlCiAgICBkaWcgNgogICAgZXh0cmFjdCAyIDAKICAgIGJ5dGVjIDEyIC8vICJuYW1lIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6Mzc4CiAgICAvLyBzZWxmLnVybCA9IHVybC5uYXRpdmUKICAgIGRpZyA1CiAgICBleHRyYWN0IDIgMAogICAgYnl0ZWMgMTMgLy8gInVybCIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjM3OQogICAgLy8gc2VsZi5tZXRhZGF0YV9oYXNoID0gbWV0YWRhdGFfaGFzaC5uYXRpdmUKICAgIGRpZyA0CiAgICBleHRyYWN0IDIgMAogICAgYnl0ZWMgMTQgLy8gIm1ldGFkYXRhX2hhc2giCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozODAKICAgIC8vIHNlbGYubWFuYWdlcl9hZGRyID0gbWFuYWdlcl9hZGRyLm5hdGl2ZQogICAgYnl0ZWMgNyAvLyAibWFuYWdlcl9hZGRyIgogICAgZGlnIDQKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjM4MQogICAgLy8gc2VsZi5yZXNlcnZlX2FkZHIgPSByZXNlcnZlX2FkZHIubmF0aXZlCiAgICBieXRlY18xIC8vICJyZXNlcnZlX2FkZHIiCiAgICBkaWcgMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MzgyCiAgICAvLyBzZWxmLmZyZWV6ZV9hZGRyID0gZnJlZXplX2FkZHIubmF0aXZlCiAgICBieXRlYyA1IC8vICJmcmVlemVfYWRkciIKICAgIGRpZyAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozODMKICAgIC8vIHNlbGYuY2xhd2JhY2tfYWRkciA9IGNsYXdiYWNrX2FkZHIubmF0aXZlCiAgICBieXRlY18yIC8vICJjbGF3YmFja19hZGRyIgogICAgZGlnIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjMyOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnNtYXJ0X2FzYS5jb250cmFjdC5TbWFydEFzYS5hc3NldF90cmFuc2Zlcltyb3V0aW5nXSgpIC0+IHZvaWQ6CmFzc2V0X3RyYW5zZmVyOgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTozODUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBjb3ZlciAzCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQwMi00MDMKICAgIC8vICMgUHJlY29uZGl0aW9ucwogICAgLy8gc2VsZi5hc3NlcnRfY29tbW9uX3ByZWNvbmRpdGlvbnMoeGZlcl9hc3NldC5pZCkKICAgIHN3YXAKICAgIGNhbGxzdWIgYXNzZXJ0X2NvbW1vbl9wcmVjb25kaXRpb25zCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQwNAogICAgLy8gaWYgYXNzZXRfc2VuZGVyID09IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3M6CiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGJ6IGFzc2V0X3RyYW5zZmVyX2Vsc2VfYm9keUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQwNgogICAgLy8gYXNzZXRfcmVjZWl2ZXI9YXNzZXRfcmVjZWl2ZXIsIGFzc2V0X2Ftb3VudD1hc3NldF9hbW91bnQubmF0aXZlCiAgICBkaWcgMgogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo5MS05MgogICAgLy8gIyBNaW50IHBlcm1pc3Npb24gcmVzdHJpY3RlZCB0byBSZXNlcnZlLgogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIgPT0gc2VsZi5yZXNlcnZlX2FkZHIsIGVyci5VTkFVVEhPUklaRURfUkVTRVJWRQogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gInJlc2VydmVfYWRkciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5yZXNlcnZlX2FkZHIgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIFVuYXV0aG9yaXplZCBSZXNlcnZlCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjkzLTk0CiAgICAvLyAjIEZvcmJpZGRlbiBzZWxmLW1pbnQgKHRvIENyZWF0b3IpIGFuZCBvdmVyLW1pbnQgKD4gdG90YWwpLgogICAgLy8gYXNzZXJ0IGFzc2V0X3JlY2VpdmVyICE9IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsIGVyci5TRUxGX01JTlQKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBkaWcgMgogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgICE9CiAgICBhc3NlcnQgLy8gRm9yYmlkZGVuIHNlbGYgbWludGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo5NgogICAgLy8gYXNzZXRfYW1vdW50ICsgc2VsZi5jaXJjdWxhdGluZ19zdXBwbHkoQXNzZXQoc2VsZi5zbWFydF9hc2FfaWQpKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInNtYXJ0X2FzYV9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zbWFydF9hc2FfaWQgZXhpc3RzCiAgICBjYWxsc3ViIGNpcmN1bGF0aW5nX3N1cHBseQogICAgdW5jb3ZlciAyCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5Ojk3CiAgICAvLyA8PSBzZWxmLnRvdGFsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOCAvLyAidG90YWwiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWwgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5Ojk2LTk3CiAgICAvLyBhc3NldF9hbW91bnQgKyBzZWxmLmNpcmN1bGF0aW5nX3N1cHBseShBc3NldChzZWxmLnNtYXJ0X2FzYV9pZCkpCiAgICAvLyA8PSBzZWxmLnRvdGFsCiAgICA8PQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo5NS05OAogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBhc3NldF9hbW91bnQgKyBzZWxmLmNpcmN1bGF0aW5nX3N1cHBseShBc3NldChzZWxmLnNtYXJ0X2FzYV9pZCkpCiAgICAvLyAgICAgPD0gc2VsZi50b3RhbAogICAgLy8gKSwgZXJyLk9WRVJfTUlOVAogICAgYXNzZXJ0IC8vIEZvcmJpZGRlbiBvdmVyIG1pbnRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTAxCiAgICAvLyBzZWxmLmFjY291bnRfc21hcnRfYXNhX2lkW2Fzc2V0X3JlY2VpdmVyXSA9PSBzZWxmLnNtYXJ0X2FzYV9pZAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImFjY291bnRfc21hcnRfYXNhX2lkIgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWNjb3VudF9zbWFydF9hc2FfaWQgZXhpc3RzIGZvciBhY2NvdW50CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAic21hcnRfYXNhX2lkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnNtYXJ0X2FzYV9pZCBleGlzdHMKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5Ojk5LTEwMgogICAgLy8gIyBJbiB0aGUgY2FzZSBvZiBDb250cm9sbGVkIEFTQSBkZXN0cm95ZWQgYW5kIHJlLWNyZWF0ZWQsIHRoZSBTbWFydCBBREEgSUQgaW4gTG9jYWwgU3RhdGUgY291bGQgYmUgb3V0ZGF0ZWQuCiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHNlbGYuYWNjb3VudF9zbWFydF9hc2FfaWRbYXNzZXRfcmVjZWl2ZXJdID09IHNlbGYuc21hcnRfYXNhX2lkCiAgICAvLyApLCBlcnIuSU5WQUxJRF9DVFJMX0FTQQogICAgYXNzZXJ0IC8vIEludmFsaWQgQ29udHJvbGxlZCBBU0EgSUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTAzCiAgICAvLyBhc3NlcnQgbm90IHNlbGYuZ2xvYmFsX2Zyb3plbiwgZXJyLkdMT0JBTF9GUk9aRU4KICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJnbG9iYWxfZnJvemVuIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmdsb2JhbF9mcm96ZW4gZXhpc3RzCiAgICAhCiAgICBhc3NlcnQgLy8gU21hcnQgQVNBIGlzIGdsb2JhbCBmcm96ZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTA0CiAgICAvLyBpZiBzZWxmLnJlc2VydmVfYWRkciAhPSBzZWxmLmNsYXdiYWNrX2FkZHI6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAicmVzZXJ2ZV9hZGRyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJlc2VydmVfYWRkciBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJjbGF3YmFja19hZGRyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNsYXdiYWNrX2FkZHIgZXhpc3RzCiAgICAhPQogICAgYnogYXNzZXRfdHJhbnNmZXJfYWZ0ZXJfaWZfZWxzZUAxMAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToxMDUKICAgIC8vIGFzc2VydCBub3Qgc2VsZi5hY2NvdW50X2Zyb3plblthc3NldF9yZWNlaXZlcl0sIGVyci5SRUNFSVZFUl9GUk9aRU4KICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gImFjY291bnRfZnJvemVuIgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWNjb3VudF9mcm96ZW4gZXhpc3RzIGZvciBhY2NvdW50CiAgICAhCiAgICBhc3NlcnQgLy8gUmVjZWl2ZXIgYWNjb3VudCBpcyBmcm96ZW4KCmFzc2V0X3RyYW5zZmVyX2FmdGVyX2lmX2Vsc2VAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQyMgogICAgLy8gYXNzZXRfYW1vdW50PWFzc2V0X2Ftb3VudC5uYXRpdmUsCiAgICBkaWcgMgogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo0MTktNDI1CiAgICAvLyAjIEVmZmVjdHMKICAgIC8vIHNlbGYuaW5uZXJfYXNzZXRfdHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD14ZmVyX2Fzc2V0LAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1hc3NldF9hbW91bnQubmF0aXZlLAogICAgLy8gICAgIGFzc2V0X3NlbmRlcj1hc3NldF9zZW5kZXIsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9YXNzZXRfcmVjZWl2ZXIsCiAgICAvLyApCiAgICBkaWcgNAogICAgc3dhcAogICAgZGlnIDMKICAgIGRpZyAzCiAgICBjYWxsc3ViIGlubmVyX2Fzc2V0X3RyYW5zZmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjM4NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgphc3NldF90cmFuc2Zlcl9lbHNlX2JvZHlAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NDA4CiAgICAvLyBlbGlmIGFzc2V0X3JlY2VpdmVyID09IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3M6CiAgICBkdXAKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYnogYXNzZXRfdHJhbnNmZXJfZWxzZV9ib2R5QDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTA5LTExMAogICAgLy8gIyBCdXJuIHBlcm1pc3Npb24gcmVzdHJpY3RlZCB0byBSZXNlcnZlLgogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIgPT0gc2VsZi5yZXNlcnZlX2FkZHIsIGVyci5VTkFVVEhPUklaRURfUkVTRVJWRQogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gInJlc2VydmVfYWRkciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5yZXNlcnZlX2FkZHIgZXhpc3RzCiAgICBzd2FwCiAgICBkaWcgMQogICAgPT0KICAgIGFzc2VydCAvLyBVbmF1dGhvcml6ZWQgUmVzZXJ2ZQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToxMTMKICAgIC8vIHNlbGYuYWNjb3VudF9zbWFydF9hc2FfaWRbYXNzZXRfc2VuZGVyXSA9PSBzZWxmLnNtYXJ0X2FzYV9pZAogICAgZGlnIDIKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJhY2NvdW50X3NtYXJ0X2FzYV9pZCIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnRfc21hcnRfYXNhX2lkIGV4aXN0cyBmb3IgYWNjb3VudAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInNtYXJ0X2FzYV9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zbWFydF9hc2FfaWQgZXhpc3RzCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToxMTEtMTE0CiAgICAvLyAjIEluIGNhc2Ugb2YgQ29udHJvbGxlZCBBU0EgZGVzdHJveWVkIGFuZCByZS1jcmVhdGVkIHRoZSBTbWFydCBBREEgSUQgaW4gTG9jYWwgU3RhdGUgY291bGQgYmUgb3V0ZGF0ZWQuCiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHNlbGYuYWNjb3VudF9zbWFydF9hc2FfaWRbYXNzZXRfc2VuZGVyXSA9PSBzZWxmLnNtYXJ0X2FzYV9pZAogICAgLy8gKSwgZXJyLklOVkFMSURfQ1RSTF9BU0EKICAgIGFzc2VydCAvLyBJbnZhbGlkIENvbnRyb2xsZWQgQVNBIElECiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjExNQogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLmdsb2JhbF9mcm96ZW4sIGVyci5HTE9CQUxfRlJPWkVOCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAiZ2xvYmFsX2Zyb3plbiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5nbG9iYWxfZnJvemVuIGV4aXN0cwogICAgIQogICAgYXNzZXJ0IC8vIFNtYXJ0IEFTQSBpcyBnbG9iYWwgZnJvemVuCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjExNgogICAgLy8gaWYgc2VsZi5yZXNlcnZlX2FkZHIgIT0gc2VsZi5jbGF3YmFja19hZGRyOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImNsYXdiYWNrX2FkZHIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY2xhd2JhY2tfYWRkciBleGlzdHMKICAgICE9CiAgICBieiBhc3NldF90cmFuc2Zlcl9hZnRlcl9pZl9lbHNlQDEwCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjExNwogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLmFjY291bnRfZnJvemVuW2Fzc2V0X3NlbmRlcl0sIGVyci5TRU5ERVJfRlJPWkVOCiAgICBkaWcgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAiYWNjb3VudF9mcm96ZW4iCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50X2Zyb3plbiBleGlzdHMgZm9yIGFjY291bnQKICAgICEKICAgIGFzc2VydCAvLyBTZW5kZXIgYWNjb3VudCBpcyBmcm96ZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTE4LTExOQogICAgLy8gIyBGb3JiaWRkZW4gY2xhd2JhY2sgdGhyb3VnaCBidXJuaW5nIChidXJuZWQgYW1vdW50IG5vdCBmcm9tIFJlc2VydmUpLgogICAgLy8gYXNzZXJ0IGFzc2V0X3NlbmRlciA9PSBzZWxmLnJlc2VydmVfYWRkciwgZXJyLkNMQVdCQUNLX0JVUk4KICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJyZXNlcnZlX2FkZHIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucmVzZXJ2ZV9hZGRyIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBGb3JiaWRkZW4gY2xhd2JhY2sgYnVybmluZwogICAgYiBhc3NldF90cmFuc2Zlcl9hZnRlcl9pZl9lbHNlQDEwCgphc3NldF90cmFuc2Zlcl9lbHNlX2JvZHlANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NDEwCiAgICAvLyBlbGlmIFR4bi5zZW5kZXIgPT0gc2VsZi5jbGF3YmFja19hZGRyOgogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImNsYXdiYWNrX2FkZHIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY2xhd2JhY2tfYWRkciBleGlzdHMKICAgID09CiAgICBieiBhc3NldF90cmFuc2Zlcl9lbHNlX2JvZHlANwogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToxMjcKICAgIC8vIHNlbGYuYWNjb3VudF9zbWFydF9hc2FfaWRbYXNzZXRfc2VuZGVyXSA9PSBzZWxmLnNtYXJ0X2FzYV9pZAogICAgZGlnIDEKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJhY2NvdW50X3NtYXJ0X2FzYV9pZCIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnRfc21hcnRfYXNhX2lkIGV4aXN0cyBmb3IgYWNjb3VudAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInNtYXJ0X2FzYV9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zbWFydF9hc2FfaWQgZXhpc3RzCiAgICBzd2FwCiAgICBkaWcgMQogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTI1LTEyOAogICAgLy8gIyBJbiB0aGUgY2FzZSBvZiBDb250cm9sbGVkIEFTQSBkZXN0cm95ZWQgYW5kIHJlLWNyZWF0ZWQsIHRoZSBTbWFydCBBREEgSUQgaW4gTG9jYWwgU3RhdGUgY291bGQgYmUgb3V0ZGF0ZWQuCiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHNlbGYuYWNjb3VudF9zbWFydF9hc2FfaWRbYXNzZXRfc2VuZGVyXSA9PSBzZWxmLnNtYXJ0X2FzYV9pZAogICAgLy8gKSwgZXJyLklOVkFMSURfQ1RSTF9BU0EKICAgIGFzc2VydCAvLyBJbnZhbGlkIENvbnRyb2xsZWQgQVNBIElECiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjEzMAogICAgLy8gc2VsZi5hY2NvdW50X3NtYXJ0X2FzYV9pZFthc3NldF9yZWNlaXZlcl0gPT0gc2VsZi5zbWFydF9hc2FfaWQKICAgIGRpZyAxCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAiYWNjb3VudF9zbWFydF9hc2FfaWQiCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50X3NtYXJ0X2FzYV9pZCBleGlzdHMgZm9yIGFjY291bnQKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjEyOS0xMzEKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgc2VsZi5hY2NvdW50X3NtYXJ0X2FzYV9pZFthc3NldF9yZWNlaXZlcl0gPT0gc2VsZi5zbWFydF9hc2FfaWQKICAgIC8vICksIGVyci5JTlZBTElEX0NUUkxfQVNBCiAgICBhc3NlcnQgLy8gSW52YWxpZCBDb250cm9sbGVkIEFTQSBJRAogICAgYiBhc3NldF90cmFuc2Zlcl9hZnRlcl9pZl9lbHNlQDEwCgphc3NldF90cmFuc2Zlcl9lbHNlX2JvZHlANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTM3CiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBhc3NldF9zZW5kZXIsIGVyci5VTkFVVEhPUklaRURfQ0xBV0JBQ0sKICAgIHR4biBTZW5kZXIKICAgIGRpZyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gVW5hdXRob3JpemVkIENsYXdiYWNrCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjE0MAogICAgLy8gc2VsZi5hY2NvdW50X3NtYXJ0X2FzYV9pZFthc3NldF9zZW5kZXJdID09IHNlbGYuc21hcnRfYXNhX2lkCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJhY2NvdW50X3NtYXJ0X2FzYV9pZCIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnRfc21hcnRfYXNhX2lkIGV4aXN0cyBmb3IgYWNjb3VudAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInNtYXJ0X2FzYV9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zbWFydF9hc2FfaWQgZXhpc3RzCiAgICBzd2FwCiAgICBkaWcgMQogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTM4LTE0MQogICAgLy8gIyBJbiB0aGUgY2FzZSBvZiBDb250cm9sbGVkIEFTQSBkZXN0cm95ZWQgYW5kIHJlLWNyZWF0ZWQsIHRoZSBTbWFydCBBREEgSUQgaW4gTG9jYWwgU3RhdGUgY291bGQgYmUgb3V0ZGF0ZWQuCiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHNlbGYuYWNjb3VudF9zbWFydF9hc2FfaWRbYXNzZXRfc2VuZGVyXSA9PSBzZWxmLnNtYXJ0X2FzYV9pZAogICAgLy8gKSwgZXJyLklOVkFMSURfQ1RSTF9BU0EKICAgIGFzc2VydCAvLyBJbnZhbGlkIENvbnRyb2xsZWQgQVNBIElECiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjE0MwogICAgLy8gc2VsZi5hY2NvdW50X3NtYXJ0X2FzYV9pZFthc3NldF9yZWNlaXZlcl0gPT0gc2VsZi5zbWFydF9hc2FfaWQKICAgIGRpZyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJhY2NvdW50X3NtYXJ0X2FzYV9pZCIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnRfc21hcnRfYXNhX2lkIGV4aXN0cyBmb3IgYWNjb3VudAogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTQyLTE0NAogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBzZWxmLmFjY291bnRfc21hcnRfYXNhX2lkW2Fzc2V0X3JlY2VpdmVyXSA9PSBzZWxmLnNtYXJ0X2FzYV9pZAogICAgLy8gKSwgZXJyLklOVkFMSURfQ1RSTF9BU0EKICAgIGFzc2VydCAvLyBJbnZhbGlkIENvbnRyb2xsZWQgQVNBIElECiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjE0NQogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLmdsb2JhbF9mcm96ZW4sIGVyci5HTE9CQUxfRlJPWkVOCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAiZ2xvYmFsX2Zyb3plbiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5nbG9iYWxfZnJvemVuIGV4aXN0cwogICAgIQogICAgYXNzZXJ0IC8vIFNtYXJ0IEFTQSBpcyBnbG9iYWwgZnJvemVuCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjE0NgogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLmFjY291bnRfZnJvemVuW2Fzc2V0X3NlbmRlcl0sIGVyci5TRU5ERVJfRlJPWkVOCiAgICBzd2FwCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAiYWNjb3VudF9mcm96ZW4iCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50X2Zyb3plbiBleGlzdHMgZm9yIGFjY291bnQKICAgICEKICAgIGFzc2VydCAvLyBTZW5kZXIgYWNjb3VudCBpcyBmcm96ZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTQ3CiAgICAvLyBhc3NlcnQgbm90IHNlbGYuYWNjb3VudF9mcm96ZW5bYXNzZXRfcmVjZWl2ZXJdLCBlcnIuUkVDRUlWRVJfRlJPWkVOCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAiYWNjb3VudF9mcm96ZW4iCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50X2Zyb3plbiBleGlzdHMgZm9yIGFjY291bnQKICAgICEKICAgIGFzc2VydCAvLyBSZWNlaXZlciBhY2NvdW50IGlzIGZyb3plbgogICAgYiBhc3NldF90cmFuc2Zlcl9hZnRlcl9pZl9lbHNlQDEwCgoKLy8gc21hcnRfY29udHJhY3RzLnNtYXJ0X2FzYS5jb250cmFjdC5TbWFydEFzYS5hc3NldF9mcmVlemVbcm91dGluZ10oKSAtPiB2b2lkOgphc3NldF9mcmVlemU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQyNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuYm9vbAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo0MzYtNDM3CiAgICAvLyAjIFByZWNvbmRpdGlvbnMKICAgIC8vIHNlbGYuYXNzZXJ0X2NvbW1vbl9wcmVjb25kaXRpb25zKGZyZWV6ZV9hc3NldC5pZCkKICAgIHN3YXAKICAgIGNhbGxzdWIgYXNzZXJ0X2NvbW1vbl9wcmVjb25kaXRpb25zCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQzOAogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIgPT0gc2VsZi5mcmVlemVfYWRkciwgZXJyLlVOQVVUSE9SSVpFRF9GUkVFWkUKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJmcmVlemVfYWRkciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5mcmVlemVfYWRkciBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gVW5hdXRob3JpemVkIEZyZWV6ZQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo0NDAtNDQxCiAgICAvLyAjIEVmZmVjdHMKICAgIC8vIHNlbGYuZ2xvYmFsX2Zyb3plbiA9IGFzc2V0X2Zyb3plbi5uYXRpdmUKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIGJ5dGVjIDYgLy8gImdsb2JhbF9mcm96ZW4iCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo0MjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5zbWFydF9hc2EuY29udHJhY3QuU21hcnRBc2EuYWNjb3VudF9mcmVlemVbcm91dGluZ10oKSAtPiB2b2lkOgphY2NvdW50X2ZyZWV6ZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NDQzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmJvb2wKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NDU1LTQ1NgogICAgLy8gIyBQcmVjb25kaXRpb25zCiAgICAvLyBzZWxmLmFzc2VydF9jb21tb25fcHJlY29uZGl0aW9ucyhmcmVlemVfYXNzZXQuaWQpCiAgICB1bmNvdmVyIDIKICAgIGNhbGxzdWIgYXNzZXJ0X2NvbW1vbl9wcmVjb25kaXRpb25zCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQ1OAogICAgLy8gc2VsZi5hY2NvdW50X3NtYXJ0X2FzYV9pZFtmcmVlemVfYWNjb3VudF0gPT0gc2VsZi5zbWFydF9hc2FfaWQKICAgIGRpZyAxCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAiYWNjb3VudF9zbWFydF9hc2FfaWQiCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50X3NtYXJ0X2FzYV9pZCBleGlzdHMgZm9yIGFjY291bnQKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJzbWFydF9hc2FfaWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc21hcnRfYXNhX2lkIGV4aXN0cwogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NDU3LTQ1OQogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBzZWxmLmFjY291bnRfc21hcnRfYXNhX2lkW2ZyZWV6ZV9hY2NvdW50XSA9PSBzZWxmLnNtYXJ0X2FzYV9pZAogICAgLy8gKSwgZXJyLklOVkFMSURfQ1RSTF9BU0EKICAgIGFzc2VydCAvLyBJbnZhbGlkIENvbnRyb2xsZWQgQVNBIElECiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQ2MAogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIgPT0gc2VsZi5mcmVlemVfYWRkciwgZXJyLlVOQVVUSE9SSVpFRF9GUkVFWkUKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJmcmVlemVfYWRkciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5mcmVlemVfYWRkciBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gVW5hdXRob3JpemVkIEZyZWV6ZQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo0NjItNDYzCiAgICAvLyAjIEVmZmVjdHMKICAgIC8vIHNlbGYuYWNjb3VudF9mcm96ZW5bZnJlZXplX2FjY291bnRdID0gYXNzZXRfZnJvemVuLm5hdGl2ZQogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgYnl0ZWMgNCAvLyAiYWNjb3VudF9mcm96ZW4iCiAgICBzd2FwCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQ0MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnNtYXJ0X2FzYS5jb250cmFjdC5TbWFydEFzYS5hc3NldF9jbG9zZV9vdXRbcm91dGluZ10oKSAtPiB2b2lkOgphc3NldF9jbG9zZV9vdXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQ2NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJDbG9zZU91dCJdKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTUxCiAgICAvLyBhc2FfY2xvc2Vfb3V0X3JlbGF0aXZlX2lkeCA9IFR4bi5ncm91cF9pbmRleCArIDEKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToxNTIKICAgIC8vIGFzYV9jbG9zZV9vdXRfdHhuID0gZ3R4bi5Bc3NldFRyYW5zZmVyVHJhbnNhY3Rpb24oYXNhX2Nsb3NlX291dF9yZWxhdGl2ZV9pZHgpCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBheGZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToxNTMKICAgIC8vIGFzc2VydCBUeG4ub25fY29tcGxldGlvbiA9PSBPbkNvbXBsZXRlQWN0aW9uLkNsb3NlT3V0LCBlcnIuV1JPTkdfT05fQ09NUExFVEUKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIHB1c2hpbnQgMiAvLyBDbG9zZU91dAogICAgPT0KICAgIGFzc2VydCAvLyBXcm9uZyBPbiBDb21wbGV0ZSBBY3Rpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTU1CiAgICAvLyBzZWxmLmFjY291bnRfc21hcnRfYXNhX2lkW1R4bi5zZW5kZXJdID09IGNsb3NlX2Fzc2V0LmlkCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAiYWNjb3VudF9zbWFydF9hc2FfaWQiCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50X3NtYXJ0X2FzYV9pZCBleGlzdHMgZm9yIGFjY291bnQKICAgIGRpZyAyCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToxNTQtMTU2CiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHNlbGYuYWNjb3VudF9zbWFydF9hc2FfaWRbVHhuLnNlbmRlcl0gPT0gY2xvc2VfYXNzZXQuaWQKICAgIC8vICksIGVyci5JTlZBTElEX0NUUkxfQVNBCiAgICBhc3NlcnQgLy8gSW52YWxpZCBDb250cm9sbGVkIEFTQSBJRAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToxNTgKICAgIC8vIEdsb2JhbC5ncm91cF9zaXplID4gYXNhX2Nsb3NlX291dF9yZWxhdGl2ZV9pZHgKICAgIGdsb2JhbCBHcm91cFNpemUKICAgIGRpZyAxCiAgICA+CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjE1Ny0xNTkKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgR2xvYmFsLmdyb3VwX3NpemUgPiBhc2FfY2xvc2Vfb3V0X3JlbGF0aXZlX2lkeAogICAgLy8gKSwgZXJyLklOVkFMSURfQ0xPU0VfT1VUX0dST1VQX1NJWkUKICAgIGFzc2VydCAvLyBJbnZhbGlkIENsb3NlIE91dCBncm91cCBzaXplCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjE2NAogICAgLy8gYXNhX2Nsb3NlX291dF90eG4ueGZlcl9hc3NldC5pZCA9PSBjbG9zZV9hc3NldC5pZAogICAgZHVwCiAgICBndHhucyBYZmVyQXNzZXQKICAgIGRpZyAyCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToxNjMtMTY1CiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIGFzYV9jbG9zZV9vdXRfdHhuLnhmZXJfYXNzZXQuaWQgPT0gY2xvc2VfYXNzZXQuaWQKICAgIC8vICksIGVyci5DTE9TRV9PVVRfV1JPTkdfQVNBCiAgICBhc3NlcnQgLy8gV3JvbmcgQVNBIENsb3NlIE91dCBJRAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToxNjYKICAgIC8vIGFzc2VydCBhc2FfY2xvc2Vfb3V0X3R4bi5zZW5kZXIgPT0gVHhuLnNlbmRlciwgZXJyLkNMT1NFX09VVF9XUk9OR19TRU5ERVIKICAgIGR1cAogICAgZ3R4bnMgU2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYXNzZXJ0IC8vIFdyb25nIEFTQSBDbG9zZSBPdXQgU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjE2NwogICAgLy8gYXNzZXJ0IGFzYV9jbG9zZV9vdXRfdHhuLmFzc2V0X2Ftb3VudCA9PSBVSW50NjQoMCksIGVyci5DTE9TRV9PVVRfV1JPTkdfQU1PVU5UCiAgICBkdXAKICAgIGd0eG5zIEFzc2V0QW1vdW50CiAgICAhCiAgICBhc3NlcnQgLy8gV3JvbmcgQVNBIENsb3NlIE91dCBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTY5CiAgICAvLyBhc2FfY2xvc2Vfb3V0X3R4bi5hc3NldF9jbG9zZV90byAhPSBHbG9iYWwuemVyb19hZGRyZXNzCiAgICBndHhucyBBc3NldENsb3NlVG8KICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgIT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MTY4LTE3MAogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBhc2FfY2xvc2Vfb3V0X3R4bi5hc3NldF9jbG9zZV90byAhPSBHbG9iYWwuemVyb19hZGRyZXNzCiAgICAvLyApLCBlcnIuQ0xPU0VfT1VUX1dST05HX0NMT1NFX1RPCiAgICBhc3NlcnQgLy8gV3JvbmcgQ2xvc2UgT3V0IG9uIENsb3NlIE91dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo0NzYKICAgIC8vIChjcmVhdG9yLCBleGlzdHMpID0gb3AuQXNzZXRQYXJhbXNHZXQuYXNzZXRfY3JlYXRvcihjbG9zZV9hc3NldC5pZCkKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQ3NwogICAgLy8gaWYgZXhpc3RzOiAgIyBTbWFydCBBU0EgaGFzIG5vdCBiZWVuIGRlc3Ryb3llZAogICAgYnogYXNzZXRfY2xvc2Vfb3V0X2FmdGVyX2lmX2Vsc2VANQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToxNzYKICAgIC8vIGFzYV9jbG9zZV9vdXRfcmVsYXRpdmVfaWR4ID0gVHhuLmdyb3VwX2luZGV4ICsgMQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjE3NwogICAgLy8gYXNhX2Nsb3NlX291dF90eG4gPSBndHhuLkFzc2V0VHJhbnNmZXJUcmFuc2FjdGlvbihhc2FfY2xvc2Vfb3V0X3JlbGF0aXZlX2lkeCkKICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGF4ZmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjE3OQogICAgLy8gYXNhX2Nsb3NlX291dF90eG4uYXNzZXRfY2xvc2VfdG8gPT0gYXNzZXRfY3JlYXRvcgogICAgZ3R4bnMgQXNzZXRDbG9zZVRvCiAgICBkaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToxNzgtMTgwCiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIGFzYV9jbG9zZV9vdXRfdHhuLmFzc2V0X2Nsb3NlX3RvID09IGFzc2V0X2NyZWF0b3IKICAgIC8vICksIGVyci5DTE9TRV9PVVRfV1JPTkdfQ0xPU0VfVE8KICAgIGFzc2VydCAvLyBXcm9uZyBDbG9zZSBPdXQgb24gQ2xvc2UgT3V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjE4MQogICAgLy8gYXNzZXJ0IGNsb3NlX2Fzc2V0LmlkID09IHNlbGYuc21hcnRfYXNhX2lkLCBlcnIuSU5WQUxJRF9DVFJMX0FTQQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInNtYXJ0X2FzYV9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zbWFydF9hc2FfaWQgZXhpc3RzCiAgICBkaWcgNAogICAgPT0KICAgIGFzc2VydCAvLyBJbnZhbGlkIENvbnRyb2xsZWQgQVNBIElECiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQ4MAogICAgLy8gY2xvc2VfdG8gIT0gY3JlYXRvcgogICAgZGlnIDIKICAgICE9CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQ3OS00ODEKICAgIC8vIGlmICgKICAgIC8vICAgICBjbG9zZV90byAhPSBjcmVhdG9yCiAgICAvLyApOiAgIyBJZiBjbG9zZS1vdXQgdGFyZ2V0IGlzIG5vdCB0aGUgQ3JlYXRvciwgdGhlbiBjbG9zZS1vdXQgdGFyZ2V0IE1VU1QgYmUgb3B0ZWQtaW4KICAgIGJ6IGFzc2V0X2Nsb3NlX291dF9hZnRlcl9pZl9lbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NDgzCiAgICAvLyBzZWxmLmFjY291bnRfc21hcnRfYXNhX2lkW2Nsb3NlX3RvXSA9PSBzZWxmLnNtYXJ0X2FzYV9pZAogICAgZGlnIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImFjY291bnRfc21hcnRfYXNhX2lkIgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWNjb3VudF9zbWFydF9hc2FfaWQgZXhpc3RzIGZvciBhY2NvdW50CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAic21hcnRfYXNhX2lkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnNtYXJ0X2FzYV9pZCBleGlzdHMKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQ4Mi00ODQKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgc2VsZi5hY2NvdW50X3NtYXJ0X2FzYV9pZFtjbG9zZV90b10gPT0gc2VsZi5zbWFydF9hc2FfaWQKICAgIC8vICksIGVyci5JTlZBTElEX0NUUkxfQVNBCiAgICBhc3NlcnQgLy8gSW52YWxpZCBDb250cm9sbGVkIEFTQSBJRAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToxODUKICAgIC8vIGFzc2VydCBub3Qgc2VsZi5nbG9iYWxfZnJvemVuLCBlcnIuR0xPQkFMX0ZST1pFTgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gImdsb2JhbF9mcm96ZW4iCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZ2xvYmFsX2Zyb3plbiBleGlzdHMKICAgICEKICAgIGFzc2VydCAvLyBTbWFydCBBU0EgaXMgZ2xvYmFsIGZyb3plbgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToxODYKICAgIC8vIGFzc2VydCBub3Qgc2VsZi5hY2NvdW50X2Zyb3plbltUeG4uc2VuZGVyXSwgZXJyLlNFTkRFUl9GUk9aRU4KICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0IC8vICJhY2NvdW50X2Zyb3plbiIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnRfZnJvemVuIGV4aXN0cyBmb3IgYWNjb3VudAogICAgIQogICAgYXNzZXJ0IC8vIFNlbmRlciBhY2NvdW50IGlzIGZyb3plbgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToxODcKICAgIC8vIGFzc2VydCBub3Qgc2VsZi5hY2NvdW50X2Zyb3plbltjbG9zZV90b10sIGVyci5DTE9TRV9UT19GUk9aRU4KICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0IC8vICJhY2NvdW50X2Zyb3plbiIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnRfZnJvemVuIGV4aXN0cyBmb3IgYWNjb3VudAogICAgIQogICAgYXNzZXJ0IC8vIENsb3NlIHRvIGFjY291bnQgaXMgZnJvemVuCgphc3NldF9jbG9zZV9vdXRfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo0OTAKICAgIC8vIGFzc2V0X2Ftb3VudD1jbG9zZV9hc3NldC5iYWxhbmNlKFR4bi5zZW5kZXIpLAogICAgdHhuIFNlbmRlcgogICAgZGlnIDMKICAgIGR1cAogICAgY292ZXIgMgogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBhc3NlcnQgLy8gYWNjb3VudCBvcHRlZCBpbnRvIGFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQ5MQogICAgLy8gYXNzZXRfc2VuZGVyPVR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQ4Ny00OTMKICAgIC8vICMgRWZmZWN0cwogICAgLy8gc2VsZi5pbm5lcl9hc3NldF90cmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PWNsb3NlX2Fzc2V0LAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1jbG9zZV9hc3NldC5iYWxhbmNlKFR4bi5zZW5kZXIpLAogICAgLy8gICAgIGFzc2V0X3NlbmRlcj1UeG4uc2VuZGVyLAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPWNsb3NlX3RvLAogICAgLy8gKQogICAgZGlnIDQKICAgIGNhbGxzdWIgaW5uZXJfYXNzZXRfdHJhbnNmZXIKCmFzc2V0X2Nsb3NlX291dF9hZnRlcl9pZl9lbHNlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQ2NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJDbG9zZU91dCJdKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5zbWFydF9hc2EuY29udHJhY3QuU21hcnRBc2EuYXNzZXRfZGVzdHJveVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmFzc2V0X2Rlc3Ryb3k6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjQ5NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjUwMy01MDQKICAgIC8vICMgUHJlY29uZGl0aW9ucwogICAgLy8gc2VsZi5hc3NlcnRfY29tbW9uX3ByZWNvbmRpdGlvbnMoZGVzdHJveV9hc3NldC5pZCkKICAgIGR1cAogICAgY2FsbHN1YiBhc3NlcnRfY29tbW9uX3ByZWNvbmRpdGlvbnMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTA1CiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBzZWxmLm1hbmFnZXJfYWRkciwgZXJyLlVOQVVUSE9SSVpFRF9NQU5BR0VSCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAibWFuYWdlcl9hZGRyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm1hbmFnZXJfYWRkciBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gVW5hdXRob3JpemVkIE1hbmFnZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MjI5LTIzMwogICAgLy8gaXR4bi5Bc3NldENvbmZpZygKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICAgICBjb25maWdfYXNzZXQ9ZGVzdHJveV9hc3NldCwKICAgIC8vICAgICBzZW5kZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MjMyCiAgICAvLyBzZW5kZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBpdHhuX2ZpZWxkIFNlbmRlcgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToyMjkKICAgIC8vIGl0eG4uQXNzZXRDb25maWcoCiAgICBwdXNoaW50IDMgLy8gYWNmZwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToyMzAKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjIyOS0yMzMKICAgIC8vIGl0eG4uQXNzZXRDb25maWcoCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyAgICAgY29uZmlnX2Fzc2V0PWRlc3Ryb3lfYXNzZXQsCiAgICAvLyAgICAgc2VuZGVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1MDkKICAgIC8vIHNlbGYudG90YWwgPSBVSW50NjQoKQogICAgYnl0ZWMgOCAvLyAidG90YWwiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTEwCiAgICAvLyBzZWxmLmRlY2ltYWxzID0gVUludDY0KCkKICAgIGJ5dGVjIDEwIC8vICJkZWNpbWFscyIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1MTEKICAgIC8vIHNlbGYuZGVmYXVsdF9mcm96ZW4gPSBGYWxzZQogICAgYnl0ZWMgOSAvLyAiZGVmYXVsdF9mcm96ZW4iCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTEyCiAgICAvLyBzZWxmLnVuaXRfbmFtZSA9IFN0cmluZygpCiAgICBieXRlYyAxMSAvLyAidW5pdF9uYW1lIgogICAgcHVzaGJ5dGVzICIiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1MTMKICAgIC8vIHNlbGYubmFtZSA9IFN0cmluZygpCiAgICBieXRlYyAxMiAvLyAibmFtZSIKICAgIHB1c2hieXRlcyAiIgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTE0CiAgICAvLyBzZWxmLnVybCA9IFN0cmluZygpCiAgICBieXRlYyAxMyAvLyAidXJsIgogICAgcHVzaGJ5dGVzICIiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1MTUKICAgIC8vIHNlbGYubWV0YWRhdGFfaGFzaCA9IEJ5dGVzKCkKICAgIGJ5dGVjIDE0IC8vICJtZXRhZGF0YV9oYXNoIgogICAgcHVzaGJ5dGVzIDB4CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1MTYKICAgIC8vIHNlbGYubWFuYWdlcl9hZGRyID0gQWNjb3VudCgpCiAgICBieXRlYyA3IC8vICJtYW5hZ2VyX2FkZHIiCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjUxNwogICAgLy8gc2VsZi5yZXNlcnZlX2FkZHIgPSBBY2NvdW50KCkKICAgIGJ5dGVjXzEgLy8gInJlc2VydmVfYWRkciIKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTE4CiAgICAvLyBzZWxmLmZyZWV6ZV9hZGRyID0gQWNjb3VudCgpCiAgICBieXRlYyA1IC8vICJmcmVlemVfYWRkciIKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTE5CiAgICAvLyBzZWxmLmNsYXdiYWNrX2FkZHIgPSBBY2NvdW50KCkKICAgIGJ5dGVjXzIgLy8gImNsYXdiYWNrX2FkZHIiCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjUyMAogICAgLy8gc2VsZi5zbWFydF9hc2FfaWQgPSBVSW50NjQoKQogICAgYnl0ZWNfMCAvLyAic21hcnRfYXNhX2lkIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjUyMQogICAgLy8gc2VsZi5nbG9iYWxfZnJvemVuID0gRmFsc2UKICAgIGJ5dGVjIDYgLy8gImdsb2JhbF9mcm96ZW4iCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NDk1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuc21hcnRfYXNhLmNvbnRyYWN0LlNtYXJ0QXNhLmdldF9hc3NldF9jb25maWdbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfYXNzZXRfY29uZmlnOgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1MjMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1MzQtNTM1CiAgICAvLyAjIFByZWNvbmRpdGlvbnMKICAgIC8vIHNlbGYuYXNzZXJ0X2NvbW1vbl9wcmVjb25kaXRpb25zKGFzc2V0LmlkKQogICAgY2FsbHN1YiBhc3NlcnRfY29tbW9uX3ByZWNvbmRpdGlvbnMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTM5CiAgICAvLyB0b3RhbD1hcmM0LlVJbnQ2NChzZWxmLnRvdGFsKSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA4IC8vICJ0b3RhbCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbCBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTQwCiAgICAvLyBkZWNpbWFscz1hcmM0LlVJbnQzMihzZWxmLmRlY2ltYWxzKSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMCAvLyAiZGVjaW1hbHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZGVjaW1hbHMgZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGJpdGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBleHRyYWN0IDQgNAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1NDEKICAgIC8vIGRlZmF1bHRfZnJvemVuPWFyYzQuQm9vbChzZWxmLmRlZmF1bHRfZnJvemVuKSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA5IC8vICJkZWZhdWx0X2Zyb3plbiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kZWZhdWx0X2Zyb3plbiBleGlzdHMKICAgIGJ5dGVjIDE2IC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1NDIKICAgIC8vIHVuaXRfbmFtZT1hcmM0LlN0cmluZyhzZWxmLnVuaXRfbmFtZSksCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTEgLy8gInVuaXRfbmFtZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi51bml0X25hbWUgZXhpc3RzCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1NDMKICAgIC8vIG5hbWU9YXJjNC5TdHJpbmcoc2VsZi5uYW1lKSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMiAvLyAibmFtZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5uYW1lIGV4aXN0cwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTQ0CiAgICAvLyB1cmw9YXJjNC5TdHJpbmcoc2VsZi51cmwpLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDEzIC8vICJ1cmwiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudXJsIGV4aXN0cwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTQ1CiAgICAvLyBtZXRhZGF0YV9oYXNoPWFyYzQuRHluYW1pY0J5dGVzKHNlbGYubWV0YWRhdGFfaGFzaCksCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTQgLy8gIm1ldGFkYXRhX2hhc2giCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubWV0YWRhdGFfaGFzaCBleGlzdHMKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjU0NgogICAgLy8gbWFuYWdlcl9hZGRyPWFyYzQuQWRkcmVzcyhzZWxmLm1hbmFnZXJfYWRkciksCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAibWFuYWdlcl9hZGRyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm1hbmFnZXJfYWRkciBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTQ3CiAgICAvLyByZXNlcnZlX2FkZHI9YXJjNC5BZGRyZXNzKHNlbGYucmVzZXJ2ZV9hZGRyKSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJyZXNlcnZlX2FkZHIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucmVzZXJ2ZV9hZGRyIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1NDgKICAgIC8vIGZyZWV6ZV9hZGRyPWFyYzQuQWRkcmVzcyhzZWxmLmZyZWV6ZV9hZGRyKSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJmcmVlemVfYWRkciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5mcmVlemVfYWRkciBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTQ5CiAgICAvLyBjbGF3YmFja19hZGRyPWFyYzQuQWRkcmVzcyhzZWxmLmNsYXdiYWNrX2FkZHIpLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImNsYXdiYWNrX2FkZHIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY2xhd2JhY2tfYWRkciBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTM3LTU1MAogICAgLy8gIyBFZmZlY3RzCiAgICAvLyByZXR1cm4gQXNzZXRDb25maWcoCiAgICAvLyAgICAgdG90YWw9YXJjNC5VSW50NjQoc2VsZi50b3RhbCksCiAgICAvLyAgICAgZGVjaW1hbHM9YXJjNC5VSW50MzIoc2VsZi5kZWNpbWFscyksCiAgICAvLyAgICAgZGVmYXVsdF9mcm96ZW49YXJjNC5Cb29sKHNlbGYuZGVmYXVsdF9mcm96ZW4pLAogICAgLy8gICAgIHVuaXRfbmFtZT1hcmM0LlN0cmluZyhzZWxmLnVuaXRfbmFtZSksCiAgICAvLyAgICAgbmFtZT1hcmM0LlN0cmluZyhzZWxmLm5hbWUpLAogICAgLy8gICAgIHVybD1hcmM0LlN0cmluZyhzZWxmLnVybCksCiAgICAvLyAgICAgbWV0YWRhdGFfaGFzaD1hcmM0LkR5bmFtaWNCeXRlcyhzZWxmLm1ldGFkYXRhX2hhc2gpLAogICAgLy8gICAgIG1hbmFnZXJfYWRkcj1hcmM0LkFkZHJlc3Moc2VsZi5tYW5hZ2VyX2FkZHIpLAogICAgLy8gICAgIHJlc2VydmVfYWRkcj1hcmM0LkFkZHJlc3Moc2VsZi5yZXNlcnZlX2FkZHIpLAogICAgLy8gICAgIGZyZWV6ZV9hZGRyPWFyYzQuQWRkcmVzcyhzZWxmLmZyZWV6ZV9hZGRyKSwKICAgIC8vICAgICBjbGF3YmFja19hZGRyPWFyYzQuQWRkcmVzcyhzZWxmLmNsYXdiYWNrX2FkZHIpLAogICAgLy8gKQogICAgdW5jb3ZlciAxMAogICAgdW5jb3ZlciAxMAogICAgY29uY2F0CiAgICB1bmNvdmVyIDkKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MDA5NQogICAgY29uY2F0CiAgICBkaWcgOAogICAgbGVuCiAgICBwdXNoaW50IDE0OSAvLyAxNDkKICAgICsKICAgIGR1cAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBkaWcgOAogICAgbGVuCiAgICB1bmNvdmVyIDIKICAgICsKICAgIGR1cAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBkaWcgNwogICAgbGVuCiAgICB1bmNvdmVyIDIKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBjb25jYXQKICAgIHVuY292ZXIgNAogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgdW5jb3ZlciA0CiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjUyMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBieXRlYyAxNSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5zbWFydF9hc2EuY29udHJhY3QuU21hcnRBc2EuZ2V0X2Fzc2V0X2lzX2Zyb3plbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldF9hc3NldF9pc19mcm96ZW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjU1MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjU2My01NjQKICAgIC8vICMgUHJlY29uZGl0aW9ucwogICAgLy8gc2VsZi5hc3NlcnRfY29tbW9uX3ByZWNvbmRpdGlvbnMoZnJlZXplX2Fzc2V0LmlkKQogICAgY2FsbHN1YiBhc3NlcnRfY29tbW9uX3ByZWNvbmRpdGlvbnMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTY2LTU2NwogICAgLy8gIyBFZmZlY3RzCiAgICAvLyByZXR1cm4gYXJjNC5Cb29sKHNlbGYuZ2xvYmFsX2Zyb3plbikKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJnbG9iYWxfZnJvemVuIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmdsb2JhbF9mcm96ZW4gZXhpc3RzCiAgICBieXRlYyAxNiAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTUyCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjIDE1IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnNtYXJ0X2FzYS5jb250cmFjdC5TbWFydEFzYS5nZXRfYWNjb3VudF9pc19mcm96ZW5bcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfYWNjb3VudF9pc19mcm96ZW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjU2OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6NTgzLTU4NAogICAgLy8gIyBQcmVjb25kaXRpb25zCiAgICAvLyBzZWxmLmFzc2VydF9jb21tb25fcHJlY29uZGl0aW9ucyhmcmVlemVfYXNzZXQuaWQpCiAgICBzd2FwCiAgICBjYWxsc3ViIGFzc2VydF9jb21tb25fcHJlY29uZGl0aW9ucwogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1ODYtNTg3CiAgICAvLyAjIEVmZmVjdHMKICAgIC8vIHJldHVybiBhcmM0LkJvb2woc2VsZi5hY2NvdW50X2Zyb3plbltmcmVlemVfYWNjb3VudF0pCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAiYWNjb3VudF9mcm96ZW4iCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50X2Zyb3plbiBleGlzdHMgZm9yIGFjY291bnQKICAgIGJ5dGVjIDE2IC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1NjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYnl0ZWMgMTUgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuc21hcnRfYXNhLmNvbnRyYWN0LlNtYXJ0QXNhLmdldF9jaXJjdWxhdGluZ19zdXBwbHlbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfY2lyY3VsYXRpbmdfc3VwcGx5OgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1ODkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo2MDAtNjAxCiAgICAvLyAjIFByZWNvbmRpdGlvbnMKICAgIC8vIHNlbGYuYXNzZXJ0X2NvbW1vbl9wcmVjb25kaXRpb25zKGFzc2V0LmlkKQogICAgZHVwCiAgICBjYWxsc3ViIGFzc2VydF9jb21tb25fcHJlY29uZGl0aW9ucwogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo2MDMtNjA0CiAgICAvLyAjIEVmZmVjdHMKICAgIC8vIHJldHVybiBhcmM0LlVJbnQ2NChzZWxmLmNpcmN1bGF0aW5nX3N1cHBseShhc3NldCkpCiAgICBjYWxsc3ViIGNpcmN1bGF0aW5nX3N1cHBseQogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo1ODkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYnl0ZWMgMTUgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuc21hcnRfYXNhLmNvbnRyYWN0LlNtYXJ0QXNhLmNpcmN1bGF0aW5nX3N1cHBseShjdHJsX2Fzc2V0OiB1aW50NjQpIC0+IHVpbnQ2NDoKY2lyY3VsYXRpbmdfc3VwcGx5OgogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo3OC03OQogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBjaXJjdWxhdGluZ19zdXBwbHkoc2VsZiwgY3RybF9hc3NldDogQXNzZXQpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo4MAogICAgLy8gcmV0dXJuIGNmZy5UT1RBTCAtIGN0cmxfYXNzZXQuYmFsYW5jZShHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzKQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBhc3NlcnQgLy8gYWNjb3VudCBvcHRlZCBpbnRvIGFzc2V0CiAgICBpbnRjIDQgLy8gMTg0NDY3NDQwNzM3MDk1NTE2MTUKICAgIHN3YXAKICAgIC0KICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5zbWFydF9hc2EuY29udHJhY3QuU21hcnRBc2EuYXNzZXJ0X2NvbW1vbl9wcmVjb25kaXRpb25zKGFzc2V0X2lkOiB1aW50NjQpIC0+IHZvaWQ6CmFzc2VydF9jb21tb25fcHJlY29uZGl0aW9uczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6ODItODMKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgYXNzZXJ0X2NvbW1vbl9wcmVjb25kaXRpb25zKHNlbGYsIGFzc2V0X2lkOiBVSW50NjQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6ODQKICAgIC8vIGFzc2VydCBzZWxmLnNtYXJ0X2FzYV9pZCwgZXJyLk1JU1NJTkdfQ1RSTF9BU0EKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJzbWFydF9hc2FfaWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc21hcnRfYXNhX2lkIGV4aXN0cwogICAgZHVwCiAgICBhc3NlcnQgLy8gTWlzc2luZyBDb250cm9sbGVkIEFTQQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weTo4NQogICAgLy8gYXNzZXJ0IHNlbGYuc21hcnRfYXNhX2lkID09IGFzc2V0X2lkLCBlcnIuSU5WQUxJRF9DVFJMX0FTQQogICAgZnJhbWVfZGlnIC0xCiAgICA9PQogICAgYXNzZXJ0IC8vIEludmFsaWQgQ29udHJvbGxlZCBBU0EgSUQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5zbWFydF9hc2EuY29udHJhY3QuU21hcnRBc2EuaW5uZXJfYXNzZXRfdHJhbnNmZXIoeGZlcl9hc3NldDogdWludDY0LCBhc3NldF9hbW91bnQ6IHVpbnQ2NCwgYXNzZXRfc2VuZGVyOiBieXRlcywgYXNzZXRfcmVjZWl2ZXI6IGJ5dGVzKSAtPiB2b2lkOgppbm5lcl9hc3NldF90cmFuc2ZlcjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MjA5LTIxNwogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBpbm5lcl9hc3NldF90cmFuc2ZlcigKICAgIC8vICAgICBzZWxmLAogICAgLy8gICAgICosCiAgICAvLyAgICAgeGZlcl9hc3NldDogQXNzZXQsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50OiBVSW50NjQsCiAgICAvLyAgICAgYXNzZXRfc2VuZGVyOiBBY2NvdW50LAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyOiBBY2NvdW50CiAgICAvLyApIC0+IE5vbmU6CiAgICBwcm90byA0IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zbWFydF9hc2EvY29udHJhY3QucHk6MjE4LTIyNQogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gICAgIHhmZXJfYXNzZXQ9eGZlcl9hc3NldC5pZCwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9YXNzZXRfYW1vdW50LAogICAgLy8gICAgIGFzc2V0X3NlbmRlcj1hc3NldF9zZW5kZXIsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9YXNzZXRfcmVjZWl2ZXIsCiAgICAvLyAgICAgc2VuZGVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjIyNAogICAgLy8gc2VuZGVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgaXR4bl9maWVsZCBTZW5kZXIKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXNzZXRTZW5kZXIKICAgIGZyYW1lX2RpZyAtMwogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC00CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToyMTgKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL3NtYXJ0X2FzYS9jb250cmFjdC5weToyMTkKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvc21hcnRfYXNhL2NvbnRyYWN0LnB5OjIxOC0yMjUKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICAgICB4ZmVyX2Fzc2V0PXhmZXJfYXNzZXQuaWQsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PWFzc2V0X2Ftb3VudCwKICAgIC8vICAgICBhc3NldF9zZW5kZXI9YXNzZXRfc2VuZGVyLAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPWFzc2V0X3JlY2VpdmVyLAogICAgLy8gICAgIHNlbmRlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [1113], "errorMessage": "Clawback Address has been deleted"}, {"pc": [1751], "errorMessage": "Close to account is frozen"}, {"pc": [555], "errorMessage": "Controlled ASA already created"}, {"pc": [848], "errorMessage": "Forbidden Close Out on Opt In"}, {"pc": [1403], "errorMessage": "Forbidden clawback burning"}, {"pc": [1290], "errorMessage": "Forbidden over minting"}, {"pc": [1273], "errorMessage": "Forbidden self minting"}, {"pc": [1095], "errorMessage": "Freeze Address has been deleted"}, {"pc": [1651], "errorMessage": "Invalid Close Out group size"}, {"pc": [1300, 1372, 1431, 1439, 1465, 1476, 1581, 1645, 1709, 1728, 2184], "errorMessage": "Invalid Controlled ASA ID"}, {"pc": [1126], "errorMessage": "Invalid Total, must be >= circulating supply"}, {"pc": [862, 2180], "errorMessage": "Missing Controlled ASA"}, {"pc": [406], "errorMessage": "OnCompletion must be CloseOut && can only call when not creating"}, {"pc": [316], "errorMessage": "OnCompletion must be NoOp"}, {"pc": [428], "errorMessage": "OnCompletion must be NoOp && can only call when creating"}, {"pc": [417], "errorMessage": "OnCompletion must be OptIn && can only call when not creating"}, {"pc": [1327, 1498], "errorMessage": "Receiver account is frozen"}, {"pc": [1075], "errorMessage": "Reserve Address has been deleted"}, {"pc": [1397, 1491, 1744], "errorMessage": "Sender account is frozen"}, {"pc": [1307, 1379, 1483, 1735], "errorMessage": "Smart ASA is global frozen"}, {"pc": [549], "errorMessage": "Unauthorized"}, {"pc": [1451], "errorMessage": "Unauthorized Clawback"}, {"pc": [1531, 1590], "errorMessage": "Unauthorized Freeze"}, {"pc": [1059, 1792], "errorMessage": "Unauthorized Manager"}, {"pc": [1264, 1360], "errorMessage": "Unauthorized Reserve"}, {"pc": [1670], "errorMessage": "Wrong ASA Close Out Amount"}, {"pc": [1658], "errorMessage": "Wrong ASA Close Out ID"}, {"pc": [1665], "errorMessage": "Wrong ASA Close Out Sender"}, {"pc": [841], "errorMessage": "Wrong ASA Opt In Amount"}, {"pc": [819], "errorMessage": "Wrong ASA Opt In ID"}, {"pc": [835], "errorMessage": "Wrong ASA Opt In Receiver"}, {"pc": [827], "errorMessage": "Wrong ASA Opt In Sender"}, {"pc": [1676, 1701], "errorMessage": "Wrong Close Out on Close Out"}, {"pc": [213], "errorMessage": "Wrong Global Bytes allocation"}, {"pc": [219], "errorMessage": "Wrong Global UInts allocation"}, {"pc": [223], "errorMessage": "Wrong Local Bytes allocation"}, {"pc": [229], "errorMessage": "Wrong Local UInts allocation"}, {"pc": [853, 1635], "errorMessage": "Wrong On Complete Action"}, {"pc": [889, 1761, 2166], "errorMessage": "account opted into asset"}, {"pc": [1325, 1395, 1489, 1496, 1742, 1749, 2119], "errorMessage": "check self.account_frozen exists for account"}, {"pc": [1294, 1366, 1422, 1437, 1456, 1474, 1575, 1641, 1722], "errorMessage": "check self.account_smart_asa_id exists for account"}, {"pc": [1099, 1109, 1315, 1383, 1412, 1979], "errorMessage": "check self.clawback_addr exists"}, {"pc": [1889], "errorMessage": "check self.decimals exists"}, {"pc": [879, 1903], "errorMessage": "check self.default_frozen exists"}, {"pc": [1080, 1091, 1529, 1588, 1975], "errorMessage": "check self.freeze_addr exists"}, {"pc": [1305, 1377, 1481, 1733, 2080], "errorMessage": "check self.global_frozen exists"}, {"pc": [1057, 1790, 1966], "errorMessage": "check self.manager_addr exists"}, {"pc": [1953], "errorMessage": "check self.metadata_hash exists"}, {"pc": [1927], "errorMessage": "check self.name exists"}, {"pc": [1063, 1071, 1262, 1311, 1355, 1401, 1970], "errorMessage": "check self.reserve_addr exists"}, {"pc": [553, 773, 814, 1277, 1298, 1370, 1426, 1460, 1579, 1705, 1726, 2178], "errorMessage": "check self.smart_asa_id exists"}, {"pc": [1288, 1883], "errorMessage": "check self.total exists"}, {"pc": [1914], "errorMessage": "check self.unit_name exists"}, {"pc": [1940], "errorMessage": "check self.url exists"}, {"pc": [462, 476, 490, 504, 950, 966, 982, 998], "errorMessage": "invalid array length header"}, {"pc": [455, 941, 1518, 1564], "errorMessage": "invalid number of bytes for arc4.bool"}, {"pc": [469, 483, 497, 511, 957, 973, 989, 1005], "errorMessage": "invalid number of bytes for arc4.dynamic_array"}, {"pc": [519, 527, 535, 543, 1015, 1026, 1036, 1046, 1233, 1243, 1556, 1618, 2110], "errorMessage": "invalid number of bytes for arc4.static_array"}, {"pc": [447, 931], "errorMessage": "invalid number of bytes for arc4.uint32"}, {"pc": [438, 789, 908, 920, 1210, 1222, 1509, 1547, 1606, 1778, 1874, 2071, 2101, 2140], "errorMessage": "invalid number of bytes for arc4.uint64"}, {"pc": [1895], "errorMessage": "overflow"}, {"pc": [802, 1629, 1692], "errorMessage": "transaction type is axfer"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" -APP_SPEC = algokit_utils.Arc56Contract.from_json(_APP_SPEC_JSON) - -def _parse_abi_args(args: object | None = None) -> list[object] | None: - """Helper to parse ABI args into the format expected by underlying client""" - if args is None: - return None - - def convert_dataclass(value: object) -> object: - if dataclasses.is_dataclass(value): - return tuple(convert_dataclass(getattr(value, field.name)) for field in dataclasses.fields(value)) - elif isinstance(value, (list, tuple)): - return type(value)(convert_dataclass(item) for item in value) - return value - - match args: - case tuple(): - method_args = list(args) - case _ if dataclasses.is_dataclass(args): - method_args = [getattr(args, field.name) for field in dataclasses.fields(args)] - case _: - raise ValueError("Invalid 'args' type. Expected 'tuple' or 'TypedDict' for respective typed arguments.") - - return [ - convert_dataclass(arg) if not isinstance(arg, algokit_utils.AppMethodCallTransactionArgument) else arg - for arg in method_args - ] if method_args else None - -def _init_dataclass(cls: type, data: dict) -> object: - """ - Recursively instantiate a dataclass of type `cls` from `data`. - - For each field on the dataclass, if the field type is also a dataclass - and the corresponding data is a dict, instantiate that field recursively. - """ - field_values = {} - for field in dataclasses.fields(cls): - field_value = data.get(field.name) - # Check if the field expects another dataclass and the value is a dict. - if dataclasses.is_dataclass(field.type) and isinstance(field_value, dict): - field_values[field.name] = _init_dataclass(typing.cast(type, field.type), field_value) - else: - field_values[field.name] = field_value - return cls(**field_values) - -@dataclasses.dataclass(frozen=True) -class AssetConfig: - """Struct for AssetConfig""" - total: int - decimals: int - default_frozen: bool - unit_name: str - name: str - url: str - metadata_hash: bytes - manager_addr: str - reserve_addr: str - freeze_addr: str - clawback_addr: str - - -@dataclasses.dataclass(frozen=True, kw_only=True) -class AssetCreateArgs: - """Dataclass for asset_create arguments""" - total: int - decimals: int - default_frozen: bool - unit_name: str - name: str - url: str - metadata_hash: bytes | str - manager_addr: str - reserve_addr: str - freeze_addr: str - clawback_addr: str - - @property - def abi_method_signature(self) -> str: - return "asset_create(uint64,uint32,bool,string,string,string,byte[],address,address,address,address)uint64" - -@dataclasses.dataclass(frozen=True, kw_only=True) -class AssetConfigArgs: - """Dataclass for asset_config arguments""" - config_asset: int - total: int - decimals: int - default_frozen: bool - unit_name: str - name: str - url: str - metadata_hash: bytes | str - manager_addr: str - reserve_addr: str - freeze_addr: str - clawback_addr: str - - @property - def abi_method_signature(self) -> str: - return "asset_config(uint64,uint64,uint32,bool,string,string,string,byte[],address,address,address,address)void" - -@dataclasses.dataclass(frozen=True, kw_only=True) -class AssetTransferArgs: - """Dataclass for asset_transfer arguments""" - xfer_asset: int - asset_amount: int - asset_sender: str - asset_receiver: str - - @property - def abi_method_signature(self) -> str: - return "asset_transfer(uint64,uint64,address,address)void" - -@dataclasses.dataclass(frozen=True, kw_only=True) -class AssetFreezeArgs: - """Dataclass for asset_freeze arguments""" - freeze_asset: int - asset_frozen: bool - - @property - def abi_method_signature(self) -> str: - return "asset_freeze(uint64,bool)void" - -@dataclasses.dataclass(frozen=True, kw_only=True) -class AccountFreezeArgs: - """Dataclass for account_freeze arguments""" - freeze_asset: int - freeze_account: str - asset_frozen: bool - - @property - def abi_method_signature(self) -> str: - return "account_freeze(uint64,address,bool)void" - -@dataclasses.dataclass(frozen=True, kw_only=True) -class AssetDestroyArgs: - """Dataclass for asset_destroy arguments""" - destroy_asset: int - - @property - def abi_method_signature(self) -> str: - return "asset_destroy(uint64)void" - -@dataclasses.dataclass(frozen=True, kw_only=True) -class GetAssetConfigArgs: - """Dataclass for get_asset_config arguments""" - asset: int - - @property - def abi_method_signature(self) -> str: - return "get_asset_config(uint64)(uint64,uint32,bool,string,string,string,byte[],address,address,address,address)" - -@dataclasses.dataclass(frozen=True, kw_only=True) -class GetAssetIsFrozenArgs: - """Dataclass for get_asset_is_frozen arguments""" - freeze_asset: int - - @property - def abi_method_signature(self) -> str: - return "get_asset_is_frozen(uint64)bool" - -@dataclasses.dataclass(frozen=True, kw_only=True) -class GetAccountIsFrozenArgs: - """Dataclass for get_account_is_frozen arguments""" - freeze_asset: int - freeze_account: str - - @property - def abi_method_signature(self) -> str: - return "get_account_is_frozen(uint64,address)bool" - -@dataclasses.dataclass(frozen=True, kw_only=True) -class GetCirculatingSupplyArgs: - """Dataclass for get_circulating_supply arguments""" - asset: int - - @property - def abi_method_signature(self) -> str: - return "get_circulating_supply(uint64)uint64" - -@dataclasses.dataclass(frozen=True, kw_only=True) -class AssetOptInArgs: - """Dataclass for asset_opt_in arguments""" - asset: int - ctrl_asa_opt_in: algokit_utils.AppMethodCallTransactionArgument - - @property - def abi_method_signature(self) -> str: - return "asset_opt_in(uint64,axfer)void" - -@dataclasses.dataclass(frozen=True, kw_only=True) -class AssetCloseOutArgs: - """Dataclass for asset_close_out arguments""" - close_asset: int - close_to: str - - @property - def abi_method_signature(self) -> str: - return "asset_close_out(uint64,address)void" - - -class _SmartAsaOptIn: - def __init__(self, app_client: algokit_utils.AppClient): - self.app_client = app_client - - def asset_opt_in( - self, - args: tuple[int, algokit_utils.AppMethodCallTransactionArgument] | AssetOptInArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> algokit_utils.AppCallMethodCallParams: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - return self.app_client.params.opt_in(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "asset_opt_in(uint64,axfer)void", - "args": method_args, - })) - - -class _SmartAsaCloseOut: - def __init__(self, app_client: algokit_utils.AppClient): - self.app_client = app_client - - def asset_close_out( - self, - args: tuple[int, str] | AssetCloseOutArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> algokit_utils.AppCallMethodCallParams: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - return self.app_client.params.close_out(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "asset_close_out(uint64,address)void", - "args": method_args, - })) - - -class SmartAsaParams: - def __init__(self, app_client: algokit_utils.AppClient): - self.app_client = app_client - - @property - def opt_in(self) -> "_SmartAsaOptIn": - return _SmartAsaOptIn(self.app_client) - - @property - def close_out(self) -> "_SmartAsaCloseOut": - return _SmartAsaCloseOut(self.app_client) - - def asset_create( - self, - args: tuple[int, int, bool, str, str, str, bytes | str, str, str, str, str] | AssetCreateArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> algokit_utils.AppCallMethodCallParams: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "asset_create(uint64,uint32,bool,string,string,string,byte[],address,address,address,address)uint64", - "args": method_args, - })) - - def asset_config( - self, - args: tuple[int, int, int, bool, str, str, str, bytes | str, str, str, str, str] | AssetConfigArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> algokit_utils.AppCallMethodCallParams: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "asset_config(uint64,uint64,uint32,bool,string,string,string,byte[],address,address,address,address)void", - "args": method_args, - })) - - def asset_transfer( - self, - args: tuple[int, int, str, str] | AssetTransferArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> algokit_utils.AppCallMethodCallParams: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "asset_transfer(uint64,uint64,address,address)void", - "args": method_args, - })) - - def asset_freeze( - self, - args: tuple[int, bool] | AssetFreezeArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> algokit_utils.AppCallMethodCallParams: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "asset_freeze(uint64,bool)void", - "args": method_args, - })) - - def account_freeze( - self, - args: tuple[int, str, bool] | AccountFreezeArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> algokit_utils.AppCallMethodCallParams: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "account_freeze(uint64,address,bool)void", - "args": method_args, - })) - - def asset_destroy( - self, - args: tuple[int] | AssetDestroyArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> algokit_utils.AppCallMethodCallParams: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "asset_destroy(uint64)void", - "args": method_args, - })) - - def get_asset_config( - self, - args: tuple[int] | GetAssetConfigArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> algokit_utils.AppCallMethodCallParams: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "get_asset_config(uint64)(uint64,uint32,bool,string,string,string,byte[],address,address,address,address)", - "args": method_args, - })) - - def get_asset_is_frozen( - self, - args: tuple[int] | GetAssetIsFrozenArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> algokit_utils.AppCallMethodCallParams: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "get_asset_is_frozen(uint64)bool", - "args": method_args, - })) - - def get_account_is_frozen( - self, - args: tuple[int, str] | GetAccountIsFrozenArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> algokit_utils.AppCallMethodCallParams: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "get_account_is_frozen(uint64,address)bool", - "args": method_args, - })) - - def get_circulating_supply( - self, - args: tuple[int] | GetCirculatingSupplyArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> algokit_utils.AppCallMethodCallParams: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "get_circulating_supply(uint64)uint64", - "args": method_args, - })) - - def clear_state( - self, - params: algokit_utils.AppClientBareCallParams | None = None, - - ) -> algokit_utils.AppCallParams: - return self.app_client.params.bare.clear_state( - params, - - ) - - -class _SmartAsaOptInTransaction: - def __init__(self, app_client: algokit_utils.AppClient): - self.app_client = app_client - - def asset_opt_in( - self, - args: tuple[int, algokit_utils.AppMethodCallTransactionArgument] | AssetOptInArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> algokit_utils.BuiltTransactions: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - return self.app_client.create_transaction.opt_in(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "asset_opt_in(uint64,axfer)void", - "args": method_args, - })) - - -class _SmartAsaCloseOutTransaction: - def __init__(self, app_client: algokit_utils.AppClient): - self.app_client = app_client - - def asset_close_out( - self, - args: tuple[int, str] | AssetCloseOutArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> algokit_utils.BuiltTransactions: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - return self.app_client.create_transaction.close_out(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "asset_close_out(uint64,address)void", - "args": method_args, - })) - - -class SmartAsaCreateTransactionParams: - def __init__(self, app_client: algokit_utils.AppClient): - self.app_client = app_client - - @property - def opt_in(self) -> "_SmartAsaOptInTransaction": - return _SmartAsaOptInTransaction(self.app_client) - - @property - def close_out(self) -> "_SmartAsaCloseOutTransaction": - return _SmartAsaCloseOutTransaction(self.app_client) - - def asset_create( - self, - args: tuple[int, int, bool, str, str, str, bytes | str, str, str, str, str] | AssetCreateArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> algokit_utils.BuiltTransactions: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "asset_create(uint64,uint32,bool,string,string,string,byte[],address,address,address,address)uint64", - "args": method_args, - })) - - def asset_config( - self, - args: tuple[int, int, int, bool, str, str, str, bytes | str, str, str, str, str] | AssetConfigArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> algokit_utils.BuiltTransactions: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "asset_config(uint64,uint64,uint32,bool,string,string,string,byte[],address,address,address,address)void", - "args": method_args, - })) - - def asset_transfer( - self, - args: tuple[int, int, str, str] | AssetTransferArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> algokit_utils.BuiltTransactions: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "asset_transfer(uint64,uint64,address,address)void", - "args": method_args, - })) - - def asset_freeze( - self, - args: tuple[int, bool] | AssetFreezeArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> algokit_utils.BuiltTransactions: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "asset_freeze(uint64,bool)void", - "args": method_args, - })) - - def account_freeze( - self, - args: tuple[int, str, bool] | AccountFreezeArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> algokit_utils.BuiltTransactions: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "account_freeze(uint64,address,bool)void", - "args": method_args, - })) - - def asset_destroy( - self, - args: tuple[int] | AssetDestroyArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> algokit_utils.BuiltTransactions: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "asset_destroy(uint64)void", - "args": method_args, - })) - - def get_asset_config( - self, - args: tuple[int] | GetAssetConfigArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> algokit_utils.BuiltTransactions: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "get_asset_config(uint64)(uint64,uint32,bool,string,string,string,byte[],address,address,address,address)", - "args": method_args, - })) - - def get_asset_is_frozen( - self, - args: tuple[int] | GetAssetIsFrozenArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> algokit_utils.BuiltTransactions: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "get_asset_is_frozen(uint64)bool", - "args": method_args, - })) - - def get_account_is_frozen( - self, - args: tuple[int, str] | GetAccountIsFrozenArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> algokit_utils.BuiltTransactions: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "get_account_is_frozen(uint64,address)bool", - "args": method_args, - })) - - def get_circulating_supply( - self, - args: tuple[int] | GetCirculatingSupplyArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> algokit_utils.BuiltTransactions: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "get_circulating_supply(uint64)uint64", - "args": method_args, - })) - - def clear_state( - self, - params: algokit_utils.AppClientBareCallParams | None = None, - - ) -> Transaction: - return self.app_client.create_transaction.bare.clear_state( - params, - - ) - - -class _SmartAsaOptInSend: - def __init__(self, app_client: algokit_utils.AppClient): - self.app_client = app_client - - def asset_opt_in( - self, - args: tuple[int, algokit_utils.AppMethodCallTransactionArgument] | AssetOptInArgs, - params: algokit_utils.CommonAppCallParams | None = None, - send_params: algokit_utils.SendParams | None = None - ) -> algokit_utils.SendAppTransactionResult[None]: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - response = self.app_client.send.opt_in(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "asset_opt_in(uint64,axfer)void", - "args": method_args, - }), send_params=send_params) - parsed_response = response - return typing.cast(algokit_utils.SendAppTransactionResult[None], parsed_response) - - -class _SmartAsaCloseOutSend: - def __init__(self, app_client: algokit_utils.AppClient): - self.app_client = app_client - - def asset_close_out( - self, - args: tuple[int, str] | AssetCloseOutArgs, - params: algokit_utils.CommonAppCallParams | None = None, - send_params: algokit_utils.SendParams | None = None - ) -> algokit_utils.SendAppTransactionResult[None]: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - response = self.app_client.send.close_out(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "asset_close_out(uint64,address)void", - "args": method_args, - }), send_params=send_params) - parsed_response = response - return typing.cast(algokit_utils.SendAppTransactionResult[None], parsed_response) - - -class SmartAsaSend: - def __init__(self, app_client: algokit_utils.AppClient): - self.app_client = app_client - - @property - def opt_in(self) -> "_SmartAsaOptInSend": - return _SmartAsaOptInSend(self.app_client) - - @property - def close_out(self) -> "_SmartAsaCloseOutSend": - return _SmartAsaCloseOutSend(self.app_client) - - def asset_create( - self, - args: tuple[int, int, bool, str, str, str, bytes | str, str, str, str, str] | AssetCreateArgs, - params: algokit_utils.CommonAppCallParams | None = None, - send_params: algokit_utils.SendParams | None = None - ) -> algokit_utils.SendAppTransactionResult[int]: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "asset_create(uint64,uint32,bool,string,string,string,byte[],address,address,address,address)uint64", - "args": method_args, - }), send_params=send_params) - parsed_response = response - return typing.cast(algokit_utils.SendAppTransactionResult[int], parsed_response) - - def asset_config( - self, - args: tuple[int, int, int, bool, str, str, str, bytes | str, str, str, str, str] | AssetConfigArgs, - params: algokit_utils.CommonAppCallParams | None = None, - send_params: algokit_utils.SendParams | None = None - ) -> algokit_utils.SendAppTransactionResult[None]: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "asset_config(uint64,uint64,uint32,bool,string,string,string,byte[],address,address,address,address)void", - "args": method_args, - }), send_params=send_params) - parsed_response = response - return typing.cast(algokit_utils.SendAppTransactionResult[None], parsed_response) - - def asset_transfer( - self, - args: tuple[int, int, str, str] | AssetTransferArgs, - params: algokit_utils.CommonAppCallParams | None = None, - send_params: algokit_utils.SendParams | None = None - ) -> algokit_utils.SendAppTransactionResult[None]: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "asset_transfer(uint64,uint64,address,address)void", - "args": method_args, - }), send_params=send_params) - parsed_response = response - return typing.cast(algokit_utils.SendAppTransactionResult[None], parsed_response) - - def asset_freeze( - self, - args: tuple[int, bool] | AssetFreezeArgs, - params: algokit_utils.CommonAppCallParams | None = None, - send_params: algokit_utils.SendParams | None = None - ) -> algokit_utils.SendAppTransactionResult[None]: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "asset_freeze(uint64,bool)void", - "args": method_args, - }), send_params=send_params) - parsed_response = response - return typing.cast(algokit_utils.SendAppTransactionResult[None], parsed_response) - - def account_freeze( - self, - args: tuple[int, str, bool] | AccountFreezeArgs, - params: algokit_utils.CommonAppCallParams | None = None, - send_params: algokit_utils.SendParams | None = None - ) -> algokit_utils.SendAppTransactionResult[None]: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "account_freeze(uint64,address,bool)void", - "args": method_args, - }), send_params=send_params) - parsed_response = response - return typing.cast(algokit_utils.SendAppTransactionResult[None], parsed_response) - - def asset_destroy( - self, - args: tuple[int] | AssetDestroyArgs, - params: algokit_utils.CommonAppCallParams | None = None, - send_params: algokit_utils.SendParams | None = None - ) -> algokit_utils.SendAppTransactionResult[None]: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "asset_destroy(uint64)void", - "args": method_args, - }), send_params=send_params) - parsed_response = response - return typing.cast(algokit_utils.SendAppTransactionResult[None], parsed_response) - - def get_asset_config( - self, - args: tuple[int] | GetAssetConfigArgs, - params: algokit_utils.CommonAppCallParams | None = None, - send_params: algokit_utils.SendParams | None = None - ) -> algokit_utils.SendAppTransactionResult[AssetConfig]: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "get_asset_config(uint64)(uint64,uint32,bool,string,string,string,byte[],address,address,address,address)", - "args": method_args, - }), send_params=send_params) - parsed_response = dataclasses.replace(response, abi_return=_init_dataclass(AssetConfig, typing.cast(dict, response.abi_return))) # type: ignore - return typing.cast(algokit_utils.SendAppTransactionResult[AssetConfig], parsed_response) - - def get_asset_is_frozen( - self, - args: tuple[int] | GetAssetIsFrozenArgs, - params: algokit_utils.CommonAppCallParams | None = None, - send_params: algokit_utils.SendParams | None = None - ) -> algokit_utils.SendAppTransactionResult[bool]: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "get_asset_is_frozen(uint64)bool", - "args": method_args, - }), send_params=send_params) - parsed_response = response - return typing.cast(algokit_utils.SendAppTransactionResult[bool], parsed_response) - - def get_account_is_frozen( - self, - args: tuple[int, str] | GetAccountIsFrozenArgs, - params: algokit_utils.CommonAppCallParams | None = None, - send_params: algokit_utils.SendParams | None = None - ) -> algokit_utils.SendAppTransactionResult[bool]: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "get_account_is_frozen(uint64,address)bool", - "args": method_args, - }), send_params=send_params) - parsed_response = response - return typing.cast(algokit_utils.SendAppTransactionResult[bool], parsed_response) - - def get_circulating_supply( - self, - args: tuple[int] | GetCirculatingSupplyArgs, - params: algokit_utils.CommonAppCallParams | None = None, - send_params: algokit_utils.SendParams | None = None - ) -> algokit_utils.SendAppTransactionResult[int]: - method_args = _parse_abi_args(args) - params = params or algokit_utils.CommonAppCallParams() - response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{ - **dataclasses.asdict(params), - "method": "get_circulating_supply(uint64)uint64", - "args": method_args, - }), send_params=send_params) - parsed_response = response - return typing.cast(algokit_utils.SendAppTransactionResult[int], parsed_response) - - def clear_state( - self, - params: algokit_utils.AppClientBareCallParams | None = None, - send_params: algokit_utils.SendParams | None = None - ) -> algokit_utils.SendAppTransactionResult[algokit_utils.ABIReturn]: - return self.app_client.send.bare.clear_state( - params, - send_params=send_params, - ) - - -class GlobalStateValue(typing.TypedDict): - """Shape of global_state state key values""" - total: int - decimals: int - default_frozen: int - unit_name: str - name: str - url: str - metadata_hash: bytes - manager_addr: str - reserve_addr: str - freeze_addr: str - clawback_addr: str - smart_asa_id: int - global_frozen: int - -class LocalStateValue(typing.TypedDict): - """Shape of local_state state key values""" - account_smart_asa_id: int - account_frozen: int - -class SmartAsaState: - """Methods to access state for the current SmartAsa app""" - - def __init__(self, app_client: algokit_utils.AppClient): - self.app_client = app_client - - @property - def global_state( - self - ) -> "_GlobalState": - """Methods to access global_state for the current app""" - return _GlobalState(self.app_client) - - def local_state( - self, address: str - ) -> "_LocalState": - """Methods to access local_state for the current app""" - return _LocalState(self.app_client, address) - -class _GlobalState: - def __init__(self, app_client: algokit_utils.AppClient): - self.app_client = app_client - - # Pre-generated mapping of value types to their struct classes - self._struct_classes: dict[str, typing.Type[typing.Any]] = {} - - def get_all(self) -> GlobalStateValue: - """Get all current keyed values from global_state state""" - result = self.app_client.state.global_state.get_all() - if not result: - return typing.cast(GlobalStateValue, {}) - - converted = {} - for key, value in result.items(): - key_info = self.app_client.app_spec.state.keys.global_state.get(key) - struct_class = self._struct_classes.get(key_info.value_type) if key_info else None - converted[key] = ( - _init_dataclass(struct_class, value) if struct_class and isinstance(value, dict) - else value - ) - return typing.cast(GlobalStateValue, converted) - - @property - def total(self) -> int: - """Get the current value of the total key in global_state state""" - value = self.app_client.state.global_state.get_value("total") - if isinstance(value, dict) and "AVMUint64" in self._struct_classes: - return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore - return typing.cast(int, value) - - @property - def decimals(self) -> int: - """Get the current value of the decimals key in global_state state""" - value = self.app_client.state.global_state.get_value("decimals") - if isinstance(value, dict) and "AVMUint64" in self._struct_classes: - return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore - return typing.cast(int, value) - - @property - def default_frozen(self) -> int: - """Get the current value of the default_frozen key in global_state state""" - value = self.app_client.state.global_state.get_value("default_frozen") - if isinstance(value, dict) and "AVMUint64" in self._struct_classes: - return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore - return typing.cast(int, value) - - @property - def unit_name(self) -> str: - """Get the current value of the unit_name key in global_state state""" - value = self.app_client.state.global_state.get_value("unit_name") - if isinstance(value, dict) and "AVMString" in self._struct_classes: - return _init_dataclass(self._struct_classes["AVMString"], value) # type: ignore - return typing.cast(str, value) - - @property - def name(self) -> str: - """Get the current value of the name key in global_state state""" - value = self.app_client.state.global_state.get_value("name") - if isinstance(value, dict) and "AVMString" in self._struct_classes: - return _init_dataclass(self._struct_classes["AVMString"], value) # type: ignore - return typing.cast(str, value) - - @property - def url(self) -> str: - """Get the current value of the url key in global_state state""" - value = self.app_client.state.global_state.get_value("url") - if isinstance(value, dict) and "AVMString" in self._struct_classes: - return _init_dataclass(self._struct_classes["AVMString"], value) # type: ignore - return typing.cast(str, value) - - @property - def metadata_hash(self) -> bytes: - """Get the current value of the metadata_hash key in global_state state""" - value = self.app_client.state.global_state.get_value("metadata_hash") - if isinstance(value, dict) and "AVMBytes" in self._struct_classes: - return _init_dataclass(self._struct_classes["AVMBytes"], value) # type: ignore - return typing.cast(bytes, value) - - @property - def manager_addr(self) -> str: - """Get the current value of the manager_addr key in global_state state""" - value = self.app_client.state.global_state.get_value("manager_addr") - if isinstance(value, dict) and "address" in self._struct_classes: - return _init_dataclass(self._struct_classes["address"], value) # type: ignore - return typing.cast(str, value) - - @property - def reserve_addr(self) -> str: - """Get the current value of the reserve_addr key in global_state state""" - value = self.app_client.state.global_state.get_value("reserve_addr") - if isinstance(value, dict) and "address" in self._struct_classes: - return _init_dataclass(self._struct_classes["address"], value) # type: ignore - return typing.cast(str, value) - - @property - def freeze_addr(self) -> str: - """Get the current value of the freeze_addr key in global_state state""" - value = self.app_client.state.global_state.get_value("freeze_addr") - if isinstance(value, dict) and "address" in self._struct_classes: - return _init_dataclass(self._struct_classes["address"], value) # type: ignore - return typing.cast(str, value) - - @property - def clawback_addr(self) -> str: - """Get the current value of the clawback_addr key in global_state state""" - value = self.app_client.state.global_state.get_value("clawback_addr") - if isinstance(value, dict) and "address" in self._struct_classes: - return _init_dataclass(self._struct_classes["address"], value) # type: ignore - return typing.cast(str, value) - - @property - def smart_asa_id(self) -> int: - """Get the current value of the smart_asa_id key in global_state state""" - value = self.app_client.state.global_state.get_value("smart_asa_id") - if isinstance(value, dict) and "AVMUint64" in self._struct_classes: - return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore - return typing.cast(int, value) - - @property - def global_frozen(self) -> int: - """Get the current value of the global_frozen key in global_state state""" - value = self.app_client.state.global_state.get_value("global_frozen") - if isinstance(value, dict) and "AVMUint64" in self._struct_classes: - return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore - return typing.cast(int, value) - -class _LocalState: - def __init__(self, app_client: algokit_utils.AppClient, address: str): - self.app_client = app_client - self.address = address - # Pre-generated mapping of value types to their struct classes - self._struct_classes: dict[str, typing.Type[typing.Any]] = {} - - def get_all(self) -> LocalStateValue: - """Get all current keyed values from local_state state""" - result = self.app_client.state.local_state(self.address).get_all() - if not result: - return typing.cast(LocalStateValue, {}) - - converted = {} - for key, value in result.items(): - key_info = self.app_client.app_spec.state.keys.local_state.get(key) - struct_class = self._struct_classes.get(key_info.value_type) if key_info else None - converted[key] = ( - _init_dataclass(struct_class, value) if struct_class and isinstance(value, dict) - else value - ) - return typing.cast(LocalStateValue, converted) - - @property - def account_smart_asa_id(self) -> int: - """Get the current value of the account_smart_asa_id key in local_state state""" - value = self.app_client.state.local_state(self.address).get_value("account_smart_asa_id") - if isinstance(value, dict) and "AVMUint64" in self._struct_classes: - return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore - return typing.cast(int, value) - - @property - def account_frozen(self) -> int: - """Get the current value of the account_frozen key in local_state state""" - value = self.app_client.state.local_state(self.address).get_value("account_frozen") - if isinstance(value, dict) and "AVMUint64" in self._struct_classes: - return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore - return typing.cast(int, value) - -class SmartAsaClient: - """Client for interacting with SmartAsa smart contract""" - - @typing.overload - def __init__(self, app_client: algokit_utils.AppClient) -> None: ... - - @typing.overload - def __init__( - self, - *, - algorand: _AlgoKitAlgorandClient, - app_id: int, - app_name: str | None = None, - default_sender: str | None = None, - default_signer: TransactionSigner | None = None, - approval_source_map: SourceMap | None = None, - clear_source_map: SourceMap | None = None, - ) -> None: ... - - def __init__( - self, - app_client: algokit_utils.AppClient | None = None, - *, - algorand: _AlgoKitAlgorandClient | None = None, - app_id: int | None = None, - app_name: str | None = None, - default_sender: str | None = None, - default_signer: TransactionSigner | None = None, - approval_source_map: SourceMap | None = None, - clear_source_map: SourceMap | None = None, - ) -> None: - if app_client: - self.app_client = app_client - elif algorand and app_id: - self.app_client = algokit_utils.AppClient( - algokit_utils.AppClientParams( - algorand=algorand, - app_spec=APP_SPEC, - app_id=app_id, - app_name=app_name, - default_sender=default_sender, - default_signer=default_signer, - approval_source_map=approval_source_map, - clear_source_map=clear_source_map, - ) - ) - else: - raise ValueError("Either app_client or algorand and app_id must be provided") - - self.params = SmartAsaParams(self.app_client) - self.create_transaction = SmartAsaCreateTransactionParams(self.app_client) - self.send = SmartAsaSend(self.app_client) - self.state = SmartAsaState(self.app_client) - - @staticmethod - def from_creator_and_name( - creator_address: str, - app_name: str, - algorand: _AlgoKitAlgorandClient, - default_sender: str | None = None, - default_signer: TransactionSigner | None = None, - approval_source_map: SourceMap | None = None, - clear_source_map: SourceMap | None = None, - ignore_cache: bool | None = None, - app_lookup_cache: algokit_utils.ApplicationLookup | None = None, - ) -> "SmartAsaClient": - return SmartAsaClient( - algokit_utils.AppClient.from_creator_and_name( - creator_address=creator_address, - app_name=app_name, - app_spec=APP_SPEC, - algorand=algorand, - default_sender=default_sender, - default_signer=default_signer, - approval_source_map=approval_source_map, - clear_source_map=clear_source_map, - ignore_cache=ignore_cache, - app_lookup_cache=app_lookup_cache, - ) - ) - - @staticmethod - def from_network( - algorand: _AlgoKitAlgorandClient, - app_name: str | None = None, - default_sender: str | None = None, - default_signer: TransactionSigner | None = None, - approval_source_map: SourceMap | None = None, - clear_source_map: SourceMap | None = None, - ) -> "SmartAsaClient": - return SmartAsaClient( - algokit_utils.AppClient.from_network( - app_spec=APP_SPEC, - algorand=algorand, - app_name=app_name, - default_sender=default_sender, - default_signer=default_signer, - approval_source_map=approval_source_map, - clear_source_map=clear_source_map, - ) - ) - - @property - def app_id(self) -> int: - return self.app_client.app_id - - @property - def app_address(self) -> str: - return self.app_client.app_address - - @property - def app_name(self) -> str: - return self.app_client.app_name - - @property - def app_spec(self) -> algokit_utils.Arc56Contract: - return self.app_client.app_spec - - @property - def algorand(self) -> _AlgoKitAlgorandClient: - return self.app_client.algorand - - def clone( - self, - app_name: str | None = None, - default_sender: str | None = None, - default_signer: TransactionSigner | None = None, - approval_source_map: SourceMap | None = None, - clear_source_map: SourceMap | None = None, - ) -> "SmartAsaClient": - return SmartAsaClient( - self.app_client.clone( - app_name=app_name, - default_sender=default_sender, - default_signer=default_signer, - approval_source_map=approval_source_map, - clear_source_map=clear_source_map, - ) - ) - - def new_group(self) -> "SmartAsaComposer": - return SmartAsaComposer(self) - - @typing.overload - def decode_return_value( - self, - method: typing.Literal["asset_create(uint64,uint32,bool,string,string,string,byte[],address,address,address,address)uint64"], - return_value: algokit_utils.ABIReturn | None - ) -> int | None: ... - @typing.overload - def decode_return_value( - self, - method: typing.Literal["asset_config(uint64,uint64,uint32,bool,string,string,string,byte[],address,address,address,address)void"], - return_value: algokit_utils.ABIReturn | None - ) -> None: ... - @typing.overload - def decode_return_value( - self, - method: typing.Literal["asset_transfer(uint64,uint64,address,address)void"], - return_value: algokit_utils.ABIReturn | None - ) -> None: ... - @typing.overload - def decode_return_value( - self, - method: typing.Literal["asset_freeze(uint64,bool)void"], - return_value: algokit_utils.ABIReturn | None - ) -> None: ... - @typing.overload - def decode_return_value( - self, - method: typing.Literal["account_freeze(uint64,address,bool)void"], - return_value: algokit_utils.ABIReturn | None - ) -> None: ... - @typing.overload - def decode_return_value( - self, - method: typing.Literal["asset_destroy(uint64)void"], - return_value: algokit_utils.ABIReturn | None - ) -> None: ... - @typing.overload - def decode_return_value( - self, - method: typing.Literal["get_asset_config(uint64)(uint64,uint32,bool,string,string,string,byte[],address,address,address,address)"], - return_value: algokit_utils.ABIReturn | None - ) -> AssetConfig | None: ... - @typing.overload - def decode_return_value( - self, - method: typing.Literal["get_asset_is_frozen(uint64)bool"], - return_value: algokit_utils.ABIReturn | None - ) -> bool | None: ... - @typing.overload - def decode_return_value( - self, - method: typing.Literal["get_account_is_frozen(uint64,address)bool"], - return_value: algokit_utils.ABIReturn | None - ) -> bool | None: ... - @typing.overload - def decode_return_value( - self, - method: typing.Literal["get_circulating_supply(uint64)uint64"], - return_value: algokit_utils.ABIReturn | None - ) -> int | None: ... - @typing.overload - def decode_return_value( - self, - method: typing.Literal["asset_opt_in(uint64,axfer)void"], - return_value: algokit_utils.ABIReturn | None - ) -> None: ... - @typing.overload - def decode_return_value( - self, - method: typing.Literal["asset_close_out(uint64,address)void"], - return_value: algokit_utils.ABIReturn | None - ) -> None: ... - @typing.overload - def decode_return_value( - self, - method: str, - return_value: algokit_utils.ABIReturn | None - ) -> algokit_utils.ABIValue | algokit_utils.ABIStruct | None: ... - - def decode_return_value( - self, - method: str, - return_value: algokit_utils.ABIReturn | None - ) -> algokit_utils.ABIValue | algokit_utils.ABIStruct | AssetConfig | None | bool | int: - """Decode ABI return value for the given method.""" - if return_value is None: - return None - - arc56_method = self.app_spec.get_arc56_method(method) - decoded = return_value.get_arc56_value(arc56_method, self.app_spec.structs) - - # If method returns a struct, convert the dict to appropriate dataclass - if (arc56_method and - arc56_method.returns and - arc56_method.returns.struct and - isinstance(decoded, dict)): - struct_class = globals().get(arc56_method.returns.struct) - if struct_class: - return struct_class(**typing.cast(dict, decoded)) - return decoded - - -@dataclasses.dataclass(frozen=True) -class SmartAsaBareCallCreateParams(algokit_utils.AppClientBareCallCreateParams): - """Parameters for creating SmartAsa contract with bare calls""" - on_complete: typing.Literal[OnComplete.NoOpOC] | None = None - - def to_algokit_utils_params(self) -> algokit_utils.AppClientBareCallCreateParams: - return algokit_utils.AppClientBareCallCreateParams(**self.__dict__) - -class SmartAsaFactory(algokit_utils.TypedAppFactoryProtocol[SmartAsaBareCallCreateParams, None, None]): - """Factory for deploying and managing SmartAsaClient smart contracts""" - - def __init__( - self, - algorand: _AlgoKitAlgorandClient, - *, - app_name: str | None = None, - default_sender: str | None = None, - default_signer: TransactionSigner | None = None, - version: str | None = None, - compilation_params: algokit_utils.AppClientCompilationParams | None = None, - ): - self.app_factory = algokit_utils.AppFactory( - params=algokit_utils.AppFactoryParams( - algorand=algorand, - app_spec=APP_SPEC, - app_name=app_name, - default_sender=default_sender, - default_signer=default_signer, - version=version, - compilation_params=compilation_params, - ) - ) - self.params = SmartAsaFactoryParams(self.app_factory) - self.create_transaction = SmartAsaFactoryCreateTransaction(self.app_factory) - self.send = SmartAsaFactorySend(self.app_factory) - - @property - def app_name(self) -> str: - return self.app_factory.app_name - - @property - def app_spec(self) -> algokit_utils.Arc56Contract: - return self.app_factory.app_spec - - @property - def algorand(self) -> _AlgoKitAlgorandClient: - return self.app_factory.algorand - - def deploy( - self, - *, - on_update: algokit_utils.OnUpdate | None = None, - on_schema_break: algokit_utils.OnSchemaBreak | None = None, - create_params: SmartAsaBareCallCreateParams | None = None, - update_params: None = None, - delete_params: None = None, - existing_deployments: algokit_utils.ApplicationLookup | None = None, - ignore_cache: bool = False, - app_name: str | None = None, - compilation_params: algokit_utils.AppClientCompilationParams | None = None, - send_params: algokit_utils.SendParams | None = None, - ) -> tuple[SmartAsaClient, algokit_utils.AppFactoryDeployResult]: - """Deploy the application""" - deploy_response = self.app_factory.deploy( - on_update=on_update, - on_schema_break=on_schema_break, - create_params=create_params.to_algokit_utils_params() if create_params else None, - update_params=update_params, - delete_params=delete_params, - existing_deployments=existing_deployments, - ignore_cache=ignore_cache, - app_name=app_name, - compilation_params=compilation_params, - send_params=send_params, - ) - - return SmartAsaClient(deploy_response[0]), deploy_response[1] - - def get_app_client_by_creator_and_name( - self, - creator_address: str, - app_name: str, - default_sender: str | None = None, - default_signer: TransactionSigner | None = None, - ignore_cache: bool | None = None, - app_lookup_cache: algokit_utils.ApplicationLookup | None = None, - approval_source_map: SourceMap | None = None, - clear_source_map: SourceMap | None = None, - ) -> SmartAsaClient: - """Get an app client by creator address and name""" - return SmartAsaClient( - self.app_factory.get_app_client_by_creator_and_name( - creator_address, - app_name, - default_sender, - default_signer, - ignore_cache, - app_lookup_cache, - approval_source_map, - clear_source_map, - ) - ) - - def get_app_client_by_id( - self, - app_id: int, - app_name: str | None = None, - default_sender: str | None = None, - default_signer: TransactionSigner | None = None, - approval_source_map: SourceMap | None = None, - clear_source_map: SourceMap | None = None, - ) -> SmartAsaClient: - """Get an app client by app ID""" - return SmartAsaClient( - self.app_factory.get_app_client_by_id( - app_id, - app_name, - default_sender, - default_signer, - approval_source_map, - clear_source_map, - ) - ) - - -class SmartAsaFactoryParams: - """Parameters for creating transactions for SmartAsa contract""" - - def __init__(self, app_factory: algokit_utils.AppFactory): - self.app_factory = app_factory - self.create = SmartAsaFactoryCreateParams(app_factory) - self.update = SmartAsaFactoryUpdateParams(app_factory) - self.delete = SmartAsaFactoryDeleteParams(app_factory) - -class SmartAsaFactoryCreateParams: - """Parameters for 'create' operations of SmartAsa contract""" - - def __init__(self, app_factory: algokit_utils.AppFactory): - self.app_factory = app_factory - - def bare( - self, - *, - params: algokit_utils.CommonAppCallCreateParams | None = None, - compilation_params: algokit_utils.AppClientCompilationParams | None = None - ) -> algokit_utils.AppCreateParams: - """Creates an instance using a bare call""" - params = params or algokit_utils.CommonAppCallCreateParams() - return self.app_factory.params.bare.create( - algokit_utils.AppFactoryCreateParams(**dataclasses.asdict(params)), - compilation_params=compilation_params) - - def asset_create( - self, - args: tuple[int, int, bool, str, str, str, bytes | str, str, str, str, str] | AssetCreateArgs, - *, - params: algokit_utils.CommonAppCallCreateParams | None = None, - compilation_params: algokit_utils.AppClientCompilationParams | None = None - ) -> algokit_utils.AppCreateMethodCallParams: - """Creates a new instance using the asset_create(uint64,uint32,bool,string,string,string,byte[],address,address,address,address)uint64 ABI method""" - params = params or algokit_utils.CommonAppCallCreateParams() - return self.app_factory.params.create( - algokit_utils.AppFactoryCreateMethodCallParams( - **{ - **dataclasses.asdict(params), - "method": "asset_create(uint64,uint32,bool,string,string,string,byte[],address,address,address,address)uint64", - "args": _parse_abi_args(args), - } - ), - compilation_params=compilation_params - ) - - def asset_config( - self, - args: tuple[int, int, int, bool, str, str, str, bytes | str, str, str, str, str] | AssetConfigArgs, - *, - params: algokit_utils.CommonAppCallCreateParams | None = None, - compilation_params: algokit_utils.AppClientCompilationParams | None = None - ) -> algokit_utils.AppCreateMethodCallParams: - """Creates a new instance using the asset_config(uint64,uint64,uint32,bool,string,string,string,byte[],address,address,address,address)void ABI method""" - params = params or algokit_utils.CommonAppCallCreateParams() - return self.app_factory.params.create( - algokit_utils.AppFactoryCreateMethodCallParams( - **{ - **dataclasses.asdict(params), - "method": "asset_config(uint64,uint64,uint32,bool,string,string,string,byte[],address,address,address,address)void", - "args": _parse_abi_args(args), - } - ), - compilation_params=compilation_params - ) - - def asset_transfer( - self, - args: tuple[int, int, str, str] | AssetTransferArgs, - *, - params: algokit_utils.CommonAppCallCreateParams | None = None, - compilation_params: algokit_utils.AppClientCompilationParams | None = None - ) -> algokit_utils.AppCreateMethodCallParams: - """Creates a new instance using the asset_transfer(uint64,uint64,address,address)void ABI method""" - params = params or algokit_utils.CommonAppCallCreateParams() - return self.app_factory.params.create( - algokit_utils.AppFactoryCreateMethodCallParams( - **{ - **dataclasses.asdict(params), - "method": "asset_transfer(uint64,uint64,address,address)void", - "args": _parse_abi_args(args), - } - ), - compilation_params=compilation_params - ) - - def asset_freeze( - self, - args: tuple[int, bool] | AssetFreezeArgs, - *, - params: algokit_utils.CommonAppCallCreateParams | None = None, - compilation_params: algokit_utils.AppClientCompilationParams | None = None - ) -> algokit_utils.AppCreateMethodCallParams: - """Creates a new instance using the asset_freeze(uint64,bool)void ABI method""" - params = params or algokit_utils.CommonAppCallCreateParams() - return self.app_factory.params.create( - algokit_utils.AppFactoryCreateMethodCallParams( - **{ - **dataclasses.asdict(params), - "method": "asset_freeze(uint64,bool)void", - "args": _parse_abi_args(args), - } - ), - compilation_params=compilation_params - ) - - def account_freeze( - self, - args: tuple[int, str, bool] | AccountFreezeArgs, - *, - params: algokit_utils.CommonAppCallCreateParams | None = None, - compilation_params: algokit_utils.AppClientCompilationParams | None = None - ) -> algokit_utils.AppCreateMethodCallParams: - """Creates a new instance using the account_freeze(uint64,address,bool)void ABI method""" - params = params or algokit_utils.CommonAppCallCreateParams() - return self.app_factory.params.create( - algokit_utils.AppFactoryCreateMethodCallParams( - **{ - **dataclasses.asdict(params), - "method": "account_freeze(uint64,address,bool)void", - "args": _parse_abi_args(args), - } - ), - compilation_params=compilation_params - ) - - def asset_destroy( - self, - args: tuple[int] | AssetDestroyArgs, - *, - params: algokit_utils.CommonAppCallCreateParams | None = None, - compilation_params: algokit_utils.AppClientCompilationParams | None = None - ) -> algokit_utils.AppCreateMethodCallParams: - """Creates a new instance using the asset_destroy(uint64)void ABI method""" - params = params or algokit_utils.CommonAppCallCreateParams() - return self.app_factory.params.create( - algokit_utils.AppFactoryCreateMethodCallParams( - **{ - **dataclasses.asdict(params), - "method": "asset_destroy(uint64)void", - "args": _parse_abi_args(args), - } - ), - compilation_params=compilation_params - ) - - def get_asset_config( - self, - args: tuple[int] | GetAssetConfigArgs, - *, - params: algokit_utils.CommonAppCallCreateParams | None = None, - compilation_params: algokit_utils.AppClientCompilationParams | None = None - ) -> algokit_utils.AppCreateMethodCallParams: - """Creates a new instance using the get_asset_config(uint64)(uint64,uint32,bool,string,string,string,byte[],address,address,address,address) ABI method""" - params = params or algokit_utils.CommonAppCallCreateParams() - return self.app_factory.params.create( - algokit_utils.AppFactoryCreateMethodCallParams( - **{ - **dataclasses.asdict(params), - "method": "get_asset_config(uint64)(uint64,uint32,bool,string,string,string,byte[],address,address,address,address)", - "args": _parse_abi_args(args), - } - ), - compilation_params=compilation_params - ) - - def get_asset_is_frozen( - self, - args: tuple[int] | GetAssetIsFrozenArgs, - *, - params: algokit_utils.CommonAppCallCreateParams | None = None, - compilation_params: algokit_utils.AppClientCompilationParams | None = None - ) -> algokit_utils.AppCreateMethodCallParams: - """Creates a new instance using the get_asset_is_frozen(uint64)bool ABI method""" - params = params or algokit_utils.CommonAppCallCreateParams() - return self.app_factory.params.create( - algokit_utils.AppFactoryCreateMethodCallParams( - **{ - **dataclasses.asdict(params), - "method": "get_asset_is_frozen(uint64)bool", - "args": _parse_abi_args(args), - } - ), - compilation_params=compilation_params - ) - - def get_account_is_frozen( - self, - args: tuple[int, str] | GetAccountIsFrozenArgs, - *, - params: algokit_utils.CommonAppCallCreateParams | None = None, - compilation_params: algokit_utils.AppClientCompilationParams | None = None - ) -> algokit_utils.AppCreateMethodCallParams: - """Creates a new instance using the get_account_is_frozen(uint64,address)bool ABI method""" - params = params or algokit_utils.CommonAppCallCreateParams() - return self.app_factory.params.create( - algokit_utils.AppFactoryCreateMethodCallParams( - **{ - **dataclasses.asdict(params), - "method": "get_account_is_frozen(uint64,address)bool", - "args": _parse_abi_args(args), - } - ), - compilation_params=compilation_params - ) - - def get_circulating_supply( - self, - args: tuple[int] | GetCirculatingSupplyArgs, - *, - params: algokit_utils.CommonAppCallCreateParams | None = None, - compilation_params: algokit_utils.AppClientCompilationParams | None = None - ) -> algokit_utils.AppCreateMethodCallParams: - """Creates a new instance using the get_circulating_supply(uint64)uint64 ABI method""" - params = params or algokit_utils.CommonAppCallCreateParams() - return self.app_factory.params.create( - algokit_utils.AppFactoryCreateMethodCallParams( - **{ - **dataclasses.asdict(params), - "method": "get_circulating_supply(uint64)uint64", - "args": _parse_abi_args(args), - } - ), - compilation_params=compilation_params - ) - - def asset_opt_in( - self, - args: tuple[int, algokit_utils.AppMethodCallTransactionArgument] | AssetOptInArgs, - *, - params: algokit_utils.CommonAppCallCreateParams | None = None, - compilation_params: algokit_utils.AppClientCompilationParams | None = None - ) -> algokit_utils.AppCreateMethodCallParams: - """Creates a new instance using the asset_opt_in(uint64,axfer)void ABI method""" - params = params or algokit_utils.CommonAppCallCreateParams() - return self.app_factory.params.create( - algokit_utils.AppFactoryCreateMethodCallParams( - **{ - **dataclasses.asdict(params), - "method": "asset_opt_in(uint64,axfer)void", - "args": _parse_abi_args(args), - } - ), - compilation_params=compilation_params - ) - - def asset_close_out( - self, - args: tuple[int, str] | AssetCloseOutArgs, - *, - params: algokit_utils.CommonAppCallCreateParams | None = None, - compilation_params: algokit_utils.AppClientCompilationParams | None = None - ) -> algokit_utils.AppCreateMethodCallParams: - """Creates a new instance using the asset_close_out(uint64,address)void ABI method""" - params = params or algokit_utils.CommonAppCallCreateParams() - return self.app_factory.params.create( - algokit_utils.AppFactoryCreateMethodCallParams( - **{ - **dataclasses.asdict(params), - "method": "asset_close_out(uint64,address)void", - "args": _parse_abi_args(args), - } - ), - compilation_params=compilation_params - ) - -class SmartAsaFactoryUpdateParams: - """Parameters for 'update' operations of SmartAsa contract""" - - def __init__(self, app_factory: algokit_utils.AppFactory): - self.app_factory = app_factory - - def bare( - self, - *, - params: algokit_utils.CommonAppCallCreateParams | None = None, - - ) -> algokit_utils.AppUpdateParams: - """Updates an instance using a bare call""" - params = params or algokit_utils.CommonAppCallCreateParams() - return self.app_factory.params.bare.deploy_update( - algokit_utils.AppClientBareCallParams(**dataclasses.asdict(params)), - ) - -class SmartAsaFactoryDeleteParams: - """Parameters for 'delete' operations of SmartAsa contract""" - - def __init__(self, app_factory: algokit_utils.AppFactory): - self.app_factory = app_factory - - def bare( - self, - *, - params: algokit_utils.CommonAppCallCreateParams | None = None, - - ) -> algokit_utils.AppDeleteParams: - """Deletes an instance using a bare call""" - params = params or algokit_utils.CommonAppCallCreateParams() - return self.app_factory.params.bare.deploy_delete( - algokit_utils.AppClientBareCallParams(**dataclasses.asdict(params)), - ) - - -class SmartAsaFactoryCreateTransaction: - """Create transactions for SmartAsa contract""" - - def __init__(self, app_factory: algokit_utils.AppFactory): - self.app_factory = app_factory - self.create = SmartAsaFactoryCreateTransactionCreate(app_factory) - - -class SmartAsaFactoryCreateTransactionCreate: - """Create new instances of SmartAsa contract""" - - def __init__(self, app_factory: algokit_utils.AppFactory): - self.app_factory = app_factory - - def bare( - self, - params: algokit_utils.CommonAppCallCreateParams | None = None, - ) -> Transaction: - """Creates a new instance using a bare call""" - params = params or algokit_utils.CommonAppCallCreateParams() - return self.app_factory.create_transaction.bare.create( - algokit_utils.AppFactoryCreateParams(**dataclasses.asdict(params)), - ) - - -class SmartAsaFactorySend: - """Send calls to SmartAsa contract""" - - def __init__(self, app_factory: algokit_utils.AppFactory): - self.app_factory = app_factory - self.create = SmartAsaFactorySendCreate(app_factory) - - -class SmartAsaFactorySendCreate: - """Send create calls to SmartAsa contract""" - - def __init__(self, app_factory: algokit_utils.AppFactory): - self.app_factory = app_factory - - def bare( - self, - *, - params: algokit_utils.CommonAppCallCreateParams | None = None, - send_params: algokit_utils.SendParams | None = None, - compilation_params: algokit_utils.AppClientCompilationParams | None = None, - ) -> tuple[SmartAsaClient, algokit_utils.SendAppCreateTransactionResult]: - """Creates a new instance using a bare call""" - params = params or algokit_utils.CommonAppCallCreateParams() - result = self.app_factory.send.bare.create( - algokit_utils.AppFactoryCreateParams(**dataclasses.asdict(params)), - send_params=send_params, - compilation_params=compilation_params - ) - return SmartAsaClient(result[0]), result[1] - - -class _SmartAsaOptInComposer: - def __init__(self, composer: "SmartAsaComposer"): - self.composer = composer - def asset_opt_in( - self, - args: tuple[int, algokit_utils.AppMethodCallTransactionArgument] | AssetOptInArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> "SmartAsaComposer": - self.composer._composer.add_app_call_method_call( - self.composer.client.params.opt_in.asset_opt_in( - args=args, - params=params, - - ) - ) - self.composer._result_mappers.append( - lambda v: self.composer.client.decode_return_value( - "asset_opt_in(uint64,axfer)void", v - ) - ) - return self.composer - - -class _SmartAsaCloseOutComposer: - def __init__(self, composer: "SmartAsaComposer"): - self.composer = composer - def asset_close_out( - self, - args: tuple[int, str] | AssetCloseOutArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> "SmartAsaComposer": - self.composer._composer.add_app_call_method_call( - self.composer.client.params.close_out.asset_close_out( - args=args, - params=params, - - ) - ) - self.composer._result_mappers.append( - lambda v: self.composer.client.decode_return_value( - "asset_close_out(uint64,address)void", v - ) - ) - return self.composer - - -class SmartAsaComposer: - """Composer for creating transaction groups for SmartAsa contract calls""" - - def __init__(self, client: "SmartAsaClient"): - self.client = client - self._composer = client.algorand.new_group() - self._result_mappers: list[typing.Callable[[algokit_utils.ABIReturn | None], object] | None] = [] - - @property - def opt_in(self) -> "_SmartAsaOptInComposer": - return _SmartAsaOptInComposer(self) - - @property - def close_out(self) -> "_SmartAsaCloseOutComposer": - return _SmartAsaCloseOutComposer(self) - - def asset_create( - self, - args: tuple[int, int, bool, str, str, str, bytes | str, str, str, str, str] | AssetCreateArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> "SmartAsaComposer": - self._composer.add_app_call_method_call( - self.client.params.asset_create( - args=args, - params=params, - ) - ) - self._result_mappers.append( - lambda v: self.client.decode_return_value( - "asset_create(uint64,uint32,bool,string,string,string,byte[],address,address,address,address)uint64", v - ) - ) - return self - - def asset_config( - self, - args: tuple[int, int, int, bool, str, str, str, bytes | str, str, str, str, str] | AssetConfigArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> "SmartAsaComposer": - self._composer.add_app_call_method_call( - self.client.params.asset_config( - args=args, - params=params, - ) - ) - self._result_mappers.append( - lambda v: self.client.decode_return_value( - "asset_config(uint64,uint64,uint32,bool,string,string,string,byte[],address,address,address,address)void", v - ) - ) - return self - - def asset_transfer( - self, - args: tuple[int, int, str, str] | AssetTransferArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> "SmartAsaComposer": - self._composer.add_app_call_method_call( - self.client.params.asset_transfer( - args=args, - params=params, - ) - ) - self._result_mappers.append( - lambda v: self.client.decode_return_value( - "asset_transfer(uint64,uint64,address,address)void", v - ) - ) - return self - - def asset_freeze( - self, - args: tuple[int, bool] | AssetFreezeArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> "SmartAsaComposer": - self._composer.add_app_call_method_call( - self.client.params.asset_freeze( - args=args, - params=params, - ) - ) - self._result_mappers.append( - lambda v: self.client.decode_return_value( - "asset_freeze(uint64,bool)void", v - ) - ) - return self - - def account_freeze( - self, - args: tuple[int, str, bool] | AccountFreezeArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> "SmartAsaComposer": - self._composer.add_app_call_method_call( - self.client.params.account_freeze( - args=args, - params=params, - ) - ) - self._result_mappers.append( - lambda v: self.client.decode_return_value( - "account_freeze(uint64,address,bool)void", v - ) - ) - return self - - def asset_destroy( - self, - args: tuple[int] | AssetDestroyArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> "SmartAsaComposer": - self._composer.add_app_call_method_call( - self.client.params.asset_destroy( - args=args, - params=params, - ) - ) - self._result_mappers.append( - lambda v: self.client.decode_return_value( - "asset_destroy(uint64)void", v - ) - ) - return self - - def get_asset_config( - self, - args: tuple[int] | GetAssetConfigArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> "SmartAsaComposer": - self._composer.add_app_call_method_call( - self.client.params.get_asset_config( - args=args, - params=params, - ) - ) - self._result_mappers.append( - lambda v: self.client.decode_return_value( - "get_asset_config(uint64)(uint64,uint32,bool,string,string,string,byte[],address,address,address,address)", v - ) - ) - return self - - def get_asset_is_frozen( - self, - args: tuple[int] | GetAssetIsFrozenArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> "SmartAsaComposer": - self._composer.add_app_call_method_call( - self.client.params.get_asset_is_frozen( - args=args, - params=params, - ) - ) - self._result_mappers.append( - lambda v: self.client.decode_return_value( - "get_asset_is_frozen(uint64)bool", v - ) - ) - return self - - def get_account_is_frozen( - self, - args: tuple[int, str] | GetAccountIsFrozenArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> "SmartAsaComposer": - self._composer.add_app_call_method_call( - self.client.params.get_account_is_frozen( - args=args, - params=params, - ) - ) - self._result_mappers.append( - lambda v: self.client.decode_return_value( - "get_account_is_frozen(uint64,address)bool", v - ) - ) - return self - - def get_circulating_supply( - self, - args: tuple[int] | GetCirculatingSupplyArgs, - params: algokit_utils.CommonAppCallParams | None = None - ) -> "SmartAsaComposer": - self._composer.add_app_call_method_call( - self.client.params.get_circulating_supply( - args=args, - params=params, - ) - ) - self._result_mappers.append( - lambda v: self.client.decode_return_value( - "get_circulating_supply(uint64)uint64", v - ) - ) - return self - - def clear_state( - self, - *, - args: list[bytes] | None = None, - params: algokit_utils.CommonAppCallParams | None = None, - ) -> "SmartAsaComposer": - params=params or algokit_utils.CommonAppCallParams() - self._composer.add_app_call( - self.client.params.clear_state( - algokit_utils.AppClientBareCallParams( - **{ - **dataclasses.asdict(params), - "args": args - } - ) - ) - ) - return self - - def add_transaction( - self, txn: Transaction, signer: TransactionSigner | None = None - ) -> "SmartAsaComposer": - self._composer.add_transaction(txn, signer) - return self - - def composer(self) -> algokit_utils.TransactionComposer: - return self._composer - - def simulate( - self, - allow_more_logs: bool | None = None, - allow_empty_signatures: bool | None = None, - allow_unnamed_resources: bool | None = None, - extra_opcode_budget: int | None = None, - exec_trace_config: SimulateTraceConfig | None = None, - simulation_round: int | None = None, - skip_signatures: bool | None = None, - ) -> algokit_utils.SendAtomicTransactionComposerResults: - return self._composer.simulate( - allow_more_logs=allow_more_logs, - allow_empty_signatures=allow_empty_signatures, - allow_unnamed_resources=allow_unnamed_resources, - extra_opcode_budget=extra_opcode_budget, - exec_trace_config=exec_trace_config, - simulation_round=simulation_round, - skip_signatures=skip_signatures, - ) - - def send( - self, - send_params: algokit_utils.SendParams | None = None - ) -> algokit_utils.SendAtomicTransactionComposerResults: - return self._composer.send(send_params) diff --git a/assets/arc-0020/smart_contracts/avm_types.py b/assets/arc-0020/smart_contracts/avm_types.py deleted file mode 100644 index 742a80295..000000000 --- a/assets/arc-0020/smart_contracts/avm_types.py +++ /dev/null @@ -1,17 +0,0 @@ -from algopy import arc4 - - -class AssetConfig(arc4.Struct, kw_only=True): - """Smart ASA Configuration""" - - total: arc4.UInt64 - decimals: arc4.UInt32 - default_frozen: arc4.Bool - unit_name: arc4.String - name: arc4.String - url: arc4.String - metadata_hash: arc4.DynamicBytes - manager_addr: arc4.Address - reserve_addr: arc4.Address - freeze_addr: arc4.Address - clawback_addr: arc4.Address diff --git a/assets/arc-0020/smart_contracts/errors.py b/assets/arc-0020/smart_contracts/errors.py deleted file mode 100644 index 288e02ba4..000000000 --- a/assets/arc-0020/smart_contracts/errors.py +++ /dev/null @@ -1,47 +0,0 @@ -# Errors -WRONG_GLOBAL_BYTES = "Wrong Global Bytes allocation" -WRONG_GLOBAL_UINTS = "Wrong Global UInts allocation" -WRONG_LOCAL_BYTES = "Wrong Local Bytes allocation" -WRONG_LOCAL_UINTS = "Wrong Local UInts allocation" - -WRONG_ON_COMPLETE = "Wrong On Complete Action" - -UNAUTHORIZED = "Unauthorized" -UNAUTHORIZED_MANAGER = "Unauthorized Manager" -UNAUTHORIZED_RESERVE = "Unauthorized Reserve" -UNAUTHORIZED_FREEZE = "Unauthorized Freeze" -UNAUTHORIZED_CLAWBACK = "Unauthorized Clawback" - -MISSING_CTRL_ASA = "Missing Controlled ASA" -INVALID_CTRL_ASA = "Invalid Controlled ASA ID" -EXISTING_CTRL_ASA = "Controlled ASA already created" - -DISABLED_RESERVE = "Reserve Address has been deleted" -DISABLED_FREEZE = "Freeze Address has been deleted" -DISABLED_CLAWBACK = "Clawback Address has been deleted" - -GLOBAL_FROZEN = "Smart ASA is global frozen" -SENDER_FROZEN = "Sender account is frozen" -RECEIVER_FROZEN = "Receiver account is frozen" -CLOSE_TO_FROZEN = "Close to account is frozen" - -OPT_IN_WRONG_TYPE = "Wrong ASA Opt In txn type" -OPT_IN_WRONG_ASA = "Wrong ASA Opt In ID" -OPT_IN_WRONG_SENDER = "Wrong ASA Opt In Sender" -OPT_IN_WRONG_RECEIVER = "Wrong ASA Opt In Receiver" -OPT_IN_WRONG_AMOUNT = "Wrong ASA Opt In Amount" -OPT_IN_WRONG_CLOSE_TO = "Forbidden Close Out on Opt In" -OPT_IN_MISSING = "Missing OptIn" - -CLOSE_OUT_WRONG_TYPE = "Wrong ASA Close Out txn type" -CLOSE_OUT_WRONG_ASA = "Wrong ASA Close Out ID" -CLOSE_OUT_WRONG_SENDER = "Wrong ASA Close Out Sender" -CLOSE_OUT_WRONG_AMOUNT = "Wrong ASA Close Out Amount" -CLOSE_OUT_WRONG_CLOSE_TO = "Wrong Close Out on Close Out" -INVALID_CLOSE_OUT_GROUP_SIZE = "Invalid Close Out group size" - -INVALID_TOTAL = "Invalid Total, must be >= circulating supply" - -SELF_MINT = "Forbidden self minting" -OVER_MINT = "Forbidden over minting" -CLAWBACK_BURN = "Forbidden clawback burning" diff --git a/assets/arc-0020/smart_contracts/smart_asa/config.py b/assets/arc-0020/smart_contracts/smart_asa/config.py deleted file mode 100644 index 868da0317..000000000 --- a/assets/arc-0020/smart_contracts/smart_asa/config.py +++ /dev/null @@ -1,15 +0,0 @@ -from typing import Final - -# State Schema -GLOBAL_BYTES: Final[int] = 8 -GLOBAL_UINTS: Final[int] = 5 -LOCAL_BYTES: Final[int] = 0 -LOCAL_UINTS: Final[int] = 2 - -# Controlled ASA -TOTAL: Final[int] = 2**64 - 1 -DECIMALS: Final[int] = 0 -DEFAULT_FROZEN: Final[bool] = True -UNIT_NAME: Final[str] = "ARC-20" -NAME: Final[str] = "ARC-20 Smart ASA" -APP_BINDING: Final[bytes] = b"algorand://app/" diff --git a/assets/arc-0020/smart_contracts/smart_asa/contract.py b/assets/arc-0020/smart_contracts/smart_asa/contract.py deleted file mode 100644 index 1a561d1d1..000000000 --- a/assets/arc-0020/smart_contracts/smart_asa/contract.py +++ /dev/null @@ -1,604 +0,0 @@ -from algopy import ( - Account, - ARC4Contract, - Asset, - Bytes, - Global, - LocalState, - OnCompleteAction, - StateTotals, - String, - TransactionType, - Txn, - UInt64, - arc4, - gtxn, - itxn, - op, - subroutine, -) - -from smart_contracts import errors as err -from smart_contracts.avm_types import AssetConfig - -from . import config as cfg - - -class SmartAsa( - ARC4Contract, - state_totals=StateTotals( - global_bytes=cfg.GLOBAL_BYTES, - global_uints=cfg.GLOBAL_UINTS, - local_bytes=cfg.LOCAL_BYTES, - local_uints=cfg.LOCAL_UINTS, - ), -): - """ - ARC-0020 (Smart ASA) - Reference Implementation - """ - - def __init__(self) -> None: - # Preconditions - assert Txn.global_num_byte_slice == cfg.GLOBAL_BYTES, err.WRONG_GLOBAL_BYTES - assert Txn.global_num_uint == cfg.GLOBAL_UINTS, err.WRONG_GLOBAL_UINTS - assert Txn.local_num_byte_slice == cfg.LOCAL_BYTES, err.WRONG_LOCAL_BYTES - assert Txn.local_num_uint == cfg.LOCAL_UINTS, err.WRONG_LOCAL_UINTS - - # GLOBAL STATE - # ASA Fields - self.total = UInt64() - self.decimals = UInt64() - self.default_frozen = False - self.unit_name = String() - self.name = String() - self.url = String() - self.metadata_hash = Bytes() - self.manager_addr = Account() - self.reserve_addr = Account() - self.freeze_addr = Account() - self.clawback_addr = Account() - # Smart ASA Fields - self.smart_asa_id = UInt64() - self.global_frozen = False - - # LOCAL STATE - # Smart ASA Fields - self.account_smart_asa_id = LocalState(UInt64) - self.account_frozen = LocalState(bool) - - @subroutine - def itoa(self, n: UInt64) -> Bytes: - digits = Bytes(b"0123456789") - acc = Bytes() - while n > 0: - acc = digits[n % 10] + acc - n //= 10 - return acc or Bytes(b"0") - - @subroutine - def circulating_supply(self, ctrl_asset: Asset) -> UInt64: - return cfg.TOTAL - ctrl_asset.balance(Global.current_application_address) - - @subroutine - def assert_common_preconditions(self, asset_id: UInt64) -> None: - assert self.smart_asa_id, err.MISSING_CTRL_ASA - assert self.smart_asa_id == asset_id, err.INVALID_CTRL_ASA - - @subroutine - def assert_minting_preconditions( - self, *, asset_receiver: Account, asset_amount: UInt64 - ) -> None: - # Mint permission restricted to Reserve. - assert Txn.sender == self.reserve_addr, err.UNAUTHORIZED_RESERVE - # Forbidden self-mint (to Creator) and over-mint (> total). - assert asset_receiver != Global.current_application_address, err.SELF_MINT - assert ( - asset_amount + self.circulating_supply(Asset(self.smart_asa_id)) - <= self.total - ), err.OVER_MINT - # In the case of Controlled ASA destroyed and re-created, the Smart ADA ID in Local State could be outdated. - assert ( - self.account_smart_asa_id[asset_receiver] == self.smart_asa_id - ), err.INVALID_CTRL_ASA - assert not self.global_frozen, err.GLOBAL_FROZEN - if self.reserve_addr != self.clawback_addr: - assert not self.account_frozen[asset_receiver], err.RECEIVER_FROZEN - - @subroutine - def assert_burning_preconditions(self, *, asset_sender: Account) -> None: - # Burn permission restricted to Reserve. - assert Txn.sender == self.reserve_addr, err.UNAUTHORIZED_RESERVE - # In case of Controlled ASA destroyed and re-created the Smart ADA ID in Local State could be outdated. - assert ( - self.account_smart_asa_id[asset_sender] == self.smart_asa_id - ), err.INVALID_CTRL_ASA - assert not self.global_frozen, err.GLOBAL_FROZEN - if self.reserve_addr != self.clawback_addr: - assert not self.account_frozen[asset_sender], err.SENDER_FROZEN - # Forbidden clawback through burning (burned amount not from Reserve). - assert asset_sender == self.reserve_addr, err.CLAWBACK_BURN - - @subroutine - def assert_clawback_preconditions( - self, *, asset_sender: Account, asset_receiver: Account - ) -> None: - # In the case of Controlled ASA destroyed and re-created, the Smart ADA ID in Local State could be outdated. - assert ( - self.account_smart_asa_id[asset_sender] == self.smart_asa_id - ), err.INVALID_CTRL_ASA - assert ( - self.account_smart_asa_id[asset_receiver] == self.smart_asa_id - ), err.INVALID_CTRL_ASA - - @subroutine - def assert_regular_transfer_preconditions( - self, *, asset_sender: Account, asset_receiver: Account - ) -> None: - assert Txn.sender == asset_sender, err.UNAUTHORIZED_CLAWBACK - # In the case of Controlled ASA destroyed and re-created, the Smart ADA ID in Local State could be outdated. - assert ( - self.account_smart_asa_id[asset_sender] == self.smart_asa_id - ), err.INVALID_CTRL_ASA - assert ( - self.account_smart_asa_id[asset_receiver] == self.smart_asa_id - ), err.INVALID_CTRL_ASA - assert not self.global_frozen, err.GLOBAL_FROZEN - assert not self.account_frozen[asset_sender], err.SENDER_FROZEN - assert not self.account_frozen[asset_receiver], err.RECEIVER_FROZEN - - @subroutine - def assert_close_out_preconditions(self, close_asset: Asset) -> None: - asa_close_out_relative_idx = Txn.group_index + 1 - asa_close_out_txn = gtxn.AssetTransferTransaction(asa_close_out_relative_idx) - assert Txn.on_completion == OnCompleteAction.CloseOut, err.WRONG_ON_COMPLETE - assert ( - self.account_smart_asa_id[Txn.sender] == close_asset.id - ), err.INVALID_CTRL_ASA - assert ( - Global.group_size > asa_close_out_relative_idx - ), err.INVALID_CLOSE_OUT_GROUP_SIZE - assert ( - asa_close_out_txn.type == TransactionType.AssetTransfer - ), err.CLOSE_OUT_WRONG_TYPE # TODO: Redundant? - assert ( - asa_close_out_txn.xfer_asset.id == close_asset.id - ), err.CLOSE_OUT_WRONG_ASA - assert asa_close_out_txn.sender == Txn.sender, err.CLOSE_OUT_WRONG_SENDER - assert asa_close_out_txn.asset_amount == UInt64(0), err.CLOSE_OUT_WRONG_AMOUNT - assert ( - asa_close_out_txn.asset_close_to != Global.zero_address - ), err.CLOSE_OUT_WRONG_CLOSE_TO - - @subroutine - def assert_close_out_not_destroyed_preconditions( - self, close_asset: Asset, asset_creator: Account - ) -> None: - asa_close_out_relative_idx = Txn.group_index + 1 - asa_close_out_txn = gtxn.AssetTransferTransaction(asa_close_out_relative_idx) - assert ( - asa_close_out_txn.asset_close_to == asset_creator - ), err.CLOSE_OUT_WRONG_CLOSE_TO - assert close_asset.id == self.smart_asa_id, err.INVALID_CTRL_ASA - - @subroutine - def assert_close_out_not_to_creator(self, close_to: Account) -> None: - assert not self.global_frozen, err.GLOBAL_FROZEN - assert not self.account_frozen[Txn.sender], err.SENDER_FROZEN - assert not self.account_frozen[close_to], err.CLOSE_TO_FROZEN - - @subroutine - def inner_asset_config(self) -> UInt64: - return ( - itxn.AssetConfig( - fee=0, - total=cfg.TOTAL, - decimals=cfg.DECIMALS, - default_frozen=cfg.DEFAULT_FROZEN, - unit_name=cfg.UNIT_NAME, - asset_name=cfg.NAME, - url=cfg.APP_BINDING + self.itoa(Global.current_application_id.id), - manager=Global.current_application_address, - reserve=Global.current_application_address, - freeze=Global.current_application_address, - clawback=Global.current_application_address, - ) - .submit() - .created_asset.id - ) - - @subroutine - def inner_asset_transfer( - self, - *, - xfer_asset: Asset, - asset_amount: UInt64, - asset_sender: Account, - asset_receiver: Account - ) -> None: - itxn.AssetTransfer( - fee=0, - xfer_asset=xfer_asset.id, - asset_amount=asset_amount, - asset_sender=asset_sender, - asset_receiver=asset_receiver, - sender=Global.current_application_address, - ).submit() - - @subroutine - def inner_asset_destroy(self, *, destroy_asset: Asset) -> None: - itxn.AssetConfig( - fee=0, - config_asset=destroy_asset, - sender=Global.current_application_address, - ).submit() - - @arc4.abimethod - def asset_create( - self, - total: arc4.UInt64, - decimals: arc4.UInt32, - default_frozen: arc4.Bool, - unit_name: arc4.String, - name: arc4.String, - url: arc4.String, - metadata_hash: arc4.DynamicBytes, - manager_addr: arc4.Address, - reserve_addr: arc4.Address, - freeze_addr: arc4.Address, - clawback_addr: arc4.Address, - ) -> arc4.UInt64: - """ - Create the Controlled ASA - - Args: - total: The total number of base units of the Smart ASA to create - decimals: The number of digits to use after the decimal point when displaying the Smart ASA - default_frozen: Smart ASA default frozen (True to freeze holdings by default) - unit_name: The name of a unit of Smart ASA - name: The name of the Smart ASA - url: Smart ASA external URL - metadata_hash: Smart ASA metadata hash - manager_addr: Account that can manage the configuration of the Smart ASA and destroy it - reserve_addr: Account that holds the reserve (non-minted) units of Smart ASA and can mint or burn it - freeze_addr: Account that can freeze/unfreeze holdings of the Smart ASA globally or locally - clawback_addr: Account that can clawback holdings of the Smart ASA - - Returns: - Controlled ASA ID - """ - # Preconditions - assert Txn.sender == Global.creator_address, err.UNAUTHORIZED - assert not self.smart_asa_id, err.EXISTING_CTRL_ASA - - # Effects - self.smart_asa_id = self.inner_asset_config() - self.total = total.native - self.decimals = decimals.native - self.default_frozen = default_frozen.native - self.unit_name = unit_name.native - self.name = name.native - self.url = url.native - self.metadata_hash = metadata_hash.native - self.manager_addr = manager_addr.native - self.reserve_addr = reserve_addr.native - self.freeze_addr = freeze_addr.native - self.clawback_addr = clawback_addr.native - return arc4.UInt64(self.smart_asa_id) - - @arc4.abimethod(allow_actions=["OptIn"]) - def asset_opt_in( - self, asset: Asset, ctrl_asa_opt_in: gtxn.AssetTransferTransaction - ) -> None: - """ - Smart ASA opt in (App and Controlled ASA) - - Args: - asset: Smart ASA ID - ctrl_asa_opt_in: Controlled ASA opt in transaction - """ - # Preconditions - self.assert_common_preconditions(asset.id) - assert ( - ctrl_asa_opt_in.type == TransactionType.AssetTransfer - ), err.OPT_IN_WRONG_TYPE # Pedant - assert ctrl_asa_opt_in.xfer_asset.id == self.smart_asa_id, err.OPT_IN_WRONG_ASA - assert ctrl_asa_opt_in.sender == Txn.sender, err.OPT_IN_WRONG_SENDER - assert ctrl_asa_opt_in.asset_receiver == Txn.sender, err.OPT_IN_WRONG_RECEIVER - assert ( - ctrl_asa_opt_in.asset_amount == 0 - ), err.OPT_IN_WRONG_AMOUNT # Pedant: Controlled ASA is default frozen - assert ( - ctrl_asa_opt_in.asset_close_to == Global.zero_address - ), err.OPT_IN_WRONG_CLOSE_TO - assert Txn.on_completion == OnCompleteAction.OptIn, err.WRONG_ON_COMPLETE - assert Txn.sender.is_opted_in( - asset - ), err.MISSING_CTRL_ASA # Pedant: ctrl_asa_opt_in is checked properly - - # Local State Init - self.account_smart_asa_id[Txn.sender] = self.smart_asa_id - self.account_frozen[Txn.sender] = False - - # Effects - if ( - self.default_frozen or asset.balance(Txn.sender) > 0 - ): # Prevent close-out circumventing account frozen state - self.account_frozen[Txn.sender] = True - - @arc4.abimethod - def asset_config( - self, - config_asset: Asset, - total: arc4.UInt64, - decimals: arc4.UInt32, - default_frozen: arc4.Bool, - unit_name: arc4.String, - name: arc4.String, - url: arc4.String, - metadata_hash: arc4.DynamicBytes, - manager_addr: arc4.Address, - reserve_addr: arc4.Address, - freeze_addr: arc4.Address, - clawback_addr: arc4.Address, - ) -> None: - """ - Configure Smart ASA (for unchanged parameters use existing value - no optional args on AVM) - - Args: - config_asset: Smart ASA ID to configure - total: Total number of base units if the Smart ASA. It can not be less than current circulating supply - decimals: The number of digits to use after the decimal point when displaying the Smart ASA - default_frozen: Smart ASA default frozen (True to freeze holdings by default) - unit_name: The name of a unit of Smart ASA - name: The name of the Smart ASA - url: Smart ASA external URL - metadata_hash: Smart ASA metadata hash - manager_addr: Account that can manage the configuration of the Smart ASA and destroy it - reserve_addr: Account that holds the reserve (non-minted) units of Smart ASA and can mint or burn it - freeze_addr: Account that can freeze/unfreeze holdings of the Smart ASA globally or locally - clawback_addr: Account that can clawback holdings of the Smart ASA - """ - # Preconditions - self.assert_common_preconditions(config_asset.id) - assert Txn.sender == self.manager_addr, err.UNAUTHORIZED_MANAGER - if reserve_addr != self.reserve_addr: - assert self.reserve_addr != Global.zero_address, err.DISABLED_RESERVE - if freeze_addr != self.freeze_addr: - assert self.freeze_addr != Global.zero_address, err.DISABLED_FREEZE - if clawback_addr != self.clawback_addr: - assert self.clawback_addr != Global.zero_address, err.DISABLED_CLAWBACK - assert total >= self.circulating_supply(config_asset), err.INVALID_TOTAL - - # Effects - self.total = total.native - self.decimals = decimals.native - self.default_frozen = default_frozen.native - self.unit_name = unit_name.native - self.name = name.native - self.url = url.native - self.metadata_hash = metadata_hash.native - self.manager_addr = manager_addr.native - self.reserve_addr = reserve_addr.native - self.freeze_addr = freeze_addr.native - self.clawback_addr = clawback_addr.native - - @arc4.abimethod - def asset_transfer( - self, - xfer_asset: Asset, - asset_amount: arc4.UInt64, - asset_sender: Account, - asset_receiver: Account, - ) -> None: - """ - Smart ASA transfers: regular, clawback, mint, burn - - Args: - xfer_asset: Smart ASA ID to transfer - asset_amount: Amount to transfer - asset_sender: Smart ASA sender - asset_receiver: Smart ASA receiver - """ - # Preconditions - self.assert_common_preconditions(xfer_asset.id) - if asset_sender == Global.current_application_address: - self.assert_minting_preconditions( - asset_receiver=asset_receiver, asset_amount=asset_amount.native - ) - elif asset_receiver == Global.current_application_address: - self.assert_burning_preconditions(asset_sender=asset_sender) - elif Txn.sender == self.clawback_addr: - self.assert_clawback_preconditions( - asset_sender=asset_sender, asset_receiver=asset_receiver - ) - else: - self.assert_regular_transfer_preconditions( - asset_sender=asset_sender, asset_receiver=asset_receiver - ) - - # Effects - self.inner_asset_transfer( - xfer_asset=xfer_asset, - asset_amount=asset_amount.native, - asset_sender=asset_sender, - asset_receiver=asset_receiver, - ) - - @arc4.abimethod - def asset_freeze(self, freeze_asset: Asset, asset_frozen: arc4.Bool) -> None: - """ - Smart ASA global freeze (all accounts) - - Args: - freeze_asset: Smart ASA ID to globally freeze/unfreeze - asset_frozen: Smart ASA frozen status - """ - # Preconditions - self.assert_common_preconditions(freeze_asset.id) - assert Txn.sender == self.freeze_addr, err.UNAUTHORIZED_FREEZE - - # Effects - self.global_frozen = asset_frozen.native - - @arc4.abimethod - def account_freeze( - self, freeze_asset: Asset, freeze_account: Account, asset_frozen: arc4.Bool - ) -> None: - """ - Smart ASA local freeze (account specific) - - Args: - freeze_asset: Smart ASA ID to locally freeze/unfreeze - freeze_account: Account to freeze/unfreeze - asset_frozen: Smart ASA frozen status - """ - # Preconditions - self.assert_common_preconditions(freeze_asset.id) - assert ( - self.account_smart_asa_id[freeze_account] == self.smart_asa_id - ), err.INVALID_CTRL_ASA - assert Txn.sender == self.freeze_addr, err.UNAUTHORIZED_FREEZE - - # Effects - self.account_frozen[freeze_account] = asset_frozen.native - - @arc4.abimethod(allow_actions=["CloseOut"]) - def asset_close_out(self, close_asset: Asset, close_to: Account) -> None: - """ - Smart ASA close out (App and Controlled ASA) - - Args: - close_asset: Smart ASA ID to close out - close_to: Account to send all the Smart ASA remainder to. - """ - # Preconditions - self.assert_close_out_preconditions(close_asset) - (creator, exists) = op.AssetParamsGet.asset_creator(close_asset.id) - if exists: # Smart ASA has not been destroyed - self.assert_close_out_not_destroyed_preconditions(close_asset, creator) - if ( - close_to != creator - ): # If close-out target is not the Creator, then close-out target MUST be opted-in - assert ( - self.account_smart_asa_id[close_to] == self.smart_asa_id - ), err.INVALID_CTRL_ASA - self.assert_close_out_not_to_creator(close_to) - - # Effects - self.inner_asset_transfer( - xfer_asset=close_asset, - asset_amount=close_asset.balance(Txn.sender), - asset_sender=Txn.sender, - asset_receiver=close_to, - ) - - @arc4.abimethod - def asset_destroy(self, destroy_asset: Asset) -> None: - """ - Destroy the Controlled ASA - - Args: - destroy_asset: Smart ASA ID to destroy - """ - # Preconditions - self.assert_common_preconditions(destroy_asset.id) - assert Txn.sender == self.manager_addr, err.UNAUTHORIZED_MANAGER - - # Effects - self.inner_asset_destroy(destroy_asset=destroy_asset) - self.total = UInt64() - self.decimals = UInt64() - self.default_frozen = False - self.unit_name = String() - self.name = String() - self.url = String() - self.metadata_hash = Bytes() - self.manager_addr = Account() - self.reserve_addr = Account() - self.freeze_addr = Account() - self.clawback_addr = Account() - self.smart_asa_id = UInt64() - self.global_frozen = False - - @arc4.abimethod(readonly=True) - def get_asset_config(self, asset: Asset) -> AssetConfig: - """ - Get Smart ASA configuration - - Args: - asset: Smart ASA ID - - Returns: - Smart ASA configuration parameters - """ - # Preconditions - self.assert_common_preconditions(asset.id) - - # Effects - return AssetConfig( - total=arc4.UInt64(self.total), - decimals=arc4.UInt32(self.decimals), - default_frozen=arc4.Bool(self.default_frozen), - unit_name=arc4.String(self.unit_name), - name=arc4.String(self.name), - url=arc4.String(self.url), - metadata_hash=arc4.DynamicBytes(self.metadata_hash), - manager_addr=arc4.Address(self.manager_addr), - reserve_addr=arc4.Address(self.reserve_addr), - freeze_addr=arc4.Address(self.freeze_addr), - clawback_addr=arc4.Address(self.clawback_addr), - ) - - @arc4.abimethod(readonly=True) - def get_asset_is_frozen(self, freeze_asset: Asset) -> arc4.Bool: - """ - Get Smart ASA global frozen status - - Args: - freeze_asset: Smart ASA ID - - Returns: - Smart ASA global frozen status - """ - # Preconditions - self.assert_common_preconditions(freeze_asset.id) - - # Effects - return arc4.Bool(self.global_frozen) - - @arc4.abimethod(readonly=True) - def get_account_is_frozen( - self, freeze_asset: Asset, freeze_account: Account - ) -> arc4.Bool: - """ - Get Smart ASA account frozen status - - Args: - freeze_asset: Smart ASA ID - freeze_account: Account to check - - Returns: - Smart ASA account frozen status - """ - # Preconditions - self.assert_common_preconditions(freeze_asset.id) - - # Effects - return arc4.Bool(self.account_frozen[freeze_account]) - - @arc4.abimethod(readonly=True) - def get_circulating_supply(self, asset: Asset) -> arc4.UInt64: - """ - Get Smart ASA circulating supply - - Args: - asset: Smart ASA ID - - Returns: - Smart ASA circulating supply - """ - # Preconditions - self.assert_common_preconditions(asset.id) - - # Effects - return arc4.UInt64(self.circulating_supply(asset)) diff --git a/assets/arc-0020/smart_contracts/smart_asa/deploy_config.py b/assets/arc-0020/smart_contracts/smart_asa/deploy_config.py deleted file mode 100644 index cfaea56a5..000000000 --- a/assets/arc-0020/smart_contracts/smart_asa/deploy_config.py +++ /dev/null @@ -1,73 +0,0 @@ -import logging -from typing import Final - -from algokit_utils import ( - AlgoAmount, - AlgorandClient, - CommonAppCallParams, - OnSchemaBreak, - OnUpdate, -) -from algokit_utils.config import config - -logger = logging.getLogger(__name__) - -ASA_TOTAL: Final[int] = 420 -ASA_DECIMALS: Final[int] = 1 -ASA_DEFAULT_FROZEN: Final[bool] = False -ASA_UNIT_NAME: Final[str] = "ARC-20" -ASA_NAME: Final[str] = "ARC-20 Smart ASA" -ASA_URL: Final[str] = "https://arc.algorand.foundation/ARCs/arc-0020" -ASA_METADATA_HASH: Final[bytes] = (420).to_bytes(length=32) - -APP_FUNDS: Final[AlgoAmount] = AlgoAmount(algo=1) - - -# define deployment behaviour based on supplied app spec -def deploy() -> None: - from smart_contracts.artifacts.smart_asa.smart_asa_client import ( - AssetCreateArgs, - SmartAsaFactory, - ) - - config.configure(debug=False) - - algorand = AlgorandClient.from_environment() - deployer = algorand.account.from_environment("DEPLOYER") - - factory = algorand.client.get_typed_app_factory( - SmartAsaFactory, default_sender=deployer.address - ) - - app_client, _ = factory.deploy( - on_schema_break=OnSchemaBreak.AppendApp, - on_update=OnUpdate.AppendApp, - ) - - algorand.account.ensure_funded_from_environment( - account_to_fund=app_client.app_address, - min_spending_balance=APP_FUNDS, - ) - - sp = app_client.algorand.client.algod.suggested_params() - sp.flat_fee = True - sp.fee = sp.min_fee * 2 # type: ignore - - app_client.send.asset_create( - AssetCreateArgs( - total=ASA_TOTAL, - decimals=ASA_DECIMALS, - default_frozen=ASA_DEFAULT_FROZEN, - unit_name=ASA_UNIT_NAME, - name=ASA_NAME, - url=ASA_URL, - metadata_hash=ASA_METADATA_HASH, - manager_addr=deployer.address, - reserve_addr=app_client.app_address, - clawback_addr=deployer.address, - freeze_addr=deployer.address, - ), - params=CommonAppCallParams( - static_fee=AlgoAmount.from_micro_algo(sp.fee) # type: ignore - ), - ) diff --git a/assets/arc-0020/tests/__init__.py b/assets/arc-0020/tests/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/assets/arc-0020/tests/conftest.py b/assets/arc-0020/tests/conftest.py deleted file mode 100644 index fd3f4b581..000000000 --- a/assets/arc-0020/tests/conftest.py +++ /dev/null @@ -1,306 +0,0 @@ -from collections.abc import Callable -from dataclasses import asdict, dataclass -from typing import Final - -import pytest -from algokit_utils import ( - AlgoAmount, - AlgorandClient, - AssetCreateParams, - AssetOptInParams, - CommonAppCallParams, - SigningAccount, -) -from algokit_utils.config import config -from algosdk.atomic_transaction_composer import TransactionWithSigner - -from smart_contracts.artifacts.smart_asa.smart_asa_client import ( - AssetConfigArgs, - AssetCreateArgs, - AssetOptInArgs, - AssetTransferArgs, - SmartAsaClient, - SmartAsaFactory, -) - -INITIAL_FUNDS: Final[AlgoAmount] = AlgoAmount.from_algo(100) - - -@dataclass -class ASAConfig: - manager_addr: str - reserve_addr: str - freeze_addr: str - clawback_addr: str - total: int = 100 - decimals: int = 2 - default_frozen: bool = False - unit_name: str = "TST" - name: str = "Test" - url: str = "ipfs://..." - metadata_hash: bytes = b"SmartASA" - - def dictify(self) -> dict: - return asdict(self) # type: ignore - - -@pytest.fixture(scope="session") -def algorand() -> AlgorandClient: - client = AlgorandClient.default_localnet() - client.set_suggested_params_cache_timeout(0) - return client - - -@pytest.fixture(scope="session") -def creator(algorand: AlgorandClient) -> SigningAccount: - account = algorand.account.random() - algorand.account.ensure_funded_from_environment( - account_to_fund=account.address, - min_spending_balance=INITIAL_FUNDS, - ) - return account - - -@pytest.fixture(scope="session") -def manager(algorand: AlgorandClient) -> SigningAccount: - account = algorand.account.random() - algorand.account.ensure_funded_from_environment( - account_to_fund=account.address, - min_spending_balance=INITIAL_FUNDS, - ) - return account - - -@pytest.fixture(scope="session") -def reserve(algorand: AlgorandClient) -> SigningAccount: - account = algorand.account.random() - algorand.account.ensure_funded_from_environment( - account_to_fund=account.address, - min_spending_balance=INITIAL_FUNDS, - ) - return account - - -@pytest.fixture(scope="session") -def freeze(algorand: AlgorandClient) -> SigningAccount: - account = algorand.account.random() - algorand.account.ensure_funded_from_environment( - account_to_fund=account.address, - min_spending_balance=INITIAL_FUNDS, - ) - return account - - -@pytest.fixture(scope="session") -def clawback(algorand: AlgorandClient) -> SigningAccount: - account = algorand.account.random() - algorand.account.ensure_funded_from_environment( - account_to_fund=account.address, - min_spending_balance=INITIAL_FUNDS, - ) - return account - - -@pytest.fixture(scope="session") -def eve(algorand: AlgorandClient) -> SigningAccount: - account = algorand.account.random() - algorand.account.ensure_funded_from_environment( - account_to_fund=account.address, - min_spending_balance=INITIAL_FUNDS, - ) - return account - - -@pytest.fixture(scope="session") -def dummy_asa(algorand: AlgorandClient, creator: SigningAccount) -> int: - return algorand.send.asset_create( - AssetCreateParams(sender=creator.address, signer=creator.signer, total=1) - ).asset_id - - -@pytest.fixture(scope="function") -def smart_asa_client_no_asset( - algorand: AlgorandClient, creator: SigningAccount -) -> SmartAsaClient: - config.configure( - debug=False, - populate_app_call_resources=True, - # trace_all=True, - ) - - factory = algorand.client.get_typed_app_factory( - SmartAsaFactory, - default_sender=creator.address, - default_signer=creator.signer, - ) - client, _ = factory.send.create.bare() - algorand.account.ensure_funded_from_environment( - account_to_fund=client.app_address, - min_spending_balance=INITIAL_FUNDS, - ) - return client - - -@pytest.fixture( - scope="function", params=[False, True], ids=["Not Default Frozen", "Default Frozen"] -) -def asa_config( - manager: SigningAccount, - reserve: SigningAccount, - freeze: SigningAccount, - clawback: SigningAccount, - request, # noqa: ANN001 -) -> ASAConfig: - return ASAConfig( - manager_addr=manager.address, - reserve_addr=reserve.address, - freeze_addr=freeze.address, - clawback_addr=clawback.address, - default_frozen=request.param, - ) - - -@pytest.fixture(scope="function") -def smart_asa_client( - smart_asa_client_no_asset: SmartAsaClient, - asa_config: ASAConfig, -) -> SmartAsaClient: - sp = smart_asa_client_no_asset.algorand.client.algod.suggested_params() - sp.flat_fee = True - sp.fee = sp.min_fee * 2 - - smart_asa_client_no_asset.send.asset_create( - AssetCreateArgs(**asa_config.dictify()), - params=CommonAppCallParams(static_fee=AlgoAmount.from_micro_algo(sp.fee)), - ) - return smart_asa_client_no_asset - - -@pytest.fixture(scope="function") -def opted_in_account_factory( - algorand: AlgorandClient, smart_asa_client: SmartAsaClient -) -> Callable[..., SigningAccount]: - def _factory() -> SigningAccount: - account = algorand.account.random() - algorand.account.ensure_funded_from_environment( - account_to_fund=account.address, - min_spending_balance=INITIAL_FUNDS, - ) - smart_asa_id = smart_asa_client.state.global_state.smart_asa_id - - smart_asa_client.send.opt_in.asset_opt_in( - AssetOptInArgs( - asset=smart_asa_id, - ctrl_asa_opt_in=TransactionWithSigner( - txn=algorand.create_transaction.asset_opt_in( - AssetOptInParams(asset_id=smart_asa_id, sender=account.address) - ), - signer=account.signer, - ), - ), - params=CommonAppCallParams( - signer=account.signer, - sender=account.address, - ), - ) - return account - - return _factory - - -@pytest.fixture(scope="function") -def receiver( - opted_in_account_factory: Callable[..., SigningAccount], -) -> SigningAccount: - return opted_in_account_factory() - - -@pytest.fixture(scope="function") -def reserve_and_clawback( - manager: SigningAccount, - reserve: SigningAccount, - asa_config: ASAConfig, - smart_asa_client: SmartAsaClient, -) -> SigningAccount: - asa_config.clawback_addr = asa_config.reserve_addr - smart_asa_client.send.asset_config( - AssetConfigArgs( - config_asset=smart_asa_client.state.global_state.smart_asa_id, - **asa_config.dictify(), - ), - params=CommonAppCallParams( - signer=manager.signer, - sender=manager.address, - ), - ) - return reserve - - -@pytest.fixture(scope="function") -def reserve_with_supply( - algorand: AlgorandClient, - reserve: SigningAccount, - smart_asa_client: SmartAsaClient, -) -> SigningAccount: - smart_asa = smart_asa_client.state.global_state - smart_asa_id = smart_asa.smart_asa_id - ctrl_asa_opt_in = TransactionWithSigner( - txn=algorand.create_transaction.asset_opt_in( - AssetOptInParams(asset_id=smart_asa_id, sender=reserve.address) - ), - signer=reserve.signer, - ) - smart_asa_client.send.opt_in.asset_opt_in( - AssetOptInArgs( - asset=smart_asa_id, - ctrl_asa_opt_in=ctrl_asa_opt_in, - ), - params=CommonAppCallParams( - signer=reserve.signer, - sender=reserve.address, - ), - ) - sp = smart_asa_client.algorand.client.algod.suggested_params() - sp.flat_fee = True - sp.fee = sp.min_fee * 2 - smart_asa_client.send.asset_transfer( - AssetTransferArgs( - xfer_asset=smart_asa_id, - asset_amount=smart_asa.total, - asset_sender=smart_asa_client.app_address, - asset_receiver=reserve.address, - ), - params=CommonAppCallParams( - static_fee=AlgoAmount.from_micro_algo(sp.fee), - signer=reserve.signer, - sender=reserve.address, - ), - ) - return reserve - - -@pytest.fixture(scope="function") -def account_with_supply( - reserve: SigningAccount, - smart_asa_client: SmartAsaClient, - opted_in_account_factory: Callable[..., SigningAccount], -) -> SigningAccount: - account = opted_in_account_factory() - smart_asa = smart_asa_client.state.global_state - sp = smart_asa_client.algorand.client.algod.suggested_params() - sp.flat_fee = True - sp.fee = sp.min_fee * 2 - smart_asa_client.send.asset_transfer( - AssetTransferArgs( - xfer_asset=smart_asa.smart_asa_id, - asset_amount=smart_asa.total, - asset_sender=smart_asa_client.app_address, - asset_receiver=account.address, - ), - params=CommonAppCallParams( - static_fee=AlgoAmount.from_micro_algo(sp.fee), - signer=reserve.signer, - sender=reserve.address, - ), - ) - return account diff --git a/assets/arc-0020/tests/test_account_freeze.py b/assets/arc-0020/tests/test_account_freeze.py deleted file mode 100644 index ba582fd09..000000000 --- a/assets/arc-0020/tests/test_account_freeze.py +++ /dev/null @@ -1,53 +0,0 @@ -import pytest -from algokit_utils import CommonAppCallParams, LogicError, SigningAccount - -import smart_contracts.errors as err -from smart_contracts.artifacts.smart_asa.smart_asa_client import ( - AccountFreezeArgs, - SmartAsaClient, -) - - -def test_pass_change_account_frozen( - smart_asa_client: SmartAsaClient, - freeze: SigningAccount, - receiver: SigningAccount, -) -> None: - smart_asa = smart_asa_client.state.global_state - default_frozen = smart_asa.default_frozen - smart_asa_client.send.account_freeze( - AccountFreezeArgs( - freeze_asset=smart_asa.smart_asa_id, - freeze_account=receiver.address, - asset_frozen=not default_frozen, - ), - params=CommonAppCallParams( - signer=freeze.signer, - sender=freeze.address, - ), - ) - assert ( - smart_asa_client.state.local_state(receiver.address).account_frozen - != default_frozen - ) - - -def test_fail_unauthorized( - smart_asa_client: SmartAsaClient, eve: SigningAccount, receiver: SigningAccount -) -> None: - with pytest.raises(LogicError, match=err.UNAUTHORIZED_FREEZE): - smart_asa_client.send.account_freeze( - AccountFreezeArgs( - freeze_asset=smart_asa_client.state.global_state.smart_asa_id, - freeze_account=receiver.address, - asset_frozen=True, - ), - params=CommonAppCallParams( - signer=eve.signer, - sender=eve.address, - ), - ) - - -def test_fail_invalid_current_ctrl_asa() -> None: - pass # TODO diff --git a/assets/arc-0020/tests/test_asset_close_out.py b/assets/arc-0020/tests/test_asset_close_out.py deleted file mode 100644 index 6702450fc..000000000 --- a/assets/arc-0020/tests/test_asset_close_out.py +++ /dev/null @@ -1,127 +0,0 @@ -import pytest -from algokit_utils import ( - AlgoAmount, - AlgorandClient, - AssetTransferParams, - CommonAppCallParams, - SigningAccount, -) - -from smart_contracts.artifacts.smart_asa.smart_asa_client import ( - AssetCloseOutArgs, - SmartAsaClient, -) - - -@pytest.mark.parametrize("asa_config", [False], indirect=True) -def test_pass_regular_close_out( - algorand: AlgorandClient, - smart_asa_client: SmartAsaClient, - account_with_supply: SigningAccount, - receiver: SigningAccount, -) -> None: - smart_asa = smart_asa_client.state.global_state - smart_asa_id = smart_asa.smart_asa_id - account_asset_balance = algorand.asset.get_account_information( - account_with_supply, smart_asa_id - ).balance - receiver_asset_balance = algorand.asset.get_account_information( - receiver, smart_asa_id - ).balance - assert account_asset_balance == smart_asa.total - assert receiver_asset_balance == 0 - sp = smart_asa_client.algorand.client.algod.suggested_params() - sp.flat_fee = True - sp.fee = sp.min_fee * 2 - close_out = smart_asa_client.new_group().close_out.asset_close_out( - AssetCloseOutArgs( - close_asset=smart_asa_id, - close_to=receiver.address, - ), - params=CommonAppCallParams( - static_fee=AlgoAmount.from_micro_algo(sp.fee), - signer=account_with_supply.signer, - sender=account_with_supply.address, - ), - ) - close_out.add_transaction( - txn=algorand.create_transaction.asset_transfer( - AssetTransferParams( - sender=account_with_supply.address, - asset_id=smart_asa_id, - receiver=smart_asa_client.app_address, - close_asset_to=smart_asa_client.app_address, - amount=0, - ) - ), - signer=account_with_supply.signer, - ) - close_out.send() - receiver_asset_balance = algorand.asset.get_account_information( - receiver, smart_asa_id - ).balance - assert ( - smart_asa_id - not in algorand.account.get_information(account_with_supply.address).assets - ) - assert receiver_asset_balance == smart_asa.total - - -def test_pass_close_out_frozen_asset() -> None: - pass # TODO - - -def test_pass_close_out_account_frozen() -> None: - pass # TODO - - -def test_pass_destroyed_asset() -> None: - pass # TODO - - -def test_fail_wrong_on_complete() -> None: - pass # TODO - - -def test_fail_invalid_local_ctrl_asa() -> None: - pass # TODO - - -def test_fail_group_wrong_size() -> None: - pass # TODO - - -def test_fail_group_wrong_txn_type() -> None: - pass # TODO - - -def test_fail_group_wrong_asset() -> None: - pass # TODO - - -def test_fail_group_wrong_sender() -> None: - pass # TODO - - -def test_fail_group_wrong_amount() -> None: - pass # TODO - - -def test_fail_group_wrong_close_to() -> None: - pass # TODO - - -def test_fail_invalid_ctrl_asa() -> None: - pass # TODO - - -def test_fail_close_out_frozen_asset() -> None: - pass # TODO - - -def test_fail_close_out_sender_frozen() -> None: - pass # TODO - - -def test_fail_close_out_target_frozen() -> None: - pass # TODO diff --git a/assets/arc-0020/tests/test_asset_config.py b/assets/arc-0020/tests/test_asset_config.py deleted file mode 100644 index 29e7f30c0..000000000 --- a/assets/arc-0020/tests/test_asset_config.py +++ /dev/null @@ -1,140 +0,0 @@ -import pytest -from algokit_utils import CommonAppCallParams, LogicError, SigningAccount -from algosdk.constants import ZERO_ADDRESS - -import smart_contracts.errors as err -from smart_contracts.artifacts.smart_asa.smart_asa_client import ( - AssetConfigArgs, - SmartAsaClient, -) - -from .conftest import ASAConfig - -ASA_CONFIG = ASAConfig( - total=42, - decimals=69, - default_frozen=True, - unit_name="FOO", - name="Foo Asset", - url="ipfs://config", - metadata_hash=(420).to_bytes(length=32), - manager_addr=ZERO_ADDRESS, - reserve_addr=ZERO_ADDRESS, - freeze_addr=ZERO_ADDRESS, - clawback_addr=ZERO_ADDRESS, -) - - -def test_pass_asset_config( - smart_asa_client: SmartAsaClient, manager: SigningAccount -) -> None: - smart_asa_client.send.asset_config( - AssetConfigArgs( - config_asset=smart_asa_client.state.global_state.smart_asa_id, - **ASA_CONFIG.dictify(), - ), - params=CommonAppCallParams(sender=manager.address, signer=manager.signer), - ) - - state = smart_asa_client.state.global_state - - assert state.total == ASA_CONFIG.total - assert state.decimals == ASA_CONFIG.decimals - assert state.default_frozen == ASA_CONFIG.default_frozen - assert state.unit_name == ASA_CONFIG.unit_name - assert state.name == ASA_CONFIG.name - assert state.url == ASA_CONFIG.url - assert state.metadata_hash == ASA_CONFIG.metadata_hash - assert state.manager_addr == ASA_CONFIG.manager_addr - assert state.reserve_addr == ASA_CONFIG.reserve_addr - assert state.freeze_addr == ASA_CONFIG.freeze_addr - assert state.clawback_addr == ASA_CONFIG.clawback_addr - - -def test_fail_missing_ctrl_asa( - smart_asa_client_no_asset: SmartAsaClient, manager: SigningAccount, dummy_asa: int -) -> None: - with pytest.raises(LogicError, match=err.MISSING_CTRL_ASA): - smart_asa_client_no_asset.send.asset_config( - AssetConfigArgs( - config_asset=dummy_asa, - **ASA_CONFIG.dictify(), - ), - params=CommonAppCallParams(sender=manager.address, signer=manager.signer), - ) - - -def test_fail_invalid_ctrl_asa( - smart_asa_client: SmartAsaClient, manager: SigningAccount, dummy_asa: int -) -> None: - with pytest.raises(LogicError, match=err.INVALID_CTRL_ASA): - smart_asa_client.send.asset_config( - AssetConfigArgs( - config_asset=dummy_asa, - **ASA_CONFIG.dictify(), - ), - params=CommonAppCallParams(sender=manager.address, signer=manager.signer), - ) - - -def test_fail_unauthorized_manager(smart_asa_client: SmartAsaClient) -> None: - with pytest.raises(LogicError, match=err.UNAUTHORIZED_MANAGER): - smart_asa_client.send.asset_config( - AssetConfigArgs( - config_asset=smart_asa_client.state.global_state.smart_asa_id, - **ASA_CONFIG.dictify(), - ), - ) - - -def test_fail_disabled_roles( - smart_asa_client: SmartAsaClient, manager: SigningAccount -) -> None: - smart_asa_id = smart_asa_client.state.global_state.smart_asa_id - asa_config = ASA_CONFIG.dictify() - asa_config["manager_addr"] = manager.address - - smart_asa_client.send.asset_config( - AssetConfigArgs( - config_asset=smart_asa_id, - **asa_config, - ), - params=CommonAppCallParams(sender=manager.address, signer=manager.signer), - ) - - asa_config["reserve_addr"] = smart_asa_client.app_address - with pytest.raises(LogicError, match=err.DISABLED_RESERVE): - smart_asa_client.send.asset_config( - AssetConfigArgs( - config_asset=smart_asa_client.state.global_state.smart_asa_id, - **asa_config, - ), - params=CommonAppCallParams(sender=manager.address, signer=manager.signer), - ) - asa_config["reserve_addr"] = ASA_CONFIG.reserve_addr - - asa_config["freeze_addr"] = smart_asa_client.app_address - with pytest.raises(LogicError, match=err.DISABLED_FREEZE): - smart_asa_client.send.asset_config( - AssetConfigArgs( - config_asset=smart_asa_client.state.global_state.smart_asa_id, - **asa_config, - ), - params=CommonAppCallParams(sender=manager.address, signer=manager.signer), - ) - asa_config["freeze_addr"] = ASA_CONFIG.freeze_addr - - asa_config["clawback_addr"] = smart_asa_client.app_address - with pytest.raises(LogicError, match=err.DISABLED_CLAWBACK): - smart_asa_client.send.asset_config( - AssetConfigArgs( - config_asset=smart_asa_client.state.global_state.smart_asa_id, - **asa_config, - ), - params=CommonAppCallParams(sender=manager.address, signer=manager.signer), - ) - - -def test_fail_invalid_total() -> None: - # TODO: Mint something - pass # TODO diff --git a/assets/arc-0020/tests/test_asset_create.py b/assets/arc-0020/tests/test_asset_create.py deleted file mode 100644 index 6f7cd2ef3..000000000 --- a/assets/arc-0020/tests/test_asset_create.py +++ /dev/null @@ -1,87 +0,0 @@ -import pytest -from algokit_utils import AlgoAmount, CommonAppCallParams, LogicError, SigningAccount - -import smart_contracts.errors as err -import smart_contracts.smart_asa.config as cfg -from smart_contracts.artifacts.smart_asa.smart_asa_client import ( - AssetCreateArgs, - SmartAsaClient, -) - -from .conftest import ASAConfig - - -def test_pass_asset_create( - smart_asa_client_no_asset: SmartAsaClient, - asa_config: ASAConfig, -) -> None: - sp = smart_asa_client_no_asset.algorand.client.algod.suggested_params() - sp.flat_fee = True - sp.fee = sp.min_fee * 2 - - smart_asa_id = smart_asa_client_no_asset.send.asset_create( - AssetCreateArgs(**asa_config.dictify()), - params=CommonAppCallParams(static_fee=AlgoAmount.from_micro_algo(sp.fee)), - ).abi_return - - # Verify Controlled ASA - ctrl_asset = smart_asa_client_no_asset.algorand.asset.get_by_id(smart_asa_id) - assert ctrl_asset.asset_id == smart_asa_id - assert ctrl_asset.creator == smart_asa_client_no_asset.app_address - assert ctrl_asset.total == cfg.TOTAL - assert ctrl_asset.decimals == cfg.DECIMALS - assert ctrl_asset.default_frozen - assert ctrl_asset.unit_name == cfg.UNIT_NAME - assert ctrl_asset.asset_name == cfg.NAME - assert ctrl_asset.url == cfg.APP_BINDING.decode() + str( - smart_asa_client_no_asset.app_id - ) - - # Verify Smart ASA - state = smart_asa_client_no_asset.state.global_state - assert state.total == asa_config.total - assert state.decimals == asa_config.decimals - assert state.default_frozen == asa_config.default_frozen - assert state.unit_name == asa_config.unit_name - assert state.name == asa_config.name - assert state.url == asa_config.url - assert state.metadata_hash == asa_config.metadata_hash - assert state.manager_addr == asa_config.manager_addr - assert state.reserve_addr == asa_config.reserve_addr - assert state.freeze_addr == asa_config.freeze_addr - assert state.clawback_addr == asa_config.clawback_addr - assert state.smart_asa_id == smart_asa_id - - -def test_fail_unauthorized( - smart_asa_client_no_asset: SmartAsaClient, - eve: SigningAccount, - asa_config: ASAConfig, -) -> None: - sp = smart_asa_client_no_asset.algorand.client.algod.suggested_params() - sp.flat_fee = True - sp.fee = sp.min_fee * 2 - - with pytest.raises(LogicError, match=err.UNAUTHORIZED): - smart_asa_client_no_asset.send.asset_create( - AssetCreateArgs(**asa_config.dictify()), - params=CommonAppCallParams( - static_fee=AlgoAmount.from_micro_algo(sp.fee), - signer=eve.signer, - sender=eve.address, - ), - ) - - -def test_fail_asa_already_created( - smart_asa_client: SmartAsaClient, asa_config: ASAConfig -) -> None: - sp = smart_asa_client.algorand.client.algod.suggested_params() - sp.flat_fee = True - sp.fee = sp.min_fee * 2 - - with pytest.raises(LogicError, match=err.EXISTING_CTRL_ASA): - smart_asa_client.send.asset_create( - AssetCreateArgs(**asa_config.dictify()), - params=CommonAppCallParams(static_fee=AlgoAmount.from_micro_algo(sp.fee)), - ) diff --git a/assets/arc-0020/tests/test_asset_destroy.py b/assets/arc-0020/tests/test_asset_destroy.py deleted file mode 100644 index c2bd38dd5..000000000 --- a/assets/arc-0020/tests/test_asset_destroy.py +++ /dev/null @@ -1,90 +0,0 @@ -import pytest -from algokit_utils import AlgoAmount, CommonAppCallParams, LogicError, SigningAccount -from algosdk.constants import ZERO_ADDRESS -from algosdk.error import AlgodHTTPError - -import smart_contracts.errors as err -from smart_contracts.artifacts.smart_asa.smart_asa_client import ( - AssetDestroyArgs, - SmartAsaClient, -) - - -def test_pass_destroy( - smart_asa_client: SmartAsaClient, manager: SigningAccount -) -> None: - smart_asa = smart_asa_client.state.global_state - sp = smart_asa_client.algorand.client.algod.suggested_params() - sp.flat_fee = True - sp.fee = sp.min_fee * 2 - smart_asa_client.send.asset_destroy( - AssetDestroyArgs(destroy_asset=smart_asa.smart_asa_id), - params=CommonAppCallParams( - static_fee=AlgoAmount.from_micro_algo(sp.fee), - signer=manager.signer, - sender=manager.address, - ), - ) - with pytest.raises(AlgodHTTPError, match="asset does not exist"): - smart_asa_client.algorand.asset.get_by_id(smart_asa.smart_asa_id) - smart_asa = smart_asa_client.state.global_state - assert smart_asa.total == 0 - assert smart_asa.decimals == 0 - assert not smart_asa.default_frozen - assert smart_asa.unit_name == "" - assert smart_asa.name == "" - assert smart_asa.url == "" - assert smart_asa.metadata_hash == "" - assert smart_asa.manager_addr == ZERO_ADDRESS - assert smart_asa.reserve_addr == ZERO_ADDRESS - assert smart_asa.freeze_addr == ZERO_ADDRESS - assert smart_asa.clawback_addr == ZERO_ADDRESS - assert smart_asa.smart_asa_id == 0 - assert not smart_asa.global_frozen - - -def test_fail_missing_ctrl_asa() -> None: - pass # TODO - - -def test_fail_invalid_ctrl_asa() -> None: - pass # TODO - - -def test_fail_unauthorized_manager( - smart_asa_client: SmartAsaClient, eve: SigningAccount -) -> None: - smart_asa = smart_asa_client.state.global_state - sp = smart_asa_client.algorand.client.algod.suggested_params() - sp.flat_fee = True - sp.fee = sp.min_fee * 2 - with pytest.raises(LogicError, match=err.UNAUTHORIZED_MANAGER): - smart_asa_client.send.asset_destroy( - AssetDestroyArgs(destroy_asset=smart_asa.smart_asa_id), - params=CommonAppCallParams( - static_fee=AlgoAmount.from_micro_algo(sp.fee), - signer=eve.signer, - sender=eve.address, - ), - ) - - -@pytest.mark.parametrize("asa_config", [False], indirect=True) -def test_fail_still_in_circulation( - smart_asa_client: SmartAsaClient, - manager: SigningAccount, - account_with_supply: SigningAccount, # To have circulating supply -) -> None: - smart_asa = smart_asa_client.state.global_state - sp = smart_asa_client.algorand.client.algod.suggested_params() - sp.flat_fee = True - sp.fee = sp.min_fee * 2 - with pytest.raises(LogicError, match="creator is holding only"): - smart_asa_client.send.asset_destroy( - AssetDestroyArgs(destroy_asset=smart_asa.smart_asa_id), - params=CommonAppCallParams( - static_fee=AlgoAmount.from_micro_algo(sp.fee), - signer=manager.signer, - sender=manager.address, - ), - ) diff --git a/assets/arc-0020/tests/test_asset_freeze.py b/assets/arc-0020/tests/test_asset_freeze.py deleted file mode 100644 index a545a32ba..000000000 --- a/assets/arc-0020/tests/test_asset_freeze.py +++ /dev/null @@ -1,43 +0,0 @@ -import pytest -from algokit_utils import CommonAppCallParams, LogicError, SigningAccount - -import smart_contracts.errors as err -from smart_contracts.artifacts.smart_asa.smart_asa_client import ( - AssetFreezeArgs, - SmartAsaClient, -) - - -@pytest.mark.parametrize("smart_asa_client", [False], indirect=True) -def test_pass_global_frozen( - smart_asa_client: SmartAsaClient, freeze: SigningAccount -) -> None: - smart_asa = smart_asa_client.state.global_state - assert not smart_asa.global_frozen - smart_asa_client.send.asset_freeze( - AssetFreezeArgs( - freeze_asset=smart_asa.smart_asa_id, - asset_frozen=True, - ), - params=CommonAppCallParams( - signer=freeze.signer, - sender=freeze.address, - ), - ) - assert smart_asa_client.state.global_state.global_frozen - - -def test_fail_unauthorized( - smart_asa_client: SmartAsaClient, eve: SigningAccount -) -> None: - with pytest.raises(LogicError, match=err.UNAUTHORIZED_FREEZE): - smart_asa_client.send.asset_freeze( - AssetFreezeArgs( - freeze_asset=smart_asa_client.state.global_state.smart_asa_id, - asset_frozen=True, - ), - params=CommonAppCallParams( - signer=eve.signer, - sender=eve.address, - ), - ) diff --git a/assets/arc-0020/tests/test_asset_opt_in.py b/assets/arc-0020/tests/test_asset_opt_in.py deleted file mode 100644 index 9b2e52949..000000000 --- a/assets/arc-0020/tests/test_asset_opt_in.py +++ /dev/null @@ -1,189 +0,0 @@ -import pytest -from algokit_utils import ( - AlgorandClient, - AssetOptInParams, - AssetTransferParams, - LogicError, - SigningAccount, -) -from algosdk.atomic_transaction_composer import TransactionWithSigner - -import smart_contracts.errors as err -from smart_contracts.artifacts.smart_asa.smart_asa_client import ( - AssetOptInArgs, - SmartAsaClient, -) - - -def test_pass_asset_opt_in( - algorand: AlgorandClient, - smart_asa_client: SmartAsaClient, - creator: SigningAccount, -) -> None: - state = smart_asa_client.state.global_state - smart_asa_id = state.smart_asa_id - smart_asa_client.send.opt_in.asset_opt_in( - AssetOptInArgs( - asset=smart_asa_id, - ctrl_asa_opt_in=TransactionWithSigner( - txn=algorand.create_transaction.asset_opt_in( - AssetOptInParams(sender=creator.address, asset_id=smart_asa_id) - ), - signer=creator.signer, - ), - ), - ) - - local_state = smart_asa_client.state.local_state(creator.address) - assert local_state.account_smart_asa_id == smart_asa_id - if state.default_frozen: - assert local_state.account_frozen - else: - assert not local_state.account_frozen - - -def test_fail_missing_ctrl_asa( - algorand: AlgorandClient, - smart_asa_client_no_asset: SmartAsaClient, - creator: SigningAccount, - dummy_asa: int, -) -> None: - with pytest.raises(LogicError, match=err.MISSING_CTRL_ASA): - smart_asa_client_no_asset.send.opt_in.asset_opt_in( - AssetOptInArgs( - asset=dummy_asa, - ctrl_asa_opt_in=TransactionWithSigner( - txn=algorand.create_transaction.asset_opt_in( - AssetOptInParams(sender=creator.address, asset_id=dummy_asa) - ), - signer=creator.signer, - ), - ), - ) - - -def test_fail_invalid_ctrl_asa( - algorand: AlgorandClient, - smart_asa_client: SmartAsaClient, - creator: SigningAccount, - dummy_asa: int, -) -> None: - smart_asa_id = smart_asa_client.state.global_state.smart_asa_id - with pytest.raises(LogicError, match=err.INVALID_CTRL_ASA): - smart_asa_client.send.opt_in.asset_opt_in( - AssetOptInArgs( - asset=dummy_asa, - ctrl_asa_opt_in=TransactionWithSigner( - txn=algorand.create_transaction.asset_opt_in( - AssetOptInParams(sender=creator.address, asset_id=smart_asa_id) - ), - signer=creator.signer, - ), - ), - ) - - -def test_fail_opt_in_wrong_type( - smart_asa_client: SmartAsaClient, creator: SigningAccount -) -> None: - pass # TODO: Require using low level SDK since the ATC catch the incorrect txn type error first. - - -def test_fail_opt_in_wrong_asa( - algorand: AlgorandClient, - smart_asa_client: SmartAsaClient, - creator: SigningAccount, - dummy_asa: int, -) -> None: - smart_asa_id = smart_asa_client.state.global_state.smart_asa_id - with pytest.raises(LogicError, match=err.OPT_IN_WRONG_ASA): - smart_asa_client.send.opt_in.asset_opt_in( - AssetOptInArgs( - asset=smart_asa_id, - ctrl_asa_opt_in=TransactionWithSigner( - txn=algorand.create_transaction.asset_opt_in( - AssetOptInParams(sender=creator.address, asset_id=dummy_asa) - ), - signer=creator.signer, - ), - ), - ) - - -def test_fail_opt_in_wrong_sender( - algorand: AlgorandClient, - smart_asa_client: SmartAsaClient, - eve: SigningAccount, -) -> None: - smart_asa_id = smart_asa_client.state.global_state.smart_asa_id - with pytest.raises(LogicError, match=err.OPT_IN_WRONG_SENDER): - smart_asa_client.send.opt_in.asset_opt_in( - AssetOptInArgs( - asset=smart_asa_id, - ctrl_asa_opt_in=TransactionWithSigner( - txn=algorand.create_transaction.asset_opt_in( - AssetOptInParams(sender=eve.address, asset_id=smart_asa_id) - ), - signer=eve.signer, - ), - ), - ) - - -def test_fail_opt_in_wrong_receiver( - algorand: AlgorandClient, - smart_asa_client: SmartAsaClient, - creator: SigningAccount, - eve: SigningAccount, -) -> None: - smart_asa_id = smart_asa_client.state.global_state.smart_asa_id - with pytest.raises(LogicError, match=err.OPT_IN_WRONG_RECEIVER): - smart_asa_client.send.opt_in.asset_opt_in( - AssetOptInArgs( - asset=smart_asa_id, - ctrl_asa_opt_in=TransactionWithSigner( - txn=algorand.create_transaction.asset_transfer( - AssetTransferParams( - sender=creator.address, - asset_id=smart_asa_id, - receiver=eve.address, - amount=0, - ) - ), - signer=creator.signer, - ), - ), - ) - - -# NOTE: Test opt-in with wrong amount skipped since the Controlled ASA is default frozen, any transfer > 0 would fail. - - -def test_fail_opt_in_forbidden_close_out( - algorand: AlgorandClient, - smart_asa_client: SmartAsaClient, - creator: SigningAccount, -) -> None: - smart_asa_id = smart_asa_client.state.global_state.smart_asa_id - with pytest.raises(LogicError, match=err.OPT_IN_WRONG_CLOSE_TO): - smart_asa_client.send.opt_in.asset_opt_in( - AssetOptInArgs( - asset=smart_asa_id, - ctrl_asa_opt_in=TransactionWithSigner( - txn=algorand.create_transaction.asset_transfer( - AssetTransferParams( - sender=creator.address, - asset_id=smart_asa_id, - receiver=creator.address, - amount=0, - close_asset_to=smart_asa_client.app_address, - ) - ), - signer=creator.signer, - ), - ), - ) - - -def test_fail_wrong_on_complete() -> None: - pass # TODO: Once txn `OnComplete` can be passed as `OnCompleteCallParameters` to AppClient diff --git a/assets/arc-0020/tests/test_asset_transfer.py b/assets/arc-0020/tests/test_asset_transfer.py deleted file mode 100644 index 5b02171a7..000000000 --- a/assets/arc-0020/tests/test_asset_transfer.py +++ /dev/null @@ -1,680 +0,0 @@ -import pytest -from algokit_utils import AlgoAmount, CommonAppCallParams, LogicError, SigningAccount - -import smart_contracts.errors as err -from smart_contracts.artifacts.smart_asa.smart_asa_client import ( - AccountFreezeArgs, - AssetFreezeArgs, - AssetTransferArgs, - GetCirculatingSupplyArgs, - SmartAsaClient, -) - - -class TestMint: - @pytest.mark.parametrize("asa_config", [False], indirect=True) - def test_pass_as_reserve( - self, - reserve: SigningAccount, - smart_asa_client: SmartAsaClient, - receiver: SigningAccount, - ) -> None: - smart_asa = smart_asa_client.state.global_state - assert ( - smart_asa_client.send.get_circulating_supply( - GetCirculatingSupplyArgs(asset=smart_asa.smart_asa_id) - ).abi_return - == 0 - ) - assert ( - smart_asa_client.algorand.asset.get_account_information( - receiver, smart_asa.smart_asa_id - ).balance - == 0 - ) - sp = smart_asa_client.algorand.client.algod.suggested_params() - sp.flat_fee = True - sp.fee = sp.min_fee * 2 - smart_asa_client.send.asset_transfer( - AssetTransferArgs( - xfer_asset=smart_asa.smart_asa_id, - asset_amount=smart_asa.total, - asset_sender=smart_asa_client.app_address, - asset_receiver=receiver.address, - ), - params=CommonAppCallParams( - static_fee=AlgoAmount.from_micro_algo(sp.fee), - signer=reserve.signer, - sender=reserve.address, - ), - ) - assert ( - smart_asa_client.send.get_circulating_supply( - GetCirculatingSupplyArgs(asset=smart_asa.smart_asa_id) - ).abi_return - == smart_asa.total - ) - assert ( - smart_asa_client.algorand.asset.get_account_information( - receiver, smart_asa.smart_asa_id - ).balance - == smart_asa.total - ) - - def test_pass_as_reserve_and_clawback( - self, - smart_asa_client: SmartAsaClient, - reserve_and_clawback: SigningAccount, - receiver: SigningAccount, - ) -> None: - smart_asa = smart_asa_client.state.global_state - assert ( - smart_asa_client.send.get_circulating_supply( - GetCirculatingSupplyArgs(asset=smart_asa.smart_asa_id) - ).abi_return - == 0 - ) - assert ( - smart_asa_client.algorand.asset.get_account_information( - receiver, smart_asa.smart_asa_id - ).balance - == 0 - ) - sp = smart_asa_client.algorand.client.algod.suggested_params() - sp.flat_fee = True - sp.fee = sp.min_fee * 2 - smart_asa_client.send.asset_transfer( - AssetTransferArgs( - xfer_asset=smart_asa.smart_asa_id, - asset_amount=smart_asa.total, - asset_sender=smart_asa_client.app_address, - asset_receiver=receiver.address, - ), - params=CommonAppCallParams( - static_fee=AlgoAmount.from_micro_algo(sp.fee), - signer=reserve_and_clawback.signer, - sender=reserve_and_clawback.address, - ), - ) - assert ( - smart_asa_client.send.get_circulating_supply( - GetCirculatingSupplyArgs(asset=smart_asa.smart_asa_id), - ).abi_return - == smart_asa.total - ) - assert ( - smart_asa_client.algorand.asset.get_account_information( - receiver, smart_asa.smart_asa_id - ).balance - == smart_asa.total - ) - - def test_fail_unauthorized( - self, - eve: SigningAccount, - smart_asa_client: SmartAsaClient, - receiver: SigningAccount, - ) -> None: - smart_asa = smart_asa_client.state.global_state - sp = smart_asa_client.algorand.client.algod.suggested_params() - sp.flat_fee = True - sp.fee = sp.min_fee * 2 - with pytest.raises(LogicError, match=err.UNAUTHORIZED_RESERVE): - smart_asa_client.send.asset_transfer( - AssetTransferArgs( - xfer_asset=smart_asa.smart_asa_id, - asset_amount=smart_asa.total, - asset_sender=smart_asa_client.app_address, - asset_receiver=receiver.address, - ), - params=CommonAppCallParams( - static_fee=AlgoAmount.from_micro_algo(sp.fee), - signer=eve.signer, - sender=eve.address, - ), - ) - - def test_fail_as_clawback( - self, - clawback: SigningAccount, - smart_asa_client: SmartAsaClient, - receiver: SigningAccount, - ) -> None: - smart_asa = smart_asa_client.state.global_state - sp = smart_asa_client.algorand.client.algod.suggested_params() - sp.flat_fee = True - sp.fee = sp.min_fee * 2 - with pytest.raises(LogicError, match=err.UNAUTHORIZED_RESERVE): - smart_asa_client.send.asset_transfer( - AssetTransferArgs( - xfer_asset=smart_asa.smart_asa_id, - asset_amount=smart_asa.total, - asset_sender=smart_asa_client.app_address, - asset_receiver=receiver.address, - ), - params=CommonAppCallParams( - static_fee=AlgoAmount.from_micro_algo(sp.fee), - signer=clawback.signer, - sender=clawback.address, - ), - ) - - def test_fail_global_frozen(self) -> None: - pass # TODO: Once asset_freeze is available - - @pytest.mark.parametrize("asa_config", [True], indirect=True) - def test_fail_frozen_receiver( - self, - reserve: SigningAccount, - smart_asa_client: SmartAsaClient, - receiver: SigningAccount, - ) -> None: - smart_asa = smart_asa_client.state.global_state - sp = smart_asa_client.algorand.client.algod.suggested_params() - sp.flat_fee = True - sp.fee = sp.min_fee * 2 - with pytest.raises(LogicError, match=err.RECEIVER_FROZEN): - smart_asa_client.send.asset_transfer( - AssetTransferArgs( - xfer_asset=smart_asa.smart_asa_id, - asset_amount=smart_asa.total, - asset_sender=smart_asa_client.app_address, - asset_receiver=receiver.address, - ), - params=CommonAppCallParams( - static_fee=AlgoAmount.from_micro_algo(sp.fee), - signer=reserve.signer, - sender=reserve.address, - ), - ) - - @pytest.mark.parametrize("asa_config", [False], indirect=True) - def test_fail_self_minting( - self, - reserve: SigningAccount, - smart_asa_client: SmartAsaClient, - ) -> None: - smart_asa = smart_asa_client.state.global_state - sp = smart_asa_client.algorand.client.algod.suggested_params() - sp.flat_fee = True - sp.fee = sp.min_fee * 2 - with pytest.raises(LogicError, match=err.SELF_MINT): - smart_asa_client.send.asset_transfer( - AssetTransferArgs( - xfer_asset=smart_asa.smart_asa_id, - asset_amount=smart_asa.total, - asset_sender=smart_asa_client.app_address, - asset_receiver=smart_asa_client.app_address, - ), - params=CommonAppCallParams( - static_fee=AlgoAmount.from_micro_algo(sp.fee), - signer=reserve.signer, - sender=reserve.address, - ), - ) - - def test_fail_over_minting( - self, - reserve: SigningAccount, - smart_asa_client: SmartAsaClient, - receiver: SigningAccount, - ) -> None: - smart_asa = smart_asa_client.state.global_state - sp = smart_asa_client.algorand.client.algod.suggested_params() - sp.flat_fee = True - sp.fee = sp.min_fee * 2 - with pytest.raises(LogicError, match=err.OVER_MINT): - smart_asa_client.send.asset_transfer( - AssetTransferArgs( - xfer_asset=smart_asa.smart_asa_id, - asset_amount=smart_asa.total + 1, - asset_sender=smart_asa_client.app_address, - asset_receiver=receiver.address, - ), - params=CommonAppCallParams( - static_fee=AlgoAmount.from_micro_algo(sp.fee), - signer=reserve.signer, - sender=reserve.address, - ), - ) - - -class TestBurn: - @pytest.mark.parametrize("asa_config", [False], indirect=True) - def test_pass_as_reserve( - self, smart_asa_client: SmartAsaClient, reserve_with_supply: SigningAccount - ) -> None: - smart_asa = smart_asa_client.state.global_state - assert ( - smart_asa_client.send.get_circulating_supply( - GetCirculatingSupplyArgs(asset=smart_asa.smart_asa_id) - ).abi_return - == smart_asa.total - ) - assert ( - smart_asa_client.algorand.asset.get_account_information( - reserve_with_supply, smart_asa.smart_asa_id - ).balance - == smart_asa.total - ) - sp = smart_asa_client.algorand.client.algod.suggested_params() - sp.flat_fee = True - sp.fee = sp.min_fee * 2 - smart_asa_client.send.asset_transfer( - AssetTransferArgs( - xfer_asset=smart_asa.smart_asa_id, - asset_amount=smart_asa.total, - asset_sender=reserve_with_supply.address, - asset_receiver=smart_asa_client.app_address, - ), - params=CommonAppCallParams( - static_fee=AlgoAmount.from_micro_algo(sp.fee), - signer=reserve_with_supply.signer, - sender=reserve_with_supply.address, - ), - ) - assert ( - smart_asa_client.send.get_circulating_supply( - GetCirculatingSupplyArgs(asset=smart_asa.smart_asa_id) - ).abi_return - == 0 - ) - assert ( - smart_asa_client.algorand.asset.get_account_information( - reserve_with_supply, smart_asa.smart_asa_id - ).balance - == 0 - ) - - def test_pass_as_reserve_and_clawback( - self, - smart_asa_client: SmartAsaClient, - reserve_and_clawback: SigningAccount, - account_with_supply: SigningAccount, - ) -> None: - smart_asa = smart_asa_client.state.global_state - assert ( - smart_asa_client.send.get_circulating_supply( - GetCirculatingSupplyArgs(asset=smart_asa.smart_asa_id) - ).abi_return - == smart_asa.total - ) - assert ( - smart_asa_client.algorand.asset.get_account_information( - account_with_supply, smart_asa.smart_asa_id - ).balance - == smart_asa.total - ) - sp = smart_asa_client.algorand.client.algod.suggested_params() - sp.flat_fee = True - sp.fee = sp.min_fee * 2 - smart_asa_client.send.asset_transfer( - AssetTransferArgs( - xfer_asset=smart_asa.smart_asa_id, - asset_amount=smart_asa.total, - asset_sender=account_with_supply.address, - asset_receiver=smart_asa_client.app_address, - ), - params=CommonAppCallParams( - static_fee=AlgoAmount.from_micro_algo(sp.fee), - signer=reserve_and_clawback.signer, - sender=reserve_and_clawback.address, - ), - ) - assert ( - smart_asa_client.send.get_circulating_supply( - GetCirculatingSupplyArgs(asset=smart_asa.smart_asa_id) - ).abi_return - == 0 - ) - assert ( - smart_asa_client.algorand.asset.get_account_information( - account_with_supply, smart_asa.smart_asa_id - ).balance - == 0 - ) - - @pytest.mark.parametrize("asa_config", [False], indirect=True) - def test_fail_unauthorized( - self, smart_asa_client: SmartAsaClient, account_with_supply: SigningAccount - ) -> None: - smart_asa = smart_asa_client.state.global_state - sp = smart_asa_client.algorand.client.algod.suggested_params() - sp.flat_fee = True - sp.fee = sp.min_fee * 2 - with pytest.raises(LogicError, match=err.UNAUTHORIZED_RESERVE): - smart_asa_client.send.asset_transfer( - AssetTransferArgs( - xfer_asset=smart_asa.smart_asa_id, - asset_amount=smart_asa.total, - asset_sender=account_with_supply.address, - asset_receiver=smart_asa_client.app_address, - ), - params=CommonAppCallParams( - static_fee=AlgoAmount.from_micro_algo(sp.fee), - signer=account_with_supply.signer, - sender=account_with_supply.address, - ), - ) - - @pytest.mark.parametrize("asa_config", [False], indirect=True) - def test_fail_as_clawback( - self, - smart_asa_client: SmartAsaClient, - clawback: SigningAccount, - account_with_supply: SigningAccount, - ) -> None: - smart_asa = smart_asa_client.state.global_state - sp = smart_asa_client.algorand.client.algod.suggested_params() - sp.flat_fee = True - sp.fee = sp.min_fee * 2 - with pytest.raises(LogicError, match=err.UNAUTHORIZED_RESERVE): - smart_asa_client.send.asset_transfer( - AssetTransferArgs( - xfer_asset=smart_asa.smart_asa_id, - asset_amount=smart_asa.total, - asset_sender=account_with_supply.address, - asset_receiver=smart_asa_client.app_address, - ), - params=CommonAppCallParams( - static_fee=AlgoAmount.from_micro_algo(sp.fee), - signer=clawback.signer, - sender=clawback.address, - ), - ) - - def test_fail_global_frozen(self) -> None: - pass # TODO: Once asset_freeze is available - - def test_fail_frozen_reserve(self) -> None: - pass # TODO: Once asset_freeze is available - - @pytest.mark.parametrize("asa_config", [False], indirect=True) - def test_fail_clawback_burn( - self, - smart_asa_client: SmartAsaClient, - reserve: SigningAccount, - account_with_supply: SigningAccount, - ) -> None: - smart_asa = smart_asa_client.state.global_state - sp = smart_asa_client.algorand.client.algod.suggested_params() - sp.flat_fee = True - sp.fee = sp.min_fee * 2 - with pytest.raises(LogicError, match=err.CLAWBACK_BURN): - smart_asa_client.send.asset_transfer( - AssetTransferArgs( - xfer_asset=smart_asa.smart_asa_id, - asset_amount=smart_asa.total, - asset_sender=account_with_supply.address, - asset_receiver=smart_asa_client.app_address, - ), - params=CommonAppCallParams( - static_fee=AlgoAmount.from_micro_algo(sp.fee), - signer=reserve.signer, - sender=reserve.address, - ), - ) - - -class TestClawback: - @pytest.mark.parametrize("asa_config", [False], indirect=True) - def test_pass( - self, - smart_asa_client: SmartAsaClient, - clawback: SigningAccount, - account_with_supply: SigningAccount, - receiver: SigningAccount, - ) -> None: - smart_asa = smart_asa_client.state.global_state - assert ( - smart_asa_client.algorand.asset.get_account_information( - account_with_supply, smart_asa.smart_asa_id - ).balance - == smart_asa.total - ) - assert ( - smart_asa_client.algorand.asset.get_account_information( - receiver, smart_asa.smart_asa_id - ).balance - == 0 - ) - sp = smart_asa_client.algorand.client.algod.suggested_params() - sp.flat_fee = True - sp.fee = sp.min_fee * 2 - smart_asa_client.send.asset_transfer( - AssetTransferArgs( - xfer_asset=smart_asa.smart_asa_id, - asset_amount=smart_asa.total, - asset_sender=account_with_supply.address, - asset_receiver=receiver.address, - ), - params=CommonAppCallParams( - static_fee=AlgoAmount.from_micro_algo(sp.fee), - signer=clawback.signer, - sender=clawback.address, - ), - ) - assert ( - smart_asa_client.algorand.asset.get_account_information( - account_with_supply, smart_asa.smart_asa_id - ).balance - == 0 - ) - assert ( - smart_asa_client.algorand.asset.get_account_information( - receiver, smart_asa.smart_asa_id - ).balance - == smart_asa.total - ) - - def test_pass_global_frozen(self) -> None: - pass # TODO: Once asset_freeze is available - - def test_pass_frozen_accounts(self) -> None: - pass # TODO: Once asset_freeze is available - - @pytest.mark.parametrize("asa_config", [False], indirect=True) - def test_fail_unauthorized( - self, - smart_asa_client: SmartAsaClient, - eve: SigningAccount, - account_with_supply: SigningAccount, - receiver: SigningAccount, - ) -> None: - smart_asa = smart_asa_client.state.global_state - sp = smart_asa_client.algorand.client.algod.suggested_params() - sp.flat_fee = True - sp.fee = sp.min_fee * 2 - with pytest.raises(LogicError, match=err.UNAUTHORIZED_CLAWBACK): - smart_asa_client.send.asset_transfer( - AssetTransferArgs( - xfer_asset=smart_asa.smart_asa_id, - asset_amount=smart_asa.total, - asset_sender=account_with_supply.address, - asset_receiver=receiver.address, - ), - params=CommonAppCallParams( - static_fee=AlgoAmount.from_micro_algo(sp.fee), - signer=eve.signer, - sender=eve.address, - ), - ) - - -class TestRegularTransfer: - @pytest.mark.parametrize("asa_config", [False], indirect=True) - def test_pass_transfer( - self, - smart_asa_client: SmartAsaClient, - account_with_supply: SigningAccount, - receiver: SigningAccount, - ) -> None: - smart_asa = smart_asa_client.state.global_state - assert ( - smart_asa_client.algorand.asset.get_account_information( - account_with_supply, smart_asa.smart_asa_id - ).balance - == smart_asa.total - ) - assert ( - smart_asa_client.algorand.asset.get_account_information( - receiver, smart_asa.smart_asa_id - ).balance - == 0 - ) - sp = smart_asa_client.algorand.client.algod.suggested_params() - sp.flat_fee = True - sp.fee = sp.min_fee * 2 - smart_asa_client.send.asset_transfer( - AssetTransferArgs( - xfer_asset=smart_asa.smart_asa_id, - asset_amount=smart_asa.total, - asset_sender=account_with_supply.address, - asset_receiver=receiver.address, - ), - params=CommonAppCallParams( - static_fee=AlgoAmount.from_micro_algo(sp.fee), - signer=account_with_supply.signer, - sender=account_with_supply.address, - ), - ) - assert ( - smart_asa_client.algorand.asset.get_account_information( - account_with_supply, smart_asa.smart_asa_id - ).balance - == 0 - ) - assert ( - smart_asa_client.algorand.asset.get_account_information( - receiver, smart_asa.smart_asa_id - ).balance - == smart_asa.total - ) - - def test_fail_missing_ctrl_asa(self) -> None: - pass # TODO - - def test_fail_invalid_ctrl_asa(self) -> None: - pass # TODO - - def test_fail_no_opted_in_sender(self) -> None: - pass # TODO - - def test_fail_no_opted_in_receiver(self) -> None: - pass # TODO - - def test_fail_invalid_current_ctrl_asa(self) -> None: - pass # TODO - - @pytest.mark.parametrize("asa_config", [False], indirect=True) - def test_fail_global_frozen( - self, - smart_asa_client: SmartAsaClient, - freeze: SigningAccount, - account_with_supply: SigningAccount, - receiver: SigningAccount, - ) -> None: - smart_asa_client.send.asset_freeze( - AssetFreezeArgs( - freeze_asset=smart_asa_client.state.global_state.smart_asa_id, - asset_frozen=True, - ), - params=CommonAppCallParams( - signer=freeze.signer, - sender=freeze.address, - ), - ) - smart_asa = smart_asa_client.state.global_state - sp = smart_asa_client.algorand.client.algod.suggested_params() - sp.flat_fee = True - sp.fee = sp.min_fee * 2 - with pytest.raises(LogicError, match=err.GLOBAL_FROZEN): - smart_asa_client.send.asset_transfer( - AssetTransferArgs( - xfer_asset=smart_asa.smart_asa_id, - asset_amount=smart_asa.total, - asset_sender=account_with_supply.address, - asset_receiver=receiver.address, - ), - params=CommonAppCallParams( - static_fee=AlgoAmount.from_micro_algo(sp.fee), - signer=account_with_supply.signer, - sender=account_with_supply.address, - ), - ) - - @pytest.mark.parametrize("asa_config", [False], indirect=True) - def test_fail_frozen_sender( - self, - smart_asa_client: SmartAsaClient, - freeze: SigningAccount, - account_with_supply: SigningAccount, - receiver: SigningAccount, - ) -> None: - smart_asa_client.send.account_freeze( - AccountFreezeArgs( - freeze_asset=smart_asa_client.state.global_state.smart_asa_id, - freeze_account=account_with_supply.address, - asset_frozen=True, - ), - params=CommonAppCallParams( - signer=freeze.signer, - sender=freeze.address, - ), - ) - smart_asa = smart_asa_client.state.global_state - sp = smart_asa_client.algorand.client.algod.suggested_params() - sp.flat_fee = True - sp.fee = sp.min_fee * 2 - with pytest.raises(LogicError, match=err.SENDER_FROZEN): - smart_asa_client.send.asset_transfer( - AssetTransferArgs( - xfer_asset=smart_asa.smart_asa_id, - asset_amount=smart_asa.total, - asset_sender=account_with_supply.address, - asset_receiver=receiver.address, - ), - params=CommonAppCallParams( - static_fee=AlgoAmount.from_micro_algo(sp.fee), - signer=account_with_supply.signer, - sender=account_with_supply.address, - ), - ) - - @pytest.mark.parametrize("asa_config", [False], indirect=True) - def test_fail_frozen_receiver( - self, - smart_asa_client: SmartAsaClient, - freeze: SigningAccount, - account_with_supply: SigningAccount, - receiver: SigningAccount, - ) -> None: - smart_asa_client.send.account_freeze( - AccountFreezeArgs( - freeze_asset=smart_asa_client.state.global_state.smart_asa_id, - freeze_account=receiver.address, - asset_frozen=True, - ), - params=CommonAppCallParams( - signer=freeze.signer, - sender=freeze.address, - ), - ) - smart_asa = smart_asa_client.state.global_state - sp = smart_asa_client.algorand.client.algod.suggested_params() - sp.flat_fee = True - sp.fee = sp.min_fee * 2 - with pytest.raises(LogicError, match=err.RECEIVER_FROZEN): - smart_asa_client.send.asset_transfer( - AssetTransferArgs( - xfer_asset=smart_asa.smart_asa_id, - asset_amount=smart_asa.total, - asset_sender=account_with_supply.address, - asset_receiver=receiver.address, - ), - params=CommonAppCallParams( - static_fee=AlgoAmount.from_micro_algo(sp.fee), - signer=account_with_supply.signer, - sender=account_with_supply.address, - ), - ) diff --git a/assets/arc-0020/tests/test_deploy.py b/assets/arc-0020/tests/test_deploy.py deleted file mode 100644 index 475779419..000000000 --- a/assets/arc-0020/tests/test_deploy.py +++ /dev/null @@ -1,33 +0,0 @@ -from algosdk.constants import ZERO_ADDRESS - -from smart_contracts.artifacts.smart_asa.smart_asa_client import SmartAsaClient - - -def test_pass_create(smart_asa_client_no_asset: SmartAsaClient) -> None: - state = smart_asa_client_no_asset.state.global_state - - assert state.total == 0 - assert state.decimals == 0 - assert not state.default_frozen - assert state.unit_name == "" - assert state.name == "" - assert state.url == "" - assert state.metadata_hash == "" - assert state.manager_addr == ZERO_ADDRESS - assert state.reserve_addr == ZERO_ADDRESS - assert state.freeze_addr == ZERO_ADDRESS - assert state.clawback_addr == ZERO_ADDRESS - assert state.smart_asa_id == 0 - assert not state.global_frozen - - -def test_fail_update() -> None: - pass # TODO - - -def test_fail_delete() -> None: - pass # TODO - - -def test_wrong_state_schema() -> None: - pass # TODO diff --git a/assets/arc-0020/tests/test_get_account_is_frozen.py b/assets/arc-0020/tests/test_get_account_is_frozen.py deleted file mode 100644 index 464090415..000000000 --- a/assets/arc-0020/tests/test_get_account_is_frozen.py +++ /dev/null @@ -1 +0,0 @@ -# TODO diff --git a/assets/arc-0020/tests/test_get_asset_config.py b/assets/arc-0020/tests/test_get_asset_config.py deleted file mode 100644 index 464090415..000000000 --- a/assets/arc-0020/tests/test_get_asset_config.py +++ /dev/null @@ -1 +0,0 @@ -# TODO diff --git a/assets/arc-0020/tests/test_get_asset_is_frozen.py b/assets/arc-0020/tests/test_get_asset_is_frozen.py deleted file mode 100644 index 464090415..000000000 --- a/assets/arc-0020/tests/test_get_asset_is_frozen.py +++ /dev/null @@ -1 +0,0 @@ -# TODO diff --git a/assets/arc-0020/tests/test_get_circulating_supply.py b/assets/arc-0020/tests/test_get_circulating_supply.py deleted file mode 100644 index d0213140e..000000000 --- a/assets/arc-0020/tests/test_get_circulating_supply.py +++ /dev/null @@ -1,30 +0,0 @@ -import pytest -from algokit_utils import SigningAccount - -from smart_contracts.artifacts.smart_asa.smart_asa_client import ( - GetCirculatingSupplyArgs, - SmartAsaClient, -) - - -def test_pass_no_circulating_supply(smart_asa_client: SmartAsaClient) -> None: - circulating_supply = smart_asa_client.send.get_circulating_supply( - GetCirculatingSupplyArgs(asset=smart_asa_client.state.global_state.smart_asa_id) - ).abi_return - assert circulating_supply == 0 - - -@pytest.mark.parametrize("asa_config", [False], indirect=True) -def test_pass_circulating_supply( - smart_asa_client: SmartAsaClient, reserve_with_supply: SigningAccount -) -> None: - smart_asa_id = smart_asa_client.state.global_state.smart_asa_id - circulating_supply = smart_asa_client.send.get_circulating_supply( - GetCirculatingSupplyArgs(asset=smart_asa_id) - ).abi_return - assert ( - circulating_supply - == smart_asa_client.algorand.asset.get_account_information( - reserve_with_supply, smart_asa_id - ).balance - ) From 984df026a42ed6aa73d73cd2935b8cbf7b682253 Mon Sep 17 00:00:00 2001 From: cusma Date: Tue, 20 Jan 2026 14:29:43 -0300 Subject: [PATCH 3/6] chore: nit --- ARCs/arc-0020.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ARCs/arc-0020.md b/ARCs/arc-0020.md index 88198d94b..a0169d376 100644 --- a/ARCs/arc-0020.md +++ b/ARCs/arc-0020.md @@ -631,7 +631,7 @@ controlling Smart Contract as a value for the key `application-id`. For example: } ``` -It is RECOMMENDED to the [ARC-89](./arc-0089.md) ASA Metadata Registry to declare +It is RECOMMENDED to use the [ARC-89](./arc-0089.md) ASA Metadata Registry to declare support for this ARC and to discover the controlling Smart Contract of a Smart ASA. > To avoid ecosystem fragmentation this ARC does NOT propose any new method to From 5c2d73a7d920bc0a0703f091f9068a576f12fee3 Mon Sep 17 00:00:00 2001 From: cusma Date: Tue, 20 Jan 2026 14:36:39 -0300 Subject: [PATCH 4/6] chore: fix non-relative links --- ARCs/arc-0020.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ARCs/arc-0020.md b/ARCs/arc-0020.md index a0169d376..82246eb23 100644 --- a/ARCs/arc-0020.md +++ b/ARCs/arc-0020.md @@ -32,7 +32,7 @@ However, the ASA lacks in flexibility and configurability. For instance, once issued, it can't be re-configured (its unit name, decimals, maximum supply). Also, it is freely transferable (unless frozen). This prevents developers from specifying additional business logic to be checked while transferring it (think -of royalties or vesting ). +of royalties or vesting). Enforcing transfer conditions requires freezing the asset and transferring it through a clawback operation — which results in a process that is opaque to @@ -58,8 +58,8 @@ The following sections describe: ### ABI Interface -The ABI interface specified here draws inspiration from the transaction -reference +The ABI interface specified here draws inspiration from the +parameters and transaction reference of an Algorand Standard Asset (ASA). To provide a unified and familiar interface between the Algorand Standard Asset @@ -715,8 +715,8 @@ standard. ## Reference Implementation -A [reference implementation](https://github.com/algorandfoundation/arc20) is maintained -by the Algorand Foundation. +A reference implementation<\a> +is maintained by the Algorand Foundation. ## Security Considerations From 2c83be894df93e661d0ec0f3e530e8d491752ab2 Mon Sep 17 00:00:00 2001 From: cusma Date: Wed, 21 Jan 2026 07:00:39 -0300 Subject: [PATCH 5/6] chore: nit --- ARCs/arc-0020.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ARCs/arc-0020.md b/ARCs/arc-0020.md index 82246eb23..5f8345a40 100644 --- a/ARCs/arc-0020.md +++ b/ARCs/arc-0020.md @@ -618,7 +618,7 @@ If the Smart ASA also conforms to any ARC that supports additional `properties` `arc-20` key and set the corresponding value to a map, including the ID of the controlling Smart Contract as a value for the key `application-id`. For example: -```javascript +```json { //... "properties": { From 448c571c7d0420d93c2b3c59f1fb96fe1bc794c8 Mon Sep 17 00:00:00 2001 From: cusma Date: Fri, 23 Jan 2026 08:39:34 -0300 Subject: [PATCH 6/6] docs: improve backward compatibility guidelines --- ARCs/arc-0020.md | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/ARCs/arc-0020.md b/ARCs/arc-0020.md index 5f8345a40..c3d949d9f 100644 --- a/ARCs/arc-0020.md +++ b/ARCs/arc-0020.md @@ -695,16 +695,8 @@ This requires: - Re-configuring the ASA, by setting its `ClawbackAddr` to the account of the controlling Smart Contract. - Associating the ID of the Smart Contract to the ASA (see - [metadata](#metadata)). - -Existing ASA willing to conform to this ARC MUST specify the controlling Smart Contract -ID as [ARC-2](./arc-0002.md) `AssetConfig` transaction note field, as follows: - -- The `` MUST be equal to `20`; -- The RECOMMENDED `` are MsgPack -(`m`) or JSON (`j`); -- The `` MUST specify `application-id` equal to the controlling Smart Contract -ID. +[metadata](#metadata)) with an [ARC-2](./arc-0002.md) message, following the ASA +Metadata Registry [backward compatibility guidelines](./arc-0089.md#backwards-compatibility). ### [ARC-18](./arc-0018.md)